From 0cfea614242c7a64fc6dff3dab0b135d00b58940 Mon Sep 17 00:00:00 2001 From: Steph Milovic Date: Wed, 9 Aug 2023 15:05:28 -0600 Subject: [PATCH 01/45] Add `getExistingIndices` method to data views client api (#163448) --- .../common/data_views/data_views.test.ts | 32 +++++++++++ .../common/data_views/data_views.ts | 43 ++++++++++++++ .../data_views/common/data_views/utils.ts | 29 ++++++++++ .../common/containers/source/index.test.tsx | 1 + .../sourcerer/get_sourcerer_data_view.test.ts | 56 +++++++++++++++++++ .../sourcerer/get_sourcerer_data_view.ts | 25 +-------- 6 files changed, 162 insertions(+), 24 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/common/containers/sourcerer/get_sourcerer_data_view.test.ts diff --git a/src/plugins/data_views/common/data_views/data_views.test.ts b/src/plugins/data_views/common/data_views/data_views.test.ts index e6d09710fe0167..2ea7726cc2bb91 100644 --- a/src/plugins/data_views/common/data_views/data_views.test.ts +++ b/src/plugins/data_views/common/data_views/data_views.test.ts @@ -629,4 +629,36 @@ describe('IndexPatterns', () => { expect(apiClient.getFieldsForWildcard.mock.calls[0][0].allowNoIndex).toBe(true); }); }); + + describe('getExistingIndices', () => { + test('getExistingIndices returns the valid matched indices', async () => { + apiClient.getFieldsForWildcard = jest + .fn() + .mockResolvedValueOnce({ fields: ['length'] }) + .mockResolvedValue({ fields: [] }); + const patternList = await indexPatterns.getExistingIndices(['packetbeat-*', 'filebeat-*']); + expect(apiClient.getFieldsForWildcard).toBeCalledTimes(2); + expect(patternList.length).toBe(1); + }); + + test('getExistingIndices checks the positive pattern if provided with a negative pattern', async () => { + const mockFn = jest.fn().mockResolvedValue({ fields: ['length'] }); + apiClient.getFieldsForWildcard = mockFn; + const patternList = await indexPatterns.getExistingIndices(['-filebeat-*', 'filebeat-*']); + expect(mockFn.mock.calls[0][0].pattern).toEqual('filebeat-*'); + expect(mockFn.mock.calls[1][0].pattern).toEqual('filebeat-*'); + expect(patternList).toEqual(['-filebeat-*', 'filebeat-*']); + }); + + test('getExistingIndices handles an error', async () => { + apiClient.getFieldsForWildcard = jest + .fn() + .mockImplementationOnce(async () => { + throw new DataViewMissingIndices('Catch me if you can!'); + }) + .mockImplementation(() => Promise.resolve({ fields: ['length'] })); + const patternList = await indexPatterns.getExistingIndices(['packetbeat-*', 'filebeat-*']); + expect(patternList).toEqual(['filebeat-*']); + }); + }); }); diff --git a/src/plugins/data_views/common/data_views/data_views.ts b/src/plugins/data_views/common/data_views/data_views.ts index 469fd2a1fa61e4..95375260462662 100644 --- a/src/plugins/data_views/common/data_views/data_views.ts +++ b/src/plugins/data_views/common/data_views/data_views.ts @@ -7,10 +7,12 @@ */ import { i18n } from '@kbn/i18n'; +import { defer, from } from 'rxjs'; import type { PublicMethodsOf } from '@kbn/utility-types'; import { castEsToKbnFieldTypeName } from '@kbn/field-types'; import { FieldFormatsStartCommon, FORMATS_UI_SETTINGS } from '@kbn/field-formats-plugin/common'; import { v4 as uuidv4 } from 'uuid'; +import { rateLimitingForkJoin } from './utils'; import { PersistenceAPI } from '../types'; import { createDataViewCache } from '.'; @@ -236,6 +238,12 @@ export interface DataViewsServicePublicMethods { * @param options - options for getting fields */ getFieldsForWildcard: (options: GetFieldsOptions) => Promise; + /** + * Get existing index pattern list by providing string array index pattern list. + * @param indices - index pattern list + * @returns index pattern list of index patterns that match indices + */ + getExistingIndices: (indices: string[]) => Promise; /** * Get list of data view ids. * @param refresh - clear cache and fetch from server @@ -505,6 +513,41 @@ export class DataViewsService { return fields; }; + /** + * Get existing index pattern list by providing string array index pattern list. + * @param indices index pattern list + * @returns index pattern list + */ + getExistingIndices = async (indices: string[]): Promise => { + const indicesObs = indices.map((pattern) => { + // when checking a negative pattern, check if the positive pattern exists + const indexToQuery = pattern.trim().startsWith('-') + ? pattern.trim().substring(1) + : pattern.trim(); + return defer(() => + from( + this.getFieldsForWildcard({ + // check one field to keep request fast/small + fields: ['_id'], + // true so no errors thrown in browser + allowNoIndex: true, + pattern: indexToQuery, + }) + ) + ); + }); + + return new Promise((resolve) => { + rateLimitingForkJoin(indicesObs, 3, []).subscribe((value) => { + resolve(value.map((v) => v.length > 0)); + }); + }) + .then((allPatterns: boolean[]) => + indices.filter((pattern, i, self) => self.indexOf(pattern) === i && allPatterns[i]) + ) + .catch(() => indices); + }; + /** * Get field list by providing an index patttern (or spec). * @param options options for getting field list diff --git a/src/plugins/data_views/common/data_views/utils.ts b/src/plugins/data_views/common/data_views/utils.ts index a5d0447f793392..ec1c41fc3eaca5 100644 --- a/src/plugins/data_views/common/data_views/utils.ts +++ b/src/plugins/data_views/common/data_views/utils.ts @@ -6,6 +6,8 @@ * Side Public License, v 1. */ +import { catchError, from, Observable, of } from 'rxjs'; +import { mergeMap, last, map, toArray } from 'rxjs/operators'; import type { RuntimeField, RuntimeFieldSpec, RuntimePrimitiveTypes } from '../types'; export const removeFieldAttrs = (runtimeField: RuntimeField): RuntimeFieldSpec => { @@ -23,3 +25,30 @@ export const removeFieldAttrs = (runtimeField: RuntimeField): RuntimeFieldSpec = ...fieldsTypeOnly, }; }; + +const MAX_CONCURRENT_REQUESTS = 3; +/** + * Helper function to run forkJoin + * with restrictions on how many input observables can be subscribed to concurrently + */ +export function rateLimitingForkJoin( + observables: Array>, + maxConcurrentRequests = MAX_CONCURRENT_REQUESTS, + failValue: T +): Observable { + return from(observables).pipe( + mergeMap( + (observable, index) => + observable.pipe( + last(), + map((value) => ({ index, value })), + catchError(() => of({ index, value: failValue })) + ), + maxConcurrentRequests + ), + toArray(), + map((indexedObservables) => + indexedObservables.sort((l, r) => l.index - r.index).map((obs) => obs.value) + ) + ); +} diff --git a/x-pack/plugins/security_solution/public/common/containers/source/index.test.tsx b/x-pack/plugins/security_solution/public/common/containers/source/index.test.tsx index 84c94f81d026f4..c5251dba05744d 100644 --- a/x-pack/plugins/security_solution/public/common/containers/source/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/containers/source/index.test.tsx @@ -67,6 +67,7 @@ describe('source/index.tsx', () => { }); }, getFieldsForWildcard: async () => Promise.resolve(), + getExistingIndices: async (indices: string[]) => Promise.resolve(indices), }, search: { search: jest.fn().mockReturnValue({ diff --git a/x-pack/plugins/security_solution/public/common/containers/sourcerer/get_sourcerer_data_view.test.ts b/x-pack/plugins/security_solution/public/common/containers/sourcerer/get_sourcerer_data_view.test.ts new file mode 100644 index 00000000000000..cc4921380fac80 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/containers/sourcerer/get_sourcerer_data_view.test.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getSourcererDataView } from './get_sourcerer_data_view'; +import type { DataViewsService } from '@kbn/data-views-plugin/common'; + +const dataViewId = 'test-id'; +const dataViewsService = { + get: jest.fn().mockResolvedValue({ + toSpec: jest.fn().mockReturnValue({ + id: 'test-id', + fields: {}, + runtimeFieldMap: {}, + }), + getIndexPattern: jest.fn().mockReturnValue('test-pattern'), + fields: {}, + }), + getExistingIndices: jest.fn().mockResolvedValue(['test-pattern']), +} as unknown as jest.Mocked; +describe('getSourcererDataView', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + // Tests that the function returns a SourcererDataView object with the expected properties + it('should return a SourcererDataView object with the expected properties', async () => { + const result = await getSourcererDataView(dataViewId, dataViewsService); + expect(result).toEqual({ + loading: false, + id: 'test-id', + title: 'test-pattern', + indexFields: {}, + fields: {}, + patternList: ['test-pattern'], + dataView: { + id: 'test-id', + fields: {}, + runtimeFieldMap: {}, + }, + browserFields: {}, + runtimeMappings: {}, + }); + }); + it('should call dataViewsService.get with the correct arguments', async () => { + await getSourcererDataView(dataViewId, dataViewsService); + expect(dataViewsService.get).toHaveBeenCalledWith(dataViewId, true, false); + }); + + it('should call dataViewsService.getExistingIndices with the correct arguments', async () => { + await getSourcererDataView(dataViewId, dataViewsService); + expect(dataViewsService.getExistingIndices).toHaveBeenCalledWith(['test-pattern']); + }); +}); diff --git a/x-pack/plugins/security_solution/public/common/containers/sourcerer/get_sourcerer_data_view.ts b/x-pack/plugins/security_solution/public/common/containers/sourcerer/get_sourcerer_data_view.ts index 7f40819bfb41d8..a3cc1a8041b4c9 100644 --- a/x-pack/plugins/security_solution/public/common/containers/sourcerer/get_sourcerer_data_view.ts +++ b/x-pack/plugins/security_solution/public/common/containers/sourcerer/get_sourcerer_data_view.ts @@ -18,30 +18,7 @@ export const getSourcererDataView = async ( const dataView = await dataViewsService.get(dataViewId, true, refreshFields); const dataViewData = dataView.toSpec(); const defaultPatternsList = ensurePatternFormat(dataView.getIndexPattern().split(',')); - - // typeguard used to assert that pattern is a string, otherwise - // typescript expects patternList to be (string | null)[] - // but we want it to always be string[] - const filterTypeGuard = (str: unknown): str is string => str != null; - const patternList = await Promise.all( - defaultPatternsList.map(async (pattern) => { - try { - await dataViewsService.getFieldsForWildcard({ - type: dataViewData.type, - rollupIndex: dataViewData?.typeMeta?.params?.rollup_index, - allowNoIndex: false, - pattern, - }); - return pattern; - } catch { - return null; - } - }) - ) - .then((allPatterns) => - allPatterns.filter((pattern): pattern is string => filterTypeGuard(pattern)) - ) - .catch(() => defaultPatternsList); + const patternList = await dataViewsService.getExistingIndices(defaultPatternsList); return { loading: false, From a038fb09ca7cfb3984fb642b91683ddfe4b3f53d Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Wed, 9 Aug 2023 15:26:18 -0600 Subject: [PATCH 02/45] add x-elastic-internal-origin header to vector tile, glyphs, and fonts APIs (#163331) Closes https://github.com/elastic/kibana/issues/163311 To test * create map with documents layer (that uses vector tile scaling, default). * verify header is provided in request Screen Shot 2023-08-07 at 10 25 11 AM --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../mb_map/transform_request.ts | 20 +++++++++++++++---- .../api_integration/apis/maps/fonts_api.js | 9 ++++++++- .../apis/maps/get_grid_tile.js | 13 +++++++++++- .../api_integration/apis/maps/get_tile.js | 8 +++++++- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/maps/public/connected_components/mb_map/transform_request.ts b/x-pack/plugins/maps/public/connected_components/mb_map/transform_request.ts index 47f14956d6dcae..c30fc533a322ff 100644 --- a/x-pack/plugins/maps/public/connected_components/mb_map/transform_request.ts +++ b/x-pack/plugins/maps/public/connected_components/mb_map/transform_request.ts @@ -5,7 +5,10 @@ * 2.0. */ -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { FONTS_API_PATH, MVT_GETTILE_API_PATH, @@ -22,7 +25,10 @@ export function transformRequest(url: string, resourceType: string | undefined) return { url, method: 'GET' as 'GET', - headers: { [ELASTIC_HTTP_VERSION_HEADER]: '1' }, + headers: { + [ELASTIC_HTTP_VERSION_HEADER]: '1', + [X_ELASTIC_INTERNAL_ORIGIN_REQUEST]: 'kibana', + }, }; } @@ -30,7 +36,10 @@ export function transformRequest(url: string, resourceType: string | undefined) return { url, method: 'GET' as 'GET', - headers: { [ELASTIC_HTTP_VERSION_HEADER]: '1' }, + headers: { + [ELASTIC_HTTP_VERSION_HEADER]: '1', + [X_ELASTIC_INTERNAL_ORIGIN_REQUEST]: 'kibana', + }, }; } @@ -38,7 +47,10 @@ export function transformRequest(url: string, resourceType: string | undefined) return { url, method: 'GET' as 'GET', - headers: { [ELASTIC_HTTP_VERSION_HEADER]: '1' }, + headers: { + [ELASTIC_HTTP_VERSION_HEADER]: '1', + [X_ELASTIC_INTERNAL_ORIGIN_REQUEST]: 'kibana', + }, }; } diff --git a/x-pack/test/api_integration/apis/maps/fonts_api.js b/x-pack/test/api_integration/apis/maps/fonts_api.js index c8c636e8f6ddc7..ae4891c4d7b950 100644 --- a/x-pack/test/api_integration/apis/maps/fonts_api.js +++ b/x-pack/test/api_integration/apis/maps/fonts_api.js @@ -6,7 +6,10 @@ */ import expect from '@kbn/expect'; -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import path from 'path'; import { copyFile, rm } from 'fs/promises'; @@ -38,6 +41,7 @@ export default function ({ getService }) { const resp = await supertest .get(`/internal/maps/fonts/Open%20Sans%20Regular,Arial%20Unicode%20MS%20Regular/0-255`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(200); expect(resp.body.length).to.be(74696); @@ -49,6 +53,7 @@ export default function ({ getService }) { `/internal/maps/fonts/Open%20Sans%20Regular,Arial%20Unicode%20MS%20Regular/noGonaFindMe` ) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404); }); @@ -56,6 +61,7 @@ export default function ({ getService }) { await supertest .get(`/internal/maps/fonts/open_sans/..%2f0-255`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404); }); @@ -63,6 +69,7 @@ export default function ({ getService }) { await supertest .get(`/internal/maps/fonts/open_sans/.%2f..%2f0-255`) .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .expect(404); }); }); diff --git a/x-pack/test/api_integration/apis/maps/get_grid_tile.js b/x-pack/test/api_integration/apis/maps/get_grid_tile.js index 5b44b43e50e430..2a627e3793ee27 100644 --- a/x-pack/test/api_integration/apis/maps/get_grid_tile.js +++ b/x-pack/test/api_integration/apis/maps/get_grid_tile.js @@ -9,7 +9,10 @@ import { VectorTile } from '@mapbox/vector-tile'; import Protobuf from 'pbf'; import expect from '@kbn/expect'; import { getTileUrlParams } from '@kbn/maps-vector-tile-utils'; -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; function findFeature(layer, callbackFn) { for (let i = 0; i < layer.length; i++) { @@ -75,6 +78,7 @@ export default function ({ getService }) { .get('/internal/maps/mvt/getGridTile/3/2/3.pbf?' + getTileUrlParams(defaultParams)) .set('kbn-xsrf', 'kibana') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .responseType('blob') .expect(200); @@ -89,6 +93,7 @@ export default function ({ getService }) { .get('/internal/maps/mvt/getGridTile/3/2/3.pbf?' + getTileUrlParams(defaultParams)) .set('kbn-xsrf', 'kibana') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .responseType('blob') .expect(200); @@ -120,6 +125,7 @@ export default function ({ getService }) { .get('/internal/maps/mvt/getGridTile/3/2/3.pbf?' + tileUrlParams) .set('kbn-xsrf', 'kibana') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .responseType('blob') .expect(200); @@ -151,6 +157,7 @@ export default function ({ getService }) { .get('/internal/maps/mvt/getGridTile/3/2/3.pbf?' + tileUrlParams) .set('kbn-xsrf', 'kibana') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .responseType('blob') .expect(200); @@ -189,6 +196,7 @@ export default function ({ getService }) { .get('/internal/maps/mvt/getGridTile/3/2/3.pbf?' + tileUrlParams) .set('kbn-xsrf', 'kibana') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .responseType('blob') .expect(200); @@ -230,6 +238,7 @@ export default function ({ getService }) { .get('/internal/maps/mvt/getGridTile/3/2/3.pbf?' + tileUrlParams) .set('kbn-xsrf', 'kibana') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .responseType('blob') .expect(200); @@ -258,6 +267,7 @@ export default function ({ getService }) { .get('/internal/maps/mvt/getGridTile/3/2/3.pbf?' + getTileUrlParams(defaultParams)) .set('kbn-xsrf', 'kibana') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .responseType('blob') .expect(200); @@ -304,6 +314,7 @@ export default function ({ getService }) { .get('/internal/maps/mvt/getGridTile/3/2/3.pbf?' + tileUrlParams) .set('kbn-xsrf', 'kibana') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .responseType('blob') .expect(404); }); diff --git a/x-pack/test/api_integration/apis/maps/get_tile.js b/x-pack/test/api_integration/apis/maps/get_tile.js index 8b466fe1554b58..4246141dd7c610 100644 --- a/x-pack/test/api_integration/apis/maps/get_tile.js +++ b/x-pack/test/api_integration/apis/maps/get_tile.js @@ -8,7 +8,10 @@ import { VectorTile } from '@mapbox/vector-tile'; import Protobuf from 'pbf'; import expect from '@kbn/expect'; -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; import { getTileUrlParams } from '@kbn/maps-vector-tile-utils'; function findFeature(layer, callbackFn) { @@ -75,6 +78,7 @@ export default function ({ getService }) { .get(`/internal/maps/mvt/getTile/2/1/1.pbf?${getTileUrlParams(defaultParams)}`) .set('kbn-xsrf', 'kibana') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .responseType('blob') .expect(200); @@ -138,6 +142,7 @@ export default function ({ getService }) { .get(`/internal/maps/mvt/getTile/2/1/1.pbf?${tileUrlParams}`) .set('kbn-xsrf', 'kibana') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .responseType('blob') .expect(200); @@ -182,6 +187,7 @@ export default function ({ getService }) { .get(`/internal/maps/mvt/getTile/2/1/1.pbf?${tileUrlParams}`) .set('kbn-xsrf', 'kibana') .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .responseType('blob') .expect(404); }); From 5d813006a3340be74a8465cdd52312eb35c451ef Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Wed, 9 Aug 2023 17:38:02 -0400 Subject: [PATCH 03/45] feat(slo): add group by field selector in forms (#163202) --- .../slo/use_fetch_index_pattern_fields.ts | 2 + .../common/group_by_field_selector.tsx | 90 +++++++++++++++++++ .../components/common/query_builder.tsx | 1 - .../custom_kql_indicator_type_form.tsx | 5 +- .../custom_metric/custom_metric_type_form.tsx | 8 +- .../histogram_indicator_type_form.tsx | 4 + .../helpers/process_slo_form_values.ts | 2 +- .../slos/components/badges/slo_badges.tsx | 2 +- .../pages/slos/components/slo_summary.tsx | 4 +- .../services/slo/fetch_historical_summary.ts | 12 +-- .../server/services/slo/summary_client.ts | 2 - .../services/slo/summary_search_client.ts | 2 +- 12 files changed, 117 insertions(+), 17 deletions(-) create mode 100644 x-pack/plugins/observability/public/pages/slo_edit/components/common/group_by_field_selector.tsx diff --git a/x-pack/plugins/observability/public/hooks/slo/use_fetch_index_pattern_fields.ts b/x-pack/plugins/observability/public/hooks/slo/use_fetch_index_pattern_fields.ts index bd83b069133c37..2f51e4d7faf26c 100644 --- a/x-pack/plugins/observability/public/hooks/slo/use_fetch_index_pattern_fields.ts +++ b/x-pack/plugins/observability/public/hooks/slo/use_fetch_index_pattern_fields.ts @@ -18,6 +18,8 @@ export interface UseFetchIndexPatternFieldsResponse { export interface Field { name: string; type: string; + aggregatable: boolean; + searchable: boolean; } export function useFetchIndexPatternFields( diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/common/group_by_field_selector.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/common/group_by_field_selector.tsx new file mode 100644 index 00000000000000..0733e682e9ba70 --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/common/group_by_field_selector.tsx @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiComboBox, + EuiComboBoxOptionOption, + EuiFlexItem, + EuiFormRow, + EuiIconTip, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { ALL_VALUE } from '@kbn/slo-schema'; +import React from 'react'; +import { Controller, useFormContext } from 'react-hook-form'; +import { useFetchIndexPatternFields } from '../../../../hooks/slo/use_fetch_index_pattern_fields'; +import { createOptionsFromFields } from '../../helpers/create_options'; +import { CreateSLOForm } from '../../types'; + +interface Props { + index?: string; +} +export function GroupByFieldSelector({ index }: Props) { + const { control, getFieldState } = useFormContext(); + const { isLoading, data: indexFields = [] } = useFetchIndexPatternFields(index); + const groupableFields = indexFields.filter((field) => field.aggregatable); + + const label = i18n.translate('xpack.observability.slo.sloEdit.groupBy.placeholder', { + defaultMessage: 'Select an optional field to partition by', + }); + + return ( + + + {i18n.translate('xpack.observability.slo.sloEdit.groupBy.label', { + defaultMessage: 'Partition by', + })}{' '} + + + } + isInvalid={getFieldState('groupBy').invalid} + > + ( + { + if (selected.length) { + return field.onChange(selected[0].value); + } + + field.onChange(ALL_VALUE); + }} + options={createOptionsFromFields(groupableFields)} + selectedOptions={ + !!index && + !!field.value && + groupableFields.some((groupableField) => groupableField.name === field.value) + ? [{ value: field.value, label: field.value }] + : [] + } + singleSelection + /> + )} + /> + + + ); +} diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/common/query_builder.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/common/query_builder.tsx index c33f5646ff8d95..954b89991f5283 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/common/query_builder.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/common/query_builder.tsx @@ -36,7 +36,6 @@ export function QueryBuilder({ useKibana().services; const { control, getFieldState } = useFormContext(); - const { dataView } = useCreateDataView({ indexPatternString }); return ( diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.tsx index c07ce5d1324896..6d7ae6c012a2e0 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.tsx @@ -20,6 +20,7 @@ import { useFetchIndexPatternFields } from '../../../../hooks/slo/use_fetch_inde import { createOptionsFromFields } from '../../helpers/create_options'; import { CreateSLOForm } from '../../types'; import { DataPreviewChart } from '../common/data_preview_chart'; +import { GroupByFieldSelector } from '../common/group_by_field_selector'; import { QueryBuilder } from '../common/query_builder'; import { IndexSelection } from '../custom_common/index_selection'; @@ -81,7 +82,7 @@ export function CustomKqlIndicatorTypeForm() { ? [{ value: field.value, label: field.value }] : [] } - singleSelection={{ asPlainText: true }} + singleSelection /> )} /> @@ -175,6 +176,8 @@ export function CustomKqlIndicatorTypeForm() { /> + + ); diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/custom_metric/custom_metric_type_form.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_metric/custom_metric_type_form.tsx index e9a96fbc0c9290..25de4568dc06c4 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/custom_metric/custom_metric_type_form.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_metric/custom_metric_type_form.tsx @@ -27,15 +27,15 @@ import { DataPreviewChart } from '../common/data_preview_chart'; import { QueryBuilder } from '../common/query_builder'; import { IndexSelection } from '../custom_common/index_selection'; import { MetricIndicator } from './metric_indicator'; +import { GroupByFieldSelector } from '../common/group_by_field_selector'; export { NEW_CUSTOM_METRIC } from './metric_indicator'; export function CustomMetricIndicatorTypeForm() { const { control, watch, getFieldState } = useFormContext(); - const { isLoading, data: indexFields } = useFetchIndexPatternFields( - watch('indicator.params.index') - ); + const index = watch('indicator.params.index'); + const { isLoading, data: indexFields } = useFetchIndexPatternFields(index); const timestampFields = (indexFields ?? []).filter((field) => field.type === 'date'); return ( @@ -181,6 +181,8 @@ export function CustomMetricIndicatorTypeForm() { + + diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/histogram/histogram_indicator_type_form.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/histogram/histogram_indicator_type_form.tsx index 323cd48a67cc0f..56a867ab2e3326 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/histogram/histogram_indicator_type_form.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/histogram/histogram_indicator_type_form.tsx @@ -27,6 +27,7 @@ import { DataPreviewChart } from '../common/data_preview_chart'; import { QueryBuilder } from '../common/query_builder'; import { IndexSelection } from '../custom_common/index_selection'; import { HistogramIndicator } from './histogram_indicator'; +import { GroupByFieldSelector } from '../common/group_by_field_selector'; export function HistogramIndicatorTypeForm() { const { control, watch, getFieldState } = useFormContext(); @@ -163,6 +164,9 @@ export function HistogramIndicatorTypeForm() { + + + diff --git a/x-pack/plugins/observability/public/pages/slo_edit/helpers/process_slo_form_values.ts b/x-pack/plugins/observability/public/pages/slo_edit/helpers/process_slo_form_values.ts index d87dd10450f3df..a4ecec640e2dfc 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/helpers/process_slo_form_values.ts +++ b/x-pack/plugins/observability/public/pages/slo_edit/helpers/process_slo_form_values.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { CreateSLOInput, SLOWithSummaryResponse, UpdateSLOInput } from '@kbn/slo-schema'; +import { CreateSLOInput, SLOWithSummaryResponse, UpdateSLOInput } from '@kbn/slo-schema'; import { toDuration } from '../../../utils/slo/duration'; import { CreateSLOForm } from '../types'; diff --git a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.tsx b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.tsx index 93b4e2802bc1cb..f9c7cc3faeeb8c 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.tsx @@ -29,7 +29,7 @@ export interface Props { export function SloBadges({ activeAlerts, isLoading, rules, slo, onClickRuleBadge }: Props) { return ( - + {isLoading ? ( <> - + - + slo.sloId); const sloList = await this.repository.findAllByIds(sloIds); - const list: SLOWithInstanceId[] = params.list.map(({ sloId, instanceId }) => ({ - sloId, - instanceId, - slo: sloList.find((slo) => slo.id === sloId)!, - })); + const list: SLOWithInstanceId[] = params.list + .filter(({ sloId }) => sloList.find((slo) => slo.id === sloId)) + .map(({ sloId, instanceId }) => ({ + sloId, + instanceId, + slo: sloList.find((slo) => slo.id === sloId)!, + })); const historicalSummary = await this.historicalSummaryClient.fetch(list); diff --git a/x-pack/plugins/observability/server/services/slo/summary_client.ts b/x-pack/plugins/observability/server/services/slo/summary_client.ts index b12a376be532ac..3f799b2ca3473a 100644 --- a/x-pack/plugins/observability/server/services/slo/summary_client.ts +++ b/x-pack/plugins/observability/server/services/slo/summary_client.ts @@ -20,8 +20,6 @@ import { DateRange, SLO, Summary } from '../../domain/models'; import { computeSLI, computeSummaryStatus, toErrorBudget } from '../../domain/services'; import { toDateRange } from '../../domain/services/date_range'; -// TODO: Change name of this service... -// It does compute a summary but from the rollup data. export interface SummaryClient { computeSummary(slo: SLO, instanceId?: string): Promise; } diff --git a/x-pack/plugins/observability/server/services/slo/summary_search_client.ts b/x-pack/plugins/observability/server/services/slo/summary_search_client.ts index c7d87ac8b322c5..f2bfa1ed29df38 100644 --- a/x-pack/plugins/observability/server/services/slo/summary_search_client.ts +++ b/x-pack/plugins/observability/server/services/slo/summary_search_client.ts @@ -125,7 +125,7 @@ export class DefaultSummarySearchClient implements SummarySearchClient { page: pagination.page, results: finalResults.map((doc) => ({ id: doc._source!.slo.id, - instanceId: doc._source?.slo.instanceId ?? ALL_VALUE, + instanceId: doc._source!.slo.instanceId ?? ALL_VALUE, summary: { errorBudget: { initial: toHighPrecision(doc._source!.errorBudgetInitial), From 09aaecb59d5e82e17bf6f274de3cedd394bbe25b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Kopyci=C5=84ski?= Date: Wed, 9 Aug 2023 23:58:04 +0200 Subject: [PATCH 04/45] [security_solution] Cypress flaky tests catcher (#162376) ## Summary Inspired by https://glebbahmutov.com/blog/burning-tests/ Implements the idea presented here https://glebbahmutov.com/blog/burning-tests/#bonus-3-burning-new-or-changed-specs In short, on PR that is changing/adding new Cypress spec files we will try to "burn" them, it means we will try to run each `it` `2` times to make sure tests are written in a way that gives Cypress a chance to recover from the failed test. Also adding a command that allows to "burn" tests locally ``` yarn cypress:burn --spec "<>" ``` Right now the job is set to `soft_fail`, so it is not going to block the PR from merging, but hopefully will help the Team to recognize potential flakiness before it is merged to `main` --- .../pull_request/security_solution.yml | 11 + .../functional/security_solution_burn.sh | 15 + package.json | 2 + typings/index.d.ts | 2 + .../security_solution/cypress/support/e2e.js | 3 + x-pack/plugins/security_solution/package.json | 14 +- .../scripts/run_cypress/parallel.ts | 42 +- yarn.lock | 540 +++++++++++++++++- 8 files changed, 610 insertions(+), 19 deletions(-) create mode 100755 .buildkite/scripts/steps/functional/security_solution_burn.sh diff --git a/.buildkite/pipelines/pull_request/security_solution.yml b/.buildkite/pipelines/pull_request/security_solution.yml index a30609ac5ca21b..9444c821d5db19 100644 --- a/.buildkite/pipelines/pull_request/security_solution.yml +++ b/.buildkite/pipelines/pull_request/security_solution.yml @@ -12,3 +12,14 @@ steps: limit: 1 artifact_paths: - "target/kibana-security-solution/**/*" + + - command: .buildkite/scripts/steps/functional/security_solution_burn.sh + label: 'Security Solution Cypress tests, burning changed specs' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 120 + parallelism: 1 + soft_fail: true + artifact_paths: + - "target/kibana-security-solution/**/*" diff --git a/.buildkite/scripts/steps/functional/security_solution_burn.sh b/.buildkite/scripts/steps/functional/security_solution_burn.sh new file mode 100755 index 00000000000000..f8b809dbbdac1b --- /dev/null +++ b/.buildkite/scripts/steps/functional/security_solution_burn.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +set -euo pipefail + +source .buildkite/scripts/steps/functional/common.sh +source .buildkite/scripts/steps/functional/common_cypress.sh + +export JOB=kibana-security-solution-chrome +export KIBANA_INSTALL_DIR=${KIBANA_BUILD_LOCATION} + +buildkite-agent meta-data set "${BUILDKITE_JOB_ID}_is_test_execution_step" 'false' + +echo "--- Security Solution Cypress tests, burning changed specs (Chrome)" + +yarn --cwd x-pack/plugins/security_solution cypress:changed-specs-only diff --git a/package.json b/package.json index 5197b38d33fa09..8962b9736814bd 100644 --- a/package.json +++ b/package.json @@ -1444,6 +1444,7 @@ "faker": "^5.1.0", "fetch-mock": "^7.3.9", "file-loader": "^4.2.0", + "find-cypress-specs": "^1.35.1", "form-data": "^4.0.0", "geckodriver": "^4.0.0", "gulp-brotli": "^3.0.0", @@ -1526,6 +1527,7 @@ "sinon": "^7.4.2", "sort-package-json": "^1.53.1", "source-map": "^0.7.4", + "spec-change": "^1.7.1", "string-replace-loader": "^2.2.0", "style-loader": "^1.1.3", "stylelint": "^14.9.1", diff --git a/typings/index.d.ts b/typings/index.d.ts index d561c1444a77ad..0134f5be840188 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -20,3 +20,5 @@ declare module 'react-syntax-highlighter/dist/cjs/prism-light'; declare module 'monaco-editor/esm/vs/basic-languages/markdown/markdown'; declare module 'monaco-editor/esm/vs/basic-languages/css/css'; declare module 'monaco-editor/esm/vs/basic-languages/yaml/yaml'; + +declare module 'find-cypress-specs'; diff --git a/x-pack/plugins/security_solution/cypress/support/e2e.js b/x-pack/plugins/security_solution/cypress/support/e2e.js index 3984b4be497276..477c2606153b71 100644 --- a/x-pack/plugins/security_solution/cypress/support/e2e.js +++ b/x-pack/plugins/security_solution/cypress/support/e2e.js @@ -23,6 +23,9 @@ // Import commands.js using ES2015 syntax: import './commands'; import 'cypress-real-events/support'; +import registerCypressGrep from '@cypress/grep'; + +registerCypressGrep(); Cypress.on('uncaught:exception', () => { return false; diff --git a/x-pack/plugins/security_solution/package.json b/x-pack/plugins/security_solution/package.json index e5e4b0b71caf85..19c02e030d3912 100644 --- a/x-pack/plugins/security_solution/package.json +++ b/x-pack/plugins/security_solution/package.json @@ -8,17 +8,19 @@ "extract-mitre-attacks": "node scripts/extract_tactics_techniques_mitre.js && node ../../../scripts/eslint ./public/detections/mitre/mitre_tactics_techniques.ts --fix", "build-beat-doc": "node scripts/beat_docs/build.js && node ../../../scripts/eslint ../timelines/server/utils/beat_schema/fields.ts --fix", "cypress": "../../../node_modules/.bin/cypress", + "cypress:burn": "yarn cypress:run:reporter --env burn=2 --concurrency=1 --headed", + "cypress:changed-specs-only": "yarn cypress:run:reporter --changed-specs-only --env burn=2", "cypress:open": "TZ=UTC node ./scripts/start_cypress_parallel open --spec './cypress/e2e/**/*.cy.ts' --config-file ./cypress/cypress.config.ts --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config", - "cypress:run": "yarn cypress:run:reporter --browser chrome --spec './cypress/e2e/{,!(investigations,explore)/**/}*.cy.ts'; status=$?; yarn junit:merge && exit $status", - "cypress:run:cases": "yarn cypress:run:reporter --browser chrome --spec './cypress/e2e/explore/cases/*.cy.ts' --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config; status=$?; yarn junit:merge && exit $status", - "cypress:run:reporter": "TZ=UTC node ./scripts/start_cypress_parallel run --config-file ./cypress/cypress_ci.config.ts --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config --reporter ../../../node_modules/cypress-multi-reporters --reporter-options configFile=./cypress/reporter_config.json", - "cypress:run:respops": "yarn cypress:run:reporter --browser chrome --spec './cypress/e2e/(detection_alerts|detection_rules|exceptions)/*.cy.ts' --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config; status=$?; yarn junit:merge && exit $status", + "cypress:run": "yarn cypress:run:reporter --spec './cypress/e2e/{,!(investigations,explore)/**/}*.cy.ts'; status=$?; yarn junit:merge && exit $status", + "cypress:run:cases": "yarn cypress:run:reporter --spec './cypress/e2e/explore/cases/*.cy.ts' --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config; status=$?; yarn junit:merge && exit $status", + "cypress:run:reporter": "TZ=UTC node ./scripts/start_cypress_parallel run --browser chrome --config-file ./cypress/cypress_ci.config.ts --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config --reporter ../../../node_modules/cypress-multi-reporters --reporter-options configFile=./cypress/reporter_config.json", + "cypress:run:respops": "yarn cypress:run:reporter --spec './cypress/e2e/(detection_alerts|detection_rules|exceptions)/*.cy.ts' --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config; status=$?; yarn junit:merge && exit $status", "cypress:dw:open": "node ./scripts/start_cypress_parallel open --config-file ./public/management/cypress.config.ts ts --ftr-config-file ../../../../../../x-pack/test/defend_workflows_cypress/cli_config", "cypress:dw:run": "node ./scripts/start_cypress_parallel run --config-file ./public/management/cypress.config.ts --ftr-config-file ../../../../../../x-pack/test/defend_workflows_cypress/cli_config --reporter ../../../node_modules/cypress-multi-reporters --reporter-options configFile=./cypress/reporter_config.json; status=$?; yarn junit:merge && exit $status", "cypress:dw:endpoint:run": "node ./scripts/start_cypress_parallel run --config-file ./public/management/cypress_endpoint.config.ts --ftr-config-file ../../../../../../x-pack/test/defend_workflows_cypress/endpoint_config --reporter ../../../node_modules/cypress-multi-reporters --reporter-options configFile=./cypress/reporter_config.json --concurrency 1; status=$?; yarn junit:merge && exit $status", "cypress:dw:endpoint:open": "node ./scripts/start_cypress_parallel open --config-file ./public/management/cypress_endpoint.config.ts ts --ftr-config-file ../../../../../../x-pack/test/defend_workflows_cypress/endpoint_config", - "cypress:investigations:run": "yarn cypress:run:reporter --browser chrome --spec './cypress/e2e/investigations/**/*.cy.ts' --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config; status=$?; yarn junit:merge && exit $status", - "cypress:explore:run": "yarn cypress:run:reporter --browser chrome --spec './cypress/e2e/explore/**/*.cy.ts' --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config; status=$?; yarn junit:merge && exit $status", + "cypress:investigations:run": "yarn cypress:run:reporter --spec './cypress/e2e/investigations/**/*.cy.ts' --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config; status=$?; yarn junit:merge && exit $status", + "cypress:explore:run": "yarn cypress:run:reporter --spec './cypress/e2e/explore/**/*.cy.ts' --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config; status=$?; yarn junit:merge && exit $status", "junit:merge": "../../../node_modules/.bin/mochawesome-merge ../../../target/kibana-security-solution/cypress/results/mochawesome*.json > ../../../target/kibana-security-solution/cypress/results/output.json && ../../../node_modules/.bin/marge ../../../target/kibana-security-solution/cypress/results/output.json --reportDir ../../../target/kibana-security-solution/cypress/results && yarn junit:transform && mkdir -p ../../../target/junit && cp ../../../target/kibana-security-solution/cypress/results/*.xml ../../../target/junit/", "test:generate": "node scripts/endpoint/resolver_generator", "mappings:generate": "node scripts/mappings/mappings_generator", diff --git a/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts b/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts index 351b38f91f47eb..cf2f3897bd5ab3 100644 --- a/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts +++ b/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts @@ -13,6 +13,9 @@ import pMap from 'p-map'; import { ToolingLog } from '@kbn/tooling-log'; import { withProcRunner } from '@kbn/dev-proc-runner'; import cypress from 'cypress'; +import { findChangedFiles } from 'find-cypress-specs'; +import minimatch from 'minimatch'; +import path from 'path'; import { EsVersion, @@ -68,13 +71,39 @@ const retrieveIntegrations = ( export const cli = () => { run( async () => { - const { argv } = yargs(process.argv.slice(2)); + const { argv } = yargs(process.argv.slice(2)).coerce('env', (arg: string) => + arg.split(',').reduce((acc, curr) => { + const [key, value] = curr.split('='); + if (key === 'burn') { + acc[key] = parseInt(value, 10); + } else { + acc[key] = value; + } + return acc; + }, {} as Record) + ); const isOpen = argv._[0] === 'open'; const cypressConfigFilePath = require.resolve(`../../${argv.configFile}`) as string; const cypressConfigFile = await import(require.resolve(`../../${argv.configFile}`)); const spec: string | undefined = argv?.spec as string; - const files = retrieveIntegrations(spec ? [spec] : cypressConfigFile?.e2e?.specPattern); + let files = retrieveIntegrations(spec ? [spec] : cypressConfigFile?.e2e?.specPattern); + + if (argv.changedSpecsOnly) { + const basePath = process.cwd().split('kibana/')[1]; + files = findChangedFiles('main', false) + .filter( + minimatch.filter(path.join(basePath, cypressConfigFile?.e2e?.specPattern), { + matchBase: true, + }) + ) + .map((filePath: string) => filePath.replace(basePath, '.')); + + if (!files?.length) { + // eslint-disable-next-line no-process-exit + return process.exit(0); + } + } if (!files?.length) { throw new Error('No files found'); @@ -323,8 +352,8 @@ ${JSON.stringify(config.getAll(), null, 2)} type: 'elasticsearch' | 'kibana' | 'fleetserver', withAuth: boolean = false ): string => { - const getKeyPath = (path: string = ''): string => { - return `servers.${type}${path ? `.${path}` : ''}`; + const getKeyPath = (keyPath: string = ''): string => { + return `servers.${type}${keyPath ? `.${keyPath}` : ''}`; }; if (!config.get(getKeyPath())) { @@ -361,7 +390,7 @@ ${JSON.stringify(config.getAll(), null, 2)} ...ftrEnv, // NOTE: - // ELASTICSEARCH_URL needs to be crated here with auth because SIEM cypress setup depends on it. At some + // ELASTICSEARCH_URL needs to be created here with auth because SIEM cypress setup depends on it. At some // points we should probably try to refactor that code to use `ELASTICSEARCH_URL_WITH_AUTH` instead ELASTICSEARCH_URL: ftrEnv.ELASTICSEARCH_URL ?? createUrlFromFtrConfig('elasticsearch', true), @@ -377,6 +406,8 @@ ${JSON.stringify(config.getAll(), null, 2)} KIBANA_URL_WITH_AUTH: createUrlFromFtrConfig('kibana', true), KIBANA_USERNAME: config.get('servers.kibana.username'), KIBANA_PASSWORD: config.get('servers.kibana.password'), + + ...argv.env, }; log.info(` @@ -407,6 +438,7 @@ ${JSON.stringify(cyCustomEnv, null, 2)} configFile: cypressConfigFilePath, reporter: argv.reporter as string, reporterOptions: argv.reporterOptions, + headed: argv.headed as boolean, config: { e2e: { baseUrl, diff --git a/yarn.lock b/yarn.lock index 55a4546d3fa43b..39981aa19923e2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,21 @@ # yarn lockfile v1 +"@actions/core@^1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.10.0.tgz#44551c3c71163949a2f06e94d9ca2157a0cfac4f" + integrity sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug== + dependencies: + "@actions/http-client" "^2.0.1" + uuid "^8.3.2" + +"@actions/http-client@^2.0.1": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.1.0.tgz#b6d8c3934727d6a50d10d19f00a711a964599a9f" + integrity sha512-BonhODnXr3amchh4qkmjPMUO8mFi/zLaaCeCAJZqch8iQqyDnVIkySjB38VHAC8IJ+bnlgfOqlhpyCUZHlQsqw== + dependencies: + tunnel "^0.0.6" + "@adobe/css-tools@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.1.tgz#b38b444ad3aa5fedbb15f2f746dcd934226a12dd" @@ -398,6 +413,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== +"@babel/parser@^7.21.8": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" + integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" @@ -1302,6 +1322,13 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@csstools/selector-specificity@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz#b6b8d81780b9a9f6459f4bfe9226ac6aefaefe87" @@ -1395,6 +1422,14 @@ enabled "2.0.x" kuler "^2.0.0" +"@dependents/detective-less@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@dependents/detective-less/-/detective-less-4.1.0.tgz#4a979ee7a6a79eb33602862d6a1263e30f98002e" + integrity sha512-KrkT6qO5NxqNfy68sBl6CTSoJ4SNDIS5iQArkibhlbGU4LaDukZ3q2HIkh8aUKDio6o4itU4xDR7t82Y2eP1Bg== + dependencies: + gonzales-pe "^4.3.0" + node-source-walk "^6.0.1" + "@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@^0.5.3": version "0.5.5" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz#9283c9ce5b289a3c4f61c12757469e59377f81f3" @@ -2792,7 +2827,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": +"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== @@ -2815,6 +2850,14 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.17" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" @@ -8088,6 +8131,26 @@ mkdirp "^1.0.4" path-browserify "^1.0.1" +"@tsconfig/node10@^1.0.7": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" + integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + +"@tsconfig/node12@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" + integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + +"@tsconfig/node14@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" + integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + +"@tsconfig/node16@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" + integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + "@tsd/typescript@~4.6.3": version "4.6.3" resolved "https://registry.yarnpkg.com/@tsd/typescript/-/typescript-4.6.3.tgz#9b4c8198da7614fe1547436fbd5657cfe8327c1d" @@ -9892,6 +9955,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.54.0.tgz#7d519df01f50739254d89378e0dcac504cab2740" integrity sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ== +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + "@typescript-eslint/typescript-estree@5.54.0", "@typescript-eslint/typescript-estree@^5.54.0": version "5.54.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz#f6f3440cabee8a43a0b25fa498213ebb61fdfe99" @@ -9905,6 +9973,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@^5.59.5": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.54.0", "@typescript-eslint/utils@^5.10.0": version "5.54.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.54.0.tgz#3db758aae078be7b54b8ea8ea4537ff6cd3fbc21" @@ -9927,6 +10008,14 @@ "@typescript-eslint/types" "5.54.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + "@wdio/logger@^8.6.6": version "8.6.6" resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-8.6.6.tgz#6f3844a2506730ae1e4151dca0ed0242b5b69b63" @@ -10338,7 +10427,7 @@ acorn-walk@^7.0.0, acorn-walk@^7.2.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.0.0, acorn-walk@^8.0.2, acorn-walk@^8.2.0: +acorn-walk@^8.0.0, acorn-walk@^8.0.2, acorn-walk@^8.1.1, acorn-walk@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== @@ -10363,6 +10452,11 @@ acorn@^8.0.4, acorn@^8.1.0, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8 resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== +acorn@^8.4.1: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + address@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -10670,6 +10764,11 @@ apidoc-markdown@^7.2.4: update-notifier "^5.1.0" yargs "^17.6.0" +app-module-path@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" + integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== + app-root-dir@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" @@ -10742,6 +10841,16 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +arg@^5.0.1, arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -10986,6 +11095,11 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +ast-module-types@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ast-module-types/-/ast-module-types-5.0.0.tgz#32b2b05c56067ff38e95df66f11d6afd6c9ba16b" + integrity sha512-JvqziE0Wc0rXQfma0HZC/aY7URXHFuZV84fJRtP8u+lhp0JYCNd5wJzVXP45t0PH0Mej3ynlzvdyITYIu0G4LQ== + ast-transform@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/ast-transform/-/ast-transform-0.0.0.tgz#74944058887d8283e189d954600947bc98fe0062" @@ -12974,6 +13088,13 @@ console-log-level@^1.4.1: resolved "https://registry.yarnpkg.com/console-log-level/-/console-log-level-1.4.1.tgz#9c5a6bb9ef1ef65b05aba83028b0ff894cdf630a" integrity sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ== +console.table@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/console.table/-/console.table-0.10.0.tgz#0917025588875befd70cf2eff4bef2c6e2d75d04" + integrity sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g== + dependencies: + easy-table "1.1.0" + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -13218,6 +13339,11 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cronstrue@^1.51.0: version "1.51.0" resolved "https://registry.yarnpkg.com/cronstrue/-/cronstrue-1.51.0.tgz#7a63153d61d940344049037628da38a60784c8e2" @@ -14256,6 +14382,16 @@ dependency-check@^4.1.0: read-package-json "^2.0.10" resolve "^1.1.7" +dependency-tree@^10.0.9: + version "10.0.9" + resolved "https://registry.yarnpkg.com/dependency-tree/-/dependency-tree-10.0.9.tgz#0c6c0dbeb0c5ec2cf83bf755f30e9cb12e7b4ac7" + integrity sha512-dwc59FRIsht+HfnTVM0BCjJaEWxdq2YAvEDy4/Hn6CwS3CBWMtFnL3aZGAkQn3XCYxk/YcTDE4jX2Q7bFTwCjA== + dependencies: + commander "^10.0.1" + filing-cabinet "^4.1.6" + precinct "^11.0.5" + typescript "^5.0.4" + deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" @@ -14326,6 +14462,71 @@ detect-port@^1.3.0: address "^1.0.1" debug "^2.6.0" +detective-amd@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-5.0.2.tgz#579900f301c160efe037a6377ec7e937434b2793" + integrity sha512-XFd/VEQ76HSpym80zxM68ieB77unNuoMwopU2TFT/ErUk5n4KvUTwW4beafAVUugrjV48l4BmmR0rh2MglBaiA== + dependencies: + ast-module-types "^5.0.0" + escodegen "^2.0.0" + get-amd-module-type "^5.0.1" + node-source-walk "^6.0.1" + +detective-cjs@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/detective-cjs/-/detective-cjs-5.0.1.tgz#836ad51c6de4863efc7c419ec243694f760ff8b2" + integrity sha512-6nTvAZtpomyz/2pmEmGX1sXNjaqgMplhQkskq2MLrar0ZAIkHMrDhLXkRiK2mvbu9wSWr0V5/IfiTrZqAQMrmQ== + dependencies: + ast-module-types "^5.0.0" + node-source-walk "^6.0.0" + +detective-es6@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/detective-es6/-/detective-es6-4.0.1.tgz#38d5d49a6d966e992ef8f2d9bffcfe861a58a88a" + integrity sha512-k3Z5tB4LQ8UVHkuMrFOlvb3GgFWdJ9NqAa2YLUU/jTaWJIm+JJnEh4PsMc+6dfT223Y8ACKOaC0qcj7diIhBKw== + dependencies: + node-source-walk "^6.0.1" + +detective-postcss@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/detective-postcss/-/detective-postcss-6.1.3.tgz#51a2d4419327ad85d0af071c7054c79fafca7e73" + integrity sha512-7BRVvE5pPEvk2ukUWNQ+H2XOq43xENWbH0LcdCE14mwgTBEAMoAx+Fc1rdp76SmyZ4Sp48HlV7VedUnP6GA1Tw== + dependencies: + is-url "^1.2.4" + postcss "^8.4.23" + postcss-values-parser "^6.0.2" + +detective-sass@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/detective-sass/-/detective-sass-5.0.3.tgz#63e54bc9b32f4bdbd9d5002308f9592a3d3a508f" + integrity sha512-YsYT2WuA8YIafp2RVF5CEfGhhyIVdPzlwQgxSjK+TUm3JoHP+Tcorbk3SfG0cNZ7D7+cYWa0ZBcvOaR0O8+LlA== + dependencies: + gonzales-pe "^4.3.0" + node-source-walk "^6.0.1" + +detective-scss@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/detective-scss/-/detective-scss-4.0.3.tgz#79758baa0158f72bfc4481eb7e21cc3b5f1ea6eb" + integrity sha512-VYI6cHcD0fLokwqqPFFtDQhhSnlFWvU614J42eY6G0s8c+MBhi9QAWycLwIOGxlmD8I/XvGSOUV1kIDhJ70ZPg== + dependencies: + gonzales-pe "^4.3.0" + node-source-walk "^6.0.1" + +detective-stylus@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detective-stylus/-/detective-stylus-4.0.0.tgz#ce97b6499becdc291de7b3c11df8c352c1eee46e" + integrity sha512-TfPotjhszKLgFBzBhTOxNHDsutIxx9GTWjrL5Wh7Qx/ydxKhwUrlSFeLIn+ZaHPF+h0siVBkAQSuy6CADyTxgQ== + +detective-typescript@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-11.1.0.tgz#2deea5364cae1f0d9d3688bc596e662b049438cc" + integrity sha512-Mq8egjnW2NSCkzEb/Az15/JnBI/Ryyl6Po0Y+0mABTFvOS6DAyUGRZqz1nyhu4QJmWWe0zaGs/ITIBeWkvCkGw== + dependencies: + "@typescript-eslint/typescript-estree" "^5.59.5" + ast-module-types "^5.0.0" + node-source-walk "^6.0.1" + typescript "^5.0.4" + detective@^5.0.2: version "5.2.0" resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" @@ -14676,6 +14877,13 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +easy-table@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.1.0.tgz#86f9ab4c102f0371b7297b92a651d5824bc8cb73" + integrity sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA== + optionalDependencies: + wcwidth ">=1.0.1" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -14936,6 +15144,14 @@ enhanced-resolve@^5.10.0: graceful-fs "^4.2.4" tapable "^2.2.0" +enhanced-resolve@^5.14.1: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -16239,6 +16455,24 @@ filelist@^1.0.1: dependencies: minimatch "^5.0.1" +filing-cabinet@^4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/filing-cabinet/-/filing-cabinet-4.1.6.tgz#8d6d12cf3a84365bbd94e1cbf07d71c113420dd2" + integrity sha512-C+HZbuQTER36sKzGtUhrAPAoK6+/PrrUhYDBQEh3kBRdsyEhkLbp1ML8S0+6e6gCUrUlid+XmubxJrhvL2g/Zw== + dependencies: + app-module-path "^2.2.0" + commander "^10.0.1" + enhanced-resolve "^5.14.1" + is-relative-path "^1.0.2" + module-definition "^5.0.1" + module-lookup-amd "^8.0.5" + resolve "^1.22.3" + resolve-dependency-path "^3.0.2" + sass-lookup "^5.0.1" + stylus-lookup "^5.0.1" + tsconfig-paths "^4.2.0" + typescript "^5.0.4" + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -16287,11 +16521,41 @@ find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" +find-cypress-specs@^1.35.1: + version "1.35.1" + resolved "https://registry.yarnpkg.com/find-cypress-specs/-/find-cypress-specs-1.35.1.tgz#89f633de14ab46c2afc6fee992a470596526f721" + integrity sha512-ngLPf/U/I8jAS6vn5ljClETa6seG+fmr3oXw6BcYX3xVIk7D8jNljHUIJCTDvnK90XOI1cflYGuNFDezhRBNvQ== + dependencies: + "@actions/core" "^1.10.0" + arg "^5.0.1" + console.table "^0.10.0" + debug "^4.3.3" + find-test-names "1.28.13" + globby "^11.1.0" + minimatch "^3.0.4" + pluralize "^8.0.0" + require-and-forget "^1.0.1" + shelljs "^0.8.5" + spec-change "^1.7.1" + ts-node "^10.9.1" + find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== +find-test-names@1.28.13: + version "1.28.13" + resolved "https://registry.yarnpkg.com/find-test-names/-/find-test-names-1.28.13.tgz#871d5585d1f618ed772ffe544ea475ab4657ca83" + integrity sha512-hVatCLbiZmvBwqYNGTkVNbeJwK/8pvkXKQGji+23GzW8fVFHcEaRID77eQYItLKGwa1Tmu0AK2LjcUtuid57FQ== + dependencies: + "@babel/parser" "^7.21.2" + "@babel/plugin-syntax-jsx" "^7.18.6" + acorn-walk "^8.2.0" + debug "^4.3.3" + globby "^11.0.4" + simple-bin-help "^1.8.0" + find-test-names@^1.19.0: version "1.28.6" resolved "https://registry.yarnpkg.com/find-test-names/-/find-test-names-1.28.6.tgz#2840916b42815ce1286bfbfad04cf08f066f727e" @@ -16791,6 +17055,14 @@ geojson-vt@^3.2.1: resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== +get-amd-module-type@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-amd-module-type/-/get-amd-module-type-5.0.1.tgz#bef38ea3674e1aa1bda9c59c8b0da598582f73f2" + integrity sha512-jb65zDeHyDjFR1loOVk0HQGM5WNwoGB8aLWy3LKCieMKol0/ProHkhO2X1JxojuN10vbz1qNn09MJ7tNp7qMzw== + dependencies: + ast-module-types "^5.0.0" + node-source-walk "^6.0.1" + get-assigned-identifiers@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" @@ -16816,6 +17088,11 @@ get-nonce@^1.0.0: resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -16995,7 +17272,7 @@ glob@^10.2.2: minipass "^5.0.0 || ^6.0.2" path-scurry "^1.7.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0, glob@~7.2.0: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0, glob@^7.2.3, glob@~7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -17171,6 +17448,13 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" +gonzales-pe@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" + integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== + dependencies: + minimist "^1.2.5" + google-protobuf@^3.6.1: version "3.19.4" resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.19.4.tgz#8d32c3e34be9250956f28c0fb90955d13f311888" @@ -18203,6 +18487,11 @@ internmap@^1.0.0: resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95" integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + interpret@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" @@ -18393,6 +18682,13 @@ is-ci@^3.0.0: dependencies: ci-info "^3.2.0" +is-core-module@^2.12.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + is-core-module@^2.6.0, is-core-module@^2.9.0: version "2.10.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" @@ -18605,6 +18901,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" @@ -18710,11 +19011,21 @@ is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.2, is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + is-regexp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA== +is-relative-path@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-relative-path/-/is-relative-path-1.0.2.tgz#091b46a0d67c1ed0fe85f1f8cfdde006bb251d46" + integrity sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA== + is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" @@ -18787,7 +19098,12 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-url@^1.2.2: +is-url-superb@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-4.0.0.tgz#b54d1d2499bb16792748ac967aa3ecb41a33a8c2" + integrity sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA== + +is-url@^1.2.2, is-url@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== @@ -20160,6 +20476,11 @@ lazy-ass@1.6.0, lazy-ass@^1.6.0: resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= +lazy-ass@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-2.0.3.tgz#1e8451729f2bebdff1218bb18921566a08f81b36" + integrity sha512-/O3/DoQmI1XAhklDvF1dAjFf/epE8u3lzOZegQfLZ8G7Ud5bTRSZiFOpukHCu6jODrCA4gtIdwUCC7htxcDACA== + lazy-cache@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" @@ -20787,6 +21108,11 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + make-fetch-happen@^10.0.4: version "10.2.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" @@ -21711,11 +22037,29 @@ mock-fs@^5.1.2: resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-5.1.2.tgz#6fa486e06d00f8793a8d2228de980eff93ce6db7" integrity sha512-YkjQkdLulFrz0vD4BfNQdQRVmgycXTV7ykuHMlyv+C8WCHazpkiQRDthwa02kSyo8wKnY9wRptHfQLgmf0eR+A== +module-definition@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-5.0.1.tgz#62d1194e5d5ea6176b7dc7730f818f466aefa32f" + integrity sha512-kvw3B4G19IXk+BOXnYq/D/VeO9qfHaapMeuS7w7sNUqmGaA6hywdFHMi+VWeR9wUScXM7XjoryTffCZ5B0/8IA== + dependencies: + ast-module-types "^5.0.0" + node-source-walk "^6.0.1" + module-details-from-path@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is= +module-lookup-amd@^8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/module-lookup-amd/-/module-lookup-amd-8.0.5.tgz#aaeea41979105b49339380ca3f7d573db78c32a5" + integrity sha512-vc3rYLjDo5Frjox8NZpiyLXsNWJ5BWshztc/5KSOMzpg9k5cHH652YsJ7VKKmtM4SvaxuE9RkrYGhiSjH3Ehow== + dependencies: + commander "^10.0.1" + glob "^7.2.3" + requirejs "^2.3.6" + requirejs-config-file "^4.0.0" + moment-duration-format@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/moment-duration-format/-/moment-duration-format-2.3.2.tgz#5fa2b19b941b8d277122ff3f87a12895ec0d6212" @@ -21914,6 +22258,11 @@ nanoid@^3.3.1, nanoid@^3.3.4: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + nanomatch@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" @@ -22233,6 +22582,13 @@ node-sass@^8.0.0: stdout-stream "^1.4.0" "true-case-path" "^2.2.1" +node-source-walk@^6.0.0, node-source-walk@^6.0.1, node-source-walk@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-6.0.2.tgz#ba81bc4bc0f6f05559b084bea10be84c3f87f211" + integrity sha512-jn9vOIK/nfqoFCcpK89/VCVaLg1IHE6UVfDOzvqmANaJ/rWCTEdH8RZ1V278nv2jr36BJdyQXIAavBLXpzdlag== + dependencies: + "@babel/parser" "^7.21.8" + nodemailer@^6.6.2: version "6.6.2" resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.6.2.tgz#e184c9ed5bee245a3e0bcabc7255866385757114" @@ -23416,6 +23772,11 @@ pluralize@3.1.0: resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-3.1.0.tgz#84213d0a12356069daa84060c559242633161368" integrity sha1-hCE9ChI1YGnaqEBgxVkkJjMWE2g= +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + png-js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.0.0.tgz#e5484f1e8156996e383aceebb3789fd75df1874d" @@ -23756,6 +24117,15 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +postcss-values-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz#636edc5b86c953896f1bb0d7a7a6615df00fb76f" + integrity sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw== + dependencies: + color-name "^1.1.4" + is-url-superb "^4.0.0" + quote-unquote "^1.0.0" + postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6: version "7.0.39" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" @@ -23773,6 +24143,15 @@ postcss@^8.4.14: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.4.23: + version "8.4.25" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.25.tgz#4a133f5e379eda7f61e906c3b1aaa9b81292726f" + integrity sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + potpack@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/potpack/-/potpack-2.0.0.tgz#61f4dd2dc4b3d5e996e3698c0ec9426d0e169104" @@ -23803,6 +24182,24 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" +precinct@^11.0.5: + version "11.0.5" + resolved "https://registry.yarnpkg.com/precinct/-/precinct-11.0.5.tgz#3e15b3486670806f18addb54b8533e23596399ff" + integrity sha512-oHSWLC8cL/0znFhvln26D14KfCQFFn4KOLSw6hmLhd+LQ2SKt9Ljm89but76Pc7flM9Ty1TnXyrA2u16MfRV3w== + dependencies: + "@dependents/detective-less" "^4.1.0" + commander "^10.0.1" + detective-amd "^5.0.2" + detective-cjs "^5.0.1" + detective-es6 "^4.0.1" + detective-postcss "^6.1.3" + detective-sass "^5.0.3" + detective-scss "^4.0.3" + detective-stylus "^4.0.0" + detective-typescript "^11.1.0" + module-definition "^5.0.1" + node-source-walk "^6.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -24293,6 +24690,11 @@ quote-stream@^1.0.1: minimist "^1.1.3" through2 "^2.0.0" +quote-unquote@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/quote-unquote/-/quote-unquote-1.0.0.tgz#67a9a77148effeaf81a4d428404a710baaac8a0b" + integrity sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg== + raf-schd@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.2.tgz#bd44c708188f2e84c810bf55fcea9231bcaed8a0" @@ -25103,6 +25505,13 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + rechoir@^0.7.0: version "0.7.1" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" @@ -25564,6 +25973,13 @@ request-progress@^3.0.0: dependencies: throttleit "^1.0.0" +require-and-forget@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-and-forget/-/require-and-forget-1.0.1.tgz#b535a1b8f0f0dd6a48ab05b0ab15d26135d61142" + integrity sha512-Sea861D/seGo3cptxc857a34Df0oEijXit8Q3IDodiwZMzVmyXrRI9EgQQa3hjkhoEjNzCBvv0t/0fMgebmWLg== + dependencies: + debug "4.3.4" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -25593,6 +26009,19 @@ requireindex@~1.2.0: resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== +requirejs-config-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz#4244da5dd1f59874038cc1091d078d620abb6ebc" + integrity sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw== + dependencies: + esprima "^4.0.0" + stringify-object "^3.2.1" + +requirejs@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9" + integrity sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg== + requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -25620,6 +26049,11 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" +resolve-dependency-path@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/resolve-dependency-path/-/resolve-dependency-path-3.0.2.tgz#012816717bcbe8b846835da11af9d2beb5acef50" + integrity sha512-Tz7zfjhLfsvR39ADOSk9us4421J/1ztVBo4rWUkF38hgHK5m0OCZ3NxFVpqHRkjctnwVa15igEUHFJp8MCS7vA== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -25664,7 +26098,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.5, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.3.2, resolve@^1.9.0: +resolve@^1.1.5, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.3.2, resolve@^1.9.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -25673,6 +26107,15 @@ resolve@^1.1.5, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12. path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.3: + version "1.22.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.3.tgz#4b4055349ffb962600972da1fdc33c46a4eb3283" + integrity sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw== + dependencies: + is-core-module "^2.12.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -25971,6 +26414,13 @@ sass-loader@^10.4.1: schema-utils "^3.0.0" semver "^7.3.2" +sass-lookup@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/sass-lookup/-/sass-lookup-5.0.1.tgz#1f01d7ff21e09d8c9dcf8d05b3fca28f2f96e6ed" + integrity sha512-t0X5PaizPc2H4+rCwszAqHZRtr4bugo4pgiCvrBFvIX0XFxnr29g77LJcpyj9A0DcKf7gXMLcgvRjsonYI6x4g== + dependencies: + commander "^10.0.1" + sax@>=0.6.0, sax@^1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -26321,6 +26771,15 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + side-channel@^1.0.2, side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -26804,6 +27263,17 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" +spec-change@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/spec-change/-/spec-change-1.7.1.tgz#3c56185c887a15482f1fbb3362916fc97c8fdb9f" + integrity sha512-bZmtSmS5w6M6Snae+AGp+y89MZ7QG2SZW1v3Au83+YWcZzCu0YtH2hXruJWXg6VdYUpQ3n+m9bRrWmwLaPkFjQ== + dependencies: + arg "^5.0.2" + debug "^4.3.4" + dependency-tree "^10.0.9" + globby "^11.1.0" + lazy-ass "^2.0.3" + specificity@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" @@ -27207,6 +27677,15 @@ stringify-entities@^3.0.0, stringify-entities@^3.0.1: is-decimal "^1.0.2" is-hexadecimal "^1.0.0" +stringify-object@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -27409,6 +27888,13 @@ stylis@4.2.0: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== +stylus-lookup@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/stylus-lookup/-/stylus-lookup-5.0.1.tgz#3c4d116c3b1e8e1a8169c0d9cd20e608595560f4" + integrity sha512-tLtJEd5AGvnVy4f9UHQMw4bkJJtaAcmo54N+ovQBjDY3DuWyK9Eltxzr5+KG0q4ew6v2EHyuWWNnHeiw/Eo7rQ== + dependencies: + commander "^10.0.1" + success-symbol@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/success-symbol/-/success-symbol-0.1.0.tgz#24022e486f3bf1cdca094283b769c472d3b72897" @@ -28129,6 +28615,25 @@ ts-morph@^13.0.2: "@ts-morph/common" "~0.12.2" code-block-writer "^11.0.0" +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + ts-pnp@^1.1.6: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" @@ -28144,6 +28649,15 @@ tsconfig-paths@^3.11.0: minimist "^1.2.0" strip-bom "^3.0.0" +tsconfig-paths@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tsd@^0.20.0: version "0.20.0" resolved "https://registry.yarnpkg.com/tsd/-/tsd-0.20.0.tgz#0346321ee3c506545486227e488e753109164248" @@ -28195,7 +28709,7 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel@0.0.6: +tunnel@0.0.6, tunnel@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== @@ -28337,7 +28851,7 @@ typescript-tuple@^2.2.1: dependencies: typescript-compare "^0.0.2" -typescript@4.6.3, typescript@^3.3.3333, typescript@^4.6.3, typescript@^4.8.4: +typescript@4.6.3, typescript@^3.3.3333, typescript@^4.6.3, typescript@^4.8.4, typescript@^5.0.4: version "4.6.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== @@ -28917,6 +29431,11 @@ uuid@^8.3.0, uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" @@ -29511,7 +30030,7 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -wcwidth@^1.0.1: +wcwidth@>=1.0.1, wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= @@ -30322,6 +30841,11 @@ yazl@^2.5.1: dependencies: buffer-crc32 "~0.2.3" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From b1b80fe5820910255886fe72e239fcaf29534b1e Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Wed, 9 Aug 2023 16:58:39 -0700 Subject: [PATCH 05/45] [Cloud Security] [Fleet] Get CloudFormation template accordingly with the current integration version to support auto-upgrade (#162206) --- .../post_install_cloud_formation_modal.tsx | 8 +- .../single_page_layout/hooks/form.tsx | 4 +- .../cloud_formation_instructions.tsx | 15 +-- .../agent_enrollment_flyout/hooks.tsx | 79 ++++++++--- .../agent_enrollment_flyout/instructions.tsx | 9 +- .../steps/compute_steps.tsx | 7 +- ...all_cloud_formation_managed_agent_step.tsx | 20 +-- .../agent_enrollment_flyout/types.ts | 11 +- .../hooks/use_create_cloud_formation_url.ts | 38 +++--- .../fleet/public/hooks/use_request/epm.ts | 28 ++-- ...ormation_props_from_package_policy.test.ts | 126 ++++++++++++++++++ ...ud_formation_props_from_package_policy.ts} | 21 ++- ...ion_template_url_from_package_info.test.ts | 66 +++++++++ ...ormation_template_url_from_package_info.ts | 32 +++++ ...n_template_url_from_package_policy.test.ts | 61 --------- x-pack/plugins/fleet/public/services/index.ts | 3 +- 16 files changed, 376 insertions(+), 152 deletions(-) create mode 100644 x-pack/plugins/fleet/public/services/get_cloud_formation_props_from_package_policy.test.ts rename x-pack/plugins/fleet/public/services/{get_cloud_formation_template_url_from_package_policy.ts => get_cloud_formation_props_from_package_policy.ts} (52%) create mode 100644 x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_info.test.ts create mode 100644 x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_info.ts delete mode 100644 x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_policy.test.ts diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/post_install_cloud_formation_modal.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/post_install_cloud_formation_modal.tsx index e8300e35d08625..7ed959e40efa0c 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/post_install_cloud_formation_modal.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/post_install_cloud_formation_modal.tsx @@ -22,7 +22,7 @@ import { useQuery } from '@tanstack/react-query'; import type { AgentPolicy, PackagePolicy } from '../../../../../types'; import { sendGetEnrollmentAPIKeys, useCreateCloudFormationUrl } from '../../../../../hooks'; -import { getCloudFormationTemplateUrlFromPackagePolicy } from '../../../../../services'; +import { getCloudFormationPropsFromPackagePolicy } from '../../../../../services'; import { CloudFormationGuide } from '../../../../../components'; export const PostInstallCloudFormationModal: React.FunctionComponent<{ @@ -39,13 +39,11 @@ export const PostInstallCloudFormationModal: React.FunctionComponent<{ }) ); - const cloudFormationTemplateUrl = - getCloudFormationTemplateUrlFromPackagePolicy(packagePolicy) || ''; + const cloudFormationProps = getCloudFormationPropsFromPackagePolicy(packagePolicy); const { cloudFormationUrl, error, isError, isLoading } = useCreateCloudFormationUrl({ - cloudFormationTemplateUrl, enrollmentAPIKey: apyKeysData?.data?.items[0]?.api_key, - packagePolicy, + cloudFormationProps, }); return ( diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx index 52d02d93c8097f..dbb901316cece8 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx @@ -39,7 +39,7 @@ import type { PackagePolicyFormState } from '../../types'; import { SelectedPolicyTab } from '../../components'; import { useOnSaveNavigate } from '../../hooks'; import { prepareInputPackagePolicyDataset } from '../../services/prepare_input_pkg_policy_dataset'; -import { getCloudFormationTemplateUrlFromPackagePolicy } from '../../../../../services'; +import { getCloudFormationPropsFromPackagePolicy } from '../../../../../services'; async function createAgentPolicy({ packagePolicy, @@ -301,7 +301,7 @@ export function useOnSubmit({ }); const hasCloudFormation = data?.item - ? getCloudFormationTemplateUrlFromPackagePolicy(data.item) + ? getCloudFormationPropsFromPackagePolicy(data.item).templateUrl : false; if (hasCloudFormation) { diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/cloud_formation_instructions.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/cloud_formation_instructions.tsx index 0edbe5316409b7..83031548293f7c 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/cloud_formation_instructions.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/cloud_formation_instructions.tsx @@ -10,26 +10,23 @@ import { EuiButton, EuiSpacer, EuiCallOut, EuiSkeletonText } from '@elastic/eui' import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; -import type { PackagePolicy } from '../../../common'; - import { useCreateCloudFormationUrl } from '../../hooks'; import { CloudFormationGuide } from '../cloud_formation_guide'; +import type { CloudSecurityIntegration } from './types'; + interface Props { enrollmentAPIKey?: string; - cloudFormationTemplateUrl: string; - packagePolicy?: PackagePolicy; + cloudSecurityIntegration: CloudSecurityIntegration; } export const CloudFormationInstructions: React.FunctionComponent = ({ enrollmentAPIKey, - cloudFormationTemplateUrl, - packagePolicy, + cloudSecurityIntegration, }) => { const { isLoading, cloudFormationUrl, error, isError } = useCreateCloudFormationUrl({ enrollmentAPIKey, - cloudFormationTemplateUrl, - packagePolicy, + cloudFormationProps: cloudSecurityIntegration?.cloudFormationProps, }); if (error && isError) { @@ -45,7 +42,7 @@ export const CloudFormationInstructions: React.FunctionComponent = ({ { - if (!agentPolicy) { + const cloudSecurityPackagePolicy = useMemo(() => { + return getCloudSecurityPackagePolicyFromAgentPolicy(agentPolicy); + }, [agentPolicy]); + + const integrationVersion = cloudSecurityPackagePolicy?.package?.version; + + // Fetch the package info to get the CloudFormation template URL only + // if the package policy is a Cloud Security policy + const { data: packageInfoData, isLoading } = useGetPackageInfoByKeyQuery( + FLEET_CLOUD_SECURITY_POSTURE_PACKAGE, + integrationVersion, + { full: true }, + { enabled: Boolean(cloudSecurityPackagePolicy) } + ); + + const cloudSecurityIntegration: CloudSecurityIntegration | undefined = useMemo(() => { + if (!agentPolicy || !cloudSecurityPackagePolicy) { return undefined; } - const integrationType = getCloudSecurityIntegrationTypeFromPackagePolicy(agentPolicy); - const cloudformationUrl = getCloudFormationTemplateUrlFromAgentPolicy(agentPolicy); + const integrationType = cloudSecurityPackagePolicy.inputs?.find((input) => input.enabled) + ?.policy_template as CloudSecurityIntegrationType; + + if (!integrationType) return undefined; + + const cloudFormationTemplateFromAgentPolicy = + getCloudFormationTemplateUrlFromAgentPolicy(agentPolicy); + + // Use the latest CloudFormation template for the current version + // So it guarantee that the template version matches the integration version + // when the integration is upgraded. + // In case it can't find the template for the current version, + // it will fallback to the one from the agent policy. + const cloudFormationTemplateUrl = packageInfoData?.item + ? getCloudFormationTemplateUrlFromPackageInfo(packageInfoData.item, integrationType) + : cloudFormationTemplateFromAgentPolicy; + + const AWS_ACCOUNT_TYPE = 'aws.account_type'; + + const cloudFormationAwsAccountType: CloudSecurityIntegrationAwsAccountType | undefined = + cloudSecurityPackagePolicy?.inputs?.find((input) => input.enabled)?.streams?.[0]?.vars?.[ + AWS_ACCOUNT_TYPE + ]?.value; return { + isLoading, integrationType, - cloudformationUrl, + isCloudFormation: Boolean(cloudFormationTemplateFromAgentPolicy), + cloudFormationProps: { + awsAccountType: cloudFormationAwsAccountType, + templateUrl: cloudFormationTemplateUrl, + }, }; - }, [agentPolicy]); + }, [agentPolicy, packageInfoData?.item, isLoading, cloudSecurityPackagePolicy]); return { cloudSecurityIntegration }; } @@ -97,13 +147,10 @@ const isK8sPackage = (pkg: PackagePolicy) => { return K8S_PACKAGES.has(name); }; -const getCloudSecurityIntegrationTypeFromPackagePolicy = ( - agentPolicy: AgentPolicy -): CloudSecurityIntegrationType | undefined => { - const packagePolicy = agentPolicy?.package_policies?.find( +const getCloudSecurityPackagePolicyFromAgentPolicy = ( + agentPolicy?: AgentPolicy +): PackagePolicy | undefined => { + return agentPolicy?.package_policies?.find( (input) => input.package?.name === FLEET_CLOUD_SECURITY_POSTURE_PACKAGE ); - if (!packagePolicy) return undefined; - return packagePolicy?.inputs?.find((input) => input.enabled) - ?.policy_template as CloudSecurityIntegrationType; }; diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/instructions.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/instructions.tsx index b602b9fd8931d9..d88c9cedb4bcdd 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/instructions.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/instructions.tsx @@ -80,8 +80,8 @@ export const Instructions = (props: InstructionProps) => { (fleetStatus.missingRequirements ?? []).some((r) => r === FLEET_SERVER_PACKAGE)); useEffect(() => { - // If we have a cloudFormationTemplateUrl, we want to hide the selection type - if (props.cloudSecurityIntegration?.cloudformationUrl) { + // If we detect a CloudFormation integration, we want to hide the selection type + if (props.cloudSecurityIntegration?.isCloudFormation) { setSelectionType(undefined); } else if (!isIntegrationFlow && showAgentEnrollment) { setSelectionType('radio'); @@ -117,10 +117,7 @@ export const Instructions = (props: InstructionProps) => { {isFleetServerPolicySelected ? ( undefined} /> ) : ( - + )} ); diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/compute_steps.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/compute_steps.tsx index 3977cdd5db5764..a750fa48aae7ff 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/compute_steps.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/compute_steps.tsx @@ -200,7 +200,6 @@ export const ManagedSteps: React.FunctionComponent = ({ isK8s, cloudSecurityIntegration, installedPackagePolicy, - cloudFormationTemplateUrl, }) => { const kibanaVersion = useKibanaVersion(); const core = useStartServices(); @@ -247,14 +246,13 @@ export const ManagedSteps: React.FunctionComponent = ({ ); } - if (cloudFormationTemplateUrl) { + if (cloudSecurityIntegration?.isCloudFormation) { steps.push( InstallCloudFormationManagedAgentStep({ apiKeyData, selectedApiKeyId, enrollToken, - cloudFormationTemplateUrl, - agentPolicy, + cloudSecurityIntegration, }) ); } else { @@ -314,7 +312,6 @@ export const ManagedSteps: React.FunctionComponent = ({ link, agentDataConfirmed, installedPackagePolicy, - cloudFormationTemplateUrl, ]); return ; diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/install_cloud_formation_managed_agent_step.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/install_cloud_formation_managed_agent_step.tsx index 75fec5be125f54..7826d1648ae645 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/install_cloud_formation_managed_agent_step.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/steps/install_cloud_formation_managed_agent_step.tsx @@ -11,46 +11,38 @@ import { i18n } from '@kbn/i18n'; import type { EuiContainedStepProps } from '@elastic/eui/src/components/steps/steps'; -import type { AgentPolicy } from '../../../../common'; - import type { GetOneEnrollmentAPIKeyResponse } from '../../../../common/types/rest_spec/enrollment_api_key'; import { CloudFormationInstructions } from '../cloud_formation_instructions'; -import { FLEET_CLOUD_SECURITY_POSTURE_PACKAGE } from '../../../../common'; + +import type { CloudSecurityIntegration } from '../types'; export const InstallCloudFormationManagedAgentStep = ({ selectedApiKeyId, apiKeyData, enrollToken, isComplete, - cloudFormationTemplateUrl, - agentPolicy, + cloudSecurityIntegration, }: { selectedApiKeyId?: string; apiKeyData?: GetOneEnrollmentAPIKeyResponse | null; enrollToken?: string; isComplete?: boolean; - cloudFormationTemplateUrl: string; - agentPolicy?: AgentPolicy; + cloudSecurityIntegration?: CloudSecurityIntegration | undefined; }): EuiContainedStepProps => { const nonCompleteStatus = selectedApiKeyId ? undefined : 'disabled'; const status = isComplete ? 'complete' : nonCompleteStatus; - const cloudSecurityPackagePolicy = agentPolicy?.package_policies?.find( - (p) => p.package?.name === FLEET_CLOUD_SECURITY_POSTURE_PACKAGE - ); - return { status, title: i18n.translate('xpack.fleet.agentEnrollment.cloudFormation.stepEnrollAndRunAgentTitle', { defaultMessage: 'Install Elastic Agent on your cloud', }), children: - selectedApiKeyId && apiKeyData ? ( + selectedApiKeyId && apiKeyData && cloudSecurityIntegration ? ( ) : ( diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/types.ts b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/types.ts index 79c8029e4ec018..f1cd44ea5348b0 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/types.ts +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/types.ts @@ -16,13 +16,21 @@ export type K8sMode = | 'IS_KUBERNETES_MULTIPAGE'; export type CloudSecurityIntegrationType = 'kspm' | 'vuln_mgmt' | 'cspm'; +export type CloudSecurityIntegrationAwsAccountType = 'single-account' | 'organization-account'; export type FlyoutMode = 'managed' | 'standalone'; export type SelectionType = 'tabs' | 'radio' | undefined; +export interface CloudFormationProps { + templateUrl: string | undefined; + awsAccountType: CloudSecurityIntegrationAwsAccountType | undefined; +} + export interface CloudSecurityIntegration { integrationType: CloudSecurityIntegrationType | undefined; - cloudformationUrl: string | undefined; + isLoading: boolean; + isCloudFormation: boolean; + cloudFormationProps?: CloudFormationProps; } export interface BaseProps { @@ -65,5 +73,4 @@ export interface InstructionProps extends BaseProps { setSelectedAPIKeyId: (key?: string) => void; fleetServerHosts: string[]; fleetProxy?: FleetProxy; - cloudFormationTemplateUrl?: string; } diff --git a/x-pack/plugins/fleet/public/hooks/use_create_cloud_formation_url.ts b/x-pack/plugins/fleet/public/hooks/use_create_cloud_formation_url.ts index a28b0f46adb41e..45e5b259afd15e 100644 --- a/x-pack/plugins/fleet/public/hooks/use_create_cloud_formation_url.ts +++ b/x-pack/plugins/fleet/public/hooks/use_create_cloud_formation_url.ts @@ -7,34 +7,27 @@ import { i18n } from '@kbn/i18n'; -import type { PackagePolicy, PackagePolicyInput } from '../../common'; +import type { + CloudFormationProps, + CloudSecurityIntegrationAwsAccountType, +} from '../components/agent_enrollment_flyout/types'; import { useKibanaVersion } from './use_kibana_version'; import { useGetSettings } from './use_request'; -type AwsAccountType = 'single_account' | 'organization_account'; - -const CLOUDBEAT_AWS = 'cloudbeat/cis_aws'; - -const getAwsAccountType = (input?: PackagePolicyInput): AwsAccountType | undefined => - input?.streams[0].vars?.['aws.account_type']?.value; +const CLOUD_FORMATION_DEFAULT_ACCOUNT_TYPE = 'single-account'; export const useCreateCloudFormationUrl = ({ enrollmentAPIKey, - cloudFormationTemplateUrl, - packagePolicy, + cloudFormationProps, }: { enrollmentAPIKey: string | undefined; - cloudFormationTemplateUrl: string; - packagePolicy?: PackagePolicy; + cloudFormationProps: CloudFormationProps | undefined; }) => { const { data, isLoading } = useGetSettings(); const kibanaVersion = useKibanaVersion(); - const awsInput = packagePolicy?.inputs?.find((input) => input.type === CLOUDBEAT_AWS); - const awsAccountType = getAwsAccountType(awsInput) || ''; - let isError = false; let error: string | undefined; @@ -56,13 +49,13 @@ export const useCreateCloudFormationUrl = ({ } const cloudFormationUrl = - enrollmentAPIKey && fleetServerHost && cloudFormationTemplateUrl + enrollmentAPIKey && fleetServerHost && cloudFormationProps?.templateUrl ? createCloudFormationUrl( - cloudFormationTemplateUrl, + cloudFormationProps?.templateUrl, enrollmentAPIKey, fleetServerHost, kibanaVersion, - awsAccountType + cloudFormationProps?.awsAccountType ) : undefined; @@ -79,7 +72,7 @@ const createCloudFormationUrl = ( enrollmentToken: string, fleetUrl: string, kibanaVersion: string, - awsAccountType: string + awsAccountType: CloudSecurityIntegrationAwsAccountType | undefined ) => { let cloudFormationUrl; @@ -89,8 +82,15 @@ const createCloudFormationUrl = ( .replace('KIBANA_VERSION', kibanaVersion); if (cloudFormationUrl.includes('ACCOUNT_TYPE')) { - cloudFormationUrl = cloudFormationUrl.replace('ACCOUNT_TYPE', awsAccountType); + cloudFormationUrl = cloudFormationUrl.replace( + 'ACCOUNT_TYPE', + getAwsAccountType(awsAccountType) + ); } return new URL(cloudFormationUrl).toString(); }; + +const getAwsAccountType = (awsAccountType: CloudSecurityIntegrationAwsAccountType | undefined) => { + return awsAccountType ? awsAccountType : CLOUD_FORMATION_DEFAULT_ACCOUNT_TYPE; +}; diff --git a/x-pack/plugins/fleet/public/hooks/use_request/epm.ts b/x-pack/plugins/fleet/public/hooks/use_request/epm.ts index cc381c20ecd978..df8ceb8a4c2e2a 100644 --- a/x-pack/plugins/fleet/public/hooks/use_request/epm.ts +++ b/x-pack/plugins/fleet/public/hooks/use_request/epm.ts @@ -105,6 +105,13 @@ export const useGetPackageInfoByKeyQuery = ( ignoreUnverified?: boolean; prerelease?: boolean; full?: boolean; + }, + // Additional options for the useQuery hook + queryOptions: { + // If enabled is false, the query will not be fetched + enabled?: boolean; + } = { + enabled: true, } ) => { const confirmOpenUnverified = useConfirmOpenUnverified(); @@ -112,15 +119,18 @@ export const useGetPackageInfoByKeyQuery = ( options?.ignoreUnverified ); - const response = useQuery([pkgName, pkgVersion, options], () => - sendRequestForRq({ - path: epmRouteService.getInfoPath(pkgName, pkgVersion), - method: 'get', - query: { - ...options, - ...(ignoreUnverifiedQueryParam && { ignoreUnverified: ignoreUnverifiedQueryParam }), - }, - }) + const response = useQuery( + [pkgName, pkgVersion, options], + () => + sendRequestForRq({ + path: epmRouteService.getInfoPath(pkgName, pkgVersion), + method: 'get', + query: { + ...options, + ...(ignoreUnverifiedQueryParam && { ignoreUnverified: ignoreUnverifiedQueryParam }), + }, + }), + { enabled: queryOptions.enabled } ); const confirm = async () => { diff --git a/x-pack/plugins/fleet/public/services/get_cloud_formation_props_from_package_policy.test.ts b/x-pack/plugins/fleet/public/services/get_cloud_formation_props_from_package_policy.test.ts new file mode 100644 index 00000000000000..f84d5c839dd40f --- /dev/null +++ b/x-pack/plugins/fleet/public/services/get_cloud_formation_props_from_package_policy.test.ts @@ -0,0 +1,126 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { getCloudFormationPropsFromPackagePolicy } from './get_cloud_formation_props_from_package_policy'; + +describe('getCloudFormationPropsFromPackagePolicy', () => { + test('returns empty CloudFormationProps when packagePolicy is undefined', () => { + const result = getCloudFormationPropsFromPackagePolicy(undefined); + expect(result).toEqual({ + templateUrl: undefined, + awsAccountType: undefined, + }); + }); + + test('returns empty CloudFormationProps when packagePolicy has no inputs', () => { + const packagePolicy = { otherProperty: 'value' }; + // @ts-expect-error + const result = getCloudFormationPropsFromPackagePolicy(packagePolicy); + expect(result).toEqual({ + templateUrl: undefined, + awsAccountType: undefined, + }); + }); + + test('returns empty CloudFormationProps when no enabled input has a cloudFormationTemplateUrl', () => { + const packagePolicy = { + inputs: [ + { enabled: false, config: { cloud_formation_template_url: { value: 'template1' } } }, + { enabled: false, config: { cloud_formation_template_url: { value: 'template2' } } }, + ], + }; + // @ts-expect-error + const result = getCloudFormationPropsFromPackagePolicy(packagePolicy); + expect(result).toEqual({ + templateUrl: undefined, + awsAccountType: undefined, + }); + }); + + test('returns the cloudFormationTemplateUrl and awsAccountType when found in the enabled input', () => { + const packagePolicy = { + inputs: [ + { + enabled: true, + config: { cloud_formation_template_url: { value: 'template1' } }, + streams: [ + { + vars: { + ['aws.account_type']: { value: 'aws_account_type_value' }, + }, + }, + ], + }, + { + enabled: false, + config: { cloud_formation_template_url: { value: 'template2' } }, + streams: [ + { + vars: { + ['aws.account_type']: { value: 'aws_account_type_value2' }, + }, + }, + ], + }, + ], + }; + // @ts-expect-error + const result = getCloudFormationPropsFromPackagePolicy(packagePolicy); + expect(result).toEqual({ + templateUrl: 'template1', + awsAccountType: 'aws_account_type_value', + }); + }); + + test('returns the first cloudFormationTemplateUrl and awsAccountType when multiple enabled inputs have them', () => { + const packagePolicy = { + inputs: [ + { + enabled: true, + config: { + cloud_formation_template_url: { value: 'template1' }, + }, + streams: [ + { + vars: { + ['aws.account_type']: { value: 'aws_account_type_value1' }, + }, + }, + { + vars: { + ['aws.account_type']: { value: 'aws_account_type_value2' }, + }, + }, + ], + }, + { + enabled: true, + config: { + cloud_formation_template_url: { value: 'template2' }, + }, + streams: [ + { + vars: { + ['aws.account_type']: { value: 'aws_account_type_value1' }, + }, + }, + { + vars: { + ['aws.account_type']: { value: 'aws_account_type_value2' }, + }, + }, + ], + }, + ], + }; + // @ts-expect-error + const result = getCloudFormationPropsFromPackagePolicy(packagePolicy); + expect(result).toEqual({ + templateUrl: 'template1', + awsAccountType: 'aws_account_type_value1', + }); + }); +}); diff --git a/x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_policy.ts b/x-pack/plugins/fleet/public/services/get_cloud_formation_props_from_package_policy.ts similarity index 52% rename from x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_policy.ts rename to x-pack/plugins/fleet/public/services/get_cloud_formation_props_from_package_policy.ts index 598e71709fdc7d..b56659b21db995 100644 --- a/x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_policy.ts +++ b/x-pack/plugins/fleet/public/services/get_cloud_formation_props_from_package_policy.ts @@ -5,15 +5,23 @@ * 2.0. */ +import type { + CloudFormationProps, + CloudSecurityIntegrationAwsAccountType, +} from '../components/agent_enrollment_flyout/types'; import type { PackagePolicy } from '../types'; +const AWS_ACCOUNT_TYPE = 'aws.account_type'; + /** * Get the cloud formation template url from a package policy * It looks for a config with a cloud_formation_template_url object present in * the enabled inputs of the package policy */ -export const getCloudFormationTemplateUrlFromPackagePolicy = (packagePolicy?: PackagePolicy) => { - const cloudFormationTemplateUrl = packagePolicy?.inputs?.reduce((accInput, input) => { +export const getCloudFormationPropsFromPackagePolicy = ( + packagePolicy?: PackagePolicy +): CloudFormationProps => { + const templateUrl = packagePolicy?.inputs?.reduce((accInput, input) => { if (accInput !== '') { return accInput; } @@ -23,5 +31,12 @@ export const getCloudFormationTemplateUrlFromPackagePolicy = (packagePolicy?: Pa return accInput; }, ''); - return cloudFormationTemplateUrl !== '' ? cloudFormationTemplateUrl : undefined; + const awsAccountType: CloudSecurityIntegrationAwsAccountType | undefined = + packagePolicy?.inputs?.find((input) => input.enabled)?.streams?.[0]?.vars?.[AWS_ACCOUNT_TYPE] + ?.value; + + return { + templateUrl: templateUrl !== '' ? templateUrl : undefined, + awsAccountType, + }; }; diff --git a/x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_info.test.ts b/x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_info.test.ts new file mode 100644 index 00000000000000..8ed2fb3ae389aa --- /dev/null +++ b/x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_info.test.ts @@ -0,0 +1,66 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getCloudFormationTemplateUrlFromPackageInfo } from './get_cloud_formation_template_url_from_package_info'; + +describe('getCloudFormationTemplateUrlFromPackageInfo', () => { + test('returns undefined when packageInfo is undefined', () => { + const result = getCloudFormationTemplateUrlFromPackageInfo(undefined, 'test'); + expect(result).toBeUndefined(); + }); + + test('returns undefined when packageInfo has no policy_templates', () => { + const packageInfo = { inputs: [] }; + // @ts-expect-error + const result = getCloudFormationTemplateUrlFromPackageInfo(packageInfo, 'test'); + expect(result).toBeUndefined(); + }); + + test('returns undefined when integrationType is not found in policy_templates', () => { + const packageInfo = { policy_templates: [{ name: 'template1' }, { name: 'template2' }] }; + // @ts-expect-error + const result = getCloudFormationTemplateUrlFromPackageInfo(packageInfo, 'nonExistentTemplate'); + expect(result).toBeUndefined(); + }); + + test('returns undefined when no input in the policy template has a cloudFormationTemplate', () => { + const packageInfo = { + policy_templates: [ + { + name: 'template1', + inputs: [ + { name: 'input1', vars: [] }, + { name: 'input2', vars: [{ name: 'var1', default: 'value1' }] }, + ], + }, + ], + }; + // @ts-expect-error + const result = getCloudFormationTemplateUrlFromPackageInfo(packageInfo, 'template1'); + expect(result).toBeUndefined(); + }); + + test('returns the cloudFormationTemplate from the policy template', () => { + const packageInfo = { + policy_templates: [ + { + name: 'template1', + inputs: [ + { name: 'input1', vars: [] }, + { + name: 'input2', + vars: [{ name: 'cloud_formation_template', default: 'cloud_formation_template_url' }], + }, + ], + }, + ], + }; + // @ts-expect-error + const result = getCloudFormationTemplateUrlFromPackageInfo(packageInfo, 'template1'); + expect(result).toBe('cloud_formation_template_url'); + }); +}); diff --git a/x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_info.ts b/x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_info.ts new file mode 100644 index 00000000000000..4f5381ccedb3f5 --- /dev/null +++ b/x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_info.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { PackageInfo } from '../types'; + +/** + * Get the cloud formation template url from the PackageInfo + * It looks for a input var with a object containing cloud_formation_template_url present in + * the package_policies inputs of the given integration type + */ +export const getCloudFormationTemplateUrlFromPackageInfo = ( + packageInfo: PackageInfo | undefined, + integrationType: string +): string | undefined => { + if (!packageInfo?.policy_templates) return undefined; + + const policyTemplate = packageInfo.policy_templates.find((p) => p.name === integrationType); + if (!policyTemplate) return undefined; + + if ('inputs' in policyTemplate) { + const cloudFormationTemplate = policyTemplate.inputs?.reduce((acc, input): string => { + if (!input.vars) return acc; + const template = input.vars.find((v) => v.name === 'cloud_formation_template')?.default; + return template ? String(template) : acc; + }, ''); + return cloudFormationTemplate !== '' ? cloudFormationTemplate : undefined; + } +}; diff --git a/x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_policy.test.ts b/x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_policy.test.ts deleted file mode 100644 index 523641b10eb1b5..00000000000000 --- a/x-pack/plugins/fleet/public/services/get_cloud_formation_template_url_from_package_policy.test.ts +++ /dev/null @@ -1,61 +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 { getCloudFormationTemplateUrlFromPackagePolicy } from './get_cloud_formation_template_url_from_package_policy'; - -describe('getCloudFormationTemplateUrlFromPackagePolicy', () => { - test('returns undefined when packagePolicy is undefined', () => { - const result = getCloudFormationTemplateUrlFromPackagePolicy(undefined); - expect(result).toBeUndefined(); - }); - - test('returns undefined when packagePolicy is defined but inputs are empty', () => { - const packagePolicy = { inputs: [] }; - // @ts-expect-error - const result = getCloudFormationTemplateUrlFromPackagePolicy(packagePolicy); - expect(result).toBeUndefined(); - }); - - test('returns undefined when no enabled input has a cloudFormationTemplateUrl', () => { - const packagePolicy = { - inputs: [ - { enabled: false, config: { cloud_formation_template_url: { value: 'template1' } } }, - { enabled: false, config: { cloud_formation_template_url: { value: 'template2' } } }, - ], - }; - // @ts-expect-error - const result = getCloudFormationTemplateUrlFromPackagePolicy(packagePolicy); - expect(result).toBeUndefined(); - }); - - test('returns the cloudFormationTemplateUrl of the first enabled input', () => { - const packagePolicy = { - inputs: [ - { enabled: false, config: { cloud_formation_template_url: { value: 'template1' } } }, - { enabled: true, config: { cloud_formation_template_url: { value: 'template2' } } }, - { enabled: true, config: { cloud_formation_template_url: { value: 'template3' } } }, - ], - }; - // @ts-expect-error - const result = getCloudFormationTemplateUrlFromPackagePolicy(packagePolicy); - expect(result).toBe('template2'); - }); - - test('returns the cloudFormationTemplateUrl of the first enabled input and ignores subsequent inputs', () => { - const packagePolicy = { - inputs: [ - { enabled: true, config: { cloud_formation_template_url: { value: 'template1' } } }, - { enabled: true, config: { cloud_formation_template_url: { value: 'template2' } } }, - { enabled: true, config: { cloud_formation_template_url: { value: 'template3' } } }, - ], - }; - // @ts-expect-error - const result = getCloudFormationTemplateUrlFromPackagePolicy(packagePolicy); - expect(result).toBe('template1'); - }); - - // Add more test cases as needed -}); diff --git a/x-pack/plugins/fleet/public/services/index.ts b/x-pack/plugins/fleet/public/services/index.ts index 1da10c7384cdc3..44bf6b965742c1 100644 --- a/x-pack/plugins/fleet/public/services/index.ts +++ b/x-pack/plugins/fleet/public/services/index.ts @@ -48,5 +48,6 @@ export { isPackageUpdatable } from './is_package_updatable'; export { pkgKeyFromPackageInfo } from './pkg_key_from_package_info'; export { createExtensionRegistrationCallback } from './ui_extensions'; export { incrementPolicyName } from './increment_policy_name'; -export { getCloudFormationTemplateUrlFromPackagePolicy } from './get_cloud_formation_template_url_from_package_policy'; +export { getCloudFormationPropsFromPackagePolicy } from './get_cloud_formation_props_from_package_policy'; export { getCloudFormationTemplateUrlFromAgentPolicy } from './get_cloud_formation_template_url_from_agent_policy'; +export { getCloudFormationTemplateUrlFromPackageInfo } from './get_cloud_formation_template_url_from_package_info'; From d5d34c661d41dddbfebacccbd010aa63ed6afa81 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 10 Aug 2023 00:52:53 -0400 Subject: [PATCH 06/45] [api-docs] 2023-08-10 Daily api_docs build (#163551) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/425 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.devdocs.json | 159 +- api_docs/aiops.mdx | 10 +- api_docs/alerting.devdocs.json | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.devdocs.json | 34 +- api_docs/apm.mdx | 2 +- api_docs/asset_manager.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.devdocs.json | 15 +- api_docs/cases.mdx | 4 +- api_docs/charts.devdocs.json | 10 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_chat.mdx | 2 +- api_docs/cloud_chat_provider.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.devdocs.json | 117 +- api_docs/data.mdx | 4 +- api_docs/data_query.mdx | 4 +- api_docs/data_search.devdocs.json | 14 + api_docs/data_search.mdx | 4 +- 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.devdocs.json | 244 +- api_docs/data_views.mdx | 4 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 15 +- api_docs/deprecations_by_plugin.mdx | 29 +- api_docs/deprecations_by_team.mdx | 4 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/embeddable.devdocs.json | 30 +- api_docs/embeddable.mdx | 4 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.devdocs.json | 59 +- api_docs/event_annotation.mdx | 4 +- api_docs/event_log.devdocs.json | 79 - api_docs/event_log.mdx | 4 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.devdocs.json | 18 +- 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.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.devdocs.json | 12 + api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 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_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_aiops_components.devdocs.json | 284 +- api_docs/kbn_aiops_components.mdx | 7 +- api_docs/kbn_aiops_utils.devdocs.json | 201 +- api_docs/kbn_aiops_utils.mdx | 10 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.devdocs.json | 8 +- api_docs/kbn_analytics_client.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- 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_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_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mocks.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 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_utils.devdocs.json | 18 +- api_docs/kbn_content_management_utils.mdx | 4 +- 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_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 | 76 +- 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_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 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- 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 +- 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_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 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.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 +- ...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_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_settings_server.mdx | 2 +- ...kbn_core_user_settings_server_internal.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_cypress_config.mdx | 2 +- api_docs/kbn_data_service.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_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_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 +- api_docs/kbn_discover_utils.mdx | 2 +- 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.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_assistant.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.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- ...n_event_annotation_components.devdocs.json | 38 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- .../kbn_ftr_common_functional_services.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_generate_csv_types.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 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_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.devdocs.json | 2 +- api_docs/kbn_io_ts_utils.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_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- api_docs/kbn_management_storybook_config.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_category_validator.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_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_kibana_theme.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_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_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.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 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.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 +- 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_rison.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_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.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 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_grouping.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 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 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_serverless_project_switcher.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 +- ...ared_ux_avatar_user_profile_components.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- ...hared_ux_button_exit_full_screen_mocks.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_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_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.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_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_tooling_log.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_field_list.mdx | 2 +- api_docs/kbn_url_state.mdx | 2 +- .../kbn_user_profile_components.devdocs.json | 453 +- api_docs/kbn_user_profile_components.mdx | 4 +- 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_yarn_lock_validator.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.devdocs.json | 220 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.devdocs.json | 4 + api_docs/licensing.mdx | 2 +- api_docs/lists.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/ml.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/notifications.mdx | 2 +- api_docs/observability.devdocs.json | 23 +- api_docs/observability.mdx | 4 +- .../observability_a_i_assistant.devdocs.json | 16798 +++++++++++++++- api_docs/observability_a_i_assistant.mdx | 4 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.devdocs.json | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/plugin_directory.mdx | 42 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.devdocs.json | 356 +- api_docs/saved_objects_finder.mdx | 4 +- .../saved_objects_management.devdocs.json | 147 + api_docs/saved_objects_management.mdx | 4 +- 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/security.devdocs.json | 162 +- api_docs/security.mdx | 4 +- api_docs/security_solution.devdocs.json | 44 +- api_docs/security_solution.mdx | 4 +- 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/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/text_based_languages.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 | 110 +- api_docs/triggers_actions_ui.mdx | 4 +- api_docs/ui_actions.devdocs.json | 21 + api_docs/ui_actions.mdx | 4 +- api_docs/ui_actions_enhanced.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.mdx | 2 +- 589 files changed, 19380 insertions(+), 1633 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 4830d43d5a5e10..86783d0ca23414 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index cbdf72e9b3f174..3bad125ce9a95e 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.devdocs.json b/api_docs/aiops.devdocs.json index b4ce7cfd2e2089..a5d2c0392ddfb6 100644 --- a/api_docs/aiops.devdocs.json +++ b/api_docs/aiops.devdocs.json @@ -591,6 +591,69 @@ "path": "x-pack/plugins/aiops/public/hooks/use_aiops_app_context.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "aiops", + "id": "def-public.AiopsAppDependencies.presentationUtil", + "type": "Object", + "tags": [], + "label": "presentationUtil", + "description": [], + "signature": [ + { + "pluginId": "presentationUtil", + "scope": "public", + "docId": "kibPresentationUtilPluginApi", + "section": "def-public.PresentationUtilPluginStart", + "text": "PresentationUtilPluginStart" + }, + " | undefined" + ], + "path": "x-pack/plugins/aiops/public/hooks/use_aiops_app_context.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "aiops", + "id": "def-public.AiopsAppDependencies.embeddable", + "type": "Object", + "tags": [], + "label": "embeddable", + "description": [], + "signature": [ + { + "pluginId": "embeddable", + "scope": "public", + "docId": "kibEmbeddablePluginApi", + "section": "def-public.EmbeddableStart", + "text": "EmbeddableStart" + }, + " | undefined" + ], + "path": "x-pack/plugins/aiops/public/hooks/use_aiops_app_context.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "aiops", + "id": "def-public.AiopsAppDependencies.cases", + "type": "Object", + "tags": [], + "label": "cases", + "description": [], + "signature": [ + { + "pluginId": "cases", + "scope": "public", + "docId": "kibCasesPluginApi", + "section": "def-public.CasesUiStart", + "text": "CasesUiStart" + }, + " | undefined" + ], + "path": "x-pack/plugins/aiops/public/hooks/use_aiops_app_context.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -895,29 +958,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "aiops", - "id": "def-public.LogRateAnalysisContentWrapperProps.analysisType", - "type": "CompoundType", - "tags": [], - "label": "analysisType", - "description": [ - "The type of analysis, whether it's a spike or dip" - ], - "signature": [ - { - "pluginId": "aiops", - "scope": "common", - "docId": "kibAiopsPluginApi", - "section": "def-common.LogRateAnalysisType", - "text": "LogRateAnalysisType" - }, - " | undefined" - ], - "path": "x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "aiops", "id": "def-public.LogRateAnalysisContentWrapperProps.stickyHistogram", @@ -1127,6 +1167,22 @@ "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "aiops", + "id": "def-public.LogRateAnalysisResultsData.analysisType", + "type": "CompoundType", + "tags": [], + "label": "analysisType", + "description": [ + "The type of analysis, whether it's a spike or dip" + ], + "signature": [ + "\"spike\" | \"dip\"" + ], + "path": "x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "aiops", "id": "def-public.LogRateAnalysisResultsData.significantTerms", @@ -1178,44 +1234,8 @@ } ], "enums": [], - "misc": [ - { - "parentPluginId": "aiops", - "id": "def-public.LogRateAnalysisType", - "type": "Type", - "tags": [], - "label": "LogRateAnalysisType", - "description": [ - "\nUnion type of log rate analysis types." - ], - "signature": [ - "\"spike\" | \"dip\"" - ], - "path": "x-pack/plugins/aiops/common/constants.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - } - ], - "objects": [ - { - "parentPluginId": "aiops", - "id": "def-public.LOG_RATE_ANALYSIS_TYPE", - "type": "Object", - "tags": [], - "label": "LOG_RATE_ANALYSIS_TYPE", - "description": [ - "\nThe type of log rate analysis (spike or dip) will affect how parameters are\npassed to the analysis API endpoint." - ], - "signature": [ - "{ readonly SPIKE: \"spike\"; readonly DIP: \"dip\"; }" - ], - "path": "x-pack/plugins/aiops/common/constants.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - } - ] + "misc": [], + "objects": [] }, "server": { "classes": [], @@ -1280,23 +1300,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "aiops", - "id": "def-common.LogRateAnalysisType", - "type": "Type", - "tags": [], - "label": "LogRateAnalysisType", - "description": [ - "\nUnion type of log rate analysis types." - ], - "signature": [ - "\"spike\" | \"dip\"" - ], - "path": "x-pack/plugins/aiops/common/constants.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "aiops", "id": "def-common.PLUGIN_ID", diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 370b7d66dafcd1..9c5930a694dc44 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; @@ -21,22 +21,16 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 60 | 1 | 0 | 0 | +| 60 | 1 | 3 | 0 | ## Client -### Objects - - ### Functions ### Interfaces -### Consts, variables and types - - ## Server ### Setup diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index d0680f21fb2881..3998967eaef3ed 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -3303,7 +3303,7 @@ "section": "def-common.FieldSpec", "text": "FieldSpec" }, - "[]>; getFieldsForIndexPattern: (indexPattern: ", + "[]>; getExistingIndices: (indices: string[]) => Promise; getFieldsForIndexPattern: (indexPattern: ", { "pluginId": "dataViews", "scope": "common", diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index b6e940f0c1c8f3..a6dba1264568f4 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-08-08 +date: 2023-08-10 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 f54b33efb04e32..1ec2a49338bdcd 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -81,7 +81,7 @@ "label": "featureFlags", "description": [], "signature": [ - "{ agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; fastRefreshAvailable: boolean; }" + "{ agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; }" ], "path": "x-pack/plugins/apm/public/index.ts", "deprecated": false, @@ -265,7 +265,7 @@ "Observable", "; enabled: boolean; autoCreateApmDataView: boolean; serviceMapEnabled: boolean; serviceMapFingerprintBucketSize: number; serviceMapFingerprintGlobalBucketSize: number; serviceMapTraceIdBucketSize: number; serviceMapTraceIdGlobalBucketSize: number; serviceMapMaxTracesPerRequest: number; serviceMapTerminateAfter: number; serviceMapMaxTraces: number; ui: Readonly<{} & { enabled: boolean; maxTraceItems: number; }>; searchAggregatedTransactions: ", "SearchAggregatedTransactionSetting", - "; telemetryCollectionEnabled: boolean; metricsInterval: number; agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; forceSyntheticSource: boolean; latestAgentVersionsUrl: string; serverlessOnboarding: boolean; serverless: Readonly<{} & { enabled: true; }>; managedServiceUrl: string; featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; fastRefreshAvailable: boolean; }>; }>>; getApmIndices: () => Promise>; createApmEventClient: ({ request, context, debug, }: { debug?: boolean | undefined; request: ", + "; telemetryCollectionEnabled: boolean; metricsInterval: number; agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; forceSyntheticSource: boolean; latestAgentVersionsUrl: string; serverlessOnboarding: boolean; serverless: Readonly<{} & { enabled: true; }>; managedServiceUrl: string; featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; }>; }>>; getApmIndices: () => Promise>; createApmEventClient: ({ request, context, debug, }: { debug?: boolean | undefined; request: ", { "pluginId": "@kbn/core-http-server", "scope": "common", @@ -511,7 +511,7 @@ "signature": [ "{ readonly indices: Readonly<{} & { error: string; metric: string; span: string; transaction: string; onboarding: string; }>; readonly enabled: boolean; readonly autoCreateApmDataView: boolean; readonly serviceMapEnabled: boolean; readonly serviceMapFingerprintBucketSize: number; readonly serviceMapFingerprintGlobalBucketSize: number; readonly serviceMapTraceIdBucketSize: number; readonly serviceMapTraceIdGlobalBucketSize: number; readonly serviceMapMaxTracesPerRequest: number; readonly serviceMapTerminateAfter: number; readonly serviceMapMaxTraces: number; readonly ui: Readonly<{} & { enabled: boolean; maxTraceItems: number; }>; readonly searchAggregatedTransactions: ", "SearchAggregatedTransactionSetting", - "; readonly telemetryCollectionEnabled: boolean; readonly metricsInterval: number; readonly agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; readonly forceSyntheticSource: boolean; readonly latestAgentVersionsUrl: string; readonly serverlessOnboarding: boolean; readonly serverless: Readonly<{} & { enabled: true; }>; readonly managedServiceUrl: string; readonly featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; fastRefreshAvailable: boolean; }>; }" + "; readonly telemetryCollectionEnabled: boolean; readonly metricsInterval: number; readonly agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; readonly forceSyntheticSource: boolean; readonly latestAgentVersionsUrl: string; readonly serverlessOnboarding: boolean; readonly serverless: Readonly<{} & { enabled: true; }>; readonly managedServiceUrl: string; readonly featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; }>; }" ], "path": "x-pack/plugins/apm/server/routes/typings.ts", "deprecated": false, @@ -525,7 +525,7 @@ "label": "featureFlags", "description": [], "signature": [ - "{ agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; fastRefreshAvailable: boolean; }" + "{ agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; }" ], "path": "x-pack/plugins/apm/server/routes/typings.ts", "deprecated": false, @@ -963,7 +963,7 @@ "signature": [ "{ readonly indices: Readonly<{} & { error: string; metric: string; span: string; transaction: string; onboarding: string; }>; readonly enabled: boolean; readonly autoCreateApmDataView: boolean; readonly serviceMapEnabled: boolean; readonly serviceMapFingerprintBucketSize: number; readonly serviceMapFingerprintGlobalBucketSize: number; readonly serviceMapTraceIdBucketSize: number; readonly serviceMapTraceIdGlobalBucketSize: number; readonly serviceMapMaxTracesPerRequest: number; readonly serviceMapTerminateAfter: number; readonly serviceMapMaxTraces: number; readonly ui: Readonly<{} & { enabled: boolean; maxTraceItems: number; }>; readonly searchAggregatedTransactions: ", "SearchAggregatedTransactionSetting", - "; readonly telemetryCollectionEnabled: boolean; readonly metricsInterval: number; readonly agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; readonly forceSyntheticSource: boolean; readonly latestAgentVersionsUrl: string; readonly serverlessOnboarding: boolean; readonly serverless: Readonly<{} & { enabled: true; }>; readonly managedServiceUrl: string; readonly featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; fastRefreshAvailable: boolean; }>; }" + "; readonly telemetryCollectionEnabled: boolean; readonly metricsInterval: number; readonly agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; readonly forceSyntheticSource: boolean; readonly latestAgentVersionsUrl: string; readonly serverlessOnboarding: boolean; readonly serverless: Readonly<{} & { enabled: true; }>; readonly managedServiceUrl: string; readonly featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; }>; }" ], "path": "x-pack/plugins/apm/server/index.ts", "deprecated": false, @@ -1795,11 +1795,11 @@ "TypeC", "<{ useSpanName: ", "Type", - "; enableServiceTransactionMetrics: ", + "; enableServiceTransactionMetrics: ", "Type", - "; enableContinuousRollups: ", + "; enableContinuousRollups: ", "Type", - "; }>, ", + "; }>, ", "TypeC", "<{ kuery: ", "StringC", @@ -3169,7 +3169,7 @@ "StringC", "; searchServiceDestinationMetrics: ", "Type", - "; }>]>; }> | undefined; handler: ({}: ", + "; }>]>; }> | undefined; handler: ({}: ", { "pluginId": "apm", "scope": "server", @@ -3203,7 +3203,7 @@ "StringC", "; searchServiceDestinationMetrics: ", "Type", - "; }>, ", + "; }>, ", "TypeC", "<{ start: ", "Type", @@ -3269,7 +3269,7 @@ "StringC", "; searchServiceDestinationMetrics: ", "Type", - "; }>, ", + "; }>, ", "TypeC", "<{ start: ", "Type", @@ -3337,7 +3337,7 @@ "StringC", "; searchServiceDestinationMetrics: ", "Type", - "; }>, ", + "; }>, ", "TypeC", "<{ start: ", "Type", @@ -4115,7 +4115,7 @@ "PartialC", "<{ overwrite: ", "Type", - "; }>; }>, ", + "; }>; }>, ", "TypeC", "<{ body: ", "IntersectionC", @@ -4903,7 +4903,7 @@ "Type", "; useDurationSummary: ", "Type", - "; }>, ", + "; }>, ", "PartialC", "<{ transactionName: ", "StringC", @@ -5089,7 +5089,7 @@ "Type", "; useDurationSummary: ", "Type", - "; }>]>, ", + "; }>]>, ", "TypeC", "<{ transactionNames: ", "Type", @@ -5181,7 +5181,7 @@ "TypeC", "<{ useDurationSummary: ", "Type", - "; transactionType: ", + "; transactionType: ", "StringC", "; latencyAggregationType: ", "UnionC", @@ -8116,7 +8116,7 @@ "Observable", "; enabled: boolean; autoCreateApmDataView: boolean; serviceMapEnabled: boolean; serviceMapFingerprintBucketSize: number; serviceMapFingerprintGlobalBucketSize: number; serviceMapTraceIdBucketSize: number; serviceMapTraceIdGlobalBucketSize: number; serviceMapMaxTracesPerRequest: number; serviceMapTerminateAfter: number; serviceMapMaxTraces: number; ui: Readonly<{} & { enabled: boolean; maxTraceItems: number; }>; searchAggregatedTransactions: ", "SearchAggregatedTransactionSetting", - "; telemetryCollectionEnabled: boolean; metricsInterval: number; agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; forceSyntheticSource: boolean; latestAgentVersionsUrl: string; serverlessOnboarding: boolean; serverless: Readonly<{} & { enabled: true; }>; managedServiceUrl: string; featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; fastRefreshAvailable: boolean; }>; }>>" + "; telemetryCollectionEnabled: boolean; metricsInterval: number; agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; forceSyntheticSource: boolean; latestAgentVersionsUrl: string; serverlessOnboarding: boolean; serverless: Readonly<{} & { enabled: true; }>; managedServiceUrl: string; featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; }>; }>>" ], "path": "x-pack/plugins/apm/server/types.ts", "deprecated": false, diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index f9d18e273f7c89..4b9ffe1f2e5ac6 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index f4d18f97056706..c8b9efdabad362 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 40c84072b6875b..17ab8f80be0773 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index a09991262233ce..e7757cb287952b 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 6015bb67456173..b4a40940e23de8 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.devdocs.json b/api_docs/cases.devdocs.json index c0de3e16ac6a6c..b749532e5f360f 100644 --- a/api_docs/cases.devdocs.json +++ b/api_docs/cases.devdocs.json @@ -1091,7 +1091,7 @@ "\nReturn the UI capabilities for each type of operation. These strings must match the values defined in the UI\nhere: x-pack/plugins/cases/public/client/helpers/capabilities.ts" ], "signature": [ - "() => { all: readonly [\"create_cases\", \"read_cases\", \"update_cases\", \"push_cases\"]; read: readonly [\"read_cases\"]; delete: readonly [\"delete_cases\"]; }" + "() => { all: readonly [\"create_cases\", \"read_cases\", \"update_cases\", \"push_cases\", \"cases_connectors\"]; read: readonly [\"read_cases\", \"cases_connectors\"]; delete: readonly [\"delete_cases\"]; }" ], "path": "x-pack/plugins/cases/common/utils/capabilities.ts", "deprecated": false, @@ -1108,7 +1108,7 @@ "label": "getApiTags", "description": [], "signature": [ - "(owner: \"cases\" | \"observability\" | \"securitySolution\") => { all: readonly [\"casesSuggestUserProfiles\", \"bulkGetUserProfiles\", string, string]; read: readonly [\"casesSuggestUserProfiles\", \"bulkGetUserProfiles\", string]; delete: readonly [string]; }" + "(owner: \"cases\" | \"observability\" | \"securitySolution\") => { all: readonly [\"casesSuggestUserProfiles\", \"bulkGetUserProfiles\", \"casesGetConnectorsConfigure\", string, string]; read: readonly [\"casesSuggestUserProfiles\", \"bulkGetUserProfiles\", \"casesGetConnectorsConfigure\", string]; delete: readonly [string]; }" ], "path": "x-pack/plugins/cases/common/utils/api_tags.ts", "deprecated": false, @@ -1312,6 +1312,17 @@ "path": "x-pack/plugins/cases/common/ui/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "cases", + "id": "def-common.CasesPermissions.connectors", + "type": "boolean", + "tags": [], + "label": "connectors", + "description": [], + "path": "x-pack/plugins/cases/common/ui/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 5b9296c2f8cac1..a40e4198326a2b 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.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 | |-------------------|-----------|------------------------|-----------------| -| 93 | 0 | 74 | 27 | +| 94 | 0 | 75 | 27 | ## Client diff --git a/api_docs/charts.devdocs.json b/api_docs/charts.devdocs.json index abf1df83078594..b8c332abcc1536 100644 --- a/api_docs/charts.devdocs.json +++ b/api_docs/charts.devdocs.json @@ -1350,7 +1350,15 @@ "section": "def-common.Datatable", "text": "Datatable" }, - ", \"rows\" | \"columns\">; column: number; value: any[]; }; timeFieldName?: string | undefined; negate?: boolean | undefined; }" + ", \"rows\" | \"columns\">; cells: { column: number; row: number; }[]; relation?: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.BooleanRelation", + "text": "BooleanRelation" + }, + " | undefined; }[]; timeFieldName?: string | undefined; negate?: boolean | undefined; }" ], "path": "src/plugins/charts/public/index.ts", "deprecated": false, diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 0386ec84baa3e6..9ddb4d651b7b3c 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-08-08 +date: 2023-08-10 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 917ce1dd5e70d5..257ae7fc83e29c 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index 2439ac29b2acd8..2f8dfaa9ba4093 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_chat_provider.mdx b/api_docs/cloud_chat_provider.mdx index 09e274f8d6ac2e..bb35de3db20ac1 100644 --- a/api_docs/cloud_chat_provider.mdx +++ b/api_docs/cloud_chat_provider.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChatProvider title: "cloudChatProvider" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChatProvider plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChatProvider'] --- import cloudChatProviderObj from './cloud_chat_provider.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 904c4a2398b07f..d49d837df6d07a 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-08-08 +date: 2023-08-10 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 50651cb15c6eb2..1b083e68a4f3d6 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index 19630e2129c646..948087b9508f84 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index e5d9d6c84093ef..5746fc75f656fb 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-08-08 +date: 2023-08-10 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 c26eb4445b0d23..584fc4bafb0c99 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-08-08 +date: 2023-08-10 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 375156d7a08a5b..ad7ba3b1ac02f8 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index b86db1ce034750..aaa9ba738aa2d2 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-08-08 +date: 2023-08-10 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 48852fd3e96b21..853c2d8170e262 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 2bb3f88bcfd8e2..b68f8710918389 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-08-08 +date: 2023-08-10 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 f5efa0a0d205fb..8139bcd458a667 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index 0ff7fe1f1bdc79..4f47b2094fb4d7 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -12999,7 +12999,7 @@ "section": "def-server.DataPluginStart", "text": "DataPluginStart" }, - ">, { bfetch, expressions, usageCollection, fieldFormats, taskManager, security, }: ", + ">, { bfetch, expressions, usageCollection, fieldFormats, security }: ", "DataPluginSetupDependencies", ") => { search: ", "ISearchSetup", @@ -13056,7 +13056,7 @@ "id": "def-server.DataServerPlugin.setup.$2", "type": "Object", "tags": [], - "label": "{\n bfetch,\n expressions,\n usageCollection,\n fieldFormats,\n taskManager,\n security,\n }", + "label": "{ bfetch, expressions, usageCollection, fieldFormats, security }", "description": [], "signature": [ "DataPluginSetupDependencies" @@ -13085,7 +13085,7 @@ "section": "def-common.CoreStart", "text": "CoreStart" }, - ", { fieldFormats, dataViews, taskManager }: ", + ", { fieldFormats, dataViews }: ", "DataPluginStartDependencies", ") => { datatableUtilities: ", "DatatableUtilitiesService", @@ -13155,7 +13155,7 @@ "id": "def-server.DataServerPlugin.start.$2", "type": "Object", "tags": [], - "label": "{ fieldFormats, dataViews, taskManager }", + "label": "{ fieldFormats, dataViews }", "description": [], "signature": [ "DataPluginStartDependencies" @@ -13568,6 +13568,10 @@ "plugin": "dataViews", "path": "src/plugins/data_views/server/rest_api_routes/public/update_data_view.ts" }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/models/data_frame_analytics/index_patterns.ts" @@ -13604,10 +13608,6 @@ "plugin": "apm", "path": "x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts" }, - { - "plugin": "triggersActionsUi", - "path": "x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts" - }, { "plugin": "exploratoryView", "path": "x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts" @@ -16322,6 +16322,44 @@ "FieldSpec[]" ] }, + { + "parentPluginId": "data", + "id": "def-server.DataViewsService.getExistingIndices", + "type": "Function", + "tags": [], + "label": "getExistingIndices", + "description": [ + "\nGet existing index pattern list by providing string array index pattern list." + ], + "signature": [ + "(indices: string[]) => Promise" + ], + "path": "src/plugins/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "data", + "id": "def-server.DataViewsService.getExistingIndices.$1", + "type": "Array", + "tags": [], + "label": "indices", + "description": [ + "index pattern list" + ], + "signature": [ + "string[]" + ], + "path": "src/plugins/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "index pattern list" + ] + }, { "parentPluginId": "data", "id": "def-server.DataViewsService.getFieldsForIndexPattern", @@ -17299,6 +17337,21 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "data", + "id": "def-server.IndexPatternsFetcher.Unnamed.$3", + "type": "boolean", + "tags": [], + "label": "rollupsEnabled", + "description": [], + "signature": [ + "boolean" + ], + "path": "src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -21247,6 +21300,10 @@ "plugin": "dataViews", "path": "src/plugins/data_views/server/rest_api_routes/public/update_data_view.ts" }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/models/data_frame_analytics/index_patterns.ts" @@ -21283,10 +21340,6 @@ "plugin": "apm", "path": "x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts" }, - { - "plugin": "triggersActionsUi", - "path": "x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts" - }, { "plugin": "exploratoryView", "path": "x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts" @@ -24872,6 +24925,44 @@ "FieldSpec[]" ] }, + { + "parentPluginId": "data", + "id": "def-common.DataViewsService.getExistingIndices", + "type": "Function", + "tags": [], + "label": "getExistingIndices", + "description": [ + "\nGet existing index pattern list by providing string array index pattern list." + ], + "signature": [ + "(indices: string[]) => Promise" + ], + "path": "src/plugins/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "data", + "id": "def-common.DataViewsService.getExistingIndices.$1", + "type": "Array", + "tags": [], + "label": "indices", + "description": [ + "index pattern list" + ], + "signature": [ + "string[]" + ], + "path": "src/plugins/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "index pattern list" + ] + }, { "parentPluginId": "data", "id": "def-common.DataViewsService.getFieldsForIndexPattern", @@ -28292,7 +28383,7 @@ "section": "def-common.FieldSpec", "text": "FieldSpec" }, - "[]>; getFieldsForIndexPattern: (indexPattern: ", + "[]>; getExistingIndices: (indices: string[]) => Promise; getFieldsForIndexPattern: (indexPattern: ", { "pluginId": "dataViews", "scope": "common", diff --git a/api_docs/data.mdx b/api_docs/data.mdx index ed440a37583cb5..d48b3a6a3e0825 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3295 | 119 | 2573 | 27 | +| 3301 | 119 | 2575 | 27 | ## Client diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 6f4cdc678a7307..d3a2a0dc456e36 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3295 | 119 | 2573 | 27 | +| 3301 | 119 | 2575 | 27 | ## Client diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index b4c44781b50fa5..2a246bcc16312d 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -3889,6 +3889,20 @@ "path": "src/plugins/data/server/search/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-server.SearchStrategyDependencies.rollupsEnabled", + "type": "CompoundType", + "tags": [], + "label": "rollupsEnabled", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/data/server/search/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 2ba7fae435d5fb..a54d159e299bb6 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3295 | 119 | 2573 | 27 | +| 3301 | 119 | 2575 | 27 | ## Client diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 0afb9c6cc38d65..765d65b328eb15 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-08-08 +date: 2023-08-10 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 88b56f7be7bf5f..81f5c42e6652ec 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-08-08 +date: 2023-08-10 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 4a6c796e4e1637..6708b3bbd5e589 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index c82f54e715564f..cb3003d20cac39 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -379,6 +379,10 @@ "plugin": "lens", "path": "x-pack/plugins/lens/public/app_plugin/lens_top_nav.tsx" }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/models/data_frame_analytics/index_patterns.ts" @@ -415,10 +419,6 @@ "plugin": "apm", "path": "x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts" }, - { - "plugin": "triggersActionsUi", - "path": "x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts" - }, { "plugin": "exploratoryView", "path": "x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts" @@ -4410,6 +4410,44 @@ "FieldSpec[]" ] }, + { + "parentPluginId": "dataViews", + "id": "def-public.DataViewsService.getExistingIndices", + "type": "Function", + "tags": [], + "label": "getExistingIndices", + "description": [ + "\nGet existing index pattern list by providing string array index pattern list." + ], + "signature": [ + "(indices: string[]) => Promise" + ], + "path": "src/plugins/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViews", + "id": "def-public.DataViewsService.getExistingIndices.$1", + "type": "Array", + "tags": [], + "label": "indices", + "description": [ + "index pattern list" + ], + "signature": [ + "string[]" + ], + "path": "src/plugins/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "index pattern list" + ] + }, { "parentPluginId": "dataViews", "id": "def-public.DataViewsService.getFieldsForIndexPattern", @@ -8229,6 +8267,10 @@ "plugin": "lens", "path": "x-pack/plugins/lens/public/app_plugin/lens_top_nav.tsx" }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/models/data_frame_analytics/index_patterns.ts" @@ -8265,10 +8307,6 @@ "plugin": "apm", "path": "x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts" }, - { - "plugin": "triggersActionsUi", - "path": "x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts" - }, { "plugin": "exploratoryView", "path": "x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts" @@ -10576,7 +10614,7 @@ "section": "def-server.DataViewsServerPluginSetupDependencies", "text": "DataViewsServerPluginSetupDependencies" }, - ") => {}" + ") => { enableRollups: () => boolean; }" ], "path": "src/plugins/data_views/server/plugin.ts", "deprecated": false, @@ -11301,6 +11339,44 @@ "FieldSpec[]" ] }, + { + "parentPluginId": "dataViews", + "id": "def-server.DataViewsService.getExistingIndices", + "type": "Function", + "tags": [], + "label": "getExistingIndices", + "description": [ + "\nGet existing index pattern list by providing string array index pattern list." + ], + "signature": [ + "(indices: string[]) => Promise" + ], + "path": "src/plugins/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViews", + "id": "def-server.DataViewsService.getExistingIndices.$1", + "type": "Array", + "tags": [], + "label": "indices", + "description": [ + "index pattern list" + ], + "signature": [ + "string[]" + ], + "path": "src/plugins/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "index pattern list" + ] + }, { "parentPluginId": "dataViews", "id": "def-server.DataViewsService.getFieldsForIndexPattern", @@ -12278,6 +12354,21 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "dataViews", + "id": "def-server.IndexPatternsFetcher.Unnamed.$3", + "type": "boolean", + "tags": [], + "label": "rollupsEnabled", + "description": [], + "signature": [ + "boolean" + ], + "path": "src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -13451,6 +13542,39 @@ } ], "objects": [], + "setup": { + "parentPluginId": "dataViews", + "id": "def-server.DataViewsServerPluginSetup", + "type": "Interface", + "tags": [], + "label": "DataViewsServerPluginSetup", + "description": [ + "\nDataViews server plugin setup api" + ], + "path": "src/plugins/data_views/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViews", + "id": "def-server.DataViewsServerPluginSetup.enableRollups", + "type": "Function", + "tags": [], + "label": "enableRollups", + "description": [], + "signature": [ + "() => void" + ], + "path": "src/plugins/data_views/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "lifecycle": "setup", + "initialIsOpen": true + }, "start": { "parentPluginId": "dataViews", "id": "def-server.DataViewsServerPluginStart", @@ -14803,22 +14927,6 @@ ], "lifecycle": "start", "initialIsOpen": true - }, - "setup": { - "parentPluginId": "dataViews", - "id": "def-server.DataViewsServerPluginSetup", - "type": "Interface", - "tags": [], - "label": "DataViewsServerPluginSetup", - "description": [ - "\nDataViews server plugin setup api" - ], - "path": "src/plugins/data_views/server/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "lifecycle": "setup", - "initialIsOpen": true } }, "common": { @@ -15200,6 +15308,10 @@ "plugin": "lens", "path": "x-pack/plugins/lens/public/app_plugin/lens_top_nav.tsx" }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/models/data_frame_analytics/index_patterns.ts" @@ -15236,10 +15348,6 @@ "plugin": "apm", "path": "x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts" }, - { - "plugin": "triggersActionsUi", - "path": "x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts" - }, { "plugin": "exploratoryView", "path": "x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts" @@ -18936,6 +19044,44 @@ "FieldSpec[]" ] }, + { + "parentPluginId": "dataViews", + "id": "def-common.DataViewsService.getExistingIndices", + "type": "Function", + "tags": [], + "label": "getExistingIndices", + "description": [ + "\nGet existing index pattern list by providing string array index pattern list." + ], + "signature": [ + "(indices: string[]) => Promise" + ], + "path": "src/plugins/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViews", + "id": "def-common.DataViewsService.getExistingIndices.$1", + "type": "Array", + "tags": [], + "label": "indices", + "description": [ + "index pattern list" + ], + "signature": [ + "string[]" + ], + "path": "src/plugins/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "index pattern list" + ] + }, { "parentPluginId": "dataViews", "id": "def-common.DataViewsService.getFieldsForIndexPattern", @@ -22036,6 +22182,44 @@ ], "returnComment": [] }, + { + "parentPluginId": "dataViews", + "id": "def-common.DataViewsServicePublicMethods.getExistingIndices", + "type": "Function", + "tags": [], + "label": "getExistingIndices", + "description": [ + "\nGet existing index pattern list by providing string array index pattern list." + ], + "signature": [ + "(indices: string[]) => Promise" + ], + "path": "src/plugins/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViews", + "id": "def-common.DataViewsServicePublicMethods.getExistingIndices.$1", + "type": "Array", + "tags": [], + "label": "indices", + "description": [ + "- index pattern list" + ], + "signature": [ + "string[]" + ], + "path": "src/plugins/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "index pattern list of index patterns that match indices" + ] + }, { "parentPluginId": "dataViews", "id": "def-common.DataViewsServicePublicMethods.getIds", @@ -24907,7 +25091,7 @@ "section": "def-common.FieldSpec", "text": "FieldSpec" }, - "[]>; getFieldsForIndexPattern: (indexPattern: ", + "[]>; getExistingIndices: (indices: string[]) => Promise; getFieldsForIndexPattern: (indexPattern: ", { "pluginId": "dataViews", "scope": "common", diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 939dbf86bcc326..4d03a36b928785 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.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 | |-------------------|-----------|------------------------|-----------------| -| 1012 | 0 | 243 | 2 | +| 1024 | 0 | 246 | 2 | ## Client diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 121bea50c1589d..1336377ffa864c 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index acc2067839829e..64b0db70a4bdcf 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -18,12 +18,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | ml, stackAlerts | - | | | ruleRegistry, observability, ml, infra, monitoring, securitySolution, stackAlerts, synthetics, transform, uptime | - | -| | @kbn/es-query, @kbn/visualization-ui-components, observability, securitySolution, timelines, lists, threatIntelligence, savedSearch, dataViews, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, @kbn/event-annotation-components, lens, ml, logsShared, visTypeTimeseries, apm, triggersActionsUi, exploratoryView, fleet, dataVisualizer, stackAlerts, infra, canvas, enterpriseSearch, graph, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, data | - | -| | @kbn/es-query, @kbn/visualization-ui-components, observability, securitySolution, timelines, lists, threatIntelligence, savedSearch, dataViews, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, @kbn/event-annotation-components, lens, ml, logsShared, visTypeTimeseries, apm, triggersActionsUi, exploratoryView, fleet, dataVisualizer, stackAlerts, infra, canvas, enterpriseSearch, graph, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, data | - | -| | @kbn/es-query, @kbn/visualization-ui-components, observability, securitySolution, timelines, lists, threatIntelligence, savedSearch, data, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, @kbn/event-annotation-components, lens, ml, logsShared, visTypeTimeseries, apm, triggersActionsUi, exploratoryView, fleet, dataVisualizer, stackAlerts, infra, canvas, enterpriseSearch, graph, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega | - | -| | inspector, data, advancedSettings, savedObjects, embeddable, dataViewEditor, unifiedSearch, visualizations, controls, dashboard, licensing, savedObjectsTagging, eventAnnotation, dataViewFieldEditor, lens, @kbn/ml-date-picker, aiops, security, triggersActionsUi, cases, observabilityShared, discover, exploratoryView, fleet, maps, telemetry, dataVisualizer, ml, observability, banners, reporting, timelines, runtimeFields, indexManagement, dashboardEnhanced, imageEmbeddable, graph, monitoring, securitySolution, synthetics, transform, uptime, console, dataViewManagement, filesManagement, uiActions, visTypeVislib | - | +| | @kbn/es-query, @kbn/visualization-ui-components, observability, securitySolution, timelines, lists, threatIntelligence, savedSearch, dataViews, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, @kbn/event-annotation-components, lens, triggersActionsUi, ml, logsShared, visTypeTimeseries, apm, exploratoryView, fleet, dataVisualizer, stackAlerts, infra, canvas, enterpriseSearch, graph, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, data | - | +| | @kbn/es-query, @kbn/visualization-ui-components, observability, securitySolution, timelines, lists, threatIntelligence, savedSearch, dataViews, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, @kbn/event-annotation-components, lens, triggersActionsUi, ml, logsShared, visTypeTimeseries, apm, exploratoryView, fleet, dataVisualizer, stackAlerts, infra, canvas, enterpriseSearch, graph, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, data | - | +| | @kbn/es-query, @kbn/visualization-ui-components, observability, securitySolution, timelines, lists, threatIntelligence, savedSearch, data, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, @kbn/event-annotation-components, lens, triggersActionsUi, ml, logsShared, visTypeTimeseries, apm, exploratoryView, fleet, dataVisualizer, stackAlerts, infra, canvas, enterpriseSearch, graph, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega | - | +| | inspector, data, advancedSettings, savedObjects, embeddable, dataViewEditor, unifiedSearch, visualizations, controls, dashboard, licensing, savedObjectsTagging, eventAnnotation, dataViewFieldEditor, lens, security, triggersActionsUi, cases, @kbn/ml-date-picker, aiops, observabilityShared, discover, exploratoryView, fleet, maps, telemetry, dataVisualizer, ml, observability, banners, reporting, timelines, cloudSecurityPosture, runtimeFields, indexManagement, dashboardEnhanced, imageEmbeddable, graph, monitoring, securitySolution, synthetics, transform, uptime, cloudLinks, console, dataViewManagement, filesManagement, uiActions, visTypeVislib | - | | | home, data, esUiShared, savedObjectsManagement, exploratoryView, fleet, ml, observability, apm, indexLifecycleManagement, observabilityOnboarding, synthetics, upgradeAssistant, uptime, ux, kibanaOverview | - | -| | share, uiActions, guidedOnboarding, home, management, data, advancedSettings, spaces, savedObjects, visualizations, controls, dashboard, savedObjectsTagging, expressionXY, lens, expressionMetricVis, expressionGauge, alerting, security, triggersActionsUi, serverless, cases, discover, exploratoryView, fleet, maps, licenseManagement, dataVisualizer, ml, observability, infra, profiling, apm, canvas, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, indexManagement, crossClusterReplication, enterpriseSearch, globalSearchBar, graph, grokdebugger, indexLifecycleManagement, ingestPipelines, logstash, monitoring, observabilityOnboarding, osquery, devTools, painlessLab, remoteClusters, rollup, searchprofiler, newsfeed, securitySolution, serverlessSearch, snapshotRestore, synthetics, transform, upgradeAssistant, uptime, ux, watcher, cloudDataMigration, console, dataViewManagement, filesManagement, kibanaOverview, visDefaultEditor, expressionHeatmap, expressionLegacyMetricVis, expressionPartitionVis, expressionTagcloud, visTypeTable, visTypeTimelion, visTypeTimeseries, visTypeVega, visTypeVislib | - | +| | share, uiActions, guidedOnboarding, home, management, data, advancedSettings, spaces, savedObjects, visualizations, serverless, controls, dashboard, savedObjectsTagging, expressionXY, lens, expressionMetricVis, expressionGauge, security, alerting, triggersActionsUi, cases, aiops, discover, exploratoryView, observabilityAIAssistant, fleet, maps, licenseManagement, dataVisualizer, ml, observability, infra, profiling, apm, canvas, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, indexManagement, crossClusterReplication, enterpriseSearch, globalSearchBar, graph, grokdebugger, indexLifecycleManagement, ingestPipelines, logstash, monitoring, observabilityOnboarding, osquery, devTools, painlessLab, remoteClusters, rollup, searchprofiler, newsfeed, securitySolution, serverlessSearch, snapshotRestore, synthetics, transform, upgradeAssistant, uptime, ux, watcher, cloudDataMigration, console, dataViewManagement, filesManagement, kibanaOverview, visDefaultEditor, expressionHeatmap, expressionLegacyMetricVis, expressionPartitionVis, expressionTagcloud, visTypeTable, visTypeTimelion, visTypeTimeseries, visTypeVega, visTypeVislib | - | | | encryptedSavedObjects, actions, data, ml, logstash, securitySolution, cloudChat | - | | | actions, ml, savedObjectsTagging, enterpriseSearch | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, presentationUtil, visualizations, aiops, ml, dataVisualizer, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | @@ -102,6 +102,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | visTypeTimeseries, graph, dataViewManagement, dataViews | - | | | visTypeTimeseries, graph, dataViewManagement, dataViews | - | | | visTypeTimeseries, graph, dataViewManagement | - | +| | visualizations, graph | - | | | @kbn/core, lens, savedObjects | - | | | dataViews, maps | - | | | dataViewManagement, dataViews | - | @@ -140,7 +141,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-lifecycle-browser-mocks, @kbn/core, @kbn/core-plugins-browser-internal | - | | | @kbn/core | - | | | @kbn/core-plugins-server-internal | - | -| | security, licenseManagement, ml, profiling, apm, crossClusterReplication, logstash, painlessLab, searchprofiler, watcher | 8.8.0 | +| | security, aiops, licenseManagement, ml, profiling, apm, crossClusterReplication, logstash, painlessLab, searchprofiler, watcher | 8.8.0 | | | spaces, security, actions, alerting, ml, remoteClusters, graph, indexLifecycleManagement, mapsEms, osquery, painlessLab, rollup, searchprofiler, securitySolution, snapshotRestore, transform, upgradeAssistant | 8.8.0 | | | apm, fleet, security, securitySolution | 8.8.0 | | | apm, fleet, security, securitySolution | 8.8.0 | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index cdf90dc6b26028..a061b8f8d595c7 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -399,7 +399,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [log_categorization_app_state.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_app_state.tsx#:~:text=toMountPoint), [log_categorization_app_state.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_app_state.tsx#:~:text=toMountPoint), [show_flyout.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_categorization/show_flyout.tsx#:~:text=toMountPoint), [show_flyout.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_categorization/show_flyout.tsx#:~:text=toMountPoint), [show_flyout.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_categorization/show_flyout.tsx#:~:text=toMountPoint), [log_rate_analysis_app_state.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx#:~:text=toMountPoint), [log_rate_analysis_app_state.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx#:~:text=toMountPoint), [log_rate_analysis_content_wrapper.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx#:~:text=toMountPoint), [log_rate_analysis_content_wrapper.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx#:~:text=toMountPoint), [change_point_detection_root.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/change_point_detection/change_point_detection_root.tsx#:~:text=toMountPoint)+ 1 more | - | +| | [embeddable_change_point_chart.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx#:~:text=toMountPoint), [embeddable_change_point_chart.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx#:~:text=toMountPoint), [handle_explicit_input.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/embeddable/handle_explicit_input.tsx#:~:text=toMountPoint), [handle_explicit_input.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/embeddable/handle_explicit_input.tsx#:~:text=toMountPoint), [log_categorization_app_state.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_app_state.tsx#:~:text=toMountPoint), [log_categorization_app_state.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_app_state.tsx#:~:text=toMountPoint), [show_flyout.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_categorization/show_flyout.tsx#:~:text=toMountPoint), [show_flyout.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_categorization/show_flyout.tsx#:~:text=toMountPoint), [show_flyout.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_categorization/show_flyout.tsx#:~:text=toMountPoint), [log_rate_analysis_app_state.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx#:~:text=toMountPoint)+ 5 more | - | +| | [embeddable_change_point_chart.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx#:~:text=KibanaThemeProvider), [embeddable_change_point_chart.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx#:~:text=KibanaThemeProvider), [embeddable_change_point_chart.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx#:~:text=KibanaThemeProvider) | - | +| | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/plugin.tsx#:~:text=license%24) | 8.8.0 | | | [search_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/application/utils/search_utils.ts#:~:text=SimpleSavedObject), [search_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/application/utils/search_utils.ts#:~:text=SimpleSavedObject) | - | @@ -502,11 +504,20 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## cloudLinks + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [theme_darkmode_toggle.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cloud_integrations/cloud_links/public/maybe_add_cloud_links/theme_darkmode_toggle.tsx#:~:text=toMountPoint), [theme_darkmode_toggle.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cloud_integrations/cloud_links/public/maybe_add_cloud_links/theme_darkmode_toggle.tsx#:~:text=toMountPoint) | - | + + + ## cloudSecurityPosture | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [overview_tab.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/overview_tab.tsx#:~:text=indexPatternId) | - | +| | [take_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cloud_security_posture/public/components/take_action.tsx#:~:text=toMountPoint), [take_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cloud_security_posture/public/components/take_action.tsx#:~:text=toMountPoint) | - | @@ -946,6 +957,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [confirm_modal_promise.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_objects_utils/confirm_modal_promise.tsx#:~:text=toMountPoint), [confirm_modal_promise.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_objects_utils/confirm_modal_promise.tsx#:~:text=toMountPoint), [workspace_top_nav_menu.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/components/workspace_layout/workspace_top_nav_menu.tsx#:~:text=toMountPoint), [workspace_top_nav_menu.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/components/workspace_layout/workspace_top_nav_menu.tsx#:~:text=toMountPoint), [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/application.tsx#:~:text=toMountPoint), [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/application.tsx#:~:text=toMountPoint) | - | | | [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/application.tsx#:~:text=KibanaThemeProvider) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/server/plugin.ts#:~:text=license%24) | 8.8.0 | +| | [source_picker.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/components/source_picker.tsx#:~:text=includeFields) | - | | | [save_modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/components/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/components/save_modal.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | | | [app_state.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/types/app_state.ts#:~:text=SimpleSavedObject), [app_state.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/types/app_state.ts#:~:text=SimpleSavedObject), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_objects_utils/find_object_by_title.test.ts#:~:text=SimpleSavedObject), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_objects_utils/find_object_by_title.test.ts#:~:text=SimpleSavedObject) | - | | | [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_objects_utils/save_with_confirmation.ts#:~:text=SavedObjectsCreateOptions), [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_objects_utils/save_with_confirmation.ts#:~:text=SavedObjectsCreateOptions) | - | @@ -1203,7 +1215,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/data_frame_analytics/index_patterns.ts#:~:text=title), [rollup.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/job_service/new_job_caps/rollup.ts#:~:text=title), [alerting_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/lib/alerts/alerting_service.ts#:~:text=title), [data_recognizer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/data_recognizer/data_recognizer.ts#:~:text=title), [configuration_step_details.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_details.tsx#:~:text=title), [data_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/datavisualizer/index_based/data_loader/data_loader.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title)+ 40 more | - | | | [index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/data_frame_analytics/index_patterns.ts#:~:text=title), [rollup.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/job_service/new_job_caps/rollup.ts#:~:text=title), [alerting_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/lib/alerts/alerting_service.ts#:~:text=title), [data_recognizer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/data_recognizer/data_recognizer.ts#:~:text=title), [configuration_step_details.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_details.tsx#:~:text=title), [data_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/datavisualizer/index_based/data_loader/data_loader.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title)+ 40 more | - | | | [index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/data_frame_analytics/index_patterns.ts#:~:text=title), [rollup.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/job_service/new_job_caps/rollup.ts#:~:text=title), [alerting_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/lib/alerts/alerting_service.ts#:~:text=title), [data_recognizer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/data_recognizer/data_recognizer.ts#:~:text=title), [configuration_step_details.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_details.tsx#:~:text=title), [data_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/datavisualizer/index_based/data_loader/data_loader.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title)+ 15 more | - | -| | [clone_action_name.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx#:~:text=toMountPoint), [clone_action_name.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx#:~:text=toMountPoint), [force_stop_dialog.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/model_management/force_stop_dialog.tsx#:~:text=toMountPoint), [force_stop_dialog.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/model_management/force_stop_dialog.tsx#:~:text=toMountPoint), [deployment_setup.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx#:~:text=toMountPoint), [deployment_setup.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx#:~:text=toMountPoint), [header_menu_portal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/components/header_menu_portal/header_menu_portal.tsx#:~:text=toMountPoint), [header_menu_portal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/components/header_menu_portal/header_menu_portal.tsx#:~:text=toMountPoint), [create_flyout.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/embeddables/job_creation/common/create_flyout.tsx#:~:text=toMountPoint), [create_flyout.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/embeddables/job_creation/common/create_flyout.tsx#:~:text=toMountPoint)+ 10 more | - | +| | [clone_action_name.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx#:~:text=toMountPoint), [clone_action_name.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx#:~:text=toMountPoint), [force_stop_dialog.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/model_management/force_stop_dialog.tsx#:~:text=toMountPoint), [force_stop_dialog.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/model_management/force_stop_dialog.tsx#:~:text=toMountPoint), [deployment_setup.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx#:~:text=toMountPoint), [deployment_setup.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx#:~:text=toMountPoint), [header_menu_portal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/components/header_menu_portal/header_menu_portal.tsx#:~:text=toMountPoint), [header_menu_portal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/components/header_menu_portal/header_menu_portal.tsx#:~:text=toMountPoint), [resolve_job_selection.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx#:~:text=toMountPoint), [resolve_job_selection.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx#:~:text=toMountPoint)+ 10 more | - | | | [jobs_list_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx#:~:text=RedirectAppLinks), [jobs_list_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx#:~:text=RedirectAppLinks), [jobs_list_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx#:~:text=RedirectAppLinks) | - | | | [anomaly_charts_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable.tsx#:~:text=KibanaThemeProvider), [anomaly_charts_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable.tsx#:~:text=KibanaThemeProvider), [anomaly_charts_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable.tsx#:~:text=KibanaThemeProvider), [anomaly_swimlane_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable.tsx#:~:text=KibanaThemeProvider), [anomaly_swimlane_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable.tsx#:~:text=KibanaThemeProvider), [anomaly_swimlane_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/app.tsx#:~:text=KibanaThemeProvider), [jobs_list_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx#:~:text=KibanaThemeProvider)+ 2 more | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/plugin.ts#:~:text=license%24) | 8.8.0 | @@ -1257,6 +1269,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## observabilityAIAssistant + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_ai_assistant/public/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_ai_assistant/public/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_ai_assistant/public/application.tsx#:~:text=KibanaThemeProvider) | - | + + + ## observabilityOnboarding | Deprecated API | Reference location(s) | Remove By | @@ -1462,7 +1482,7 @@ This is relied on by the reporting feature, and should be removed once reporting migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/issues/19914 | | | [app_authorization.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/app_authorization.ts#:~:text=getKibanaFeatures), [privileges.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.ts#:~:text=getKibanaFeatures), [authorization_service.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/authorization_service.tsx#:~:text=getKibanaFeatures), [app_authorization.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/app_authorization.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures)+ 15 more | 8.8.0 | | | [authorization_service.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/authorization/authorization_service.tsx#:~:text=getElasticsearchFeatures) | 8.8.0 | -| | [use_update_user_profile.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/account_management/user_profile/use_update_user_profile.tsx#:~:text=toMountPoint), [use_update_user_profile.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/account_management/user_profile/use_update_user_profile.tsx#:~:text=toMountPoint), [session_expiration_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/session/session_expiration_toast.tsx#:~:text=toMountPoint), [session_expiration_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/session/session_expiration_toast.tsx#:~:text=toMountPoint) | - | +| | [account_management_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/account_management/account_management_app.tsx#:~:text=toMountPoint), [account_management_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/account_management/account_management_app.tsx#:~:text=toMountPoint), [session_expiration_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/session/session_expiration_toast.tsx#:~:text=toMountPoint), [session_expiration_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/session/session_expiration_toast.tsx#:~:text=toMountPoint) | - | | | [access_agreement_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/authentication/access_agreement/access_agreement_page.tsx#:~:text=KibanaThemeProvider), [access_agreement_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/authentication/access_agreement/access_agreement_page.tsx#:~:text=KibanaThemeProvider), [access_agreement_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/authentication/access_agreement/access_agreement_page.tsx#:~:text=KibanaThemeProvider), [logged_out_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/authentication/logged_out/logged_out_page.tsx#:~:text=KibanaThemeProvider), [logged_out_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/authentication/logged_out/logged_out_page.tsx#:~:text=KibanaThemeProvider), [logged_out_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/authentication/logged_out/logged_out_page.tsx#:~:text=KibanaThemeProvider), [login_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/authentication/login/login_page.tsx#:~:text=KibanaThemeProvider), [login_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/authentication/login/login_page.tsx#:~:text=KibanaThemeProvider), [login_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/authentication/login/login_page.tsx#:~:text=KibanaThemeProvider), [overwritten_session_page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/authentication/overwritten_session/overwritten_session_page.tsx#:~:text=KibanaThemeProvider)+ 20 more | - | | | [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode) | 8.8.0 | | | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/plugin.tsx#:~:text=license%24) | 8.8.0 | @@ -1818,6 +1838,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | ---------------|-----------|-----------| | | [confirm_modal_promise.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/confirm_modal_promise.tsx#:~:text=toMountPoint), [confirm_modal_promise.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/confirm_modal_promise.tsx#:~:text=toMountPoint), [use_visualize_app_state.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/visualize_app/utils/use/use_visualize_app_state.tsx#:~:text=toMountPoint), [use_visualize_app_state.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/visualize_app/utils/use/use_visualize_app_state.tsx#:~:text=toMountPoint), [visualize_no_match.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/visualize_app/components/visualize_no_match.tsx#:~:text=toMountPoint), [visualize_no_match.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/visualize_app/components/visualize_no_match.tsx#:~:text=toMountPoint), [index.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/visualize_app/index.tsx#:~:text=toMountPoint), [index.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/visualize_app/index.tsx#:~:text=toMountPoint) | - | | | [use_visualize_app_state.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/visualize_app/utils/use/use_visualize_app_state.tsx#:~:text=KibanaThemeProvider), [use_visualize_app_state.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/visualize_app/utils/use/use_visualize_app_state.tsx#:~:text=KibanaThemeProvider), [use_visualize_app_state.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/visualize_app/utils/use/use_visualize_app_state.tsx#:~:text=KibanaThemeProvider), [visualize_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx#:~:text=KibanaThemeProvider), [visualize_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx#:~:text=KibanaThemeProvider), [visualize_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx#:~:text=KibanaThemeProvider), [show_new_vis.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/wizard/show_new_vis.tsx#:~:text=KibanaThemeProvider), [show_new_vis.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/wizard/show_new_vis.tsx#:~:text=KibanaThemeProvider), [show_new_vis.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/wizard/show_new_vis.tsx#:~:text=KibanaThemeProvider), [visualize_no_match.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/visualize_app/components/visualize_no_match.tsx#:~:text=KibanaThemeProvider)+ 5 more | - | +| | [search_selection.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx#:~:text=includeFields), [visualize_embeddable_factory.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.tsx#:~:text=includeFields) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/plugin.ts#:~:text=savedObjects), [visualize_listing.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/visualize_app/components/visualize_listing.tsx#:~:text=savedObjects) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/plugin.ts#:~:text=SavedObjectsClientContract), [plugin.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/plugin.ts#:~:text=SavedObjectsClientContract) | - | | | [visualize_listing.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/visualize_app/components/visualize_listing.tsx#:~:text=delete) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 585d6b75de9aab..dd54d80679b38c 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -120,7 +120,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Plugin | Deprecated API | Reference location(s) | Remove By | | --------|-------|-----------|-----------| -| ml | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/plugin.ts#:~:text=license%24) | 8.8.0 | +| ml | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/plugin.ts#:~:text=license%24), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/aiops/public/plugin.tsx#:~:text=license%24) | 8.8.0 | | ml | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/plugin.ts#:~:text=license%24), [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/transform/server/services/license.ts#:~:text=license%24) | 8.8.0 | diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 8a8540fc1360f9..59884cb7a6a035 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 2bd1d80e8a7b2e..9a15eabe616c80 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-08-08 +date: 2023-08-10 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 bd072de583e44e..2830cab0b59d7f 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 7cf7dd6fd56815..7fd44fac756db6 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index cbb78b0f3defe2..be7678ec89f338 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -7589,6 +7589,26 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "embeddable", + "id": "def-public.EmbeddableStartDependencies.contentManagement", + "type": "Object", + "tags": [], + "label": "contentManagement", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "public", + "docId": "kibContentManagementPluginApi", + "section": "def-public.ContentManagementPublicStart", + "text": "ContentManagementPublicStart" + } + ], + "path": "src/plugins/embeddable/public/plugin.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "embeddable", "id": "def-public.EmbeddableStartDependencies.savedObjectsManagement", @@ -9155,7 +9175,15 @@ "section": "def-common.Datatable", "text": "Datatable" }, - ", \"rows\" | \"columns\">; column: number; value: any[]; }; timeFieldName?: string | undefined; negate?: boolean | undefined; }" + ", \"rows\" | \"columns\">; cells: { column: number; row: number; }[]; relation?: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.BooleanRelation", + "text": "BooleanRelation" + }, + " | undefined; }[]; timeFieldName?: string | undefined; negate?: boolean | undefined; }" ], "path": "src/plugins/embeddable/public/lib/triggers/triggers.ts", "deprecated": false, diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 5ca2ab1573fa96..59a2a6facb00c7 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.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 | |-------------------|-----------|------------------------|-----------------| -| 535 | 11 | 437 | 7 | +| 536 | 11 | 438 | 7 | ## Client diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index 9ec369a20e907b..62400f8bfb19e2 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-08-08 +date: 2023-08-10 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 fd78a0506ea659..5c703ad47f6a6a 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-08-08 +date: 2023-08-10 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 142741b6ca029f..b5b66595a77336 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index f72c7966526926..2b22c7c3fdbc96 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.devdocs.json b/api_docs/event_annotation.devdocs.json index e61c8b977dd393..c6ce5b72279668 100644 --- a/api_docs/event_annotation.devdocs.json +++ b/api_docs/event_annotation.devdocs.json @@ -461,7 +461,15 @@ "section": "def-common.SavedObjectCommon", "text": "SavedObjectCommon" }, - "; }) => void; onCreateNew: () => void; }) => JSX.Element" + "<", + { + "pluginId": "savedObjectsFinder", + "scope": "common", + "docId": "kibSavedObjectsFinderPluginApi", + "section": "def-common.FinderAttributes", + "text": "FinderAttributes" + }, + ">; }) => void; onCreateNew: () => void; }) => JSX.Element" ], "path": "packages/kbn-event-annotation-components/types.ts", "deprecated": false, @@ -508,7 +516,15 @@ "section": "def-common.SavedObjectCommon", "text": "SavedObjectCommon" }, - "; }) => void" + "<", + { + "pluginId": "savedObjectsFinder", + "scope": "common", + "docId": "kibSavedObjectsFinderPluginApi", + "section": "def-common.FinderAttributes", + "text": "FinderAttributes" + }, + ">; }) => void" ], "path": "packages/kbn-event-annotation-components/types.ts", "deprecated": false, @@ -567,13 +583,21 @@ "description": [], "signature": [ { - "pluginId": "@kbn/core-saved-objects-common", + "pluginId": "@kbn/content-management-utils", "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObject", - "text": "SavedObject" + "docId": "kibKbnContentManagementUtilsPluginApi", + "section": "def-common.SOWithMetadata", + "text": "SOWithMetadata" }, - "" + "<", + { + "pluginId": "savedObjectsFinder", + "scope": "common", + "docId": "kibSavedObjectsFinderPluginApi", + "section": "def-common.FinderAttributes", + "text": "FinderAttributes" + }, + ">" ], "path": "packages/kbn-event-annotation-components/types.ts", "deprecated": false, @@ -694,27 +718,6 @@ "deprecated": false, "trackAdoption": false, "isRequired": true - }, - { - "parentPluginId": "eventAnnotation", - "id": "def-public.EventAnnotationService.Unnamed.$3", - "type": "Object", - "tags": [], - "label": "savedObjectsManagement", - "description": [], - "signature": [ - { - "pluginId": "savedObjectsManagement", - "scope": "public", - "docId": "kibSavedObjectsManagementPluginApi", - "section": "def-public.SavedObjectsManagementPluginStart", - "text": "SavedObjectsManagementPluginStart" - } - ], - "path": "src/plugins/event_annotation/public/event_annotation_service/index.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true } ], "returnComment": [] diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index f50f62c4a89279..f65e74fe1426a7 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 192 | 30 | 192 | 2 | +| 191 | 30 | 191 | 2 | ## Client diff --git a/api_docs/event_log.devdocs.json b/api_docs/event_log.devdocs.json index 6c4dd5d9e564ed..c656ca3ece0e68 100644 --- a/api_docs/event_log.devdocs.json +++ b/api_docs/event_log.devdocs.json @@ -143,85 +143,6 @@ ], "returnComment": [] }, - { - "parentPluginId": "eventLog", - "id": "def-server.ClusterClientAdapter.doesIlmPolicyExist", - "type": "Function", - "tags": [], - "label": "doesIlmPolicyExist", - "description": [], - "signature": [ - "(policyName: string) => Promise" - ], - "path": "x-pack/plugins/event_log/server/es/cluster_client_adapter.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "eventLog", - "id": "def-server.ClusterClientAdapter.doesIlmPolicyExist.$1", - "type": "string", - "tags": [], - "label": "policyName", - "description": [], - "signature": [ - "string" - ], - "path": "x-pack/plugins/event_log/server/es/cluster_client_adapter.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "eventLog", - "id": "def-server.ClusterClientAdapter.createIlmPolicy", - "type": "Function", - "tags": [], - "label": "createIlmPolicy", - "description": [], - "signature": [ - "(policyName: string, policy: Record) => Promise" - ], - "path": "x-pack/plugins/event_log/server/es/cluster_client_adapter.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "eventLog", - "id": "def-server.ClusterClientAdapter.createIlmPolicy.$1", - "type": "string", - "tags": [], - "label": "policyName", - "description": [], - "signature": [ - "string" - ], - "path": "x-pack/plugins/event_log/server/es/cluster_client_adapter.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "eventLog", - "id": "def-server.ClusterClientAdapter.createIlmPolicy.$2", - "type": "Object", - "tags": [], - "label": "policy", - "description": [], - "signature": [ - "Record" - ], - "path": "x-pack/plugins/event_log/server/es/cluster_client_adapter.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, { "parentPluginId": "eventLog", "id": "def-server.ClusterClientAdapter.doesIndexTemplateExist", diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index e89fac58a28765..e1da7f64405f8a 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.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 | |-------------------|-----------|------------------------|-----------------| -| 116 | 0 | 116 | 11 | +| 111 | 0 | 111 | 11 | ## Server diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index 935ec02b807e95..42857923c07551 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2023-08-08 +date: 2023-08-10 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 e2041edf193735..fdc2f7061181e2 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-08-08 +date: 2023-08-10 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 7939c2f3076e77..c8c6008a375a5f 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.devdocs.json b/api_docs/expression_heatmap.devdocs.json index 91fc345d8f6c30..e9ebf4fcbc4fe2 100644 --- a/api_docs/expression_heatmap.devdocs.json +++ b/api_docs/expression_heatmap.devdocs.json @@ -897,7 +897,23 @@ "section": "def-common.Datatable", "text": "Datatable" }, - "; column: number; range: number[]; timeFieldName?: string | undefined; }) => void; paletteService: ", + "; column: number; range: number[]; timeFieldName?: string | undefined; }) => void; onClickMultiValue: (data: { data: { table: Pick<", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.Datatable", + "text": "Datatable" + }, + ", \"rows\" | \"columns\">; cells: { column: number; row: number; }[]; relation?: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.BooleanRelation", + "text": "BooleanRelation" + }, + " | undefined; }[]; timeFieldName?: string | undefined; negate?: boolean | undefined; }) => void; paletteService: ", { "pluginId": "@kbn/coloring", "scope": "common", diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index c6cf3ed57d3169..a16712c92ffe7b 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-08-08 +date: 2023-08-10 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 cd90df87cb30ad..c99cc4f7ffa556 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-08-08 +date: 2023-08-10 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 40193204df51fc..b83b37db8b594e 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-08-08 +date: 2023-08-10 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 8456e45c43aa73..ef651f20382d1d 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-08-08 +date: 2023-08-10 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 6e1c7fff5b9cbf..3ce0102964ccd3 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-08-08 +date: 2023-08-10 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 40c1ec352d6848..391ae05dfda30d 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-08-08 +date: 2023-08-10 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 fdfc5024941dce..d7c9f4b7c3d4da 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-08-08 +date: 2023-08-10 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 f12b98a3ef6386..ad4e5aae94dfd0 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-08-08 +date: 2023-08-10 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 0b38793ebf1d1e..4e6acabab2e137 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-08-08 +date: 2023-08-10 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 fdd5a6e7434a17..954f34351c1035 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-08-08 +date: 2023-08-10 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 13291fe251db64..3d3a7036045934 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 46144bdd70a71a..2cfb8da03bab3e 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index c84e5990a374f6..87032206bd767f 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index d0a6e1861cdcb7..eb519823e0afdc 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 4ad74f547420ca..2f98ac12368330 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.devdocs.json b/api_docs/files.devdocs.json index c6085d88884ac3..e361a3c2a6336b 100644 --- a/api_docs/files.devdocs.json +++ b/api_docs/files.devdocs.json @@ -577,6 +577,14 @@ "plugin": "cases", "path": "x-pack/plugins/cases/public/plugin.ts" }, + { + "plugin": "cases", + "path": "x-pack/plugins/cases/public/plugin.test.ts" + }, + { + "plugin": "cases", + "path": "x-pack/plugins/cases/public/plugin.test.ts" + }, { "plugin": "imageEmbeddable", "path": "src/plugins/image_embeddable/public/plugin.ts" @@ -5458,6 +5466,10 @@ { "plugin": "cases", "path": "x-pack/plugins/cases/server/client/factory.ts" + }, + { + "plugin": "cases", + "path": "x-pack/plugins/cases/server/plugin.test.ts" } ] } diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 459bc877566b32..fc314b289752af 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-08-08 +date: 2023-08-10 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 d7b28cd1617f80..6aa91c16d3b1ee 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index a5600ae945a8ed..10d05a3e199448 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-08-08 +date: 2023-08-10 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 1bb35a9da4b342..3ecfb4969ccc2f 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-08-08 +date: 2023-08-10 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 649eab3e58dab9..7a5a09f7ae7f44 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-08-08 +date: 2023-08-10 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 37986e0e5531ed..f354f40dab1a12 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-08-08 +date: 2023-08-10 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 84f6acf3fc8e94..33c414a76476ca 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index bbac09985808ee..30d558400d2a5b 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 39520e4f5fd12f..6f1bd38953fe1d 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 43b6b1f6d5fecb..55b6de533eb18a 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index f8fb7c62396c02..d48e479972b6c3 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index f24b897b682f17..7efd702cfa51e3 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 66b909ccff85d2..e941d12298554a 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.devdocs.json b/api_docs/kbn_aiops_components.devdocs.json index 1b99ef4188fb60..702a63d266befc 100644 --- a/api_docs/kbn_aiops_components.devdocs.json +++ b/api_docs/kbn_aiops_components.devdocs.json @@ -23,15 +23,13 @@ "parentPluginId": "@kbn/aiops-components", "id": "def-common.DocumentCountChart", "type": "Function", - "tags": [ - "constructor" - ], + "tags": [], "label": "DocumentCountChart", "description": [ - "\nDocument count chart with draggable brushes to select time ranges\nby default use `Baseline` and `Deviation` for the badge names" + "\nDocument count chart with draggable brushes to select time ranges\nby default use `Baseline` and `Deviation` for the badge names\n" ], "signature": [ - "({ dependencies, brushSelectionUpdateHandler, width, chartPoints, chartPointsSplit, timeRangeEarliest, timeRangeLatest, interval, chartPointsSplitLabel, isBrushCleared, autoAnalysisStart, barColorOverride, barStyleAccessor, barHighlightColorOverride, deviationBrush, baselineBrush, }: React.PropsWithChildren<", + "(props: React.PropsWithChildren<", { "pluginId": "@kbn/aiops-components", "scope": "common", @@ -50,8 +48,10 @@ "id": "def-common.DocumentCountChart.$1", "type": "CompoundType", "tags": [], - "label": "{\n dependencies,\n brushSelectionUpdateHandler,\n width,\n chartPoints,\n chartPointsSplit,\n timeRangeEarliest,\n timeRangeLatest,\n interval,\n chartPointsSplitLabel,\n isBrushCleared,\n autoAnalysisStart,\n barColorOverride,\n barStyleAccessor,\n barHighlightColorOverride,\n deviationBrush = {},\n baselineBrush = {},\n}", - "description": [], + "label": "props", + "description": [ + "DocumentCountChart component props" + ], "signature": [ "React.PropsWithChildren<", { @@ -69,22 +69,22 @@ "isRequired": true } ], - "returnComment": [], + "returnComment": [ + "The DocumentCountChart component." + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/aiops-components", "id": "def-common.DualBrush", "type": "Function", - "tags": [ - "type" - ], + "tags": [], "label": "DualBrush", "description": [ - "\nDualBrush React Component\nDual brush component that overlays the document count chart" + "\nDualBrush React Component\nDual brush component that overlays the document count chart\n" ], "signature": [ - "({\n /**\n * Min and max numeric timestamps for the two brushes\n */\n windowParameters,\n /**\n * Min timestamp for x domain\n */\n min,\n /**\n * Max timestamp for x domain\n */\n max,\n /**\n * Callback function whenever the brush changes\n */\n onChange,\n /**\n * Margin left\n */\n marginLeft,\n /**\n * Nearest timestamps to snap to the brushes to\n */\n snapTimestamps,\n /**\n * Width\n */\n width,\n}: DualBrushProps) => JSX.Element" + "(props: React.PropsWithChildren) => JSX.Element" ], "path": "x-pack/packages/ml/aiops_components/src/dual_brush/dual_brush.tsx", "deprecated": false, @@ -93,12 +93,14 @@ { "parentPluginId": "@kbn/aiops-components", "id": "def-common.DualBrush.$1", - "type": "Object", + "type": "CompoundType", "tags": [], - "label": "{\n /**\n * Min and max numeric timestamps for the two brushes\n */\n windowParameters,\n /**\n * Min timestamp for x domain\n */\n min,\n /**\n * Max timestamp for x domain\n */\n max,\n /**\n * Callback function whenever the brush changes\n */\n onChange,\n /**\n * Margin left\n */\n marginLeft,\n /**\n * Nearest timestamps to snap to the brushes to\n */\n snapTimestamps,\n /**\n * Width\n */\n width,\n}", - "description": [], + "label": "props", + "description": [ + "DualBrushProps component props" + ], "signature": [ - "DualBrushProps" + "React.PropsWithChildren" ], "path": "x-pack/packages/ml/aiops_components/src/dual_brush/dual_brush.tsx", "deprecated": false, @@ -115,15 +117,13 @@ "parentPluginId": "@kbn/aiops-components", "id": "def-common.DualBrushAnnotation", "type": "Function", - "tags": [ - "type" - ], + "tags": [], "label": "DualBrushAnnotation", "description": [ - "\nDualBrushAnnotation React Component\nDual brush annotation component that overlays the document count chart" + "\nDualBrushAnnotation React Component\nDual brush annotation component that overlays the document count chart\n" ], "signature": [ - "({ id, min, max, style }: React.PropsWithChildren) => JSX.Element" + "(props: React.PropsWithChildren) => JSX.Element" ], "path": "x-pack/packages/ml/aiops_components/src/dual_brush/dual_brush_annotation.tsx", "deprecated": false, @@ -134,8 +134,10 @@ "id": "def-common.DualBrushAnnotation.$1", "type": "CompoundType", "tags": [], - "label": "{ id, min, max, style }", - "description": [], + "label": "props", + "description": [ + "BrushAnnotationProps component props" + ], "signature": [ "React.PropsWithChildren" ], @@ -154,15 +156,13 @@ "parentPluginId": "@kbn/aiops-components", "id": "def-common.ProgressControls", "type": "Function", - "tags": [ - "type" - ], + "tags": [], "label": "ProgressControls", "description": [ - "\nProgressControls React Component\nComponent with ability to Run & cancel analysis\nby default use `Baseline` and `Deviation` for the badge name" + "\nProgressControls React Component\nComponent with ability to Run & cancel analysis\nby default uses `Baseline` and `Deviation` for the badge name\n" ], "signature": [ - "({ children, isBrushCleared, progress, progressMessage, onRefresh, onCancel, onReset, isRunning, shouldRerunAnalysis, runAnalysisDisabled, }: React.PropsWithChildren) => JSX.Element" + "(props: React.PropsWithChildren) => JSX.Element" ], "path": "x-pack/packages/ml/aiops_components/src/progress_controls/progress_controls.tsx", "deprecated": false, @@ -173,8 +173,10 @@ "id": "def-common.ProgressControls.$1", "type": "CompoundType", "tags": [], - "label": "{\n children,\n isBrushCleared,\n progress,\n progressMessage,\n onRefresh,\n onCancel,\n onReset,\n isRunning,\n shouldRerunAnalysis,\n runAnalysisDisabled = false,\n}", - "description": [], + "label": "props", + "description": [ + "ProgressControls component props" + ], "signature": [ "React.PropsWithChildren" ], @@ -193,12 +195,12 @@ "interfaces": [ { "parentPluginId": "@kbn/aiops-components", - "id": "def-common.DocumentCountChartPoint", + "id": "def-common.BrushSettings", "type": "Interface", "tags": [], - "label": "DocumentCountChartPoint", + "label": "BrushSettings", "description": [ - "\nDatum for the bar chart" + "\nBrush settings" ], "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", "deprecated": false, @@ -206,15 +208,34 @@ "children": [ { "parentPluginId": "@kbn/aiops-components", - "id": "def-common.DocumentCountChartPoint.time", - "type": "CompoundType", + "id": "def-common.BrushSettings.label", + "type": "string", + "tags": [], + "label": "label", + "description": [ + "\nOptional label name for brush" + ], + "signature": [ + "string | undefined" + ], + "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-components", + "id": "def-common.BrushSettings.annotationStyle", + "type": "Object", "tags": [], - "label": "time", + "label": "annotationStyle", "description": [ - "\nTime of bucket" + "\nOptional style for brush" ], "signature": [ - "string | number" + "RecursivePartial", + "<", + "RectAnnotationStyle", + "> | undefined" ], "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", "deprecated": false, @@ -222,12 +243,15 @@ }, { "parentPluginId": "@kbn/aiops-components", - "id": "def-common.DocumentCountChartPoint.value", + "id": "def-common.BrushSettings.badgeWidth", "type": "number", "tags": [], - "label": "value", + "label": "badgeWidth", "description": [ - "\nNumber of doc count for that time bucket" + "\nOptional width for brush" + ], + "signature": [ + "number | undefined" ], "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", "deprecated": false, @@ -304,61 +328,21 @@ "tags": [], "label": "brushSelectionUpdateHandler", "description": [ - "Optional callback function which gets called the brush selection has changed" + "Optional callback for handling brush selection updates" ], "signature": [ - "((windowParameters: ", { - "pluginId": "@kbn/aiops-utils", + "pluginId": "@kbn/aiops-components", "scope": "common", - "docId": "kibKbnAiopsUtilsPluginApi", - "section": "def-common.WindowParameters", - "text": "WindowParameters" + "docId": "kibKbnAiopsComponentsPluginApi", + "section": "def-common.BrushSelectionUpdateHandler", + "text": "BrushSelectionUpdateHandler" }, - ", force: boolean) => void) | undefined" + " | undefined" ], "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.DocumentCountChartProps.brushSelectionUpdateHandler.$1", - "type": "Object", - "tags": [], - "label": "windowParameters", - "description": [], - "signature": [ - { - "pluginId": "@kbn/aiops-utils", - "scope": "common", - "docId": "kibKbnAiopsUtilsPluginApi", - "section": "def-common.WindowParameters", - "text": "WindowParameters" - } - ], - "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.DocumentCountChartProps.brushSelectionUpdateHandler.$2", - "type": "boolean", - "tags": [], - "label": "force", - "description": [], - "signature": [ - "boolean" - ], - "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] + "trackAdoption": false }, { "parentPluginId": "@kbn/aiops-components", @@ -387,11 +371,11 @@ ], "signature": [ { - "pluginId": "@kbn/aiops-components", + "pluginId": "@kbn/aiops-utils", "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.DocumentCountChartPoint", - "text": "DocumentCountChartPoint" + "docId": "kibKbnAiopsUtilsPluginApi", + "section": "def-common.LogRateHistogramItem", + "text": "LogRateHistogramItem" }, "[]" ], @@ -410,11 +394,11 @@ ], "signature": [ { - "pluginId": "@kbn/aiops-components", + "pluginId": "@kbn/aiops-utils", "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.DocumentCountChartPoint", - "text": "DocumentCountChartPoint" + "docId": "kibKbnAiopsUtilsPluginApi", + "section": "def-common.LogRateHistogramItem", + "text": "LogRateHistogramItem" }, "[] | undefined" ], @@ -570,7 +554,13 @@ "Optional settings override for the 'deviation' brush" ], "signature": [ - "BrushSettings", + { + "pluginId": "@kbn/aiops-components", + "scope": "common", + "docId": "kibKbnAiopsComponentsPluginApi", + "section": "def-common.BrushSettings", + "text": "BrushSettings" + }, " | undefined" ], "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", @@ -587,7 +577,13 @@ "Optional settings override for the 'baseline' brush" ], "signature": [ - "BrushSettings", + { + "pluginId": "@kbn/aiops-components", + "scope": "common", + "docId": "kibKbnAiopsComponentsPluginApi", + "section": "def-common.BrushSettings", + "text": "BrushSettings" + }, " | undefined" ], "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", @@ -599,7 +595,95 @@ } ], "enums": [], - "misc": [], + "misc": [ + { + "parentPluginId": "@kbn/aiops-components", + "id": "def-common.BrushSelectionUpdateHandler", + "type": "Type", + "tags": [], + "label": "BrushSelectionUpdateHandler", + "description": [ + "\nCallback function which gets called when the brush selection has changed\n" + ], + "signature": [ + "(windowParameters: ", + { + "pluginId": "@kbn/aiops-utils", + "scope": "common", + "docId": "kibKbnAiopsUtilsPluginApi", + "section": "def-common.WindowParameters", + "text": "WindowParameters" + }, + ", force: boolean, logRateAnalysisType: ", + { + "pluginId": "@kbn/aiops-utils", + "scope": "common", + "docId": "kibKbnAiopsUtilsPluginApi", + "section": "def-common.LogRateAnalysisType", + "text": "LogRateAnalysisType" + }, + ") => void" + ], + "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/aiops-components", + "id": "def-common.BrushSelectionUpdateHandler.$1", + "type": "Object", + "tags": [], + "label": "windowParameters", + "description": [ + "Baseline and deviation time ranges." + ], + "signature": [ + { + "pluginId": "@kbn/aiops-utils", + "scope": "common", + "docId": "kibKbnAiopsUtilsPluginApi", + "section": "def-common.WindowParameters", + "text": "WindowParameters" + } + ], + "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-components", + "id": "def-common.BrushSelectionUpdateHandler.$2", + "type": "boolean", + "tags": [], + "label": "force", + "description": [ + "Force update" + ], + "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-components", + "id": "def-common.BrushSelectionUpdateHandler.$3", + "type": "CompoundType", + "tags": [], + "label": "logRateAnalysisType", + "description": [ + "`spike` or `dip` based on median log rate bucket size" + ], + "signature": [ + "\"spike\" | \"dip\"" + ], + "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], "objects": [] } } \ No newline at end of file diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index e4e3eed672b02b..77111d5895f85f 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 30 | 0 | 6 | 1 | +| 33 | 0 | 0 | 0 | ## Common @@ -31,3 +31,6 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi ### Interfaces +### Consts, variables and types + + diff --git a/api_docs/kbn_aiops_utils.devdocs.json b/api_docs/kbn_aiops_utils.devdocs.json index c84540e90ecf6d..4ab34fcaf1db4f 100644 --- a/api_docs/kbn_aiops_utils.devdocs.json +++ b/api_docs/kbn_aiops_utils.devdocs.json @@ -19,6 +19,98 @@ "common": { "classes": [], "functions": [ + { + "parentPluginId": "@kbn/aiops-utils", + "id": "def-common.getLogRateAnalysisType", + "type": "Function", + "tags": [], + "label": "getLogRateAnalysisType", + "description": [ + "\nIdentify the log rate analysis type based on the baseline/deviation\ntime ranges on a given log rate histogram.\n" + ], + "signature": [ + "(logRateHistogram: ", + { + "pluginId": "@kbn/aiops-utils", + "scope": "common", + "docId": "kibKbnAiopsUtilsPluginApi", + "section": "def-common.LogRateHistogramItem", + "text": "LogRateHistogramItem" + }, + "[], windowParameters: ", + { + "pluginId": "@kbn/aiops-utils", + "scope": "common", + "docId": "kibKbnAiopsUtilsPluginApi", + "section": "def-common.WindowParameters", + "text": "WindowParameters" + }, + ") => ", + { + "pluginId": "@kbn/aiops-utils", + "scope": "common", + "docId": "kibKbnAiopsUtilsPluginApi", + "section": "def-common.LogRateAnalysisType", + "text": "LogRateAnalysisType" + } + ], + "path": "x-pack/packages/ml/aiops_utils/get_log_rate_analysis_type.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/aiops-utils", + "id": "def-common.getLogRateAnalysisType.$1", + "type": "Array", + "tags": [], + "label": "logRateHistogram", + "description": [ + "The log rate histogram." + ], + "signature": [ + { + "pluginId": "@kbn/aiops-utils", + "scope": "common", + "docId": "kibKbnAiopsUtilsPluginApi", + "section": "def-common.LogRateHistogramItem", + "text": "LogRateHistogramItem" + }, + "[]" + ], + "path": "x-pack/packages/ml/aiops_utils/get_log_rate_analysis_type.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/aiops-utils", + "id": "def-common.getLogRateAnalysisType.$2", + "type": "Object", + "tags": [], + "label": "windowParameters", + "description": [ + "The window parameters with baseline and deviation time range." + ], + "signature": [ + { + "pluginId": "@kbn/aiops-utils", + "scope": "common", + "docId": "kibKbnAiopsUtilsPluginApi", + "section": "def-common.WindowParameters", + "text": "WindowParameters" + } + ], + "path": "x-pack/packages/ml/aiops_utils/get_log_rate_analysis_type.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "The log rate analysis type." + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/aiops-utils", "id": "def-common.getSnappedWindowParameters", @@ -46,7 +138,7 @@ "text": "WindowParameters" } ], - "path": "x-pack/packages/ml/aiops_utils/src/get_window_parameters.ts", + "path": "x-pack/packages/ml/aiops_utils/window_parameters.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -68,7 +160,7 @@ "text": "WindowParameters" } ], - "path": "x-pack/packages/ml/aiops_utils/src/get_window_parameters.ts", + "path": "x-pack/packages/ml/aiops_utils/window_parameters.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -85,7 +177,7 @@ "signature": [ "number[]" ], - "path": "x-pack/packages/ml/aiops_utils/src/get_window_parameters.ts", + "path": "x-pack/packages/ml/aiops_utils/window_parameters.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -115,7 +207,7 @@ "text": "WindowParameters" } ], - "path": "x-pack/packages/ml/aiops_utils/src/get_window_parameters.ts", + "path": "x-pack/packages/ml/aiops_utils/window_parameters.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -131,7 +223,7 @@ "signature": [ "number" ], - "path": "x-pack/packages/ml/aiops_utils/src/get_window_parameters.ts", + "path": "x-pack/packages/ml/aiops_utils/window_parameters.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -148,7 +240,7 @@ "signature": [ "number" ], - "path": "x-pack/packages/ml/aiops_utils/src/get_window_parameters.ts", + "path": "x-pack/packages/ml/aiops_utils/window_parameters.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -165,7 +257,7 @@ "signature": [ "number" ], - "path": "x-pack/packages/ml/aiops_utils/src/get_window_parameters.ts", + "path": "x-pack/packages/ml/aiops_utils/window_parameters.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -178,6 +270,51 @@ } ], "interfaces": [ + { + "parentPluginId": "@kbn/aiops-utils", + "id": "def-common.LogRateHistogramItem", + "type": "Interface", + "tags": [], + "label": "LogRateHistogramItem", + "description": [ + "\nLog rate histogram item" + ], + "path": "x-pack/packages/ml/aiops_utils/log_rate_histogram_item.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/aiops-utils", + "id": "def-common.LogRateHistogramItem.time", + "type": "CompoundType", + "tags": [], + "label": "time", + "description": [ + "\nTime of bucket" + ], + "signature": [ + "string | number" + ], + "path": "x-pack/packages/ml/aiops_utils/log_rate_histogram_item.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-utils", + "id": "def-common.LogRateHistogramItem.value", + "type": "number", + "tags": [], + "label": "value", + "description": [ + "\nNumber of doc count for that time bucket" + ], + "path": "x-pack/packages/ml/aiops_utils/log_rate_histogram_item.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/aiops-utils", "id": "def-common.WindowParameters", @@ -191,7 +328,7 @@ "description": [ "\nTime range definition for baseline and deviation to be used by log rate analysis.\n" ], - "path": "x-pack/packages/ml/aiops_utils/src/get_window_parameters.ts", + "path": "x-pack/packages/ml/aiops_utils/window_parameters.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -206,7 +343,7 @@ "description": [ "\nBaseline minimum value" ], - "path": "x-pack/packages/ml/aiops_utils/src/get_window_parameters.ts", + "path": "x-pack/packages/ml/aiops_utils/window_parameters.ts", "deprecated": false, "trackAdoption": false }, @@ -221,7 +358,7 @@ "description": [ "\nBaseline maximum value" ], - "path": "x-pack/packages/ml/aiops_utils/src/get_window_parameters.ts", + "path": "x-pack/packages/ml/aiops_utils/window_parameters.ts", "deprecated": false, "trackAdoption": false }, @@ -236,7 +373,7 @@ "description": [ "\nDeviation minimum value" ], - "path": "x-pack/packages/ml/aiops_utils/src/get_window_parameters.ts", + "path": "x-pack/packages/ml/aiops_utils/window_parameters.ts", "deprecated": false, "trackAdoption": false }, @@ -251,7 +388,7 @@ "description": [ "\nDeviation maximum value" ], - "path": "x-pack/packages/ml/aiops_utils/src/get_window_parameters.ts", + "path": "x-pack/packages/ml/aiops_utils/window_parameters.ts", "deprecated": false, "trackAdoption": false } @@ -260,7 +397,43 @@ } ], "enums": [], - "misc": [], - "objects": [] + "misc": [ + { + "parentPluginId": "@kbn/aiops-utils", + "id": "def-common.LogRateAnalysisType", + "type": "Type", + "tags": [], + "label": "LogRateAnalysisType", + "description": [ + "\nUnion type of log rate analysis types." + ], + "signature": [ + "\"spike\" | \"dip\"" + ], + "path": "x-pack/packages/ml/aiops_utils/log_rate_analysis_type.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/aiops-utils", + "id": "def-common.LOG_RATE_ANALYSIS_TYPE", + "type": "Object", + "tags": [], + "label": "LOG_RATE_ANALYSIS_TYPE", + "description": [ + "\nThe type of log rate analysis (spike or dip) will affect how parameters are\npassed to the analysis API endpoint." + ], + "signature": [ + "{ readonly SPIKE: \"spike\"; readonly DIP: \"dip\"; }" + ], + "path": "x-pack/packages/ml/aiops_utils/log_rate_analysis_type.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ] } } \ No newline at end of file diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 8ab1310b76c474..5abc5d88e118ce 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; @@ -21,13 +21,19 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 12 | 0 | 0 | 0 | +| 20 | 0 | 0 | 0 | ## Common +### Objects + + ### Functions ### Interfaces +### Consts, variables and types + + diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 748be1e48ebf4f..418e8b1ba5cbf1 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index c7101ea8fa22b5..1a2bfdb84ca886 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index d3929a4dea717e..6d7a5d4431245f 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-08-08 +date: 2023-08-10 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 f3bf145144bb59..0696cb1f1333a0 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.devdocs.json b/api_docs/kbn_analytics_client.devdocs.json index 88e2702e0c82fa..1af5ff6be1368f 100644 --- a/api_docs/kbn_analytics_client.devdocs.json +++ b/api_docs/kbn_analytics_client.devdocs.json @@ -1316,14 +1316,14 @@ "plugin": "cloud", "path": "x-pack/plugins/cloud/common/register_cloud_deployment_id_analytics_context.ts" }, - { - "plugin": "telemetry", - "path": "src/plugins/telemetry/server/plugin.ts" - }, { "plugin": "security", "path": "x-pack/plugins/security/public/analytics/register_user_context.ts" }, + { + "plugin": "telemetry", + "path": "src/plugins/telemetry/server/plugin.ts" + }, { "plugin": "telemetry", "path": "src/plugins/telemetry/public/plugin.ts" diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 0dec0bae902c6b..32f4324c0b45fc 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index ad3639f903acd7..a338b46b94f30a 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 579d8f9c06d069..1421c801f0f979 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index ea346f0f543ae0..ad83c7e6633835 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 32ea46da84ad89..1d88dbb364a46e 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index 534625a620b5a5..5f1c1de0ad4cc5 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 19b3c53dc1fa63..12df92a5bdf59a 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 9082cac1d53cf2..38658ba9378bfd 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 0793199486530b..e2a9b389ca3cd5 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 35fd8b188e4bb3..c91252fd336105 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 8796a2577f2e85..a022b361916094 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 60115e5095ec3d..5c3a636ae44afa 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index f1ea4d738f4e66..3766d6c35e77e7 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-08-08 +date: 2023-08-10 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 965afdd0dd7b4b..c5ea02975d07e7 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-08-08 +date: 2023-08-10 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 e23a54e6cfde53..dd478068217b3c 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index bcdaad75b08889..88633fead7a31f 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-08-08 +date: 2023-08-10 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 c9afcf2d42fe4b..da44070bf0374e 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-08-08 +date: 2023-08-10 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 3db876a7ee3205..ba30db316a708f 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-08-08 +date: 2023-08-10 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 f05ae46a3609a3..0db9769db14d34 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 8bf30ebb4b9d05..65373570a0e98f 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index b8bf6bc9537dd6..db828f46c981bd 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 33fd7a4d6418b6..fb50d2bb20a3f0 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-08-08 +date: 2023-08-10 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 b74fada882cddd..5c12a2fc8086fc 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-08-08 +date: 2023-08-10 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 3524e6e8d82aaf..df5e89ed1a7ced 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 71e8e4fea5a342..33ec97ec508936 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-08-08 +date: 2023-08-10 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 3db5874410372e..44f11f4a4dda3c 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 74fe7e277a2ece..e68db52cba0d5d 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2023-08-08 +date: 2023-08-10 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 0a393870c35cf0..cd03b964fe93e3 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 2560ce12387259..08e9fe08765a35 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.devdocs.json b/api_docs/kbn_content_management_utils.devdocs.json index e58246c889b47f..871287406cc8fc 100644 --- a/api_docs/kbn_content_management_utils.devdocs.json +++ b/api_docs/kbn_content_management_utils.devdocs.json @@ -74,7 +74,7 @@ "id": "def-common.SOContentStorage.Unnamed.$1", "type": "Object", "tags": [], - "label": "{\n savedObjectType,\n cmServicesDefinition,\n createArgsToSoCreateOptions,\n updateArgsToSoUpdateOptions,\n searchArgsToSOFindOptions,\n enableMSearch,\n allowedSavedObjectAttributes,\n }", + "label": "{\n savedObjectType,\n cmServicesDefinition,\n createArgsToSoCreateOptions,\n updateArgsToSoUpdateOptions,\n searchArgsToSOFindOptions,\n enableMSearch,\n allowedSavedObjectAttributes,\n mSearchAdditionalSearchFields,\n }", "description": [], "signature": [ { @@ -118,7 +118,7 @@ "section": "def-common.SavedObjectsFindResult", "text": "SavedObjectsFindResult" }, - ") => Types[\"Item\"]; } | undefined" + ") => Types[\"Item\"]; additionalSearchFields?: string[] | undefined; } | undefined" ], "path": "packages/kbn-content-management-utils/src/saved_object_content_storage.ts", "deprecated": false, @@ -2865,6 +2865,20 @@ "path": "packages/kbn-content-management-utils/src/saved_object_content_storage.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-utils", + "id": "def-common.SOContentStorageConstrutorParams.mSearchAdditionalSearchFields", + "type": "Array", + "tags": [], + "label": "mSearchAdditionalSearchFields", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-content-management-utils/src/saved_object_content_storage.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 4b8b9829a1a502..55af16f30d8805 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_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 | |-------------------|-----------|------------------------|-----------------| -| 187 | 1 | 122 | 0 | +| 188 | 1 | 123 | 0 | ## Common diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 54b1c35b9669fa..a3d2aa0c4415ea 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 56dacaceda3e68..7e25cbeda0a884 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 f0bbbf320541d0..7caeee42494af0 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 cb51ca86bda86f..9fc02fe58fa4fc 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-08-08 +date: 2023-08-10 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 03048cb3890984..ca9f1516bec864 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 8d63466db67566..bc0795bf6158f1 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 90fab26c3bf54c..2c0d6086d55a34 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 e5c429b13bc13d..d0a5218b0ceae0 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 025d1bd9e42cb2..a9b59dae2cdc38 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 253dcb5d926718..dbd536efd4af8c 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-08-08 +date: 2023-08-10 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 b305c86fe1c93f..28432533e82823 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 7c776934de2fc4..8bc2bb6c0354db 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 284e58f1063338..c3cdc773148c11 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 c017c2b09c5fc0..3c4070c221909d 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 730462673de143..ff57bebc5c3a59 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-08-08 +date: 2023-08-10 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 cf5ab5cb408772..981ca2d333281a 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 07cbfbfb0af7e4..b417fb5efe0405 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 98eedb888c16a3..8d9dd57cfc8bcf 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 8effd8f79e6e2e..cb5c8d84690da4 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-08-08 +date: 2023-08-10 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 133401c40993bd..37895f8d77f79c 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-08-08 +date: 2023-08-10 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 7b1538003a8bef..49fed845256001 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 7128a9710b9072..2ead6c497949cc 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 228624d0ecaf2e..437ee4fdd75fc3 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 4251ce1a56b619..ead55725566bee 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 670995a4a05c89..e84f5576a9ec76 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 35e42e0ea93dcb..b37f87902aff2c 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 88779b741c0f6f..1cff1fd02a4338 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 11415cb9894d64..53e46ff803c2b9 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-08-08 +date: 2023-08-10 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 c6cef5d82d1038..d94fb747f47315 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-08-08 +date: 2023-08-10 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 d021591eff678b..ee237e02ad449e 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 68c24148448816..0ff4dc99b1ca15 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 947af0a1b0da43..a2f9efd771efe3 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 f94179345c2649..b178fb5e76a4e0 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 1d15fcc40b881f..4b2a04a993b7d4 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 582190d70f7b81..fca4609153d744 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-08-08 +date: 2023-08-10 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 5be73992183120..646787175c9401 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-08-08 +date: 2023-08-10 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 89421e8bdb1480..f2c041d63f34bb 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 f25e1c8a0ee664..61ffa6dd89dc49 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 b81abcc8258de8..783da1f326902e 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 735b84c1b0079a..9ca5d0b80a63b0 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 67eedbc41794e3..4f9fa2f6d4e2b5 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-08-08 +date: 2023-08-10 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 b839841f35de91..7df248651d1459 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 686e5e9661d4c6..34d5df5e1d5cab 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 24e3759ce4b8ac..8a374a174da77f 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 dadbf28ea6332c..48bc60defbb9d7 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-08-08 +date: 2023-08-10 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 e903616263fb4b..d872809f9fbcd0 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 8fe13951442ca6..769af6390cbb83 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 1256a5eb245e7d..78956563fd5457 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 04ea7169eb666a..ec60e78f18e7c0 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 90009c29c89cc8..ea02ea43a5abdd 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 7716f62714f6be..62a7277f4da84b 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 f4c2a8115015b3..6a38822734be74 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 cb08d0340717dd..be9d12fb509e6d 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-08-08 +date: 2023-08-10 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 321b72ad4e2f59..9cf6a0c2945aa1 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-08-08 +date: 2023-08-10 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 78bcb9afedc402..6b9c1e9531847b 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 d6aa6ab279e281..c51c1c80290ff6 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 19aa36087e3fd3..16641ee0f9618f 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 1d63ca16b335c6..7203a607e4f16a 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 787454514e00e9..9837e89fcd2bb0 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 87e0876cc677da..a5b7c23ba23f62 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 57abe05b1e9a3a..9ca62691cf917d 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 6d0f2c07a925cb..81fc4f5ea6bf92 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-08-08 +date: 2023-08-10 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 8ee889cbcf8ada..05a1daf1714518 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 3d3161cb7cbb37..faaac088132f29 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-08-08 +date: 2023-08-10 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 fa1fa17e20bb67..b7a801fa451e8e 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-08-08 +date: 2023-08-10 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 636c73bcfe78f4..6a55ec423723a5 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 c63fcf2523f890..6b1d80bbaa14b1 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 45554c98232898..1e222721df01dd 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 a9c57abc605a16..0aa09c0f91cdf8 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 45aa782bcbd31a..82728a75430e64 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -3599,18 +3599,6 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/maintenance_window/active_maintenance_windows.ts" }, - { - "plugin": "guidedOnboarding", - "path": "src/plugins/guided_onboarding/server/routes/guide_state_routes.ts" - }, - { - "plugin": "guidedOnboarding", - "path": "src/plugins/guided_onboarding/server/routes/plugin_state_routes.ts" - }, - { - "plugin": "guidedOnboarding", - "path": "src/plugins/guided_onboarding/server/routes/config_routes.ts" - }, { "plugin": "ruleRegistry", "path": "x-pack/plugins/rule_registry/server/routes/get_alert_by_id.ts" @@ -3631,6 +3619,18 @@ "plugin": "ruleRegistry", "path": "x-pack/plugins/rule_registry/server/routes/get_aad_fields_by_rule_type.ts" }, + { + "plugin": "guidedOnboarding", + "path": "src/plugins/guided_onboarding/server/routes/guide_state_routes.ts" + }, + { + "plugin": "guidedOnboarding", + "path": "src/plugins/guided_onboarding/server/routes/plugin_state_routes.ts" + }, + { + "plugin": "guidedOnboarding", + "path": "src/plugins/guided_onboarding/server/routes/config_routes.ts" + }, { "plugin": "observability", "path": "x-pack/plugins/observability/server/lib/annotations/register_annotation_apis.ts" @@ -4687,10 +4687,6 @@ "plugin": "interactiveSetup", "path": "src/plugins/interactive_setup/server/routes/status.ts" }, - { - "plugin": "savedObjectsFinder", - "path": "src/plugins/saved_objects_finder/server/routes/find.ts" - }, { "plugin": "savedObjectsManagement", "path": "src/plugins/saved_objects_management/server/routes/find.ts" @@ -13778,10 +13774,6 @@ "plugin": "@kbn/core-http-router-server-mocks", "path": "packages/core/http/core-http-router-server-mocks/src/versioned_router.mock.ts" }, - { - "plugin": "bfetch", - "path": "src/plugins/bfetch/server/plugin.ts" - }, { "plugin": "dataViews", "path": "src/plugins/data_views/server/rest_api_routes/public/runtime_fields/get_runtime_field.ts" @@ -13814,6 +13806,10 @@ "plugin": "dataViews", "path": "src/plugins/data_views/server/rest_api_routes/internal/has_data_views.ts" }, + { + "plugin": "bfetch", + "path": "src/plugins/bfetch/server/plugin.ts" + }, { "plugin": "data", "path": "src/plugins/data/server/search/routes/session.ts" @@ -14042,6 +14038,10 @@ "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/management.ts" @@ -14510,10 +14510,6 @@ "plugin": "@kbn/core-http-router-server-mocks", "path": "packages/core/http/core-http-router-server-mocks/src/versioned_router.mock.ts" }, - { - "plugin": "bfetch", - "path": "src/plugins/bfetch/server/plugin.ts" - }, { "plugin": "dataViews", "path": "src/plugins/data_views/server/rest_api_routes/public/runtime_fields/put_runtime_field.ts" @@ -14526,6 +14522,10 @@ "plugin": "dataViews", "path": "src/plugins/data_views/server/rest_api_routes/internal/fields_for.ts" }, + { + "plugin": "bfetch", + "path": "src/plugins/bfetch/server/plugin.ts" + }, { "plugin": "data", "path": "src/plugins/data/server/search/routes/session.ts" @@ -14698,10 +14698,6 @@ "plugin": "@kbn/core-http-router-server-mocks", "path": "packages/core/http/core-http-router-server-mocks/src/versioned_router.mock.ts" }, - { - "plugin": "bfetch", - "path": "src/plugins/bfetch/server/plugin.ts" - }, { "plugin": "dataViews", "path": "src/plugins/data_views/server/rest_api_routes/public/fields/update_fields.ts" @@ -14742,6 +14738,10 @@ "plugin": "dataViews", "path": "src/plugins/data_views/server/rest_api_routes/internal/fields_for.ts" }, + { + "plugin": "bfetch", + "path": "src/plugins/bfetch/server/plugin.ts" + }, { "plugin": "data", "path": "src/plugins/data/server/search/routes/session.ts" @@ -14778,6 +14778,10 @@ "plugin": "data", "path": "src/plugins/data/server/kql_telemetry/route.ts" }, + { + "plugin": "unifiedSearch", + "path": "src/plugins/unified_search/server/autocomplete/value_suggestions_route.ts" + }, { "plugin": "aiops", "path": "x-pack/plugins/aiops/server/routes/log_rate_analysis.ts" @@ -14786,10 +14790,6 @@ "plugin": "aiops", "path": "x-pack/plugins/aiops/server/routes/log_categorization.ts" }, - { - "plugin": "unifiedSearch", - "path": "src/plugins/unified_search/server/autocomplete/value_suggestions_route.ts" - }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/annotations.ts" @@ -15074,6 +15074,10 @@ "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/alerting.ts" @@ -15418,10 +15422,6 @@ "plugin": "@kbn/core-http-router-server-mocks", "path": "packages/core/http/core-http-router-server-mocks/src/versioned_router.mock.ts" }, - { - "plugin": "bfetch", - "path": "src/plugins/bfetch/server/plugin.ts" - }, { "plugin": "dataViews", "path": "src/plugins/data_views/server/rest_api_routes/public/runtime_fields/delete_runtime_field.ts" @@ -15434,6 +15434,10 @@ "plugin": "dataViews", "path": "src/plugins/data_views/server/rest_api_routes/public/delete_data_view.ts" }, + { + "plugin": "bfetch", + "path": "src/plugins/bfetch/server/plugin.ts" + }, { "plugin": "data", "path": "src/plugins/data/server/search/routes/session.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 04b45513b45c56..99d0bfed889dd3 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-08-08 +date: 2023-08-10 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 df28c49f0862d1..8cb45c96afba6e 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 71fd4602c628df..fae37a80af6039 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index dedebc31e31fd2..4d5eb5471bd823 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 d196e9513ab6c4..0253dae1815ba1 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 a4f118dfa303d6..222e7c93daf9e2 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-08-08 +date: 2023-08-10 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 1c1d80320475a4..1c5e29a1b819b0 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 5f6215c2b0e277..22aebb96c496ab 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 5391d2f281be56..037cc811c3a542 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 df5e3bb4349d76..c29d40f5f73136 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 56086553b00dc9..e6ba4de3c1fb11 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 99531b81e8574b..aa5e529950a8a2 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 2a0f438edb26b2..5587dcb2c4b839 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 a02bdb3c0101ee..954d92db64bf56 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-08-08 +date: 2023-08-10 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 7d2581f42e4f6d..d9dfcd3237c554 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 ba13559eba6bfd..908787f976911b 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index 29169fb4371cd3..bbadb69f2a5816 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 123e3aa3e7619f..703169e0049caa 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 4fb6a77b9b04d9..575f90597d2d3e 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 3d86ef8947788a..94453374d508a0 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 dc7e196ccdf06f..1203a3ea18a915 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 317ba2ee9e7746..964eada8d67a98 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 ace69d608a26d1..65b165872eab48 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-08-08 +date: 2023-08-10 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 751b14ef4a567b..6b5f2599ab21eb 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 b8bc5cfc50f5be..b8075163f5f031 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 f558d06a364d19..4a47840063206c 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 010eab5713a793..4fee677a2e3416 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-08-08 +date: 2023-08-10 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 b142c9f37285f3..a0c126ef3ff943 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 6c94ef3afbb40d..ed03155a5ed930 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 c2638a4737c23f..326dc303a3b1c9 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 0e95009b0cb858..58a476462aba0b 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 a25e35d4e19bad..b09dceee0054eb 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 69b5674fe89abf..791e5bb452ac04 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 079aed26d91d70..536239c5f598a7 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 b39ee812ab659d..a0fd9d020d751f 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 916c6fafc8bd01..4ecac68faabf8e 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 a6f60b7e0e9656..212070fdb5bcac 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index c2a5349922e0d4..e6594e65074890 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-08-08 +date: 2023-08-10 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 18f595bde69786..6b3fc9263cdbfa 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 78e0717918e17a..3234e959b51c7c 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-08-08 +date: 2023-08-10 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 86670bcafb4ae9..5b503dd6ca04f9 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index 6aec9dfd84597f..8c0c299eb62d8c 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 abb1fb3e8afe6d..67ade810a26599 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 ff0bc3ad493e72..e658945d42019f 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 b38e9d98875bbc..7b2c53aaa96593 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 a62569321db1f5..43e10686ceb1a1 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 b4501b269354e6..b23c95b79201fa 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-08-08 +date: 2023-08-10 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 95fa85cab16b56..a7a431da29a065 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 d1e46f4c1ee5e2..630637ff9c9c10 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 a987dc60dc8d88..03eda68dd88f57 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 c493c59bc1b4a3..73189853b8392a 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 d6b01343a214bd..ad0b541c70c20f 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 99a7f0976ded95..e8a44056f01213 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 7d5ba1632a8d4e..94bb7cb8e1b237 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-08-08 +date: 2023-08-10 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 758ebdab3d222c..2df414cb3785c7 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 99235c2ce242ac..2b808513509538 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index 845cab1c1d84ba..f67a0413da8703 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 d8ae52e1c5cd16..46ff072146b36f 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 d54b0c18fa7f9a..f9fdbea16f255d 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index 48c029ae6a3fa5..2eff7e0f56a055 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index 7b0108f47de19b..c4449475b455af 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 4cd54142fc9d29..d6644b87e6e2c3 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index f1c9d87eab6cf0..c0517668bd3e60 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index 1d759a21ce7019..f1cbd7a5d8f572 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index e654990475f5dd..8a5f1c295ab8b2 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-08-08 +date: 2023-08-10 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 117678763edcb9..20f2eed5b139bf 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 6695ef9c864764..43033b1972ce63 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 271a06dbd26e7b..a4dcb69ed3fcb8 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-08-08 +date: 2023-08-10 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 1bf1a38c714f5b..0517bdd2d1419d 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 56b267ba84572e..62dd992d0d7610 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index bc776395968b56..7194e3044a2a7f 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-08-08 +date: 2023-08-10 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 c6feaf4650780b..c152eb2c4ed2d7 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 cdbe74136748f8..4c82c21c3a2165 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 9ddf2c57ce8229..a5c94c3afbba74 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 7abf2e74bf987c..d394eec62e530a 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 1931ac3b26fff3..8206d774761f48 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 532c7adad3e1cf..c70b178a72abc1 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 0ab8e28aa0df95..e509dac371cfa1 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-08-08 +date: 2023-08-10 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 7a75e89ea41502..1efa419d1f86fa 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-08-08 +date: 2023-08-10 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 c67e252addd2f0..5d9a8b6c675821 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 4e6b67b9852b3d..36f34c6b24b90f 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 d4cbd84c11c563..c5f0b02883e094 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-08-08 +date: 2023-08-10 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 79c868879899d0..41b6f57546a9bd 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 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 25757579a4fbd8..3421fa31137019 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 935179f08e439c..88521aaf6d709c 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index dddf1ef3438841..3a11aeb9c3c0c5 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 45056ff08f1af8..287c621493ea63 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 cc016eec8bfc82..72ddc4913f2ac2 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-08-08 +date: 2023-08-10 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 56ce772d5b1d1c..78daead4149fea 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 4c969ab0e95fa9..d06760255e0770 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index b53458717153d7..97f28f5ce3d720 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 4a9f76a2bf852e..196e1c6c87297c 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-08-08 +date: 2023-08-10 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 395daccf034c67..0495d60d6de225 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2023-08-08 +date: 2023-08-10 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 4f65a2c1d09d1c..67a71ba210d32e 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 1517e4387cf9b4..2de85cf9a93468 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2023-08-08 +date: 2023-08-10 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 3d1bc0ada81d16..9663d229135ae8 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2023-08-08 +date: 2023-08-10 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 1ff762c760aa72..9e3b1781e5d4b3 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2023-08-08 +date: 2023-08-10 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 e3d1e559f3f0d6..d8666f439297d7 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 544a84a94c0697..0f019717f1a3e3 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2023-08-08 +date: 2023-08-10 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 20667b6757a8df..4166cd3a51e6a0 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2023-08-08 +date: 2023-08-10 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 7c20d850bdd3d5..f5b98d82c200b2 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2023-08-08 +date: 2023-08-10 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 332dab42ea5ece..7e7c53bfb029a5 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2023-08-08 +date: 2023-08-10 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 08a9a3fb7df56e..b859b6745a2133 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-08-08 +date: 2023-08-10 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 337ba8695482a8..c5f9514bc0c658 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-08-08 +date: 2023-08-10 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 7558dc4339d3f1..853a7dd951ca27 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-08-08 +date: 2023-08-10 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 89db217814781e..3d176057d5edd2 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index b4fad8a1375812..e336c9f6f8a6a1 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index 3e8d6352e66f7a..e21a5090c6edbf 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -493,7 +493,7 @@ "label": "upgradeAssistant", "description": [], "signature": [ - "{ readonly overview: string; readonly batchReindex: string; readonly remoteReindex: string; }" + "{ readonly overview: string; readonly batchReindex: string; readonly remoteReindex: string; readonly reindexWithPipeline: string; }" ], "path": "packages/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 5939e5a135fa4d..d9075a7e7934a3 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-08-08 +date: 2023-08-10 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 06fbb1b04042ee..c90eb47fc8ebfd 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 9423dfb94366cc..ac85c4ff798d8e 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2023-08-08 +date: 2023-08-10 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 9fa55673ed2b08..18cdd3e94731b0 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 7ba02853d106fa..1fd2511549f56e 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 0dbcabd54280f7..e8184cd642a778 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 3d27411f79c8ab..55c35b7e146ee3 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 265c4b5b4b2e53..5050f95627eccf 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-08-08 +date: 2023-08-10 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 06d97ea2e6c09f..c96bdbd286d340 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-08-08 +date: 2023-08-10 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 d6cef59c85df9b..6b88702a88dc1e 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index b152de1a0efad3..07413ad66ef3af 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-08-08 +date: 2023-08-10 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 f5bfbca78eb956..ed6d8ead4aa3a2 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-08-08 +date: 2023-08-10 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 cda3ff57e110d6..e5d1042aec5944 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 4ce21cb4603ce5..2498132adc2269 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2023-08-08 +date: 2023-08-10 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.devdocs.json b/api_docs/kbn_event_annotation_components.devdocs.json index e835390ba84acd..54b9e95eb01e10 100644 --- a/api_docs/kbn_event_annotation_components.devdocs.json +++ b/api_docs/kbn_event_annotation_components.devdocs.json @@ -1131,7 +1131,15 @@ "section": "def-common.SavedObjectCommon", "text": "SavedObjectCommon" }, - "; }) => void; onCreateNew: () => void; }) => JSX.Element" + "<", + { + "pluginId": "savedObjectsFinder", + "scope": "common", + "docId": "kibSavedObjectsFinderPluginApi", + "section": "def-common.FinderAttributes", + "text": "FinderAttributes" + }, + ">; }) => void; onCreateNew: () => void; }) => JSX.Element" ], "path": "packages/kbn-event-annotation-components/types.ts", "deprecated": false, @@ -1178,7 +1186,15 @@ "section": "def-common.SavedObjectCommon", "text": "SavedObjectCommon" }, - "; }) => void" + "<", + { + "pluginId": "savedObjectsFinder", + "scope": "common", + "docId": "kibSavedObjectsFinderPluginApi", + "section": "def-common.FinderAttributes", + "text": "FinderAttributes" + }, + ">; }) => void" ], "path": "packages/kbn-event-annotation-components/types.ts", "deprecated": false, @@ -1237,13 +1253,21 @@ "description": [], "signature": [ { - "pluginId": "@kbn/core-saved-objects-common", + "pluginId": "@kbn/content-management-utils", + "scope": "common", + "docId": "kibKbnContentManagementUtilsPluginApi", + "section": "def-common.SOWithMetadata", + "text": "SOWithMetadata" + }, + "<", + { + "pluginId": "savedObjectsFinder", "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObject", - "text": "SavedObject" + "docId": "kibSavedObjectsFinderPluginApi", + "section": "def-common.FinderAttributes", + "text": "FinderAttributes" }, - "" + ">" ], "path": "packages/kbn-event-annotation-components/types.ts", "deprecated": false, diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 9cd8f7214cfa8a..02b3d4b1a216d3 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 732812f7a79b7a..365b3085bd27cc 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2023-08-08 +date: 2023-08-10 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 5bdbfb13a0efbd..6b93bad46d7514 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 2c8eb05ed00fb5..3d3c6614c75f73 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-08-08 +date: 2023-08-10 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 dcd7828d8f7299..f95efa21d18312 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 5ab4aeed0523f6..0e46c21e563715 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-08-08 +date: 2023-08-10 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 a40025b07062db..ebf4aa2ab79ffe 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2023-08-08 +date: 2023-08-10 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 195dc456047cf5..d64302ecba7d3c 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx index de8d08099659fd..02d760595f2652 100644 --- a/api_docs/kbn_generate_csv_types.mdx +++ b/api_docs/kbn_generate_csv_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types title: "@kbn/generate-csv-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv-types plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types'] --- import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index e03dc06db9fa2f..101b5f981a365c 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 7e1396bcb36334..9ad0a5673680d1 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-08-08 +date: 2023-08-10 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 fe31787dee3e44..4886cf25578742 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 aa9e3fd4aeea11..3802212b8eb146 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-08-08 +date: 2023-08-10 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 5f08767456ce96..3051660f3aede7 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-08-08 +date: 2023-08-10 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 c58cdd56cebd38..10a295a760f741 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-08-08 +date: 2023-08-10 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 2f53834a6ea423..51da5c5b5baff1 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-08-08 +date: 2023-08-10 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 5f867be9c59b25..23ca2e22cc6b81 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-08-08 +date: 2023-08-10 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 abce71a5066374..3ce1d23d09c4b3 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 20c0060b80444b..3244c174af0a6a 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2023-08-08 +date: 2023-08-10 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 769d75499448a4..29ec1aaa8c593b 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.devdocs.json b/api_docs/kbn_io_ts_utils.devdocs.json index 88c594ba2f1bc1..06b7c2f9c51371 100644 --- a/api_docs/kbn_io_ts_utils.devdocs.json +++ b/api_docs/kbn_io_ts_utils.devdocs.json @@ -996,7 +996,7 @@ "description": [], "signature": [ "Type", - "" + "" ], "path": "packages/kbn-io-ts-utils/src/to_boolean_rt/index.ts", "deprecated": false, diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 7871742ad90e1d..6c7ec1976753a5 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 5275a27b9dc425..367e2690e7bb17 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-08-08 +date: 2023-08-10 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 ba7fc5802fd43d..a98049fb4dd269 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-08-08 +date: 2023-08-10 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 9d53c0f40410b9..67e9b1ddef60f8 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index c81f36b2dd3005..72ff23c0594328 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index d55332c57262e4..71799546b4e996 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 30e81fe7e6dce5..85d66708cb65e4 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-08-08 +date: 2023-08-10 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 23defe077087cc..d85fa5685be5e8 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index f2c347ff0d8e22..6e5ff13b5fb253 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-08-08 +date: 2023-08-10 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 7b2f34834dc065..0ea3f4156b07ce 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2023-08-08 +date: 2023-08-10 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_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index e1ee8679a1f9e5..7135df80a02500 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index fe91a56bfe9512..adf5e164476947 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-08-08 +date: 2023-08-10 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 6c99005c7825ac..25ea6d1ddbf37b 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 27d6a1535e2cdb..9ab81cda021b09 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 e80999e46e2ccd..3fd56d85c061c5 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 2f32314397b453..9450e44a5d613b 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 046a864c1ba4a6..1bec7154b1fac0 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 55bb1c3e001a94..4f5721186f4365 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2023-08-08 +date: 2023-08-10 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 194920b61337ea..8200185dd676dd 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-08-08 +date: 2023-08-10 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 2332cec54f230e..6887f9dfa1e003 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 b863f9b37db681..4be90bea3c796b 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 6807a03355675d..ce2db9a911c852 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2023-08-08 +date: 2023-08-10 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 495dd2e996efb8..11e1c61046bbf3 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-08-08 +date: 2023-08-10 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 ca1444af45137b..b9b1bcc1d9b1c4 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 3b1ab520333fdb..33fe3a77c02419 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index d000fb610f36cd..f7621acc959af3 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-08-08 +date: 2023-08-10 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 69e93bf55bcb85..015eba349a7233 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-08-08 +date: 2023-08-10 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 dc3aa4b33ce9c9..f38f1b19de1e91 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 70d162bde8b08d..f1c63620a1d4cc 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 ffd5f8a5881e1f..f5304553a8aa41 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 ff84ab0ed20d7e..92506805309af1 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 5086d30b3eb5d6..ce9a687d1f9d1a 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 42c0c41ca1e7f0..9e709e52bd4822 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 41c37b3de70606..16a18c689ad81f 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 358eadfb736597..9d3a0ad27403d0 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 64b83da073a338..2a4a66ba5623d1 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 4d20d05ca243f0..a4579d6d21b553 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 894950a4c61ef6..d2bbc5d60df94e 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 6791b1d97fe5a6..039fd169e81d34 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-08-08 +date: 2023-08-10 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 85bf9046af9771..68f6c2b8ba3cab 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-08-08 +date: 2023-08-10 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 bda4fcd0166157..04f327032e7da5 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 051f8d90787bf4..3c87b9c0a1a819 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 9efe6b300e30b3..ce0d0e970141df 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-08-08 +date: 2023-08-10 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 431a8af99adf60..2daac55d98b5f4 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index 289486f09d428b..106e8eb4f681d3 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index da5d2409645840..c01c73532ed547 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index b23eb4928089b3..e964b0faaaa73f 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2023-08-08 +date: 2023-08-10 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 1af5802080806e..36f24195bb5249 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2023-08-08 +date: 2023-08-10 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 ac75bb3bdb3117..1f5954d8df2abf 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2023-08-08 +date: 2023-08-10 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 957713bb1a751d..d3dbc3f7848bfa 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2023-08-08 +date: 2023-08-10 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 e2aa061cb4bea2..e134d71dba66e4 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2023-08-08 +date: 2023-08-10 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 c7d6c27548c554..18336f8c9acc2c 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index b9c9725d04ee65..740a64be48407d 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-08-08 +date: 2023-08-10 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 7392e055177b33..3cdeed510f331a 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-08-08 +date: 2023-08-10 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 62955e96811dae..2dcf054899ac72 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-08-08 +date: 2023-08-10 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 d7bab19e316edb..1ec1665d982a06 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-08-08 +date: 2023-08-10 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 f2dcf6582a1a4c..6d8bf92b0fd852 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index d39dc1c0385ae5..9ae13dad59ab12 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index aa118bc496e351..473185e7ec57d2 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2023-08-08 +date: 2023-08-10 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 92409aa81aa389..4d410fa27c46a2 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 bb0bc3382f5025..6600a72923ae61 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index 815a1197552d06..0a5fdef30287b9 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2023-08-08 +date: 2023-08-10 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 0a74cefaf140ab..b1a2f5e29171e1 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2023-08-08 +date: 2023-08-10 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 ae4497a82d076d..b1b81584c877cc 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 8726c382686400..db72e41129b276 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-08-08 +date: 2023-08-10 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 235ece6579de97..998cd2d31a6b75 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2023-08-08 +date: 2023-08-10 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 5589b2f530f971..6fb69d797146bd 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-08-08 +date: 2023-08-10 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 c629a70eaeae36..1101bf7bed18e1 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 8784dae4ef7d89..04c11e6ab92b82 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index 1435f7d61f57fc..166de05b4763ad 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 32ca05053289c7..cb48b87491d7bf 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 22a450072fd3ef..d251ce0237e69f 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index ebab6071e8d813..ae09f11f1fbae1 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-08-08 +date: 2023-08-10 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 87a6fd81b10ead..091260a1e4bcf8 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-08-08 +date: 2023-08-10 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 e87c29be26fe1f..5488a4d058e5bf 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 8d9f9842dc69f7..fbba031701e5b0 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-08-08 +date: 2023-08-10 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 df6f0c1128ce5f..850468aeafd84f 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-08-08 +date: 2023-08-10 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 c9430b91c18995..5605d23108058a 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-08-08 +date: 2023-08-10 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 7f4b2d4750f03c..7b96c67b434231 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 650998ba6f3211..329ecfa0fe9d90 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-08-08 +date: 2023-08-10 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 6108a52fc0879f..1c8bc83eaa5c55 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index 047a13ff0e0fdc..b07ecb81aaaf11 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-08-08 +date: 2023-08-10 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 88150273d7da5f..76af845693f602 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-08-08 +date: 2023-08-10 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 f6196c49f29407..34f94831f29e54 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 6f280358cec5c1..08d49860857107 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2023-08-08 +date: 2023-08-10 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_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index 9a18e91b6ff780..58a79277bd948a 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2023-08-08 +date: 2023-08-10 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 f5a753bc3aaab8..fbd77da2f73419 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-08-08 +date: 2023-08-10 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 41d395bf7e246f..a193a2e99e497b 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index 4beb3231db4522..9545b150e37497 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 919291ee2d24d8..c7c3d427a869a5 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index 31f67a7732224e..a22979f5b13c8c 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index c7be5ae0d8d237..398025a6836745 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-08-08 +date: 2023-08-10 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 4923afb2f35630..a8b7cd7387f1c5 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-08-08 +date: 2023-08-10 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 759df6f7009950..37b6b3c8648bf0 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 8623b7e4f4d27a..f99775fb830e6b 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 079cd7d6a5dcb5..823cf69e0db541 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-08-08 +date: 2023-08-10 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 811357a1397285..d6e4a179d27a9b 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-08-08 +date: 2023-08-10 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 47814b8c7eb515..991285d262c139 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 91388199fbe638..cae2eb79f4ca11 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 edddbc6f20c0bd..fdb550af1e08b8 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-08-08 +date: 2023-08-10 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 4cc3a68c3d1db4..857d7a7f2b9aaf 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2023-08-08 +date: 2023-08-10 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 b521456e62f20e..cb23e3c4bbdd5e 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-08-08 +date: 2023-08-10 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 e9b286aa5109fd..66229224862877 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-08-08 +date: 2023-08-10 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 6451b59819e844..0dbcf32a88f151 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-08-08 +date: 2023-08-10 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 e7b3f47baf8e7f..98ec4209f7b671 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 21e9e7cf31995d..14c9140cf23bc6 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-08-08 +date: 2023-08-10 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 71229302d7c5b6..7170a26c7c0f39 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 90f4bd8dcad842..31b7a060b7fd46 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-08-08 +date: 2023-08-10 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 6bb75d60c122fd..fdebed3eae57d3 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 5578bc12670a50..8404a52eeaabbb 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-08-08 +date: 2023-08-10 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 7a25309d4728de..8bf4897074ffd3 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 561b6e180acac8..e5715200637da2 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-08-08 +date: 2023-08-10 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 6b8591b832ca7e..ac2d30496dceeb 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 77ff7acea59277..27d2cd32d78bf9 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-08-08 +date: 2023-08-10 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 a84303e13216c2..3e68934c3f1c01 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-08-08 +date: 2023-08-10 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 0ea4839401c009..9f80c59c10f1dd 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 46a518352d9a9b..16c403fdc4687d 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 c3b6c74213720e..a4a60ea678e592 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-08-08 +date: 2023-08-10 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 e3edf8a67b8ea8..3a5bfb3535ccf0 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-08-08 +date: 2023-08-10 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 42af8a9811ca51..64dc173a2b377d 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 d5707fbb5792e1..0a01bc802c9247 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-08-08 +date: 2023-08-10 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 65d2a81e0e5b39..cd222a033e70fc 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-08-08 +date: 2023-08-10 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 5964795eb49d4f..7c90908187da5f 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-08-08 +date: 2023-08-10 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 74cbfba121c9ca..598a397c9a7d22 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-08-08 +date: 2023-08-10 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 8d6ff717194244..96c4501f84f302 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index ef0fe567eb189a..0fbb5c73c78ab5 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 213dffb218e960..970a213cc8643d 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-08-08 +date: 2023-08-10 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 ec092e1d0296d9..743b1866288fa4 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index c680cf30e2b201..19a122703a83d0 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-08-08 +date: 2023-08-10 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 5d8ec59ecb184b..cfe4fd52ff873b 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-08-08 +date: 2023-08-10 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 755ee9f447cd97..da3af1449decfb 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index a046a972fb1af6..358ccda31ce173 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-08-08 +date: 2023-08-10 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 740c3f77368e13..f9dae23c767a7f 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 67378b52f35ada..1d99d57a481b22 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-08-08 +date: 2023-08-10 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 c520055faac883..4bbb77543c64f3 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index da6967718d10ac..c803989e4246d0 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 4fbb7781ad46f3..de2fdce4ded2d4 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 2c6610824c6e89..b81eb3f6eb4384 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-08-08 +date: 2023-08-10 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 d47a99ee54ce22..6248b21ab9ba78 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-08-08 +date: 2023-08-10 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 35e03a3ff3065f..4b4187bf32ed9f 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-08-08 +date: 2023-08-10 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 8407eb4258544e..7914f81c134df4 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-08-08 +date: 2023-08-10 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 6cb41dc8c4f9c5..96f6401319ff43 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 3b0bd687483b8f..6df817423e5276 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index 17cf7043cdaf11..52be8790127a8c 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state'] --- import kbnUrlStateObj from './kbn_url_state.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.devdocs.json b/api_docs/kbn_user_profile_components.devdocs.json index 73f567df595efa..6082e35d46bb91 100644 --- a/api_docs/kbn_user_profile_components.devdocs.json +++ b/api_docs/kbn_user_profile_components.devdocs.json @@ -172,6 +172,57 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfilesKibanaProvider", + "type": "Function", + "tags": [], + "label": "UserProfilesKibanaProvider", + "description": [ + "\nKibana-specific Provider that maps to known dependency types." + ], + "signature": [ + "({ children, ...services }: React.PropsWithChildren<", + { + "pluginId": "@kbn/user-profile-components", + "scope": "common", + "docId": "kibKbnUserProfileComponentsPluginApi", + "section": "def-common.UserProfilesKibanaDependencies", + "text": "UserProfilesKibanaDependencies" + }, + ">) => JSX.Element" + ], + "path": "packages/kbn-user-profile-components/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfilesKibanaProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n children,\n ...services\n}", + "description": [], + "signature": [ + "React.PropsWithChildren<", + { + "pluginId": "@kbn/user-profile-components", + "scope": "common", + "docId": "kibKbnUserProfileComponentsPluginApi", + "section": "def-common.UserProfilesKibanaDependencies", + "text": "UserProfilesKibanaDependencies" + }, + ">" + ], + "path": "packages/kbn-user-profile-components/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/user-profile-components", "id": "def-common.UserProfilesPopover", @@ -230,6 +281,45 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfilesProvider", + "type": "Function", + "tags": [], + "label": "UserProfilesProvider", + "description": [ + "\nAbstract external service Provider." + ], + "signature": [ + "({ children, ...services }: React.PropsWithChildren<", + "Services", + ">) => JSX.Element" + ], + "path": "packages/kbn-user-profile-components/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfilesProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "{ children, ...services }", + "description": [], + "signature": [ + "React.PropsWithChildren<", + "Services", + ">" + ], + "path": "packages/kbn-user-profile-components/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/user-profile-components", "id": "def-common.UserProfilesSelectable", @@ -338,6 +428,55 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.useUpdateUserProfile", + "type": "Function", + "tags": [], + "label": "useUpdateUserProfile", + "description": [], + "signature": [ + "({ notificationSuccess, pageReloadChecker, }?: Props) => { update: (updatedData: D) => Promise; showSuccessNotification: ({ isRefreshRequired }?: { isRefreshRequired?: boolean | undefined; }) => void; userProfileData: ", + { + "pluginId": "@kbn/user-profile-components", + "scope": "common", + "docId": "kibKbnUserProfileComponentsPluginApi", + "section": "def-common.UserProfileData", + "text": "UserProfileData" + }, + " | null | undefined; isLoading: boolean; }" + ], + "path": "packages/kbn-user-profile-components/src/hooks/use_update_user_profile.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.useUpdateUserProfile.$1", + "type": "Object", + "tags": [], + "label": "{\n notificationSuccess = {},\n pageReloadChecker,\n}", + "description": [], + "signature": [ + "Props" + ], + "path": "packages/kbn-user-profile-components/src/hooks/use_update_user_profile.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [ @@ -575,7 +714,7 @@ "description": [ "\nAvatar stored in user profile." ], - "path": "packages/kbn-user-profile-components/src/user_profile.ts", + "path": "packages/kbn-user-profile-components/src/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -591,7 +730,7 @@ "signature": [ "string | undefined" ], - "path": "packages/kbn-user-profile-components/src/user_profile.ts", + "path": "packages/kbn-user-profile-components/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -607,7 +746,7 @@ "signature": [ "string | undefined" ], - "path": "packages/kbn-user-profile-components/src/user_profile.ts", + "path": "packages/kbn-user-profile-components/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -623,13 +762,219 @@ "signature": [ "string | null | undefined" ], - "path": "packages/kbn-user-profile-components/src/user_profile.ts", + "path": "packages/kbn-user-profile-components/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfileData", + "type": "Interface", + "tags": [], + "label": "UserProfileData", + "description": [], + "path": "packages/kbn-user-profile-components/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfileData.avatar", + "type": "Object", + "tags": [], + "label": "avatar", + "description": [], + "signature": [ + { + "pluginId": "@kbn/user-profile-components", + "scope": "common", + "docId": "kibKbnUserProfileComponentsPluginApi", + "section": "def-common.UserProfileAvatarData", + "text": "UserProfileAvatarData" + }, + " | undefined" + ], + "path": "packages/kbn-user-profile-components/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfileData.userSettings", + "type": "Object", + "tags": [], + "label": "userSettings", + "description": [], + "signature": [ + { + "pluginId": "@kbn/user-profile-components", + "scope": "common", + "docId": "kibKbnUserProfileComponentsPluginApi", + "section": "def-common.UserSettingsData", + "text": "UserSettingsData" + }, + " | undefined" + ], + "path": "packages/kbn-user-profile-components/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfileData.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[key: string]: unknown", + "description": [], + "signature": [ + "[key: string]: unknown" + ], + "path": "packages/kbn-user-profile-components/src/types.ts", "deprecated": false, "trackAdoption": false } ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfilesKibanaDependencies", + "type": "Interface", + "tags": [], + "label": "UserProfilesKibanaDependencies", + "description": [ + "\nKibana-specific service types." + ], + "path": "packages/kbn-user-profile-components/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfilesKibanaDependencies.core", + "type": "Object", + "tags": [], + "label": "core", + "description": [ + "CoreStart contract" + ], + "signature": [ + "{ notifications: ", + { + "pluginId": "@kbn/core-notifications-browser", + "scope": "common", + "docId": "kibKbnCoreNotificationsBrowserPluginApi", + "section": "def-common.NotificationsStart", + "text": "NotificationsStart" + }, + "; theme: ", + { + "pluginId": "@kbn/core-theme-browser", + "scope": "common", + "docId": "kibKbnCoreThemeBrowserPluginApi", + "section": "def-common.ThemeServiceStart", + "text": "ThemeServiceStart" + }, + "; }" + ], + "path": "packages/kbn-user-profile-components/src/services.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfilesKibanaDependencies.security", + "type": "Object", + "tags": [], + "label": "security", + "description": [], + "signature": [ + "{ userProfiles: ", + "UserProfileAPIClient", + "; }" + ], + "path": "packages/kbn-user-profile-components/src/services.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfilesKibanaDependencies.toMountPoint", + "type": "Function", + "tags": [], + "label": "toMountPoint", + "description": [ + "\nHandler from the '@kbn/kibana-react-plugin/public' Plugin\n\n```\nimport { toMountPoint } from '@kbn/kibana-react-plugin/public';\n```" + ], + "signature": [ + "(node: React.ReactNode, options?: { theme$: ", + "Observable", + "<{ readonly darkMode: boolean; }>; } | undefined) => ", + { + "pluginId": "@kbn/core-mount-utils-browser", + "scope": "common", + "docId": "kibKbnCoreMountUtilsBrowserPluginApi", + "section": "def-common.MountPoint", + "text": "MountPoint" + }, + "" + ], + "path": "packages/kbn-user-profile-components/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfilesKibanaDependencies.toMountPoint.$1", + "type": "CompoundType", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "React.ReactNode" + ], + "path": "packages/kbn-user-profile-components/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfilesKibanaDependencies.toMountPoint.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "path": "packages/kbn-user-profile-components/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserProfilesKibanaDependencies.toMountPoint.$2.theme$", + "type": "Object", + "tags": [], + "label": "theme$", + "description": [], + "signature": [ + "Observable", + "<{ readonly darkMode: boolean; }>" + ], + "path": "packages/kbn-user-profile-components/src/services.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/user-profile-components", "id": "def-common.UserProfilesPopoverProps", @@ -1093,6 +1438,43 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserSettingsData", + "type": "Interface", + "tags": [], + "label": "UserSettingsData", + "description": [ + "\nUser settings stored in the data object of the User Profile" + ], + "path": "packages/kbn-user-profile-components/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UserSettingsData.darkMode", + "type": "CompoundType", + "tags": [], + "label": "darkMode", + "description": [], + "signature": [ + { + "pluginId": "@kbn/user-profile-components", + "scope": "common", + "docId": "kibKbnUserProfileComponentsPluginApi", + "section": "def-common.DarkModeValue", + "text": "DarkModeValue" + }, + " | undefined" + ], + "path": "packages/kbn-user-profile-components/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/user-profile-components", "id": "def-common.UserToolTipProps", @@ -1169,6 +1551,69 @@ ], "enums": [], "misc": [ + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.DarkModeValue", + "type": "Type", + "tags": [], + "label": "DarkModeValue", + "description": [], + "signature": [ + "\"\" | \"light\" | \"dark\"" + ], + "path": "packages/kbn-user-profile-components/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UpdateUserProfileHook", + "type": "Type", + "tags": [], + "label": "UpdateUserProfileHook", + "description": [], + "signature": [ + "({ notificationSuccess, pageReloadChecker, }?: Props) => { update: (updatedData: D) => Promise; showSuccessNotification: ({ isRefreshRequired }?: { isRefreshRequired?: boolean | undefined; }) => void; userProfileData: ", + { + "pluginId": "@kbn/user-profile-components", + "scope": "common", + "docId": "kibKbnUserProfileComponentsPluginApi", + "section": "def-common.UserProfileData", + "text": "UserProfileData" + }, + " | null | undefined; isLoading: boolean; }" + ], + "path": "packages/kbn-user-profile-components/src/hooks/use_update_user_profile.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/user-profile-components", + "id": "def-common.UpdateUserProfileHook.$1", + "type": "Object", + "tags": [], + "label": "__0", + "description": [], + "signature": [ + "Props" + ], + "path": "packages/kbn-user-profile-components/src/hooks/use_update_user_profile.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/user-profile-components", "id": "def-common.UserProfileWithAvatar", diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 25e3e061b5b026..691b204e0d2892 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 58 | 0 | 5 | 0 | +| 80 | 0 | 21 | 2 | ## Common diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index a5f33d9761e5e7..ae1e131251210d 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-08-08 +date: 2023-08-10 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 247cf97516111b..79efc58af5a46b 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-08-08 +date: 2023-08-10 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 4483896e948fa9..05d8ec753475f9 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-08-08 +date: 2023-08-10 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 2399b8a856ad1e..4979e45203494f 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index b9927fd6e19f7a..dac217dabfb5cb 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 6e1f9222238c7c..bec775fbd5cde7 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index 7464f3e995e0b1..1e490cd0d8e780 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -916,6 +916,18 @@ "plugin": "visualizations", "path": "src/plugins/visualizations/public/visualize_app/index.tsx" }, + { + "plugin": "serverless", + "path": "x-pack/plugins/serverless/public/plugin.tsx" + }, + { + "plugin": "serverless", + "path": "x-pack/plugins/serverless/public/plugin.tsx" + }, + { + "plugin": "serverless", + "path": "x-pack/plugins/serverless/public/plugin.tsx" + }, { "plugin": "controls", "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx" @@ -1136,18 +1148,6 @@ "plugin": "lens", "path": "x-pack/plugins/lens/public/embeddable/embeddable.tsx" }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/public/application/maintenance_windows.tsx" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/public/application/maintenance_windows.tsx" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/public/application/maintenance_windows.tsx" - }, { "plugin": "security", "path": "x-pack/plugins/security/public/authentication/access_agreement/access_agreement_page.tsx" @@ -1268,6 +1268,18 @@ "plugin": "security", "path": "x-pack/plugins/security/public/nav_control/nav_control_service.tsx" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/public/application/maintenance_windows.tsx" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/public/application/maintenance_windows.tsx" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/public/application/maintenance_windows.tsx" + }, { "plugin": "triggersActionsUi", "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx" @@ -1292,18 +1304,6 @@ "plugin": "triggersActionsUi", "path": "x-pack/plugins/triggers_actions_ui/public/application/connectors_app.tsx" }, - { - "plugin": "serverless", - "path": "x-pack/plugins/serverless/public/plugin.tsx" - }, - { - "plugin": "serverless", - "path": "x-pack/plugins/serverless/public/plugin.tsx" - }, - { - "plugin": "serverless", - "path": "x-pack/plugins/serverless/public/plugin.tsx" - }, { "plugin": "cases", "path": "x-pack/plugins/cases/public/application.tsx" @@ -1316,6 +1316,18 @@ "plugin": "cases", "path": "x-pack/plugins/cases/public/application.tsx" }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx" + }, { "plugin": "discover", "path": "src/plugins/discover/public/embeddable/saved_search_embeddable.tsx" @@ -1372,6 +1384,18 @@ "plugin": "exploratoryView", "path": "x-pack/plugins/exploratory_view/public/application/index.tsx" }, + { + "plugin": "observabilityAIAssistant", + "path": "x-pack/plugins/observability_ai_assistant/public/application.tsx" + }, + { + "plugin": "observabilityAIAssistant", + "path": "x-pack/plugins/observability_ai_assistant/public/application.tsx" + }, + { + "plugin": "observabilityAIAssistant", + "path": "x-pack/plugins/observability_ai_assistant/public/application.tsx" + }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/public/applications/integrations/app.tsx" @@ -3634,61 +3658,13 @@ "plugin": "lens", "path": "x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts" }, - { - "plugin": "@kbn/ml-date-picker", - "path": "x-pack/packages/ml/date_picker/src/hooks/use_date_picker_context.tsx" - }, - { - "plugin": "aiops", - "path": "x-pack/plugins/aiops/public/components/log_categorization/log_categorization_app_state.tsx" - }, - { - "plugin": "aiops", - "path": "x-pack/plugins/aiops/public/components/log_categorization/log_categorization_app_state.tsx" - }, - { - "plugin": "aiops", - "path": "x-pack/plugins/aiops/public/components/log_categorization/show_flyout.tsx" - }, - { - "plugin": "aiops", - "path": "x-pack/plugins/aiops/public/components/log_categorization/show_flyout.tsx" - }, - { - "plugin": "aiops", - "path": "x-pack/plugins/aiops/public/components/log_categorization/show_flyout.tsx" - }, - { - "plugin": "aiops", - "path": "x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx" - }, - { - "plugin": "aiops", - "path": "x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx" - }, - { - "plugin": "aiops", - "path": "x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx" - }, - { - "plugin": "aiops", - "path": "x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx" - }, - { - "plugin": "aiops", - "path": "x-pack/plugins/aiops/public/components/change_point_detection/change_point_detection_root.tsx" - }, - { - "plugin": "aiops", - "path": "x-pack/plugins/aiops/public/components/change_point_detection/change_point_detection_root.tsx" - }, { "plugin": "security", - "path": "x-pack/plugins/security/public/account_management/user_profile/use_update_user_profile.tsx" + "path": "x-pack/plugins/security/public/account_management/account_management_app.tsx" }, { "plugin": "security", - "path": "x-pack/plugins/security/public/account_management/user_profile/use_update_user_profile.tsx" + "path": "x-pack/plugins/security/public/account_management/account_management_app.tsx" }, { "plugin": "security", @@ -3758,6 +3734,70 @@ "plugin": "cases", "path": "x-pack/plugins/cases/public/components/visualizations/actions/add_to_existing_case.tsx" }, + { + "plugin": "@kbn/ml-date-picker", + "path": "x-pack/packages/ml/date_picker/src/hooks/use_date_picker_context.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/embeddable/handle_explicit_input.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/embeddable/handle_explicit_input.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/components/log_categorization/log_categorization_app_state.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/components/log_categorization/log_categorization_app_state.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/components/log_categorization/show_flyout.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/components/log_categorization/show_flyout.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/components/log_categorization/show_flyout.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/components/change_point_detection/change_point_detection_root.tsx" + }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/components/change_point_detection/change_point_detection_root.tsx" + }, { "plugin": "observabilityShared", "path": "x-pack/plugins/observability_shared/public/components/header_menu/header_menu_portal.tsx" @@ -3992,35 +4032,35 @@ }, { "plugin": "ml", - "path": "x-pack/plugins/ml/public/embeddables/job_creation/common/create_flyout.tsx" + "path": "x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/public/embeddables/job_creation/common/create_flyout.tsx" + "path": "x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx" + "path": "x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx" + "path": "x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_setup_flyout.tsx" + "path": "x-pack/plugins/ml/public/embeddables/job_creation/common/create_flyout.tsx" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_setup_flyout.tsx" + "path": "x-pack/plugins/ml/public/embeddables/job_creation/common/create_flyout.tsx" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx" + "path": "x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_setup_flyout.tsx" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx" + "path": "x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_setup_flyout.tsx" }, { "plugin": "ml", @@ -4138,6 +4178,14 @@ "plugin": "timelines", "path": "x-pack/plugins/timelines/public/components/hover_actions/actions/add_to_timeline.tsx" }, + { + "plugin": "cloudSecurityPosture", + "path": "x-pack/plugins/cloud_security_posture/public/components/take_action.tsx" + }, + { + "plugin": "cloudSecurityPosture", + "path": "x-pack/plugins/cloud_security_posture/public/components/take_action.tsx" + }, { "plugin": "runtimeFields", "path": "x-pack/plugins/runtime_fields/public/shared_imports.ts" @@ -4514,6 +4562,14 @@ "plugin": "uptime", "path": "x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx" }, + { + "plugin": "cloudLinks", + "path": "x-pack/plugins/cloud_integrations/cloud_links/public/maybe_add_cloud_links/theme_darkmode_toggle.tsx" + }, + { + "plugin": "cloudLinks", + "path": "x-pack/plugins/cloud_integrations/cloud_links/public/maybe_add_cloud_links/theme_darkmode_toggle.tsx" + }, { "plugin": "console", "path": "src/plugins/console/public/shared_imports.ts" diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index fd0b38bf12cb12..c7be1b62d86ec8 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-08-08 +date: 2023-08-10 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 d0010371e0fea4..4dcb18805a70fc 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-08-08 +date: 2023-08-10 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 6f976bbdca7fa6..d70815191743cb 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index e33e34a0b36bee..1a13adf50b509f 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-08-08 +date: 2023-08-10 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 0583a521ae2f94..ea90872093f0a9 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-08-08 +date: 2023-08-10 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 128e3d18314c05..95d2563383ae52 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.devdocs.json b/api_docs/licensing.devdocs.json index e78f38fff12e2e..9e94dad897ead0 100644 --- a/api_docs/licensing.devdocs.json +++ b/api_docs/licensing.devdocs.json @@ -810,6 +810,10 @@ "plugin": "security", "path": "x-pack/plugins/security/public/plugin.tsx" }, + { + "plugin": "aiops", + "path": "x-pack/plugins/aiops/public/plugin.tsx" + }, { "plugin": "licenseManagement", "path": "x-pack/plugins/license_management/public/plugin.ts" diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 98d216c70b6d66..9bdde79f8dd6ff 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 0959f42b36730d..e6be664391f649 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 4444e39542caf0..2493ce0d839da4 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2023-08-08 +date: 2023-08-10 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 77219c568a9b92..28c2a79ba3ef0f 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-08-08 +date: 2023-08-10 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 2191f1726b317a..a760931ca5d51a 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-08-08 +date: 2023-08-10 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 4a596b8f87948a..4f61e1abe3a128 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index aac94910e94b10..84fd36f31e5f59 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 1ac07084a95b9f..d61214544d53b3 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-08-08 +date: 2023-08-10 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 b5e8501f6ebd45..f2ec25e486513f 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-08-08 +date: 2023-08-10 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 f0e8b14832169d..5edf0c3638b1da 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-08-08 +date: 2023-08-10 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 3b494d9a2daada..4ab7b81595545f 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 8ebb28a12df009..ded2a49def1375 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-08-08 +date: 2023-08-10 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 60932d66f5c74a..8cc7e821fa1a3f 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -4371,7 +4371,7 @@ "label": "createOrUpdateIndex", "description": [], "signature": [ - "({\n index,\n mappings,\n settings,\n client,\n logger,\n}: { index: string; mappings: ", + "({\n index,\n mappings,\n client,\n logger,\n}: { index: string; mappings: ", "MappingTypeMapping", " & { date_detection?: boolean | undefined; dynamic?: ", "MappingDynamicMapping", @@ -4391,9 +4391,7 @@ "MappingSourceField", " | undefined; runtime?: ", "MappingRuntimeFields", - " | undefined; }; settings?: ", - "IndicesIndexSettings", - " | undefined; client: ", + " | undefined; }; client: ", { "pluginId": "@kbn/core-elasticsearch-server", "scope": "common", @@ -4420,7 +4418,7 @@ "id": "def-server.createOrUpdateIndex.$1", "type": "Object", "tags": [], - "label": "{\n index,\n mappings,\n settings,\n client,\n logger,\n}", + "label": "{\n index,\n mappings,\n client,\n logger,\n}", "description": [], "path": "x-pack/plugins/observability/server/utils/create_or_update_index.ts", "deprecated": false, @@ -4470,21 +4468,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "observability", - "id": "def-server.createOrUpdateIndex.$1.settings", - "type": "CompoundType", - "tags": [], - "label": "settings", - "description": [], - "signature": [ - "IndicesIndexSettings", - " | undefined" - ], - "path": "x-pack/plugins/observability/server/utils/create_or_update_index.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "observability", "id": "def-server.createOrUpdateIndex.$1.client", diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 2187ddd6940b1e..0e2c22afa279de 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/actionable-observability](https://github.com/orgs/elastic/team | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 509 | 45 | 502 | 16 | +| 508 | 45 | 501 | 16 | ## Client diff --git a/api_docs/observability_a_i_assistant.devdocs.json b/api_docs/observability_a_i_assistant.devdocs.json index 6a07ae0c41f055..f2fd46f618d937 100644 --- a/api_docs/observability_a_i_assistant.devdocs.json +++ b/api_docs/observability_a_i_assistant.devdocs.json @@ -206,6 +206,17 @@ "path": "x-pack/plugins/observability_ai_assistant/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.Conversation.public", + "type": "boolean", + "tags": [], + "label": "public", + "description": [], + "path": "x-pack/plugins/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -240,7 +251,7 @@ "label": "message", "description": [], "signature": [ - "{ content?: string | undefined; name?: string | undefined; role: ", + "{ content?: string | undefined; name?: string | undefined; event?: string | undefined; role: ", { "pluginId": "observabilityAIAssistant", "scope": "common", @@ -248,15 +259,7 @@ "section": "def-common.MessageRole", "text": "MessageRole" }, - "; function_call?: { name: string; args?: ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.Serializable", - "text": "Serializable" - }, - "; trigger: ", + "; function_call?: { name: string; arguments?: string | undefined; trigger: ", { "pluginId": "observabilityAIAssistant", "scope": "common", @@ -280,15 +283,7 @@ "section": "def-common.MessageRole", "text": "MessageRole" }, - ".Elastic; } | undefined; data?: ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.Serializable", - "text": "Serializable" - }, - "; }" + ".Elastic; } | undefined; data?: string | undefined; }" ], "path": "x-pack/plugins/observability_ai_assistant/common/types.ts", "deprecated": false, @@ -321,7 +316,115 @@ "label": "APIReturnType", "description": [], "signature": [ - "{ \"GET /internal/observability_ai_assistant/connectors\": { endpoint: \"GET /internal/observability_ai_assistant/connectors\"; params?: undefined; handler: ({}: ", + "{ \"POST /internal/observability_ai_assistant/functions/setup_kb\": { endpoint: \"POST /internal/observability_ai_assistant/functions/setup_kb\"; params?: undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + ") => Promise; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/functions/summarise\": { endpoint: \"POST /internal/observability_ai_assistant/functions/summarise\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ id: ", + "StringC", + "; text: ", + "BrandC", + "<", + "StringC", + ", ", + { + "pluginId": "@kbn/io-ts-utils", + "scope": "common", + "docId": "kibKbnIoTsUtilsPluginApi", + "section": "def-common.NonEmptyStringBrand", + "text": "NonEmptyStringBrand" + }, + ">; confidence: ", + "UnionC", + "<[", + "LiteralC", + "<\"low\">, ", + "LiteralC", + "<\"medium\">, ", + "LiteralC", + "<\"high\">]>; is_correction: ", + "Type", + "; public: ", + "Type", + "; }>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { id: string; text: ", + "Branded", + "; confidence: \"medium\" | \"high\" | \"low\"; is_correction: boolean; public: boolean; }; }; }) => Promise; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/functions/recall\": { endpoint: \"POST /internal/observability_ai_assistant/functions/recall\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ query: ", + "BrandC", + "<", + "StringC", + ", ", + { + "pluginId": "@kbn/io-ts-utils", + "scope": "common", + "docId": "kibKbnIoTsUtilsPluginApi", + "section": "def-common.NonEmptyStringBrand", + "text": "NonEmptyStringBrand" + }, + ">; }>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { query: ", + "Branded", + "; }; }; }) => Promise<{ entries: ", + "KnowledgeBaseEntry", + "[]; }>; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/functions/elasticsearch\": { endpoint: \"POST /internal/observability_ai_assistant/functions/elasticsearch\"; params?: ", + "TypeC", + "<{ body: ", + "IntersectionC", + "<[", + "TypeC", + "<{ method: ", + "UnionC", + "<[", + "LiteralC", + "<\"GET\">, ", + "LiteralC", + "<\"POST\">, ", + "LiteralC", + "<\"PATCH\">, ", + "LiteralC", + "<\"PUT\">, ", + "LiteralC", + "<\"DELETE\">]>; path: ", + "StringC", + "; }>, ", + "PartialC", + "<{ body: ", + "AnyC", + "; }>]>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { method: \"GET\" | \"DELETE\" | \"POST\" | \"PUT\" | \"PATCH\"; path: string; } & { body?: any; }; }; }) => Promise; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"GET /internal/observability_ai_assistant/connectors\": { endpoint: \"GET /internal/observability_ai_assistant/connectors\"; params?: undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", ") => Promise<", { @@ -421,7 +524,15 @@ "StringC", "; }>; }> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { conversationId: string; }; }; }) => Promise; } & ", + " & { params: { path: { conversationId: string; }; }; }) => Promise<", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Conversation", + "text": "Conversation" + }, + ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", "TypeC", @@ -449,7 +560,21 @@ }, ", unknown>>; connectorId: ", "StringC", - "; }>; }> | undefined; handler: ({}: ", + "; functions: ", + "ArrayC", + "<", + "TypeC", + "<{ name: ", + "StringC", + "; description: ", + "StringC", + "; parameters: ", + "AnyC", + "; contexts: ", + "ArrayC", + "<", + "StringC", + ">; }>>; }>; }> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -459,7 +584,7 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; }; }; }) => Promise<", + "[]; connectorId: string; functions: { name: string; description: string; parameters: any; contexts: string[]; }[]; }; }; }) => Promise<", "IncomingMessage", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", @@ -480,7 +605,115 @@ "label": "ObservabilityAIAssistantAPIClientRequestParamsOf", "description": [], "signature": [ - "{ \"GET /internal/observability_ai_assistant/connectors\": { endpoint: \"GET /internal/observability_ai_assistant/connectors\"; params?: undefined; handler: ({}: ", + "{ \"POST /internal/observability_ai_assistant/functions/setup_kb\": { endpoint: \"POST /internal/observability_ai_assistant/functions/setup_kb\"; params?: undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + ") => Promise; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/functions/summarise\": { endpoint: \"POST /internal/observability_ai_assistant/functions/summarise\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ id: ", + "StringC", + "; text: ", + "BrandC", + "<", + "StringC", + ", ", + { + "pluginId": "@kbn/io-ts-utils", + "scope": "common", + "docId": "kibKbnIoTsUtilsPluginApi", + "section": "def-common.NonEmptyStringBrand", + "text": "NonEmptyStringBrand" + }, + ">; confidence: ", + "UnionC", + "<[", + "LiteralC", + "<\"low\">, ", + "LiteralC", + "<\"medium\">, ", + "LiteralC", + "<\"high\">]>; is_correction: ", + "Type", + "; public: ", + "Type", + "; }>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { id: string; text: ", + "Branded", + "; confidence: \"medium\" | \"high\" | \"low\"; is_correction: boolean; public: boolean; }; }; }) => Promise; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/functions/recall\": { endpoint: \"POST /internal/observability_ai_assistant/functions/recall\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ query: ", + "BrandC", + "<", + "StringC", + ", ", + { + "pluginId": "@kbn/io-ts-utils", + "scope": "common", + "docId": "kibKbnIoTsUtilsPluginApi", + "section": "def-common.NonEmptyStringBrand", + "text": "NonEmptyStringBrand" + }, + ">; }>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { query: ", + "Branded", + "; }; }; }) => Promise<{ entries: ", + "KnowledgeBaseEntry", + "[]; }>; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/functions/elasticsearch\": { endpoint: \"POST /internal/observability_ai_assistant/functions/elasticsearch\"; params?: ", + "TypeC", + "<{ body: ", + "IntersectionC", + "<[", + "TypeC", + "<{ method: ", + "UnionC", + "<[", + "LiteralC", + "<\"GET\">, ", + "LiteralC", + "<\"POST\">, ", + "LiteralC", + "<\"PATCH\">, ", + "LiteralC", + "<\"PUT\">, ", + "LiteralC", + "<\"DELETE\">]>; path: ", + "StringC", + "; }>, ", + "PartialC", + "<{ body: ", + "AnyC", + "; }>]>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { method: \"GET\" | \"DELETE\" | \"POST\" | \"PUT\" | \"PATCH\"; path: string; } & { body?: any; }; }; }) => Promise; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"GET /internal/observability_ai_assistant/connectors\": { endpoint: \"GET /internal/observability_ai_assistant/connectors\"; params?: undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", ") => Promise<", { @@ -580,7 +813,15 @@ "StringC", "; }>; }> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { conversationId: string; }; }; }) => Promise; } & ", + " & { params: { path: { conversationId: string; }; }; }) => Promise<", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Conversation", + "text": "Conversation" + }, + ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", "TypeC", @@ -608,7 +849,21 @@ }, ", unknown>>; connectorId: ", "StringC", - "; }>; }> | undefined; handler: ({}: ", + "; functions: ", + "ArrayC", + "<", + "TypeC", + "<{ name: ", + "StringC", + "; description: ", + "StringC", + "; parameters: ", + "AnyC", + "; contexts: ", + "ArrayC", + "<", + "StringC", + ">; }>>; }>; }> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -618,7 +873,7 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; }; }; }) => Promise<", + "[]; connectorId: string; functions: { name: string; description: string; parameters: any; contexts: string[]; }[]; }; }; }) => Promise<", "IncomingMessage", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", @@ -647,7 +902,7 @@ "label": "ObservabilityAIAssistantAPIEndpoint", "description": [], "signature": [ - "\"POST /internal/observability_ai_assistant/chat\" | \"GET /internal/observability_ai_assistant/conversation/{conversationId}\" | \"POST /internal/observability_ai_assistant/conversations\" | \"PUT /internal/observability_ai_assistant/conversation\" | \"POST /internal/observability_ai_assistant/conversation/{conversationId}\" | \"DELETE /internal/observability_ai_assistant/conversation/{conversationId}\" | \"GET /internal/observability_ai_assistant/connectors\"" + "\"POST /internal/observability_ai_assistant/chat\" | \"GET /internal/observability_ai_assistant/conversation/{conversationId}\" | \"POST /internal/observability_ai_assistant/conversations\" | \"PUT /internal/observability_ai_assistant/conversation\" | \"POST /internal/observability_ai_assistant/conversation/{conversationId}\" | \"DELETE /internal/observability_ai_assistant/conversation/{conversationId}\" | \"GET /internal/observability_ai_assistant/connectors\" | \"POST /internal/observability_ai_assistant/functions/elasticsearch\" | \"POST /internal/observability_ai_assistant/functions/recall\" | \"POST /internal/observability_ai_assistant/functions/summarise\" | \"POST /internal/observability_ai_assistant/functions/setup_kb\"" ], "path": "x-pack/plugins/observability_ai_assistant/public/api/index.ts", "deprecated": false, @@ -691,7 +946,16321 @@ "path": "x-pack/plugins/observability_ai_assistant/public/types.ts", "deprecated": false, "trackAdoption": false, - "children": [], + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPluginStart.registerContext", + "type": "Function", + "tags": [], + "label": "registerContext", + "description": [], + "signature": [ + "(options: ", + "ContextDefinition", + ") => void" + ], + "path": "x-pack/plugins/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPluginStart.registerContext.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "ContextDefinition" + ], + "path": "x-pack/plugins/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPluginStart.registerFunction", + "type": "Function", + "tags": [], + "label": "registerFunction", + "description": [], + "signature": [ + "(options: FunctionOptions, respond: RespondFunction, render?: RenderFunction | undefined) => void" + ], + "path": "x-pack/plugins/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPluginStart.registerFunction.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "FunctionOptions" + ], + "path": "x-pack/plugins/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPluginStart.registerFunction.$2", + "type": "Function", + "tags": [], + "label": "respond", + "description": [], + "signature": [ + "(options: { arguments: ", + "node_modules/ts-algebra/lib/meta-types/resolve", + "$Resolve<", + "JSONSchema7", + " extends (TParameters extends Record ? ", + "DeepWritable", + " : TParameters) ? ", + "Any", + " : (TParameters extends Record ? ", + "DeepWritable", + " : TParameters) extends string | true ? ", + "Any", + " : (TParameters extends Record ? ", + "DeepWritable", + " : TParameters) extends false ? ", + "Never", + " : (TParameters extends Record ? ", + "DeepWritable", + " : TParameters) extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> ? ", + "Any", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends string | true ? ", + "Any", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends false ? ", + "Never", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"$ref\"], \"#\">> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "JSONSchema7", + " extends Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> ? ", + "Any", + " : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends string | true ? ", + "Any", + " : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends false ? ", + "Never", + " : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "ReferenceSchema", + " ? any : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> ? ", + "Any", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends string | true ? ", + "Any", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends false ? ", + "Never", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"$ref\"], \"#\">> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "JSONSchema7", + " extends Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> ? ", + "Any", + " : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends string | true ? ", + "Any", + " : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends false ? ", + "Never", + " : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "ReferenceSchema", + " ? any : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"enum\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { ...; }> : Omit<...> extends ", + "AnyOfSchema", + " ? ", + "If", + "<...> : Omit<...> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<...> : Omit<...> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + "<...> | ... 1 more ... | ", + "ParseConstSchema", + "<...> : Omit<...> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<...> : Omit<...> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + "<...> | ... 1 more ... | ", + "ParseSingleTypeSchema", + "<...> : ", + "Any", + "<...>> | ", + "ParseNullableSchema", + "<...> : Omit<...> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<...> : Omit<...> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<...> : Omit<...> extends ", + "OneOfSchema", + " ? ", + "If", + "<...> : Omit<...> extends ", + "AnyOfSchema", + " ? ", + "If", + "<...> : Omit<...> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<...> : Omit<...> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + "<...> | ... 1 more ... | ", + "ParseConstSchema", + "<...> : Omit<...> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<...> : Omit<...> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + "<...> | ... 1 more ... | ", + "ParseSingleTypeSchema", + "<...> : ", + "Any", + "<...>> : (TParameters extends Record<...> ? ", + "DeepWritable", + "<...> : TParameters) extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<...> : (TParameters extends Record<...> ? ", + "DeepWritable", + "<...> : TParameters) extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<...> : (TParameters extends Record<...> ? ", + "DeepWritable", + "<...> : TParameters) extends ", + "OneOfSchema", + " ? ", + "If", + "<...> : (TParameters extends Record<...> ? ", + "DeepWritable", + "<...> : TParameters) extends ", + "AnyOfSchema", + " ? ", + "If", + "<...> : (TParameters extends Record<...> ? ", + "DeepWritable", + "<...> : TParameters) extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<...> : (TParameters extends Record<...> ? ", + "DeepWritable", + "<...> : TParameters) extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + "<...> | ... 1 more ... | ", + "ParseConstSchema", + "<...> : (TParameters extends Record<...> ? ", + "DeepWritable", + "<...> : TParameters) extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<...> : (TParameters extends Record<...> ? ", + "DeepWritable", + "<...> : TParameters) extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + "<...> | ... 1 more ... | ", + "ParseSingleTypeSchema", + "<...> : ", + "Any", + "<...>, ", + "ResolveDefaultOptions", + ">; }, signal: AbortSignal) => Promise<...>" + ], + "path": "x-pack/plugins/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPluginStart.registerFunction.$2.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "{ arguments: ", + "node_modules/ts-algebra/lib/meta-types/resolve", + "$Resolve<", + "JSONSchema7", + " extends (TParameters extends Record ? ", + "DeepWritable", + " : TParameters) ? ", + "Any", + " : (TParameters extends Record ? ", + "DeepWritable", + " : TParameters) extends string | true ? ", + "Any", + " : (TParameters extends Record ? ", + "DeepWritable", + " : TParameters) extends false ? ", + "Never", + " : (TParameters extends Record ? ", + "DeepWritable", + " : TParameters) extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> ? ", + "Any", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends string | true ? ", + "Any", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends false ? ", + "Never", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"$ref\"], \"#\">> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "MultipleTypesSchema", + " ? any : any> : any> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> ? ", + "Any", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends string | true ? ", + "Any", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends false ? ", + "Never", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"$ref\"], \"#\">> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "MultipleTypesSchema", + " ? any : any> : any> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends string | true ? ", + "Any", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends false ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "AnyOfSchema", + " ? ", + "Never", + " : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "MultipleTypesSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnMixedSchema<(", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">)[\"type\"], ", + "MultipleTypesSchema", + " & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\"> extends ", + "SingleTypeSchema", + " ? ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseSingleTypeSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { type: ", + "JSONSchema7TypeName", + "; } & Omit<", + "NullableSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : ", + "Any", + "> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"$ref\"], \"#\">> : Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "JSONSchema7", + " extends Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> ? ", + "Any", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends string | true ? ", + "Any", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends false ? ", + "Never", + " : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "NullableSchema", + " ? ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> | ", + "ParseNullableSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { nullable: boolean; } & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "ReferenceSchema", + " ? ", + "ParseReferenceSchema", + "<", + "ReferenceSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, RecSplit<(", + "ReferenceSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"$ref\"], \"#\">> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "AllOfSchema", + " ? RecurseOnAllOfSchema<(", + "AllOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"allOf\"], ", + "AllOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "OneOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnOneOfSchema<(", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"oneOf\"], ", + "OneOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "AnyOfSchema", + " ? ", + "If", + "<", + "IsNever", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>>, ", + "Never", + ", ", + "DoesExtend", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>, ", + "Never", + "> extends true ? ", + "Never", + " : { type: \"union\"; values: RecurseOnAnyOfSchema<(", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"anyOf\"], ", + "AnyOfSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">, never>; }> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "EnumSchema", + " ? ", + "node_modules/ts-algebra/lib/meta-types/intersection/index", + "$Intersect<", + "If", + "<", + "IsNever", + "<", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"enum\"][number], never>>, ", + "Never", + ", { type: \"enum\"; values: ", + "Compute", + "<(", + "EnumSchema", + " & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">)[\"enum\"][number], never>; isSerialized: false; deserialized: never; }>, ", + "Any", + "> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "ConstSchema", + " ? ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> | ", + "ParseConstSchema", + " & { const?: unknown; enum?: unknown; items?: ", + "JSONSchema7", + " | ", + "JSONSchema7", + "[] | undefined; additionalItems?: ", + "JSONSchema7", + " | undefined; contains?: ", + "JSONSchema7", + " | undefined; properties?: Record | undefined; patternProperties?: Record | undefined; additionalProperties?: ", + "JSONSchema7", + " | undefined; dependencies?: { [key: string]: string[] | ", + "JSONSchema7", + "; } | undefined; propertyNames?: ", + "JSONSchema7", + " | undefined; if?: ", + "JSONSchema7", + " | undefined; then?: ", + "JSONSchema7", + " | undefined; else?: ", + "JSONSchema7", + " | undefined; allOf?: ", + "JSONSchema7", + "[] | undefined; anyOf?: ", + "JSONSchema7", + "[] | undefined; oneOf?: ", + "JSONSchema7", + "[] | undefined; not?: ", + "JSONSchema7", + " | undefined; nullable?: boolean | undefined; definitions?: { [key: string]: ", + "JSONSchema7", + "; } | undefined; examples?: unknown[] | undefined; default?: unknown; [$JSONSchema7]?: typeof ", + "node_modules/json-schema-to-ts/lib/types/definitions/jsonSchema7", + "$JSONSchema7 | undefined; } & { const: unknown; } & Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\">, ", + "ParseOptions", + " ? ", + "DeepWritable", + " : TParameters, ", + "FromSchemaDefaultOptions", + ">> : Omit<", + "AllOfSchema", + " & Omit<", + "NullableSchema", + " & (TParameters extends Record ? ", + "DeepWritable", + " : TParameters), \"nullable\">, \"allOf\"> extends ", + "MultipleTypesSchema", + " ? any : any> : any> : any, ", + "ResolveDefaultOptions", + ">; }" + ], + "path": "x-pack/plugins/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPluginStart.registerFunction.$2.$2", + "type": "Object", + "tags": [], + "label": "signal", + "description": [], + "signature": [ + "AbortSignal" + ], + "path": "x-pack/plugins/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPluginStart.registerFunction.$3", + "type": "Function", + "tags": [], + "label": "render", + "description": [], + "signature": [ + "RenderFunction | undefined" + ], + "path": "x-pack/plugins/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], "lifecycle": "start", "initialIsOpen": true } @@ -710,7 +17279,115 @@ "label": "ObservabilityAIAssistantServerRouteRepository", "description": [], "signature": [ - "{ \"GET /internal/observability_ai_assistant/connectors\": { endpoint: \"GET /internal/observability_ai_assistant/connectors\"; params?: undefined; handler: ({}: ", + "{ \"POST /internal/observability_ai_assistant/functions/setup_kb\": { endpoint: \"POST /internal/observability_ai_assistant/functions/setup_kb\"; params?: undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + ") => Promise; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/functions/summarise\": { endpoint: \"POST /internal/observability_ai_assistant/functions/summarise\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ id: ", + "StringC", + "; text: ", + "BrandC", + "<", + "StringC", + ", ", + { + "pluginId": "@kbn/io-ts-utils", + "scope": "common", + "docId": "kibKbnIoTsUtilsPluginApi", + "section": "def-common.NonEmptyStringBrand", + "text": "NonEmptyStringBrand" + }, + ">; confidence: ", + "UnionC", + "<[", + "LiteralC", + "<\"low\">, ", + "LiteralC", + "<\"medium\">, ", + "LiteralC", + "<\"high\">]>; is_correction: ", + "Type", + "; public: ", + "Type", + "; }>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { id: string; text: ", + "Branded", + "; confidence: \"medium\" | \"high\" | \"low\"; is_correction: boolean; public: boolean; }; }; }) => Promise; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/functions/recall\": { endpoint: \"POST /internal/observability_ai_assistant/functions/recall\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ query: ", + "BrandC", + "<", + "StringC", + ", ", + { + "pluginId": "@kbn/io-ts-utils", + "scope": "common", + "docId": "kibKbnIoTsUtilsPluginApi", + "section": "def-common.NonEmptyStringBrand", + "text": "NonEmptyStringBrand" + }, + ">; }>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { query: ", + "Branded", + "; }; }; }) => Promise<{ entries: ", + "KnowledgeBaseEntry", + "[]; }>; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/functions/elasticsearch\": { endpoint: \"POST /internal/observability_ai_assistant/functions/elasticsearch\"; params?: ", + "TypeC", + "<{ body: ", + "IntersectionC", + "<[", + "TypeC", + "<{ method: ", + "UnionC", + "<[", + "LiteralC", + "<\"GET\">, ", + "LiteralC", + "<\"POST\">, ", + "LiteralC", + "<\"PATCH\">, ", + "LiteralC", + "<\"PUT\">, ", + "LiteralC", + "<\"DELETE\">]>; path: ", + "StringC", + "; }>, ", + "PartialC", + "<{ body: ", + "AnyC", + "; }>]>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { method: \"GET\" | \"DELETE\" | \"POST\" | \"PUT\" | \"PATCH\"; path: string; } & { body?: any; }; }; }) => Promise; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; \"GET /internal/observability_ai_assistant/connectors\": { endpoint: \"GET /internal/observability_ai_assistant/connectors\"; params?: undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", ") => Promise<", { @@ -810,7 +17487,15 @@ "StringC", "; }>; }> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { conversationId: string; }; }; }) => Promise; } & ", + " & { params: { path: { conversationId: string; }; }; }) => Promise<", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Conversation", + "text": "Conversation" + }, + ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", "TypeC", @@ -838,7 +17523,21 @@ }, ", unknown>>; connectorId: ", "StringC", - "; }>; }> | undefined; handler: ({}: ", + "; functions: ", + "ArrayC", + "<", + "TypeC", + "<{ name: ", + "StringC", + "; description: ", + "StringC", + "; parameters: ", + "AnyC", + "; contexts: ", + "ArrayC", + "<", + "StringC", + ">; }>>; }>; }> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -848,7 +17547,7 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; }; }; }) => Promise<", + "[]; connectorId: string; functions: { name: string; description: string; parameters: any; contexts: string[]; }[]; }; }; }) => Promise<", "IncomingMessage", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", @@ -975,6 +17674,17 @@ "path": "x-pack/plugins/observability_ai_assistant/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.Conversation.public", + "type": "boolean", + "tags": [], + "label": "public", + "description": [], + "path": "x-pack/plugins/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -1009,7 +17719,7 @@ "label": "message", "description": [], "signature": [ - "{ content?: string | undefined; name?: string | undefined; role: ", + "{ content?: string | undefined; name?: string | undefined; event?: string | undefined; role: ", { "pluginId": "observabilityAIAssistant", "scope": "common", @@ -1017,15 +17727,7 @@ "section": "def-common.MessageRole", "text": "MessageRole" }, - "; function_call?: { name: string; args?: ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.Serializable", - "text": "Serializable" - }, - "; trigger: ", + "; function_call?: { name: string; arguments?: string | undefined; trigger: ", { "pluginId": "observabilityAIAssistant", "scope": "common", @@ -1049,15 +17751,7 @@ "section": "def-common.MessageRole", "text": "MessageRole" }, - ".Elastic; } | undefined; data?: ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.Serializable", - "text": "Serializable" - }, - "; }" + ".Elastic; } | undefined; data?: string | undefined; }" ], "path": "x-pack/plugins/observability_ai_assistant/common/types.ts", "deprecated": false, diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index f2868024f51cb4..fb04665ad7c31e 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 35 | 0 | 33 | 5 | +| 45 | 0 | 43 | 7 | ## Client diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 8499bbadd51b34..a876771d94e366 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2023-08-08 +date: 2023-08-10 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 3e93ed26a1aed8..4f105830edc040 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -595,7 +595,7 @@ "label": "noCasesPermissions", "description": [], "signature": [ - "() => { all: boolean; create: boolean; read: boolean; update: boolean; delete: boolean; push: boolean; }" + "() => { all: boolean; create: boolean; read: boolean; update: boolean; delete: boolean; push: boolean; connectors: boolean; }" ], "path": "x-pack/plugins/observability_shared/public/utils/cases_permissions.ts", "deprecated": false, diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index b00388af882bc0..49a91b491b06f2 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2023-08-08 +date: 2023-08-10 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 11d520ff3b5e08..a784ef7b6abfee 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 5836f5e27a50e1..399e71eadb82b2 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 71820 | 556 | 61367 | 1472 | +| 71867 | 556 | 61386 | 1474 | ## Plugin Directory @@ -29,14 +29,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] |--------------|----------------|-----------|--------------|----------|---------------|--------| | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 275 | 10 | 269 | 27 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 36 | 1 | 32 | 2 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 60 | 1 | 0 | 0 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 60 | 1 | 3 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 780 | 1 | 749 | 46 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 48 | 0 | 48 | 113 | | | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | Asset manager plugin for entity assets (inventory, topology, etc) | 3 | 0 | 3 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 91 | 1 | 75 | 2 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Canvas application to Kibana | 9 | 0 | 8 | 3 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | The Case management system in Kibana | 93 | 0 | 74 | 27 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | The Case management system in Kibana | 94 | 0 | 75 | 27 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 268 | 16 | 253 | 10 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 68 | 0 | 16 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | Chat available on Elastic Cloud deployments for quicker assistance. | 3 | 0 | 2 | 0 | @@ -56,24 +56,24 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 268 | 0 | 249 | 1 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 100 | 0 | 98 | 9 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 54 | 0 | 51 | 0 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3295 | 119 | 2573 | 27 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3301 | 119 | 2575 | 27 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin provides the ability to create data views via a modal flyout inside Kibana apps | 16 | 0 | 7 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Reusable data view field editor across Kibana | 72 | 0 | 33 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data view management app | 2 | 0 | 2 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1012 | 0 | 243 | 2 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1024 | 0 | 246 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 31 | 3 | 25 | 1 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 12 | 0 | 10 | 3 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 78 | 0 | 51 | 15 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 37 | 0 | 35 | 2 | | discoverLogExplorer | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | This plugin exposes and registers Logs+ features. | 0 | 0 | 0 | 0 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 535 | 11 | 437 | 7 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 536 | 11 | 438 | 7 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 14 | 0 | 14 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 51 | 0 | 44 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | Adds dashboards for discovering and managing Enterprise Search products. | 10 | 0 | 10 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 115 | 3 | 111 | 3 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The Event Annotation service contains expressions for event annotations | 192 | 30 | 192 | 2 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 116 | 0 | 116 | 11 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The Event Annotation service contains expressions for event annotations | 191 | 30 | 191 | 2 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 111 | 0 | 111 | 11 | | | [@elastic/uptime](https://github.com/orgs/elastic/teams/uptime) | - | 131 | 1 | 131 | 14 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'error' renderer to expressions | 17 | 0 | 15 | 2 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Gauge plugin adds a `gauge` renderer and function to the expression plugin. The renderer will display the `gauge` chart. | 59 | 0 | 59 | 2 | @@ -132,8 +132,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 34 | 0 | 34 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 | -| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 509 | 45 | 502 | 16 | -| | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 35 | 0 | 33 | 5 | +| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 508 | 45 | 501 | 16 | +| | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 45 | 0 | 43 | 7 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 14 | 0 | 14 | 0 | | | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 277 | 1 | 276 | 11 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 24 | 0 | 24 | 7 | @@ -146,16 +146,16 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 264 | 0 | 235 | 14 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 24 | 0 | 19 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 129 | 2 | 118 | 4 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 44 | 0 | 44 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 154 | 0 | 140 | 2 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 25 | 0 | 25 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 161 | 0 | 147 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 79 | 0 | 73 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 100 | 0 | 52 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the definition and helper methods around saved searches, used by discover and visualizations. | 72 | 0 | 71 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 32 | 0 | 13 | 0 | | | [@elastic/kibana-reporting-services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 27 | 0 | 8 | 5 | | searchprofiler | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | -| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 277 | 0 | 89 | 4 | -| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 192 | 2 | 126 | 32 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 270 | 0 | 87 | 3 | +| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 194 | 2 | 128 | 32 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | ESS customizations for Security Solution. | 6 | 0 | 6 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Serverless customizations for security. | 6 | 0 | 6 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | The core Serverless plugin, providing APIs to Serverless Project plugins. | 17 | 0 | 16 | 0 | @@ -178,8 +178,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 257 | 1 | 213 | 22 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 | | translations | [@elastic/kibana-localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 564 | 12 | 538 | 50 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds UI Actions service to Kibana | 144 | 2 | 102 | 9 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 570 | 12 | 544 | 50 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds UI Actions service to Kibana | 145 | 2 | 103 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Extends UI Actions plugin with more functionality | 206 | 0 | 140 | 9 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | The `unifiedHistogram` plugin provides UI components to create a layout including a resizable histogram and a main display. | 53 | 0 | 23 | 2 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Contains all the key functionality of Kibana's unified search experience.Contains all the key functionality of Kibana's unified search experience. | 142 | 2 | 104 | 22 | @@ -210,8 +210,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Package name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 11 | 5 | 11 | 0 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 30 | 0 | 6 | 1 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 12 | 0 | 0 | 0 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 33 | 0 | 0 | 0 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 20 | 0 | 0 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 16 | 0 | 15 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 24 | 0 | 24 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 8 | 0 | 7 | 1 | @@ -245,7 +245,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 14 | 0 | 14 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 58 | 0 | 40 | 4 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 187 | 1 | 122 | 0 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 188 | 1 | 123 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 0 | @@ -600,7 +600,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 7 | 0 | 6 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 306 | 0 | 277 | 9 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 4 | 0 | 0 | 0 | -| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 58 | 0 | 5 | 0 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 80 | 0 | 21 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 36 | 0 | 15 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 24 | 0 | 14 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 0fe8f9a7d353e7..99f4c28514e590 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 0b39ac1b4e63cd..334556cc3774f6 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 0ff4e46e2a5109..559e1229116e70 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-08-08 +date: 2023-08-10 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 112b4b29f3ae19..bc9d258b05d1db 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-08-08 +date: 2023-08-10 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 f8272bfef1d9fe..93d9d8abaf5e3d 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 274209f68d7d75..8d5eced80baa4d 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-08-08 +date: 2023-08-10 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 589623de8182ef..42b5675dedaa9d 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-08-08 +date: 2023-08-10 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 a71ec6f5e7609d..272abd228e1af7 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.devdocs.json b/api_docs/saved_objects_finder.devdocs.json index 9ae6255f9aefe5..5de85a8979f272 100644 --- a/api_docs/saved_objects_finder.devdocs.json +++ b/api_docs/saved_objects_finder.devdocs.json @@ -11,7 +11,15 @@ "label": "getSavedObjectFinder", "description": [], "signature": [ - "(uiSettings: ", + "(contentClient: ", + { + "pluginId": "contentManagement", + "scope": "public", + "docId": "kibContentManagementPluginApi", + "section": "def-public.ContentClient", + "text": "ContentClient" + }, + ", uiSettings: ", { "pluginId": "@kbn/core-ui-settings-browser", "scope": "common", @@ -19,22 +27,6 @@ "section": "def-common.IUiSettingsClient", "text": "IUiSettingsClient" }, - ", http: ", - { - "pluginId": "@kbn/core-http-browser", - "scope": "common", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-common.HttpSetup", - "text": "HttpSetup" - }, - ", savedObjectsManagement: ", - { - "pluginId": "savedObjectsManagement", - "scope": "public", - "docId": "kibSavedObjectsManagementPluginApi", - "section": "def-public.SavedObjectsManagementPluginStart", - "text": "SavedObjectsManagementPluginStart" - }, ", savedObjectsTagging?: ", { "pluginId": "savedObjectsTaggingOss", @@ -62,15 +54,15 @@ "id": "def-public.getSavedObjectFinder.$1", "type": "Object", "tags": [], - "label": "uiSettings", + "label": "contentClient", "description": [], "signature": [ { - "pluginId": "@kbn/core-ui-settings-browser", - "scope": "common", - "docId": "kibKbnCoreUiSettingsBrowserPluginApi", - "section": "def-common.IUiSettingsClient", - "text": "IUiSettingsClient" + "pluginId": "contentManagement", + "scope": "public", + "docId": "kibContentManagementPluginApi", + "section": "def-public.ContentClient", + "text": "ContentClient" } ], "path": "src/plugins/saved_objects_finder/public/finder/index.tsx", @@ -83,15 +75,15 @@ "id": "def-public.getSavedObjectFinder.$2", "type": "Object", "tags": [], - "label": "http", + "label": "uiSettings", "description": [], "signature": [ { - "pluginId": "@kbn/core-http-browser", + "pluginId": "@kbn/core-ui-settings-browser", "scope": "common", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-common.HttpSetup", - "text": "HttpSetup" + "docId": "kibKbnCoreUiSettingsBrowserPluginApi", + "section": "def-common.IUiSettingsClient", + "text": "IUiSettingsClient" } ], "path": "src/plugins/saved_objects_finder/public/finder/index.tsx", @@ -104,27 +96,6 @@ "id": "def-public.getSavedObjectFinder.$3", "type": "Object", "tags": [], - "label": "savedObjectsManagement", - "description": [], - "signature": [ - { - "pluginId": "savedObjectsManagement", - "scope": "public", - "docId": "kibSavedObjectsManagementPluginApi", - "section": "def-public.SavedObjectsManagementPluginStart", - "text": "SavedObjectsManagementPluginStart" - } - ], - "path": "src/plugins/saved_objects_finder/public/finder/index.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-public.getSavedObjectFinder.$4", - "type": "Object", - "tags": [], "label": "savedObjectsTagging", "description": [], "signature": [ @@ -431,29 +402,31 @@ "parentPluginId": "savedObjectsFinder", "id": "def-public.SavedObjectMetaData.includeFields", "type": "Array", - "tags": [], + "tags": [ + "deprecated" + ], "label": "includeFields", "description": [], "signature": [ "string[] | undefined" ], "path": "src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-public.SavedObjectMetaData.defaultSearchField", - "type": "string", - "tags": [], - "label": "defaultSearchField", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx", - "deprecated": false, - "trackAdoption": false + "deprecated": true, + "trackAdoption": false, + "references": [ + { + "plugin": "visualizations", + "path": "src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx" + }, + { + "plugin": "visualizations", + "path": "src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.tsx" + }, + { + "plugin": "graph", + "path": "x-pack/plugins/graph/public/components/source_picker.tsx" + } + ] } ], "initialIsOpen": false @@ -529,249 +502,6 @@ "path": "src/plugins/saved_objects_finder/common/types.ts", "deprecated": false, "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FinderAttributes.type", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindQueryHTTP", - "type": "Interface", - "tags": [], - "label": "FindQueryHTTP", - "description": [], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindQueryHTTP.perPage", - "type": "number", - "tags": [], - "label": "perPage", - "description": [], - "signature": [ - "number | undefined" - ], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindQueryHTTP.page", - "type": "number", - "tags": [], - "label": "page", - "description": [], - "signature": [ - "number | undefined" - ], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindQueryHTTP.type", - "type": "CompoundType", - "tags": [], - "label": "type", - "description": [], - "signature": [ - "string | string[]" - ], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindQueryHTTP.search", - "type": "string", - "tags": [], - "label": "search", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindQueryHTTP.searchFields", - "type": "Array", - "tags": [], - "label": "searchFields", - "description": [], - "signature": [ - "string[] | undefined" - ], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindQueryHTTP.defaultSearchOperator", - "type": "CompoundType", - "tags": [], - "label": "defaultSearchOperator", - "description": [], - "signature": [ - "\"AND\" | \"OR\" | undefined" - ], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindQueryHTTP.sortField", - "type": "string", - "tags": [], - "label": "sortField", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindQueryHTTP.sortOrder", - "type": "CompoundType", - "tags": [], - "label": "sortOrder", - "description": [], - "signature": [ - "\"asc\" | \"desc\" | undefined" - ], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindQueryHTTP.fields", - "type": "CompoundType", - "tags": [], - "label": "fields", - "description": [], - "signature": [ - "string | string[] | undefined" - ], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindQueryHTTP.hasReference", - "type": "string", - "tags": [], - "label": "hasReference", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindResponseHTTP", - "type": "Interface", - "tags": [], - "label": "FindResponseHTTP", - "description": [], - "signature": [ - { - "pluginId": "savedObjectsFinder", - "scope": "common", - "docId": "kibSavedObjectsFinderPluginApi", - "section": "def-common.FindResponseHTTP", - "text": "FindResponseHTTP" - }, - "" - ], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindResponseHTTP.saved_objects", - "type": "Array", - "tags": [], - "label": "saved_objects", - "description": [], - "signature": [ - { - "pluginId": "savedObjectsFinder", - "scope": "common", - "docId": "kibSavedObjectsFinderPluginApi", - "section": "def-common.SavedObjectCommon", - "text": "SavedObjectCommon" - }, - "[]" - ], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindResponseHTTP.total", - "type": "number", - "tags": [], - "label": "total", - "description": [], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindResponseHTTP.page", - "type": "number", - "tags": [], - "label": "page", - "description": [], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedObjectsFinder", - "id": "def-common.FindResponseHTTP.per_page", - "type": "number", - "tags": [], - "label": "per_page", - "description": [], - "path": "src/plugins/saved_objects_finder/common/types.ts", - "deprecated": false, - "trackAdoption": false } ], "initialIsOpen": false @@ -818,11 +548,11 @@ "description": [], "signature": [ { - "pluginId": "@kbn/core-saved-objects-common", + "pluginId": "@kbn/content-management-utils", "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObject", - "text": "SavedObject" + "docId": "kibKbnContentManagementUtilsPluginApi", + "section": "def-common.SOWithMetadata", + "text": "SOWithMetadata" }, "" ], diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index e37e0a65e9f47a..8d56eb66947c87 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.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 | |-------------------|-----------|------------------------|-----------------| -| 44 | 0 | 44 | 0 | +| 25 | 0 | 25 | 0 | ## Client diff --git a/api_docs/saved_objects_management.devdocs.json b/api_docs/saved_objects_management.devdocs.json index 44279045cfc479..958d4058e26828 100644 --- a/api_docs/saved_objects_management.devdocs.json +++ b/api_docs/saved_objects_management.devdocs.json @@ -457,6 +457,153 @@ } ], "functions": [ + { + "parentPluginId": "savedObjectsManagement", + "id": "def-public.getTagFindReferences", + "type": "Function", + "tags": [], + "label": "getTagFindReferences", + "description": [], + "signature": [ + "({ selectedTags, taggingApi, }: { selectedTags?: string[] | undefined; taggingApi?: ", + { + "pluginId": "savedObjectsTaggingOss", + "scope": "public", + "docId": "kibSavedObjectsTaggingOssPluginApi", + "section": "def-public.SavedObjectsTaggingApi", + "text": "SavedObjectsTaggingApi" + }, + " | undefined; }) => ", + { + "pluginId": "@kbn/core-saved-objects-api-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-common.SavedObjectsFindOptionsReference", + "text": "SavedObjectsFindOptionsReference" + }, + "[] | undefined" + ], + "path": "src/plugins/saved_objects_management/public/lib/get_tag_references.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedObjectsManagement", + "id": "def-public.getTagFindReferences.$1", + "type": "Object", + "tags": [], + "label": "{\n selectedTags,\n taggingApi,\n}", + "description": [], + "path": "src/plugins/saved_objects_management/public/lib/get_tag_references.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedObjectsManagement", + "id": "def-public.getTagFindReferences.$1.selectedTags", + "type": "Array", + "tags": [], + "label": "selectedTags", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "src/plugins/saved_objects_management/public/lib/get_tag_references.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjectsManagement", + "id": "def-public.getTagFindReferences.$1.taggingApi", + "type": "Object", + "tags": [], + "label": "taggingApi", + "description": [], + "signature": [ + { + "pluginId": "savedObjectsTaggingOss", + "scope": "public", + "docId": "kibSavedObjectsTaggingOssPluginApi", + "section": "def-public.SavedObjectsTaggingApi", + "text": "SavedObjectsTaggingApi" + }, + " | undefined" + ], + "path": "src/plugins/saved_objects_management/public/lib/get_tag_references.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "savedObjectsManagement", + "id": "def-public.parseQuery", + "type": "Function", + "tags": [], + "label": "parseQuery", + "description": [], + "signature": [ + "(query: ", + "Query", + ", types: ", + { + "pluginId": "savedObjectsManagement", + "scope": "common", + "docId": "kibSavedObjectsManagementPluginApi", + "section": "def-common.SavedObjectManagementTypeInfo", + "text": "SavedObjectManagementTypeInfo" + }, + "[]) => ParsedQuery" + ], + "path": "src/plugins/saved_objects_management/public/lib/parse_query.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedObjectsManagement", + "id": "def-public.parseQuery.$1", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + "Query" + ], + "path": "src/plugins/saved_objects_management/public/lib/parse_query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "savedObjectsManagement", + "id": "def-public.parseQuery.$2", + "type": "Array", + "tags": [], + "label": "types", + "description": [], + "signature": [ + { + "pluginId": "savedObjectsManagement", + "scope": "common", + "docId": "kibSavedObjectsManagementPluginApi", + "section": "def-common.SavedObjectManagementTypeInfo", + "text": "SavedObjectManagementTypeInfo" + }, + "[]" + ], + "path": "src/plugins/saved_objects_management/public/lib/parse_query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "savedObjectsManagement", "id": "def-public.processImportResponse", diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 2af10a0ba1a5c5..d395a34dd77492 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.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 | |-------------------|-----------|------------------------|-----------------| -| 154 | 0 | 140 | 2 | +| 161 | 0 | 147 | 2 | ## Client diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 9453cbd5adb2cc..1d089c75628e90 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-08-08 +date: 2023-08-10 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 0461d38388a457..73d9712e702cb0 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-08-08 +date: 2023-08-10 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 e120f71b28e4bf..fe238a6cb2d05a 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-08-08 +date: 2023-08-10 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 a2d304cc86e663..3c672d14ca80b0 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-08-08 +date: 2023-08-10 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 6f8e21a4b85fa9..db5a6c76c83e65 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index 167308664bcd87..7246728a30a37b 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -999,42 +999,6 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false - }, - { - "parentPluginId": "security", - "id": "def-public.UpdateUserProfileHook", - "type": "Type", - "tags": [], - "label": "UpdateUserProfileHook", - "description": [], - "signature": [ - "(props?: Props | undefined) => { update: (data: ", - "UserProfileData", - ") => void; showSuccessNotification: (props: { isRefreshRequired: boolean; }) => void; isLoading: boolean; userProfileData?: ", - "UserProfileData", - " | null | undefined; }" - ], - "path": "x-pack/plugins/security/public/account_management/user_profile/use_update_user_profile.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "security", - "id": "def-public.UpdateUserProfileHook.$1", - "type": "Object", - "tags": [], - "label": "props", - "description": [], - "signature": [ - "Props | undefined" - ], - "path": "x-pack/plugins/security/public/account_management/user_profile/use_update_user_profile.tsx", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false } ], "objects": [], @@ -1163,9 +1127,21 @@ ], "signature": [ "{ update: (data: D) => Promise; suggest: (path: string, params: ", { "pluginId": "security", @@ -1183,7 +1159,13 @@ "text": "UserProfile" }, "[]>; bulkGet: (params: ", { "pluginId": "security", @@ -1201,7 +1183,13 @@ "text": "UserProfile" }, "[]>; getCurrent: (params?: ", { "pluginId": "security", @@ -1221,32 +1209,14 @@ ">; readonly userProfile$: ", "Observable", "<", - "UserProfileData", - " | null>; }" - ], - "path": "x-pack/plugins/security/public/plugin.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "security", - "id": "def-public.SecurityPluginStart.hooks", - "type": "Object", - "tags": [], - "label": "hooks", - "description": [ - "\nA set of hooks to work with Kibana user profiles" - ], - "signature": [ - "{ useUpdateUserProfile: ", { - "pluginId": "security", - "scope": "public", - "docId": "kibSecurityPluginApi", - "section": "def-public.UpdateUserProfileHook", - "text": "UpdateUserProfileHook" + "pluginId": "@kbn/user-profile-components", + "scope": "common", + "docId": "kibKbnUserProfileComponentsPluginApi", + "section": "def-common.UserProfileData", + "text": "UserProfileData" }, - "; }" + " | null>; }" ], "path": "x-pack/plugins/security/public/plugin.tsx", "deprecated": false, @@ -4849,70 +4819,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "security", - "id": "def-common.UserProfileAvatarData", - "type": "Interface", - "tags": [], - "label": "UserProfileAvatarData", - "description": [ - "\nAvatar stored in user profile." - ], - "path": "x-pack/plugins/security/common/model/user_profile.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "security", - "id": "def-common.UserProfileAvatarData.initials", - "type": "string", - "tags": [], - "label": "initials", - "description": [ - "\nOptional initials (two letters) of the user to use as avatar if avatar picture isn't specified." - ], - "signature": [ - "string | undefined" - ], - "path": "x-pack/plugins/security/common/model/user_profile.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "security", - "id": "def-common.UserProfileAvatarData.color", - "type": "string", - "tags": [], - "label": "color", - "description": [ - "\nBackground color of the avatar when initials are used." - ], - "signature": [ - "string | undefined" - ], - "path": "x-pack/plugins/security/common/model/user_profile.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "security", - "id": "def-common.UserProfileAvatarData.imageUrl", - "type": "CompoundType", - "tags": [], - "label": "imageUrl", - "description": [ - "\nBase64 data URL for the user avatar image." - ], - "signature": [ - "string | null | undefined" - ], - "path": "x-pack/plugins/security/common/model/user_profile.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "security", "id": "def-common.UserProfileUserInfo", diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 292adb907ed5c8..c11d842bd6a549 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 277 | 0 | 89 | 4 | +| 270 | 0 | 87 | 3 | ## Client diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index c662e145879efa..62ef5e036ebbd9 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -698,6 +698,46 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "securitySolution", + "id": "def-public.UpsellingService.getSectionsValue", + "type": "Function", + "tags": [], + "label": "getSectionsValue", + "description": [], + "signature": [ + "() => Map<", + { + "pluginId": "securitySolution", + "scope": "public", + "docId": "kibSecuritySolutionPluginApi", + "section": "def-public.UpsellingSectionId", + "text": "UpsellingSectionId" + }, + ", React.ComponentType<{}>>" + ], + "path": "x-pack/plugins/security_solution/public/common/lib/upsellings/upselling_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "securitySolution", + "id": "def-public.UpsellingService.getMessagesValue", + "type": "Function", + "tags": [], + "label": "getMessagesValue", + "description": [], + "signature": [ + "() => Map<\"investigation_guide\", string>" + ], + "path": "x-pack/plugins/security_solution/public/common/lib/upsellings/upselling_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] } ], "initialIsOpen": false @@ -2045,7 +2085,7 @@ "label": "SectionUpsellings", "description": [], "signature": [ - "{ entity_analytics_panel?: React.ComponentType<{}> | undefined; endpointPolicyProtections?: React.ComponentType<{}> | undefined; }" + "{ entity_analytics_panel?: React.ComponentType<{}> | undefined; endpointPolicyProtections?: React.ComponentType<{}> | undefined; osquery_automated_response_actions?: React.ComponentType<{}> | undefined; }" ], "path": "x-pack/plugins/security_solution/public/common/lib/upsellings/types.ts", "deprecated": false, @@ -2060,7 +2100,7 @@ "label": "UpsellingSectionId", "description": [], "signature": [ - "\"entity_analytics_panel\" | \"endpointPolicyProtections\"" + "\"entity_analytics_panel\" | \"endpointPolicyProtections\" | \"osquery_automated_response_actions\"" ], "path": "x-pack/plugins/security_solution/public/common/lib/upsellings/types.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index c64f8c3f500529..90c9f0ff7cde54 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/secur | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 192 | 2 | 126 | 32 | +| 194 | 2 | 128 | 32 | ## Client diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index a9739d6975107a..021a68466fba6f 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2023-08-08 +date: 2023-08-10 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 ba832361ce4968..01b4591d7d5cbb 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2023-08-08 +date: 2023-08-10 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 459fdbaba17f12..d74013cbdb7367 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2023-08-08 +date: 2023-08-10 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 5f07e440f3f623..3754e22fb88fa6 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2023-08-08 +date: 2023-08-10 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 d0d3c45b346be7..d47db0b6fd0fd2 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2023-08-08 +date: 2023-08-10 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 36c1c386fe6268..6253d454a38f7f 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-08-08 +date: 2023-08-10 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 dd82b7a7820c6a..a0434ac17a2107 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index f8ab5e8b4628b5..0a17014d3618bd 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-08-08 +date: 2023-08-10 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 53d46e39ab72c0..2c72ab3b89813f 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-08-08 +date: 2023-08-10 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 7e05dfd474d7a5..c7554bc62fcf25 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-08-08 +date: 2023-08-10 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 0bf6d4874a9a8c..86bf629608c0a5 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 868d29e007c8f9..31642e5fbb8068 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-08-08 +date: 2023-08-10 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 746ecac6f05e17..d8cc15b0e578cc 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-08-08 +date: 2023-08-10 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 0c6166a26328a0..d6f986fc4a44c1 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index ade3334eb49c27..40cb64ab84f175 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index b0ee09e8d83397..450979f04eccb6 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index 5caa041d59d6d2..eed262ea515d70 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index e134dec835ed64..34122a05b3b955 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-08-08 +date: 2023-08-10 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 a8e4b3b5a20f86..63d40f7edeff23 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-08-08 +date: 2023-08-10 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 4d0f82ab995963..4b2f1c6453716e 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-08-08 +date: 2023-08-10 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 2c72f5d31c9117..4e3966581d22af 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -450,6 +450,112 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.executeAction", + "type": "Function", + "tags": [], + "label": "executeAction", + "description": [], + "signature": [ + "({\n id,\n params,\n http,\n signal,\n}: { id: string; http: ", + { + "pluginId": "@kbn/core-http-browser", + "scope": "common", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-common.HttpSetup", + "text": "HttpSetup" + }, + "; params: Record; signal?: AbortSignal | undefined; }) => Promise<", + { + "pluginId": "actions", + "scope": "common", + "docId": "kibActionsPluginApi", + "section": "def-common.ActionTypeExecutorResult", + "text": "ActionTypeExecutorResult" + }, + ">" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api/execute.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.executeAction.$1", + "type": "Object", + "tags": [], + "label": "{\n id,\n params,\n http,\n signal,\n}", + "description": [], + "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api/execute.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.executeAction.$1.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api/execute.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.executeAction.$1.http", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-browser", + "scope": "common", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-common.HttpSetup", + "text": "HttpSetup" + } + ], + "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api/execute.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.executeAction.$1.params", + "type": "Object", + "tags": [], + "label": "params", + "description": [], + "signature": [ + "{ [x: string]: unknown; }" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api/execute.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.executeAction.$1.signal", + "type": "Object", + "tags": [], + "label": "signal", + "description": [], + "signature": [ + "AbortSignal | undefined" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api/execute.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "triggersActionsUi", "id": "def-public.ForLastExpression", @@ -1429,7 +1535,7 @@ "label": "TextAreaWithMessageVariables", "description": [], "signature": [ - "({ messageVariables, paramsProperty, index, inputTargetValue, isDisabled, editAction, label, errors, }: React.PropsWithChildren) => JSX.Element" + "({ messageVariables, paramsProperty, index, inputTargetValue, isDisabled, editAction, label, errors, helpText, }: React.PropsWithChildren) => JSX.Element" ], "path": "x-pack/plugins/triggers_actions_ui/public/application/components/text_area_with_message_variables.tsx", "deprecated": false, @@ -1440,7 +1546,7 @@ "id": "def-public.TextAreaWithMessageVariables.$1", "type": "CompoundType", "tags": [], - "label": "{\n messageVariables,\n paramsProperty,\n index,\n inputTargetValue,\n isDisabled = false,\n editAction,\n label,\n errors,\n}", + "label": "{\n messageVariables,\n paramsProperty,\n index,\n inputTargetValue,\n isDisabled = false,\n editAction,\n label,\n errors,\n helpText,\n}", "description": [], "signature": [ "React.PropsWithChildren" diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 9eafa3e8da610c..84aba97cc4adcb 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 564 | 12 | 538 | 50 | +| 570 | 12 | 544 | 50 | ## Client diff --git a/api_docs/ui_actions.devdocs.json b/api_docs/ui_actions.devdocs.json index 1335ccf6558132..466038b9bb1628 100644 --- a/api_docs/ui_actions.devdocs.json +++ b/api_docs/ui_actions.devdocs.json @@ -2241,6 +2241,27 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "uiActions", + "id": "def-public.VisualizeFieldContext.textBasedColumns", + "type": "Array", + "tags": [], + "label": "textBasedColumns", + "description": [], + "signature": [ + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.DatatableColumn", + "text": "DatatableColumn" + }, + "[] | undefined" + ], + "path": "src/plugins/ui_actions/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "uiActions", "id": "def-public.VisualizeFieldContext.originatingApp", diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 01c5f50bac220d..7cff9e38c01dca 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 144 | 2 | 102 | 9 | +| 145 | 2 | 103 | 9 | ## Client diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 3e22d68385fce3..a574e50b1282be 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 3da5d562949753..e38231b65f207f 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-08-08 +date: 2023-08-10 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 03e9d55385d40f..578b5f8165084a 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-08-08 +date: 2023-08-10 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 153cbbc0530479..a352625e3e118d 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-08-08 +date: 2023-08-10 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 aeaf31dc6c99d3..00c541219be11c 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2023-08-08 +date: 2023-08-10 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 8d3fab6cb85b49..c0c067bb5ea273 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-08-08 +date: 2023-08-10 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 a87f8530bd772a..48e4afa5a952c5 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-08-08 +date: 2023-08-10 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 41ba7d449fdedb..cec241a512ef19 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-08-08 +date: 2023-08-10 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 a0b85ee1fcbaee..0f3ccf018e3859 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-08-08 +date: 2023-08-10 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 cf0915fb30f3c9..c3b18a05c609f7 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-08-08 +date: 2023-08-10 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 b474cae15bc68d..75a89ea4a40eb9 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-08-08 +date: 2023-08-10 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 5bc15be9f7c0fc..56993867167428 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-08-08 +date: 2023-08-10 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 7643ddfaae90ee..73ddb8d102d733 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-08-08 +date: 2023-08-10 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 d7fc9723f84a07..4185e8265e10c0 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-08-08 +date: 2023-08-10 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 fe7f2cd1a24a0a..c7f07b1d5229ae 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-08-08 +date: 2023-08-10 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 925862995104a7..e58e86f88b3ab3 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-08-08 +date: 2023-08-10 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 68339735ba1b94..2e8de9a940af1f 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-08-08 +date: 2023-08-10 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 c44837021f0c44..5df7d900f783c6 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 7b2d1ab51cdeb5..aeefc7168a6e55 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-08-08 +date: 2023-08-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 072ad967fc04e2b79bf75fd9e6618f3bf0e46b9f Mon Sep 17 00:00:00 2001 From: Dzmitry Lemechko Date: Thu, 10 Aug 2023 09:17:12 +0200 Subject: [PATCH 07/45] [FTR] unskip tsvb time series tests for Chrome (#163510) ## Summary Related to #162995 This PR unskip TSVB tests for Chrome browser since it is proved to be stable https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/2836 100x passed https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/2835 100x passed On Firefox the flakiness is related to Terms 2nd aggregation field sometimes is not selected. I tested it manually in Firefox 116 and was able to set fields, though I have a feeling that values are not always selected on click in the drop-down. But I didn't see any errors in console. I also returned back retry for dropdown selection I removed in #161202 though flaky-test-runner proves there is no need. Let's have just to keep logic as before my PR. --- .../visualize/group5/_tsvb_time_series.ts | 6 ++-- .../page_objects/visual_builder_page.ts | 29 ++++++++++++------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/test/functional/apps/visualize/group5/_tsvb_time_series.ts b/test/functional/apps/visualize/group5/_tsvb_time_series.ts index 28aa95ad242633..eec30c52018a74 100644 --- a/test/functional/apps/visualize/group5/_tsvb_time_series.ts +++ b/test/functional/apps/visualize/group5/_tsvb_time_series.ts @@ -23,8 +23,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const browser = getService('browser'); const kibanaServer = getService('kibanaServer'); - // Failing: See https://github.com/elastic/kibana/issues/162995 - describe.skip('visual builder', function describeIndexTests() { + describe('visual builder', function describeIndexTests() { before(async () => { await security.testUser.setRoles([ 'kibana_admin', @@ -167,7 +166,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); }); - describe('Clicking on the chart', () => { + describe('Clicking on the chart', function () { + this.tags('skipFirefox'); const act = async (visName: string, clickCoordinates: { x: number; y: number }) => { await testSubjects.click('visualizeSaveButton'); diff --git a/test/functional/page_objects/visual_builder_page.ts b/test/functional/page_objects/visual_builder_page.ts index 67a8dd42b9ec17..4c5939f728f015 100644 --- a/test/functional/page_objects/visual_builder_page.ts +++ b/test/functional/page_objects/visual_builder_page.ts @@ -7,7 +7,6 @@ */ import type { DebugState } from '@elastic/charts'; -import expect from '@kbn/expect'; import { FtrService } from '../ftr_provider_context'; import { WebElementWrapper } from '../services/lib/web_element_wrapper'; @@ -845,10 +844,14 @@ export class VisualBuilderPageObject extends FtrService { ) { await this.setMetricsGroupBy('terms'); await this.common.sleep(1000); - const byField = await this.testSubjects.find('groupByField'); - await this.comboBox.setElement(byField, field); - const isSelected = await this.comboBox.isOptionSelected(byField, field); - expect(isSelected).to.be(true); + await this.retry.try(async () => { + const byField = await this.testSubjects.find('groupByField'); + await this.comboBox.setElement(byField, field); + const isSelected = await this.comboBox.isOptionSelected(byField, field); + if (!isSelected) { + throw new Error(`setMetricsGroupByTerms: failed to set '${field}' field`); + } + }); await this.setMetricsGroupByFiltering(filtering.include, filtering.exclude); } @@ -860,13 +863,17 @@ export class VisualBuilderPageObject extends FtrService { // In case of StaleElementReferenceError 'browser' service will try to find element again await fieldSelectAddButtonLast.click(); await this.common.sleep(2000); - const selectedByField = await this.find.byXPath( - `(//*[@data-test-subj='fieldSelectItem'])[last()]` - ); - await this.comboBox.setElement(selectedByField, field); - const isSelected = await this.comboBox.isOptionSelected(selectedByField, field); - expect(isSelected).to.be(true); + await this.retry.try(async () => { + const selectedByField = await this.find.byXPath( + `(//*[@data-test-subj='fieldSelectItem'])[last()]` + ); + await this.comboBox.setElement(selectedByField, field); + const isSelected = await this.comboBox.isOptionSelected(selectedByField, field); + if (!isSelected) { + throw new Error(`setAnotherGroupByTermsField: failed to set '${field}' field`); + } + }); } public async setMetricsGroupByFiltering(include?: string, exclude?: string) { From 5e0e4487b8da8a9b21844acb4e688065c00d3fbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loix?= Date: Thu, 10 Aug 2023 09:08:22 +0100 Subject: [PATCH 08/45] [Serverless Chrome] Fix fullscreen (#163317) --- .../src/utils/append_app_path.ts | 2 +- .../src/chrome_service.test.tsx | 19 +++++++ .../src/chrome_service.tsx | 52 ++++++++++++++++++- .../components/flyout/pane/index.tsx | 5 +- 4 files changed, 74 insertions(+), 4 deletions(-) diff --git a/packages/core/application/core-application-browser-internal/src/utils/append_app_path.ts b/packages/core/application/core-application-browser-internal/src/utils/append_app_path.ts index 575e1f10a553ed..afcdbfb18196af 100644 --- a/packages/core/application/core-application-browser-internal/src/utils/append_app_path.ts +++ b/packages/core/application/core-application-browser-internal/src/utils/append_app_path.ts @@ -8,7 +8,7 @@ import { removeSlashes } from './remove_slashes'; -export const appendAppPath = (appBasePath: string, path: string = '') => { +export const appendAppPath = (appBasePath = '', path: string = '') => { // Only prepend slash if not a hash or query path path = path === '' || path.startsWith('#') || path.startsWith('?') ? path : `/${path}`; // Do not remove trailing slash when in hashbang or basePath diff --git a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx index d8e409cad2e098..ad7c6d8fc52a56 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx @@ -158,6 +158,7 @@ describe('start', () => { ] `); }); + it('strips off "snapshot" from the kibana version if present', async () => { const { chrome, service } = await start({ options: { browserSupportsCsp: false, kibanaVersion: '8.0.0-SnAPshot' }, @@ -339,6 +340,24 @@ describe('start', () => { ] `); }); + + it('change visibility when EUI component in full screen', async () => { + const body = document.body; + const startDeps = defaultStartDeps([new FakeApp('foo')], 'foo'); + const { chrome } = await start({ startDeps }); + + // Chrome is initially visible + let isVisible = await Rx.lastValueFrom(chrome.getIsVisible$().pipe(Rx.take(1))); + expect(isVisible).toBe(true); + + // Add EUI class that should hide the chrome + body.classList.add('euiDataGrid__restrictBody'); + await new Promise((resolve) => setTimeout(resolve)); // wait next tick + + // Chrome should be hidden + isVisible = await Rx.lastValueFrom(chrome.getIsVisible$().pipe(Rx.take(1))); + expect(isVisible).toBe(false); + }); }); describe('badge', () => { diff --git a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx index 0b575e4a0f215c..76fef465d823c8 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx @@ -79,6 +79,7 @@ export class ChromeService { private readonly recentlyAccessed = new RecentlyAccessedService(); private readonly docTitle = new DocTitleService(); private readonly projectNavigation = new ProjectNavigationService(); + private mutationObserver: MutationObserver | undefined; constructor(private readonly params: ConstructorParams) {} @@ -114,6 +115,53 @@ export class ChromeService { ); } + private setIsVisible = (isVisible: boolean) => this.isForceHidden$.next(!isVisible); + + /** + * Some EUI component can be toggled in Full screen (e.g. the EuiDataGrid). When they are toggled in full + * screen we want to hide the chrome, and when they are toggled back to normal we want to show the chrome. + */ + private handleEuiFullScreenChanges = () => { + const { body } = document; + // HTML class names that are added to the body when Eui components are toggled in full screen + const classesOnBodyWhenEuiFullScreen = ['euiDataGrid__restrictBody']; + + let isChromeHiddenForEuiFullScreen = false; + let isChromeVisible = false; + + this.isVisible$.pipe(takeUntil(this.stop$)).subscribe((isVisible) => { + isChromeVisible = isVisible; + }); + + const onBodyClassesChange = () => { + const { className } = body; + if ( + classesOnBodyWhenEuiFullScreen.some((name) => className.includes(name)) && + isChromeVisible + ) { + isChromeHiddenForEuiFullScreen = true; + this.setIsVisible(false); + } else if ( + classesOnBodyWhenEuiFullScreen.every((name) => !className.includes(name)) && + !isChromeVisible && + isChromeHiddenForEuiFullScreen + ) { + isChromeHiddenForEuiFullScreen = false; + this.setIsVisible(true); + } + }; + + this.mutationObserver = new MutationObserver((mutationList) => { + mutationList.forEach((mutation) => { + if (mutation.type === 'attributes' && mutation.attributeName === 'class') { + onBodyClassesChange(); + } + }); + }); + + this.mutationObserver.observe(body, { attributes: true }); + }; + public setup({ analytics }: SetupDeps) { const docTitle = this.docTitle.setup({ document: window.document }); registerAnalyticsContextProvider(analytics, docTitle.title$); @@ -128,6 +176,7 @@ export class ChromeService { customBranding, }: StartDeps): Promise { this.initVisibility(application); + this.handleEuiFullScreenChanges(); const globalHelpExtensionMenuLinks$ = new BehaviorSubject( [] @@ -379,7 +428,7 @@ export class ChromeService { getIsVisible$: () => this.isVisible$, - setIsVisible: (isVisible: boolean) => this.isForceHidden$.next(!isVisible), + setIsVisible: this.setIsVisible.bind(this), getBadge$: () => badge$.pipe(takeUntil(this.stop$)), @@ -463,5 +512,6 @@ export class ChromeService { this.navLinks.stop(); this.projectNavigation.stop(); this.stop$.next(); + this.mutationObserver?.disconnect(); } } diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/pane/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/flyout/pane/index.tsx index cf00693623c432..d3007d0d6346ae 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/pane/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/flyout/pane/index.tsx @@ -46,8 +46,9 @@ const FlyoutPaneComponent: React.FC = ({ data-test-subj="timeline-flyout" css={css` min-width: 150px; - height: calc(100% - 96px); - top: 96px; + height: 100%; + top: 0; + left: 0; background: ${useEuiBackgroundColor('plain')}; position: fixed; width: 100%; From 5c57df27ed448150634f26198e7d29b36e5a197e Mon Sep 17 00:00:00 2001 From: Maxim Kholod Date: Thu, 10 Aug 2023 10:18:43 +0200 Subject: [PATCH 09/45] [Cloud Security] Do not filter vulnerabilities by CVE (#163402) ## Summary `{ match_phrase: { 'vulnerability.enumeration': 'CVE' } }` has been removed from the vulnerabilities filter so that documents from other sources are presented in CNVM features fixes: - https://github.com/elastic/security-team/issues/7287 ## Screenshots This is how CNVM features look like with GHSA data Screenshot 2023-08-08 at 15 47 10 Screenshot 2023-08-08 at 15 46 59 --- x-pack/plugins/cloud_security_posture/common/constants.ts | 2 -- .../common/utils/get_safe_vulnerabilities_query_filter.ts | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/common/constants.ts b/x-pack/plugins/cloud_security_posture/common/constants.ts index 91d42c25441916..058b23e3477a53 100644 --- a/x-pack/plugins/cloud_security_posture/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/common/constants.ts @@ -123,5 +123,3 @@ export const VULNERABILITIES_SEVERITY: Record = { CRITICAL: 'CRITICAL', UNKNOWN: 'UNKNOWN', }; - -export const VULNERABILITIES_ENUMERATION = 'CVE'; diff --git a/x-pack/plugins/cloud_security_posture/common/utils/get_safe_vulnerabilities_query_filter.ts b/x-pack/plugins/cloud_security_posture/common/utils/get_safe_vulnerabilities_query_filter.ts index 5cbbf6dd054a78..fb2bbd1c51273b 100644 --- a/x-pack/plugins/cloud_security_posture/common/utils/get_safe_vulnerabilities_query_filter.ts +++ b/x-pack/plugins/cloud_security_posture/common/utils/get_safe_vulnerabilities_query_filter.ts @@ -5,7 +5,7 @@ * 2.0. */ import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; -import { VULNERABILITIES_ENUMERATION, VULNERABILITIES_SEVERITY } from '../constants'; +import { VULNERABILITIES_SEVERITY } from '../constants'; export const getSafeVulnerabilitiesQueryFilter = (query?: QueryDslQueryContainer) => ({ ...query, @@ -29,7 +29,6 @@ export const getSafeVulnerabilitiesQueryFilter = (query?: QueryDslQueryContainer { exists: { field: 'vulnerability.severity' } }, { exists: { field: 'resource.id' } }, { exists: { field: 'resource.name' } }, - { match_phrase: { 'vulnerability.enumeration': VULNERABILITIES_ENUMERATION } }, ], }, }); From c8b1d983fb4dc9cfb4bd2d97088adf69bfa8e49e Mon Sep 17 00:00:00 2001 From: Ievgen Sorokopud Date: Thu, 10 Aug 2023 10:50:42 +0200 Subject: [PATCH 10/45] [Security Solution] Flaky ML rule execution tests (#163095) ## Summary Original ticket: https://github.com/elastic/kibana/issues/145776 Un-skip ML rule execution flaky tests. Currently these tests are failing due to these ML APIs changes (API versioning) https://github.com/elastic/kibana/pull/156949 --- .../rule_execution_logic/machine_learning.ts | 3 +-- .../utils/machine_learning_setup.ts | 7 ++++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/machine_learning.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/machine_learning.ts index be0d4876b59afb..9450c322100099 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/machine_learning.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/machine_learning.ts @@ -66,8 +66,7 @@ export default ({ getService }: FtrProviderContext) => { rule_id: 'ml-rule-id', }; - // FLAKY: https://github.com/elastic/kibana/issues/145776 - describe.skip('Machine learning type rules', () => { + describe('Machine learning type rules', () => { before(async () => { // Order is critical here: auditbeat data must be loaded before attempting to start the ML job, // as the job looks for certain indices on start diff --git a/x-pack/test/detection_engine_api_integration/utils/machine_learning_setup.ts b/x-pack/test/detection_engine_api_integration/utils/machine_learning_setup.ts index 84eeeea137cb0b..47b870496642b4 100644 --- a/x-pack/test/detection_engine_api_integration/utils/machine_learning_setup.ts +++ b/x-pack/test/detection_engine_api_integration/utils/machine_learning_setup.ts @@ -6,6 +6,7 @@ */ import type SuperTest from 'supertest'; +import { getCommonRequestHeader } from '../../functional/services/ml/common_api'; export const executeSetupModuleRequest = async ({ module, @@ -18,7 +19,7 @@ export const executeSetupModuleRequest = async ({ }) => { const { body } = await supertest .post(`/internal/ml/modules/setup/${module}`) - .set('kbn-xsrf', 'true') + .set(getCommonRequestHeader('1')) .send({ prefix: '', groups: ['auditbeat'], @@ -42,8 +43,8 @@ export const forceStartDatafeeds = async ({ supertest: SuperTest.SuperTest; }) => { const { body } = await supertest - .post(`/supertest/ml/jobs/force_start_datafeeds`) - .set('kbn-xsrf', 'true') + .post(`/internal/ml/jobs/force_start_datafeeds`) + .set(getCommonRequestHeader('1')) .send({ datafeedIds: [`datafeed-${jobId}`], start: new Date().getUTCMilliseconds(), From dba141320b204d4bb5229a928e084ff9861a10a9 Mon Sep 17 00:00:00 2001 From: Antonio Date: Thu, 10 Aug 2023 11:05:10 +0200 Subject: [PATCH 11/45] [Cases] Fix Host Isolation user action flaky test (#163508) Fixes #156742 ## Summary Most of this test's logic was about how this specific comment type is rendered. There was already some logic from the flaky test duplicated in `x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx`. I moved the rest of the flaky test logic there. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../user_actions/comment/comment.test.tsx | 70 ++++++++++++++----- .../components/user_actions/index.test.tsx | 57 +-------------- 2 files changed, 52 insertions(+), 75 deletions(-) diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx index 77d38e87a2c415..bab441edbe80c9 100644 --- a/x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx @@ -587,28 +587,60 @@ describe('createCommentUserActionBuilder', () => { }); }); - it('renders correctly an action', async () => { - const userAction = getHostIsolationUserAction(); - - const builder = createCommentUserActionBuilder({ - ...builderArgs, - caseData: { - ...builderArgs.caseData, - comments: [hostIsolationComment()], - }, - userAction, + describe('Host isolation action', () => { + it('renders correctly an action', async () => { + const userAction = getHostIsolationUserAction(); + + const builder = createCommentUserActionBuilder({ + ...builderArgs, + caseData: { + ...builderArgs.caseData, + comments: [hostIsolationComment()], + }, + userAction, + }); + + const createdUserAction = builder.build(); + render( + + + + ); + + expect(screen.getByTestId('endpoint-action')).toBeInTheDocument(); + expect(screen.getByText('submitted isolate request on host')).toBeInTheDocument(); + expect(screen.getByText('host1')).toBeInTheDocument(); + expect(screen.getByText('I just isolated the host!')).toBeInTheDocument(); }); - const createdUserAction = builder.build(); - render( - - - - ); + it('shows the correct username', async () => { + const createdBy = { profileUid: userProfiles[0].uid }; + const userAction = getHostIsolationUserAction({ + createdBy, + }); - expect(screen.getByText('submitted isolate request on host')).toBeInTheDocument(); - expect(screen.getByText('host1')).toBeInTheDocument(); - expect(screen.getByText('I just isolated the host!')).toBeInTheDocument(); + const builder = createCommentUserActionBuilder({ + ...builderArgs, + caseData: { + ...builderArgs.caseData, + comments: [hostIsolationComment({ createdBy })], + }, + userAction, + }); + + const createdUserAction = builder.build(); + render( + + + + ); + + expect( + screen.getAllByTestId('case-user-profile-avatar-damaged_raccoon')[0] + ).toBeInTheDocument(); + expect(screen.getAllByText('DR')[0]).toBeInTheDocument(); + expect(screen.getAllByText('Damaged Raccoon')[0]).toBeInTheDocument(); + }); }); describe('Attachment framework', () => { diff --git a/x-pack/plugins/cases/public/components/user_actions/index.test.tsx b/x-pack/plugins/cases/public/components/user_actions/index.test.tsx index 15c2a8661edb09..4530e115a2f040 100644 --- a/x-pack/plugins/cases/public/components/user_actions/index.test.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/index.test.tsx @@ -13,18 +13,11 @@ import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl'; import routeData from 'react-router'; import { useUpdateComment } from '../../containers/use_update_comment'; -import { - basicCase, - caseUserActions, - getHostIsolationUserAction, - getUserAction, - hostIsolationComment, -} from '../../containers/mock'; +import { basicCase, caseUserActions, getUserAction } from '../../containers/mock'; import { UserActions } from '.'; import type { AppMockRenderer } from '../../common/mock'; import { createAppMockRenderer } from '../../common/mock'; import { UserActionActions } from '../../../common/types/domain'; -import { userProfiles, userProfilesMap } from '../../containers/user_profiles/api.mock'; import { getCaseConnectorsMockResponse } from '../../common/mock/connectors'; import type { UserActivityParams } from '../user_actions_activity_bar/types'; import { useFindCaseUserActions } from '../../containers/use_find_case_user_actions'; @@ -325,52 +318,4 @@ describe.skip(`UserActions`, () => { expect(screen.getAllByTestId('add-comment')[1].textContent).toContain(newComment); }); }); - - // FLAKY: https://github.com/elastic/kibana/issues/156742 - describe.skip('Host isolation action', () => { - it('renders in the cases details view', async () => { - const isolateAction = [getHostIsolationUserAction()]; - const props = { - ...defaultProps, - data: { ...defaultProps.data, comments: [...basicCase.comments, hostIsolationComment()] }, - }; - - useFindCaseUserActionsMock.mockReturnValue({ - ...defaultUseFindCaseUserActions, - data: { userActions: isolateAction }, - }); - - appMockRender.render(); - await waitFor(() => { - expect(screen.getByTestId('endpoint-action')).toBeInTheDocument(); - }); - }); - - it('shows the correct username', async () => { - const isolateAction = [ - getHostIsolationUserAction({ createdBy: { profileUid: userProfiles[0].uid } }), - ]; - const props = { - ...defaultProps, - userProfiles: userProfilesMap, - data: { - ...defaultProps.data, - comments: [hostIsolationComment({ createdBy: { profileUid: userProfiles[0].uid } })], - }, - }; - - useFindCaseUserActionsMock.mockReturnValue({ - ...defaultUseFindCaseUserActions, - data: { userActions: isolateAction }, - }); - - appMockRender.render(); - - expect( - screen.getAllByTestId('case-user-profile-avatar-damaged_raccoon')[0] - ).toBeInTheDocument(); - expect(screen.getAllByText('DR')[0]).toBeInTheDocument(); - expect(screen.getAllByText('Damaged Raccoon')[0]).toBeInTheDocument(); - }); - }); }); From 92d4a6df7dcbf832c29cbea7939cb0f69355239f Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Thu, 10 Aug 2023 12:11:58 +0300 Subject: [PATCH 12/45] [ML] Add a throughput description in the Deployment stats table (#163481) ## Summary Resolves #161828 Adds a tooltip for the Throughput column explaining units. image ### 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/packages/kbn-i18n/README.md) - [x] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --- .../nodes_overview/allocated_models.tsx | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/ml/public/application/memory_usage/nodes_overview/allocated_models.tsx b/x-pack/plugins/ml/public/application/memory_usage/nodes_overview/allocated_models.tsx index 5cdc922824ae7b..02738f3bebe510 100644 --- a/x-pack/plugins/ml/public/application/memory_usage/nodes_overview/allocated_models.tsx +++ b/x-pack/plugins/ml/public/application/memory_usage/nodes_overview/allocated_models.tsx @@ -122,13 +122,27 @@ export const AllocatedModels: FC = ({ }, }, { - field: 'node.throughput_last_minute', - name: i18n.translate( - 'xpack.ml.trainedModels.nodesList.modelsList.throughputLastMinuteHeader', - { - defaultMessage: 'Throughput', - } + name: ( + + + {i18n.translate( + 'xpack.ml.trainedModels.nodesList.modelsList.throughputLastMinuteHeader', + { + defaultMessage: 'Throughput', + } + )} + + + ), + field: 'node.throughput_last_minute', width: '100px', truncateText: false, 'data-test-subj': 'mlAllocatedModelsTableThroughput', From 2113878837be9822a7ee679ca3ba0bdabab7188e Mon Sep 17 00:00:00 2001 From: Vadim Kibana <82822460+vadimkibana@users.noreply.github.com> Date: Thu, 10 Aug 2023 11:16:34 +0200 Subject: [PATCH 13/45] Rm canvas deprecations (#163467) ## Summary Substitutes deprecated components from `kibana_react` plugin in Canvas app by latest ones from packages. Partially addresses https://github.com/elastic/kibana/issues/161422 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../canvas_plugin_src/renderers/embeddable/embeddable.tsx | 4 ++-- .../renderers/filters/advanced_filter/index.tsx | 4 ++-- .../renderers/filters/dropdown_filter/index.tsx | 4 ++-- .../renderers/filters/time_filter/index.tsx | 4 ++-- .../canvas/canvas_plugin_src/renderers/markdown/index.tsx | 4 ++-- .../plugins/canvas/canvas_plugin_src/renderers/table.tsx | 4 ++-- x-pack/plugins/canvas/canvas_plugin_src/renderers/text.tsx | 4 ++-- x-pack/plugins/canvas/public/application.tsx | 7 ++++--- .../canvas/public/components/home/home.component.tsx | 6 ++++-- x-pack/plugins/canvas/tsconfig.json | 2 ++ 10 files changed, 24 insertions(+), 19 deletions(-) diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx index c99bfd21c9ad1c..51c6cdc54131d6 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx +++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx @@ -9,7 +9,7 @@ import React, { FC } from 'react'; import useObservable from 'react-use/lib/useObservable'; import ReactDOM from 'react-dom'; import { CoreStart } from '@kbn/core/public'; -import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { IEmbeddable, EmbeddableFactory, @@ -62,7 +62,7 @@ const renderEmbeddableFactory = (core: CoreStart, plugins: StartDeps) => { style={{ width: '100%', height: '100%', cursor: 'auto' }} > - + diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/advanced_filter/index.tsx b/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/advanced_filter/index.tsx index 12e1948260a963..2a875ff88f4137 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/advanced_filter/index.tsx +++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/advanced_filter/index.tsx @@ -7,7 +7,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { StartInitializer } from '../../../plugin'; import { RendererFactory } from '../../../../types'; import { AdvancedFilter } from './component'; @@ -24,7 +24,7 @@ export const advancedFilterFactory: StartInitializer> = height: 50, render(domNode, _, handlers) { ReactDOM.render( - + handlers.event({ name: 'applyFilterAction', data: filter })} value={handlers.getFilter()} diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/dropdown_filter/index.tsx b/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/dropdown_filter/index.tsx index 76323793ab6981..50f534a658359a 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/dropdown_filter/index.tsx +++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/dropdown_filter/index.tsx @@ -9,7 +9,7 @@ import { fromExpression, toExpression, Ast } from '@kbn/interpreter'; import { get } from 'lodash'; import React from 'react'; import ReactDOM from 'react-dom'; -import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { syncFilterExpression } from '../../../../public/lib/sync_filter_expression'; import { RendererFactory } from '../../../../types'; import { StartInitializer } from '../../../plugin'; @@ -97,7 +97,7 @@ export const dropdownFilterFactory: StartInitializer> = ); ReactDOM.render( - {filter}, + {filter}, domNode, () => handlers.done() ); diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/time_filter/index.tsx b/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/time_filter/index.tsx index 9ae72a82c88707..52ae1e28f79040 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/time_filter/index.tsx +++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/time_filter/index.tsx @@ -9,7 +9,7 @@ import ReactDOM from 'react-dom'; import React from 'react'; import { toExpression } from '@kbn/interpreter'; import { UI_SETTINGS } from '@kbn/data-plugin/public'; -import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { syncFilterExpression } from '../../../../public/lib/sync_filter_expression'; import { RendererStrings } from '../../../../i18n'; import { TimeFilter } from './components'; @@ -60,7 +60,7 @@ export const timeFilterFactory: StartInitializer> = ( } ReactDOM.render( - + handlers.event({ name: 'applyFilterAction', data: filter })} filter={filterExpression} diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/markdown/index.tsx b/x-pack/plugins/canvas/canvas_plugin_src/renderers/markdown/index.tsx index 7566db85427ac3..fd1e2415d05891 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/renderers/markdown/index.tsx +++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/markdown/index.tsx @@ -9,7 +9,7 @@ import React, { CSSProperties } from 'react'; import ReactDOM from 'react-dom'; import { CoreTheme } from '@kbn/core/public'; import { Observable } from 'rxjs'; -import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { defaultTheme$ } from '@kbn/presentation-util-plugin/common'; import { Markdown } from '@kbn/kibana-react-plugin/public'; import { StartInitializer } from '../../plugin'; @@ -30,7 +30,7 @@ export const getMarkdownRenderer = const fontStyle = config.font ? config.font.spec : {}; ReactDOM.render( - + +
+
{textString}
, domNode, diff --git a/x-pack/plugins/canvas/public/application.tsx b/x-pack/plugins/canvas/public/application.tsx index cc365451b46f0f..fa544095a85984 100644 --- a/x-pack/plugins/canvas/public/application.tsx +++ b/x-pack/plugins/canvas/public/application.tsx @@ -17,7 +17,8 @@ import { includes, remove } from 'lodash'; import { AppMountParameters, CoreStart, CoreSetup, AppUpdater } from '@kbn/core/public'; -import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { PluginServices } from '@kbn/presentation-util-plugin/public'; import { CanvasStartDeps, CanvasSetupDeps } from './plugin'; @@ -75,7 +76,7 @@ export const renderApp = ({ - + @@ -151,7 +152,7 @@ export const initializeCanvas = async ( ], content: (domNode, { hideHelpMenu }) => { ReactDOM.render( - + diff --git a/x-pack/plugins/canvas/public/components/home/home.component.tsx b/x-pack/plugins/canvas/public/components/home/home.component.tsx index dbfbd8a920c7e2..c29713da70d115 100644 --- a/x-pack/plugins/canvas/public/components/home/home.component.tsx +++ b/x-pack/plugins/canvas/public/components/home/home.component.tsx @@ -7,7 +7,7 @@ import React, { useState } from 'react'; import { i18n } from '@kbn/i18n'; -import { KibanaPageTemplate } from '@kbn/kibana-react-plugin/public'; +import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import { withSuspense } from '@kbn/presentation-util-plugin/public'; import { WorkpadCreate } from './workpad_create'; @@ -48,7 +48,9 @@ export const Home = ({ activeTab = 'workpads' }: Props) => { ], }} > - {tab === 'workpads' ? : } + + {tab === 'workpads' ? : } + ); }; diff --git a/x-pack/plugins/canvas/tsconfig.json b/x-pack/plugins/canvas/tsconfig.json index 04d1e78fc95554..45b22e422dc6eb 100644 --- a/x-pack/plugins/canvas/tsconfig.json +++ b/x-pack/plugins/canvas/tsconfig.json @@ -82,6 +82,8 @@ "@kbn/core-saved-objects-server", "@kbn/discover-utils", "@kbn/content-management-plugin", + "@kbn/react-kibana-context-theme", + "@kbn/shared-ux-page-kibana-template", ], "exclude": [ "target/**/*", From 8e94530cc0f66ffecdf01ecf3c1d1bc0186b67d0 Mon Sep 17 00:00:00 2001 From: Vadim Kibana <82822460+vadimkibana@users.noreply.github.com> Date: Thu, 10 Aug 2023 11:19:06 +0200 Subject: [PATCH 14/45] Update EUI layout components in dev examples (#163494) ## Summary Partially addresses https://github.com/elastic/kibana/issues/161422 New look of developer examples: image --- examples/developer_examples/public/app.tsx | 101 +++++++++++---------- 1 file changed, 54 insertions(+), 47 deletions(-) diff --git a/examples/developer_examples/public/app.tsx b/examples/developer_examples/public/app.tsx index 15fa925a0f56b8..b95806edb28ebe 100644 --- a/examples/developer_examples/public/app.tsx +++ b/examples/developer_examples/public/app.tsx @@ -11,9 +11,9 @@ import ReactDOM from 'react-dom'; import { EuiText, - EuiPageContent_Deprecated as EuiPageContent, + EuiPageTemplate, EuiCard, - EuiPageContentHeader_Deprecated as EuiPageContentHeader, + EuiPageHeader, EuiFlexGroup, EuiFlexItem, EuiFieldSearch, @@ -44,59 +44,66 @@ function DeveloperExamples({ examples, navigateToApp, getUrlForApp }: Props) { }); return ( - - - -

Developer examples

-

- The following examples showcase services and APIs that are available to developers. + <> + + + + + + The following examples showcase services and APIs that are available to developers. + + + setSearch(e.target.value)} isClearable={true} aria-label="Search developer examples" /> -

-
-
- - {filteredExamples.map((def) => ( - - - {def.description} - - } - title={ - - { - navigateToApp(def.appId); - }} - > - - {def.title} - - - - window.open(getUrlForApp(def.appId), '_blank', 'noopener, noreferrer') - } - > - Open in new tab - - - } - image={def.image} - footer={def.links ? : undefined} - /> - ))} - -
+ + + + + {filteredExamples.map((def) => ( + + + {def.description} + + } + title={ + + { + navigateToApp(def.appId); + }} + > + + {def.title} + + + + window.open(getUrlForApp(def.appId), '_blank', 'noopener, noreferrer') + } + > + Open in new tab + + + } + image={def.image} + footer={def.links ? : undefined} + /> + + ))} + + + ); } From 8e63cd9eb79a42eb597a53553608578479ef9f42 Mon Sep 17 00:00:00 2001 From: Vadim Kibana <82822460+vadimkibana@users.noreply.github.com> Date: Thu, 10 Aug 2023 11:19:33 +0200 Subject: [PATCH 15/45] Update EUI layout components in bfetch example plugin (#163490) ## Summary Partially addresses https://github.com/elastic/kibana/issues/161422 New look: image --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../public/components/page/index.tsx | 35 ++++++---------- .../public/containers/app/index.tsx | 2 - .../app/pages/page_count_until/index.tsx | 3 +- .../app/pages/page_double_integers/index.tsx | 3 +- .../public/containers/app/sidebar/index.tsx | 40 +++++++++---------- 5 files changed, 35 insertions(+), 48 deletions(-) diff --git a/examples/bfetch_explorer/public/components/page/index.tsx b/examples/bfetch_explorer/public/components/page/index.tsx index b4ce0806b1356a..921f4b5fa1635c 100644 --- a/examples/bfetch_explorer/public/components/page/index.tsx +++ b/examples/bfetch_explorer/public/components/page/index.tsx @@ -7,34 +7,23 @@ */ import * as React from 'react'; -import { - EuiPageBody, - EuiPageContent_Deprecated as EuiPageContent, - EuiPageContentBody_Deprecated as EuiPageContentBody, - EuiPageHeader, - EuiPageHeaderSection, - EuiTitle, -} from '@elastic/eui'; +import { EuiPageTemplate, EuiPageSection, EuiPageHeader } from '@elastic/eui'; export interface PageProps { title?: React.ReactNode; + sidebar?: React.ReactNode; } -export const Page: React.FC = ({ title = 'Untitled', children }) => { +export const Page: React.FC = ({ title = 'Untitled', sidebar, children }) => { return ( - - - - -

{title}

-
-
-
- - - {children} - - -
+ + {sidebar} + + + + + {children} + + ); }; diff --git a/examples/bfetch_explorer/public/containers/app/index.tsx b/examples/bfetch_explorer/public/containers/app/index.tsx index 54395ff4eb46d6..1c6c6c208f7b1f 100644 --- a/examples/bfetch_explorer/public/containers/app/index.tsx +++ b/examples/bfetch_explorer/public/containers/app/index.tsx @@ -11,7 +11,6 @@ import { Redirect } from 'react-router-dom'; import { BrowserRouter as Router, Route, Routes } from '@kbn/shared-ux-router'; import { EuiPage } from '@elastic/eui'; import { useDeps } from '../../hooks/use_deps'; -import { Sidebar } from './sidebar'; import { routes } from '../../routes'; export const App: React.FC = () => { @@ -27,7 +26,6 @@ export const App: React.FC = () => { return ( - {routeElements} diff --git a/examples/bfetch_explorer/public/containers/app/pages/page_count_until/index.tsx b/examples/bfetch_explorer/public/containers/app/pages/page_count_until/index.tsx index 75a20904256b53..b0ed74a570bb41 100644 --- a/examples/bfetch_explorer/public/containers/app/pages/page_count_until/index.tsx +++ b/examples/bfetch_explorer/public/containers/app/pages/page_count_until/index.tsx @@ -11,6 +11,7 @@ import { EuiPanel, EuiText } from '@elastic/eui'; import { CountUntil } from '../../../../components/count_until'; import { Page } from '../../../../components/page'; import { useDeps } from '../../../../hooks/use_deps'; +import { Sidebar } from '../../sidebar'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface Props {} @@ -19,7 +20,7 @@ export const PageCountUntil: React.FC = () => { const { plugins } = useDeps(); return ( - + }> This demo sends a single number N using fetchStreaming to the server. The server will stream back N number of messages with 1 second delay each containing a number diff --git a/examples/bfetch_explorer/public/containers/app/pages/page_double_integers/index.tsx b/examples/bfetch_explorer/public/containers/app/pages/page_double_integers/index.tsx index 126e099098cee0..0af8218708cbba 100644 --- a/examples/bfetch_explorer/public/containers/app/pages/page_double_integers/index.tsx +++ b/examples/bfetch_explorer/public/containers/app/pages/page_double_integers/index.tsx @@ -11,6 +11,7 @@ import { EuiPanel, EuiText } from '@elastic/eui'; import { DoubleIntegers } from '../../../../components/double_integers'; import { Page } from '../../../../components/page'; import { useDeps } from '../../../../hooks/use_deps'; +import { Sidebar } from '../../sidebar'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface Props {} @@ -19,7 +20,7 @@ export const PageDoubleIntegers: React.FC = () => { const { explorer } = useDeps(); return ( - + }> Below is a list of numbers in milliseconds. They are sent as a batch to the server. For each number server waits given number of milliseconds then doubles the number and streams it diff --git a/examples/bfetch_explorer/public/containers/app/sidebar/index.tsx b/examples/bfetch_explorer/public/containers/app/sidebar/index.tsx index fe0902f88f3218..dfd17d18388ae4 100644 --- a/examples/bfetch_explorer/public/containers/app/sidebar/index.tsx +++ b/examples/bfetch_explorer/public/containers/app/sidebar/index.tsx @@ -7,7 +7,7 @@ */ import React from 'react'; -import { EuiPageSideBar_Deprecated as EuiPageSideBar, EuiSideNav } from '@elastic/eui'; +import { EuiSideNav } from '@elastic/eui'; import { useHistory } from 'react-router-dom'; import { routes } from '../../../routes'; @@ -18,26 +18,24 @@ export const Sidebar: React.FC = () => { const history = useHistory(); return ( - - ({ - id, - name: title, - isSelected: true, - items: items.map((route) => ({ - id: route.id, - name: route.title, - onClick: () => history.push(`/${route.id}`), - 'data-test-subj': route.id, - })), + ({ + id, + name: title, + isSelected: true, + items: items.map((route) => ({ + id: route.id, + name: route.title, + onClick: () => history.push(`/${route.id}`), + 'data-test-subj': route.id, })), - }, - ]} - /> - + })), + }, + ]} + /> ); }; From 48b7acfd2427d9927d4a62ca658592c4b7a5bbb2 Mon Sep 17 00:00:00 2001 From: Vitalii Dmyterko <92328789+vitaliidm@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:37:29 +0100 Subject: [PATCH 16/45] [Security Solution][Detection engine] skips geo_point non-ecs validation (#163487) ## Summary While reviewing https://github.com/elastic/kibana/pull/163414, I have noticed, that `geo_point` type still gets validated in `computeIsEcsCompliant`, that could lead to removing some of the complex `geo_point` type representations, notably object like ones, for example ```JSON { "type": "Point", "coordinates": [-88.34, 20.12], } ``` In this PR, I completely removing validation for this field type (we even have functional test to verify it) With changes introduced in https://github.com/elastic/kibana/pull/163414, alert will be created even with not valid `geo_point` fields, instead of failing (changed e2e test name) ### Checklist Delete any items that are not applicable to this PR. - [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 --- .../utils/strip_non_ecs_fields.test.ts | 68 +++++++++++++++++++ .../factories/utils/strip_non_ecs_fields.ts | 8 ++- .../rule_execution_logic/non_ecs_fields.ts | 4 +- 3 files changed, 77 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.test.ts index 1d9d349dd0b5a0..de4e9982c852da 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.test.ts @@ -551,4 +551,72 @@ describe('stripNonEcsFields', () => { expect(removed).toEqual([]); }); }); + + // geo_point is too complex so we going to skip its validation + describe('geo_point field', () => { + it('should not strip invalid geo_point field', () => { + const { result, removed } = stripNonEcsFields({ + 'client.location.geo': 'invalid geo_point', + }); + + expect(result).toEqual({ + 'client.location.geo': 'invalid geo_point', + }); + expect(removed).toEqual([]); + }); + + it('should not strip valid geo_point fields', () => { + expect( + stripNonEcsFields({ + 'client.geo.location': [0, 90], + }).result + ).toEqual({ + 'client.geo.location': [0, 90], + }); + + expect( + stripNonEcsFields({ + 'client.geo.location': { + type: 'Point', + coordinates: [-88.34, 20.12], + }, + }).result + ).toEqual({ + 'client.geo.location': { + type: 'Point', + coordinates: [-88.34, 20.12], + }, + }); + + expect( + stripNonEcsFields({ + 'client.geo.location': 'POINT (-71.34 41.12)', + }).result + ).toEqual({ + 'client.geo.location': 'POINT (-71.34 41.12)', + }); + + expect( + stripNonEcsFields({ + client: { + geo: { + location: { + lat: 41.12, + lon: -71.34, + }, + }, + }, + }).result + ).toEqual({ + client: { + geo: { + location: { + lat: 41.12, + lon: -71.34, + }, + }, + }, + }); + }); + }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.ts index 975b2b643a4e78..62e5c9211c1bee 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/strip_non_ecs_fields.ts @@ -57,10 +57,11 @@ const ecsObjectFields = getEcsObjectFields(); /** * checks if path is a valid Ecs object type (object or flattened) + * geo_point also can be object */ const getIsEcsFieldObject = (path: string) => { const ecsField = ecsFieldMap[path as keyof typeof ecsFieldMap]; - return ['object', 'flattened'].includes(ecsField?.type) || ecsObjectFields[path]; + return ['object', 'flattened', 'geo_point'].includes(ecsField?.type) || ecsObjectFields[path]; }; /** @@ -117,6 +118,11 @@ const computeIsEcsCompliant = (value: SourceField, path: string) => { const ecsField = ecsFieldMap[path as keyof typeof ecsFieldMap]; const isEcsFieldObject = getIsEcsFieldObject(path); + // do not validate geo_point, since it's very complex type that can be string/array/object + if (ecsField?.type === 'geo_point') { + return true; + } + // validate if value is a long type if (ecsField?.type === 'long') { return isValidLongType(value); diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/non_ecs_fields.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/non_ecs_fields.ts index f315dfabb4d861..2f2115333d5c20 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/non_ecs_fields.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/non_ecs_fields.ts @@ -258,8 +258,8 @@ export default ({ getService }: FtrProviderContext) => { // we don't validate it because geo_point is very complex type with many various representations: array, different object, string with few valid patterns // more on geo_point type https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html - // since .alerts-* indices allow _ignore_malformed option, alert will be indexed for this document - it('should fail creating alert when ECS field mapping is geo_point', async () => { + // since .alerts-* indices allow _ignore_malformed option, alert will be created for this document + it('should not fail creating alert when ECS field mapping is geo_point', async () => { const document = { client: { geo: { From c97d4960bf995671c7053333236ae7ff47fcc7a4 Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Thu, 10 Aug 2023 13:49:45 +0200 Subject: [PATCH 17/45] [Discover] Inline shard failures warnings (#161271) - Closes https://github.com/elastic/kibana/issues/155216 ## Summary This PR replaces shard falures toasts with inline warnings in Discover. - [x] Intercept shard failures in Discover main app - [x] Show inline warnings above the grid instead - [x] Handle NoResultsFound case too - [x] Implement for Discover context app - [x] Implement for saved search embeddable on Dashboard - [x] Can we inline timeouts too? - [x] Check SQL view - [x] Add tests Discover view with shard failures Screenshot 2023-07-06 at 14 23 48 Discover view with shard failures (and no results) Screenshot 2023-07-07 at 13 24 50 Dashboard view with shard failures Screenshot 2023-07-06 at 16 15 49 Surrounding documents view with shard failures Screenshot 2023-07-10 at 17 26 31 Discover view with timeouts Screenshot 2023-07-07 at 16 47 27 Dashboard view with timeouts Screenshot 2023-07-07 at 16 48 18 Surrounding documents view with timeouts Screenshot 2023-07-11 at 15 03 41 ## Testing For testing please uncomment https://github.com/elastic/kibana/blob/3f102cf688dbfe87fd901cf7f8b59680ff62e5b8/src/plugins/data/common/search/search_source/search_source.ts#L922 or https://github.com/elastic/kibana/blob/3f102cf688dbfe87fd901cf7f8b59680ff62e5b8/src/plugins/data/common/search/search_source/search_source.ts#L547 and switch to `kibana*` data view. ### Checklist Delete any items that are not applicable to this PR. - [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/packages/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 - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --------- Co-authored-by: Davis McPhee Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 1 + .i18nrc.json | 1 + package.json | 1 + .../kbn-search-response-warnings/README.md | 3 + .../kbn-search-response-warnings/index.ts | 19 + .../jest.config.js | 13 + .../kbn-search-response-warnings/kibana.jsonc | 5 + .../kbn-search-response-warnings/package.json | 6 + .../src/__mocks__/search_response_warnings.ts | 50 ++ .../search_response_warnings.test.tsx.snap | 508 ++++++++++++++++++ .../search_response_warnings/index.ts | 12 + .../search_response_warnings.test.tsx | 52 ++ .../search_response_warnings.tsx | 313 +++++++++++ .../kbn-search-response-warnings/src/types.ts | 18 + ...rch_response_intercepted_warnings.test.tsx | 184 +++++++ ...t_search_response_intercepted_warnings.tsx | 88 +++ .../tsconfig.json | 16 + .../search/search_source/search_source.ts | 16 + src/plugins/data/public/index.ts | 1 + src/plugins/discover/common/constants.ts | 2 + .../components/action_bar/action_bar.tsx | 1 + .../action_bar/action_bar_warning.tsx | 8 +- .../application/context/context_app.tsx | 16 + .../context/context_app_content.tsx | 18 +- .../hooks/use_context_app_fetch.test.tsx | 54 +- .../context/hooks/use_context_app_fetch.tsx | 42 +- .../context/services/anchor.test.ts | 154 ++++-- .../application/context/services/anchor.ts | 40 +- .../services/context.predecessors.test.ts | 36 +- .../services/context.successors.test.ts | 120 ++++- .../application/context/services/context.ts | 51 +- .../context/services/context_query_state.ts | 19 + .../context/utils/fetch_hits_in_interval.ts | 40 +- .../components/layout/discover_documents.tsx | 8 + .../components/layout/discover_layout.tsx | 45 +- .../components/no_results/no_results.test.tsx | 10 +- .../main/components/no_results/no_results.tsx | 18 + .../no_results_suggestions.tsx | 1 + .../services/discover_data_state_container.ts | 4 +- .../application/main/utils/fetch_all.ts | 3 +- .../application/main/utils/fetch_documents.ts | 21 +- .../components/common/error_callout.tsx | 52 +- .../doc_table/create_doc_table_embeddable.tsx | 1 + .../doc_table/doc_table_embeddable.tsx | 3 + .../embeddable/saved_search_embeddable.tsx | 19 +- .../saved_search_embeddable_badge.tsx | 37 ++ .../saved_search_embeddable_base.tsx | 10 + .../public/embeddable/saved_search_grid.tsx | 6 +- src/plugins/discover/public/types.ts | 4 +- src/plugins/discover/tsconfig.json | 1 + .../public/chart/histogram.test.tsx | 14 +- .../public/chart/histogram.tsx | 8 +- .../public/chart/hooks/use_total_hits.ts | 1 + tsconfig.base.json | 2 + .../apps/discover/async_scripted_fields.js | 41 +- yarn.lock | 4 + 56 files changed, 2037 insertions(+), 184 deletions(-) create mode 100644 packages/kbn-search-response-warnings/README.md create mode 100644 packages/kbn-search-response-warnings/index.ts create mode 100644 packages/kbn-search-response-warnings/jest.config.js create mode 100644 packages/kbn-search-response-warnings/kibana.jsonc create mode 100644 packages/kbn-search-response-warnings/package.json create mode 100644 packages/kbn-search-response-warnings/src/__mocks__/search_response_warnings.ts create mode 100644 packages/kbn-search-response-warnings/src/components/search_response_warnings/__snapshots__/search_response_warnings.test.tsx.snap create mode 100644 packages/kbn-search-response-warnings/src/components/search_response_warnings/index.ts create mode 100644 packages/kbn-search-response-warnings/src/components/search_response_warnings/search_response_warnings.test.tsx create mode 100644 packages/kbn-search-response-warnings/src/components/search_response_warnings/search_response_warnings.tsx create mode 100644 packages/kbn-search-response-warnings/src/types.ts create mode 100644 packages/kbn-search-response-warnings/src/utils/get_search_response_intercepted_warnings.test.tsx create mode 100644 packages/kbn-search-response-warnings/src/utils/get_search_response_intercepted_warnings.tsx create mode 100644 packages/kbn-search-response-warnings/tsconfig.json create mode 100644 src/plugins/discover/public/embeddable/saved_search_embeddable_badge.tsx diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0ba3f7fdcc32a1..15a828ac76a94c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -589,6 +589,7 @@ src/plugins/screenshot_mode @elastic/appex-sharedux x-pack/examples/screenshotting_example @elastic/appex-sharedux x-pack/plugins/screenshotting @elastic/kibana-reporting-services examples/search_examples @elastic/kibana-data-discovery +packages/kbn-search-response-warnings @elastic/kibana-data-discovery x-pack/plugins/searchprofiler @elastic/platform-deployment-management x-pack/test/security_api_integration/packages/helpers @elastic/kibana-core x-pack/plugins/security @elastic/kibana-security diff --git a/.i18nrc.json b/.i18nrc.json index 8ae8df04394096..02337d5b8f0d4e 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -92,6 +92,7 @@ "server": "src/legacy/server", "share": "src/plugins/share", "sharedUXPackages": "packages/shared-ux", + "searchResponseWarnings": "packages/kbn-search-response-warnings", "securitySolutionPackages": "x-pack/packages/security-solution", "serverlessPackages": "packages/serverless", "coloring": "packages/kbn-coloring/src", diff --git a/package.json b/package.json index 8962b9736814bd..9c9b768f0dc55e 100644 --- a/package.json +++ b/package.json @@ -592,6 +592,7 @@ "@kbn/screenshotting-example-plugin": "link:x-pack/examples/screenshotting_example", "@kbn/screenshotting-plugin": "link:x-pack/plugins/screenshotting", "@kbn/search-examples-plugin": "link:examples/search_examples", + "@kbn/search-response-warnings": "link:packages/kbn-search-response-warnings", "@kbn/searchprofiler-plugin": "link:x-pack/plugins/searchprofiler", "@kbn/security-plugin": "link:x-pack/plugins/security", "@kbn/security-solution-ess": "link:x-pack/plugins/security_solution_ess", diff --git a/packages/kbn-search-response-warnings/README.md b/packages/kbn-search-response-warnings/README.md new file mode 100644 index 00000000000000..527df7dab0f3a5 --- /dev/null +++ b/packages/kbn-search-response-warnings/README.md @@ -0,0 +1,3 @@ +# @kbn/search-response-warnings + +Components and utils to render warnings which happen when executing search request. For example, shard failures and time outs. diff --git a/packages/kbn-search-response-warnings/index.ts b/packages/kbn-search-response-warnings/index.ts new file mode 100644 index 00000000000000..8ef18d86b9a927 --- /dev/null +++ b/packages/kbn-search-response-warnings/index.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export type { SearchResponseInterceptedWarning } from './src/types'; + +export { + SearchResponseWarnings, + type SearchResponseWarningsProps, +} from './src/components/search_response_warnings'; + +export { + getSearchResponseInterceptedWarnings, + removeInterceptedWarningDuplicates, +} from './src/utils/get_search_response_intercepted_warnings'; diff --git a/packages/kbn-search-response-warnings/jest.config.js b/packages/kbn-search-response-warnings/jest.config.js new file mode 100644 index 00000000000000..7b3ab9b639841b --- /dev/null +++ b/packages/kbn-search-response-warnings/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../..', + roots: ['/packages/kbn-search-response-warnings'], +}; diff --git a/packages/kbn-search-response-warnings/kibana.jsonc b/packages/kbn-search-response-warnings/kibana.jsonc new file mode 100644 index 00000000000000..bf1e5616172f46 --- /dev/null +++ b/packages/kbn-search-response-warnings/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/search-response-warnings", + "owner": "@elastic/kibana-data-discovery" +} diff --git a/packages/kbn-search-response-warnings/package.json b/packages/kbn-search-response-warnings/package.json new file mode 100644 index 00000000000000..69ccd790806aa6 --- /dev/null +++ b/packages/kbn-search-response-warnings/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/search-response-warnings", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-search-response-warnings/src/__mocks__/search_response_warnings.ts b/packages/kbn-search-response-warnings/src/__mocks__/search_response_warnings.ts new file mode 100644 index 00000000000000..9fe2cf02a16718 --- /dev/null +++ b/packages/kbn-search-response-warnings/src/__mocks__/search_response_warnings.ts @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { SearchResponseWarning } from '@kbn/data-plugin/public'; + +export const searchResponseTimeoutWarningMock: SearchResponseWarning = { + type: 'timed_out', + message: 'Data might be incomplete because your request timed out', + reason: undefined, +}; + +export const searchResponseShardFailureWarningMock: SearchResponseWarning = { + type: 'shard_failure', + message: '3 of 4 shards failed', + text: 'The data might be incomplete or wrong.', + reason: { + type: 'illegal_argument_exception', + reason: 'Field [__anonymous_] of type [boolean] does not support custom formats', + }, +}; + +export const searchResponseWarningsMock: SearchResponseWarning[] = [ + searchResponseTimeoutWarningMock, + searchResponseShardFailureWarningMock, + { + type: 'shard_failure', + message: '3 of 4 shards failed', + text: 'The data might be incomplete or wrong.', + reason: { + type: 'query_shard_exception', + reason: + 'failed to create query: [.ds-kibana_sample_data_logs-2023.07.11-000001][0] Testing shard failures!', + }, + }, + { + type: 'shard_failure', + message: '1 of 4 shards failed', + text: 'The data might be incomplete or wrong.', + reason: { + type: 'query_shard_exception', + reason: + 'failed to create query: [.ds-kibana_sample_data_logs-2023.07.11-000001][0] Testing shard failures!', + }, + }, +]; diff --git a/packages/kbn-search-response-warnings/src/components/search_response_warnings/__snapshots__/search_response_warnings.test.tsx.snap b/packages/kbn-search-response-warnings/src/components/search_response_warnings/__snapshots__/search_response_warnings.test.tsx.snap new file mode 100644 index 00000000000000..01f917a0e6dbcd --- /dev/null +++ b/packages/kbn-search-response-warnings/src/components/search_response_warnings/__snapshots__/search_response_warnings.test.tsx.snap @@ -0,0 +1,508 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`SearchResponseWarnings renders "badge" correctly 1`] = ` +
+
+ + + +
+
+`; + +exports[`SearchResponseWarnings renders "callout" correctly 1`] = ` +
+
    +
  • +
    +

    +

    +
    +
    +
    +
    +
    + Data might be incomplete because your request timed out +
    +
    +
    +
    +
    + +
    +
    +

    +

    +
  • +
  • +
    +

    +

    +
    +
    +
    +
    +
    + + 3 of 4 shards failed + +
    +
    +
    +
    +

    + The data might be incomplete or wrong. +

    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +

    +

    +
  • +
  • +
    +

    +

    +
    +
    +
    +
    +
    + + 3 of 4 shards failed + +
    +
    +
    +
    +

    + The data might be incomplete or wrong. +

    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +

    +

    +
  • +
  • +
    +

    +

    +
    +
    +
    +
    +
    + + 1 of 4 shards failed + +
    +
    +
    +
    +

    + The data might be incomplete or wrong. +

    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +

    +

    +
  • +
+
+`; + +exports[`SearchResponseWarnings renders "empty_prompt" correctly 1`] = ` +
+
+
+ +
+
+
+

+ No results found +

+
+
+
    +
  • +
    +
    +
    + Data might be incomplete because your request timed out +
    +
    +
    +
  • +
  • +
    +
    +
    + + 3 of 4 shards failed + +
    +
    +
    +
    +

    + The data might be incomplete or wrong. +

    +
    +
    +
    + +
    +
    +
  • +
  • +
    +
    +
    + + 3 of 4 shards failed + +
    +
    +
    +
    +

    + The data might be incomplete or wrong. +

    +
    +
    +
    + +
    +
    +
  • +
  • +
    +
    +
    + + 1 of 4 shards failed + +
    +
    +
    +
    +

    + The data might be incomplete or wrong. +

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+
+
+`; diff --git a/packages/kbn-search-response-warnings/src/components/search_response_warnings/index.ts b/packages/kbn-search-response-warnings/src/components/search_response_warnings/index.ts new file mode 100644 index 00000000000000..8a3ed6d05600e0 --- /dev/null +++ b/packages/kbn-search-response-warnings/src/components/search_response_warnings/index.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { + SearchResponseWarnings, + type SearchResponseWarningsProps, +} from './search_response_warnings'; diff --git a/packages/kbn-search-response-warnings/src/components/search_response_warnings/search_response_warnings.test.tsx b/packages/kbn-search-response-warnings/src/components/search_response_warnings/search_response_warnings.test.tsx new file mode 100644 index 00000000000000..6e3c1b1a0d08d6 --- /dev/null +++ b/packages/kbn-search-response-warnings/src/components/search_response_warnings/search_response_warnings.test.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { mountWithIntl } from '@kbn/test-jest-helpers'; +import { SearchResponseWarnings } from './search_response_warnings'; +import { searchResponseWarningsMock } from '../../__mocks__/search_response_warnings'; + +const interceptedWarnings = searchResponseWarningsMock.map((originalWarning, index) => ({ + originalWarning, + action: originalWarning.type === 'shard_failure' ? : undefined, +})); + +describe('SearchResponseWarnings', () => { + it('renders "callout" correctly', () => { + const component = mountWithIntl( + + ); + expect(component.render()).toMatchSnapshot(); + }); + + it('renders "badge" correctly', () => { + const component = mountWithIntl( + + ); + expect(component.render()).toMatchSnapshot(); + }); + + it('renders "empty_prompt" correctly', () => { + const component = mountWithIntl( + + ); + expect(component.render()).toMatchSnapshot(); + }); +}); diff --git a/packages/kbn-search-response-warnings/src/components/search_response_warnings/search_response_warnings.tsx b/packages/kbn-search-response-warnings/src/components/search_response_warnings/search_response_warnings.tsx new file mode 100644 index 00000000000000..3c92096aa982b3 --- /dev/null +++ b/packages/kbn-search-response-warnings/src/components/search_response_warnings/search_response_warnings.tsx @@ -0,0 +1,313 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { PropsWithChildren, useEffect, useState } from 'react'; +import { + EuiCallOut, + EuiEmptyPrompt, + EuiText, + EuiTextProps, + EuiFlexGroup, + EuiFlexGroupProps, + EuiFlexItem, + EuiToolTip, + EuiButton, + EuiIcon, + EuiPopover, + useEuiTheme, + useEuiFontSize, + EuiButtonIcon, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import { i18n } from '@kbn/i18n'; +import type { SearchResponseInterceptedWarning } from '../../types'; + +/** + * SearchResponseWarnings component props + */ +export interface SearchResponseWarningsProps { + /** + * An array of warnings which can have actions + */ + interceptedWarnings?: SearchResponseInterceptedWarning[]; + + /** + * View variant + */ + variant: 'callout' | 'badge' | 'empty_prompt'; + + /** + * Custom data-test-subj value + */ + 'data-test-subj': string; +} + +/** + * SearchResponseWarnings component + * @param interceptedWarnings + * @param variant + * @param dataTestSubj + * @constructor + */ +export const SearchResponseWarnings = ({ + interceptedWarnings, + variant, + 'data-test-subj': dataTestSubj, +}: SearchResponseWarningsProps) => { + const { euiTheme } = useEuiTheme(); + const xsFontSize = useEuiFontSize('xs').fontSize; + const [isCalloutVisibleMap, setIsCalloutVisibleMap] = useState>({}); + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + + useEffect(() => { + setIsCalloutVisibleMap({}); + }, [interceptedWarnings, setIsCalloutVisibleMap]); + + if (!interceptedWarnings?.length) { + return null; + } + + if (variant === 'callout') { + return ( +
+
    + {interceptedWarnings.map((warning, index) => { + if (isCalloutVisibleMap[index] === false) { + return null; + } + return ( +
  • + + setIsCalloutVisibleMap((prev) => ({ ...prev, [index]: false })) + } + > + + + } + color="warning" + iconType="warning" + size="s" + css={css` + .euiTitle { + display: flex; + align-items: center; + } + `} + data-test-subj={dataTestSubj} + /> +
  • + ); + })} +
+
+ ); + } + + if (variant === 'empty_prompt') { + return ( + + {i18n.translate('searchResponseWarnings.noResultsTitle', { + defaultMessage: 'No results found', + })} + + } + body={ +
    + {interceptedWarnings.map((warning, index) => ( +
  • + +
  • + ))} +
+ } + /> + ); + } + + if (variant === 'badge') { + const warningCount = interceptedWarnings.length; + const buttonLabel = i18n.translate('searchResponseWarnings.badgeButtonLabel', { + defaultMessage: '{warningCount} {warningCount, plural, one {warning} other {warnings}}', + values: { + warningCount, + }, + }); + + return ( + + setIsPopoverOpen(true)} + data-test-subj={`${dataTestSubj}_trigger`} + title={buttonLabel} + css={css` + block-size: ${euiTheme.size.l}; + font-size: ${xsFontSize}; + padding: 0 ${euiTheme.size.xs}; + & > * { + gap: ${euiTheme.size.xs}; + } + `} + > + + {warningCount} + + + } + isOpen={isPopoverOpen} + closePopover={() => setIsPopoverOpen(false)} + > +
    + {interceptedWarnings.map((warning, index) => ( +
  • + + + + + + + + +
  • + ))} +
+
+ ); + } + + return null; +}; + +function WarningContent({ + warning: { originalWarning, action }, + textSize = 's', + groupStyles, + 'data-test-subj': dataTestSubj, +}: { + warning: SearchResponseInterceptedWarning; + textSize?: EuiTextProps['size']; + groupStyles?: Partial; + 'data-test-subj': string; +}) { + const hasDescription = 'text' in originalWarning; + + return ( + + + + {hasDescription ? {originalWarning.message} : originalWarning.message} + + + {hasDescription ? ( + + +

{originalWarning.text}

+
+
+ ) : null} + {action ? {action} : null} +
+ ); +} + +function CalloutTitleWrapper({ + children, + onCloseCallout, +}: PropsWithChildren<{ onCloseCallout: () => void }>) { + return ( + + {children} + + + + + ); +} diff --git a/packages/kbn-search-response-warnings/src/types.ts b/packages/kbn-search-response-warnings/src/types.ts new file mode 100644 index 00000000000000..a0406a050c3c16 --- /dev/null +++ b/packages/kbn-search-response-warnings/src/types.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { ReactNode } from 'react'; +import type { SearchResponseWarning } from '@kbn/data-plugin/public'; + +/** + * Search Response Warning type which also includes an action + */ +export interface SearchResponseInterceptedWarning { + originalWarning: SearchResponseWarning; + action?: ReactNode; +} diff --git a/packages/kbn-search-response-warnings/src/utils/get_search_response_intercepted_warnings.test.tsx b/packages/kbn-search-response-warnings/src/utils/get_search_response_intercepted_warnings.test.tsx new file mode 100644 index 00000000000000..34ae546f42ba6b --- /dev/null +++ b/packages/kbn-search-response-warnings/src/utils/get_search_response_intercepted_warnings.test.tsx @@ -0,0 +1,184 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { RequestAdapter } from '@kbn/inspector-plugin/common'; +import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; +import { coreMock } from '@kbn/core/public/mocks'; +import { + getSearchResponseInterceptedWarnings, + removeInterceptedWarningDuplicates, +} from './get_search_response_intercepted_warnings'; +import { searchResponseWarningsMock } from '../__mocks__/search_response_warnings'; + +const servicesMock = { + data: dataPluginMock.createStartContract(), + theme: coreMock.createStart().theme, +}; + +describe('getSearchResponseInterceptedWarnings', () => { + const adapter = new RequestAdapter(); + + it('should catch warnings correctly', () => { + const services = { + ...servicesMock, + }; + services.data.search.showWarnings = jest.fn((_, callback) => { + // @ts-expect-error for empty meta + callback?.(searchResponseWarningsMock[0], {}); + // @ts-expect-error for empty meta + callback?.(searchResponseWarningsMock[1], {}); + // @ts-expect-error for empty meta + callback?.(searchResponseWarningsMock[2], {}); + // @ts-expect-error for empty meta + callback?.(searchResponseWarningsMock[3], {}); + + // plus duplicates + // @ts-expect-error for empty meta + callback?.(searchResponseWarningsMock[0], {}); + // @ts-expect-error for empty meta + callback?.(searchResponseWarningsMock[1], {}); + // @ts-expect-error for empty meta + callback?.(searchResponseWarningsMock[2], {}); + }); + expect( + getSearchResponseInterceptedWarnings({ + services, + adapter, + options: { + disableShardFailureWarning: true, + }, + }) + ).toMatchInlineSnapshot(` + Array [ + Object { + "action": undefined, + "originalWarning": Object { + "message": "Data might be incomplete because your request timed out", + "reason": undefined, + "type": "timed_out", + }, + }, + Object { + "action": , + "originalWarning": Object { + "message": "3 of 4 shards failed", + "reason": Object { + "reason": "Field [__anonymous_] of type [boolean] does not support custom formats", + "type": "illegal_argument_exception", + }, + "text": "The data might be incomplete or wrong.", + "type": "shard_failure", + }, + }, + Object { + "action": , + "originalWarning": Object { + "message": "3 of 4 shards failed", + "reason": Object { + "reason": "failed to create query: [.ds-kibana_sample_data_logs-2023.07.11-000001][0] Testing shard failures!", + "type": "query_shard_exception", + }, + "text": "The data might be incomplete or wrong.", + "type": "shard_failure", + }, + }, + Object { + "action": , + "originalWarning": Object { + "message": "1 of 4 shards failed", + "reason": Object { + "reason": "failed to create query: [.ds-kibana_sample_data_logs-2023.07.11-000001][0] Testing shard failures!", + "type": "query_shard_exception", + }, + "text": "The data might be incomplete or wrong.", + "type": "shard_failure", + }, + }, + ] + `); + }); + + it('should not catch any warnings if disableShardFailureWarning is false', () => { + const services = { + ...servicesMock, + }; + services.data.search.showWarnings = jest.fn((_, callback) => { + // @ts-expect-error for empty meta + callback?.(searchResponseWarningsMock[0], {}); + }); + expect( + getSearchResponseInterceptedWarnings({ + services, + adapter, + options: { + disableShardFailureWarning: false, + }, + }) + ).toBeUndefined(); + }); +}); + +describe('removeInterceptedWarningDuplicates', () => { + it('should remove duplicates successfully', () => { + const interceptedWarnings = searchResponseWarningsMock.map((originalWarning) => ({ + originalWarning, + })); + + expect(removeInterceptedWarningDuplicates([interceptedWarnings[0]])).toEqual([ + interceptedWarnings[0], + ]); + expect(removeInterceptedWarningDuplicates(interceptedWarnings)).toEqual(interceptedWarnings); + expect( + removeInterceptedWarningDuplicates([...interceptedWarnings, ...interceptedWarnings]) + ).toEqual(interceptedWarnings); + }); + + it('should return undefined if the list is empty', () => { + expect(removeInterceptedWarningDuplicates([])).toBeUndefined(); + expect(removeInterceptedWarningDuplicates(undefined)).toBeUndefined(); + }); +}); diff --git a/packages/kbn-search-response-warnings/src/utils/get_search_response_intercepted_warnings.tsx b/packages/kbn-search-response-warnings/src/utils/get_search_response_intercepted_warnings.tsx new file mode 100644 index 00000000000000..38ad0da2639f7e --- /dev/null +++ b/packages/kbn-search-response-warnings/src/utils/get_search_response_intercepted_warnings.tsx @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { uniqBy } from 'lodash'; +import { + type DataPublicPluginStart, + type ShardFailureRequest, + ShardFailureOpenModalButton, +} from '@kbn/data-plugin/public'; +import type { RequestAdapter } from '@kbn/inspector-plugin/common'; +import type { CoreStart } from '@kbn/core-lifecycle-browser'; +import type { SearchResponseInterceptedWarning } from '../types'; + +/** + * Intercepts warnings for a search source request + * @param services + * @param adapter + * @param options + */ +export const getSearchResponseInterceptedWarnings = ({ + services, + adapter, + options, +}: { + services: { + data: DataPublicPluginStart; + theme: CoreStart['theme']; + }; + adapter: RequestAdapter; + options?: { + disableShardFailureWarning?: boolean; + }; +}): SearchResponseInterceptedWarning[] | undefined => { + if (!options?.disableShardFailureWarning) { + return undefined; + } + + const interceptedWarnings: SearchResponseInterceptedWarning[] = []; + + services.data.search.showWarnings(adapter, (warning, meta) => { + const { request, response } = meta; + + interceptedWarnings.push({ + originalWarning: warning, + action: + warning.type === 'shard_failure' && warning.text && warning.message ? ( + ({ + request: request as ShardFailureRequest, + response, + })} + color="primary" + isButtonEmpty={true} + /> + ) : undefined, + }); + return true; // suppress the default behaviour + }); + + return removeInterceptedWarningDuplicates(interceptedWarnings); +}; + +/** + * Removes duplicated warnings + * @param interceptedWarnings + */ +export const removeInterceptedWarningDuplicates = ( + interceptedWarnings: SearchResponseInterceptedWarning[] | undefined +): SearchResponseInterceptedWarning[] | undefined => { + if (!interceptedWarnings?.length) { + return undefined; + } + + const uniqInterceptedWarnings = uniqBy(interceptedWarnings, (interceptedWarning) => + JSON.stringify(interceptedWarning.originalWarning) + ); + + return uniqInterceptedWarnings?.length ? uniqInterceptedWarnings : undefined; +}; diff --git a/packages/kbn-search-response-warnings/tsconfig.json b/packages/kbn-search-response-warnings/tsconfig.json new file mode 100644 index 00000000000000..77bffc521e15f8 --- /dev/null +++ b/packages/kbn-search-response-warnings/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": ["*.ts", "src/**/*", "__mocks__/**/*.ts"], + "kbn_references": [ + "@kbn/data-plugin", + "@kbn/test-jest-helpers", + "@kbn/i18n", + "@kbn/inspector-plugin", + "@kbn/core", + "@kbn/core-lifecycle-browser", + ], + "exclude": ["target/**/*"] +} diff --git a/src/plugins/data/common/search/search_source/search_source.ts b/src/plugins/data/common/search/search_source/search_source.ts index 0ba2c77c8c0160..a9d48108d296df 100644 --- a/src/plugins/data/common/search/search_source/search_source.ts +++ b/src/plugins/data/common/search/search_source/search_source.ts @@ -543,6 +543,8 @@ export class SearchSource { return search({ params, indexType: searchRequest.indexType }, options).pipe( switchMap((response) => { + // For testing timeout messages in UI, uncomment the next line + // response.rawResponse.timed_out = true; return new Observable>((obs) => { if (isErrorResponse(response)) { obs.error(response); @@ -916,6 +918,20 @@ export class SearchSource { }; body.query = buildEsQuery(index, query, filters, esQueryConfigs); + // For testing shard failure messages in UI, uncomment the next block and switch to `kibana*` data view + // body.query = { + // error_query: { + // indices: [ + // { + // name: 'kibana_sample_data_logs', + // shard_ids: [0, 1], + // error_type: 'exception', + // message: 'Testing shard failures!', + // }, + // ], + // }, + // }; + if (highlightAll && body.query) { body.highlight = getHighlightRequest(getConfig(UI_SETTINGS.DOC_HIGHLIGHT)); delete searchRequest.highlightAll; diff --git a/src/plugins/data/public/index.ts b/src/plugins/data/public/index.ts index 621b4ec7c13721..d8aa9a35a29a76 100644 --- a/src/plugins/data/public/index.ts +++ b/src/plugins/data/public/index.ts @@ -272,6 +272,7 @@ export type { GlobalQueryStateFromUrl, } from './query'; +// TODO: move to @kbn/search-response-warnings export type { ShardFailureRequest } from './shard_failure_modal'; export { ShardFailureOpenModalButton } from './shard_failure_modal'; diff --git a/src/plugins/discover/common/constants.ts b/src/plugins/discover/common/constants.ts index 8e61baa8ba6fc6..87a9378fa963c1 100644 --- a/src/plugins/discover/common/constants.ts +++ b/src/plugins/discover/common/constants.ts @@ -12,3 +12,5 @@ export enum VIEW_MODE { DOCUMENT_LEVEL = 'documents', AGGREGATED_LEVEL = 'aggregated', } + +export const DISABLE_SHARD_FAILURE_WARNING = true; diff --git a/src/plugins/discover/public/application/context/components/action_bar/action_bar.tsx b/src/plugins/discover/public/application/context/components/action_bar/action_bar.tsx index 0168e2f82e508e..5cbb72f0602eeb 100644 --- a/src/plugins/discover/public/application/context/components/action_bar/action_bar.tsx +++ b/src/plugins/discover/public/application/context/components/action_bar/action_bar.tsx @@ -154,6 +154,7 @@ export function ActionBar({ + {!isSuccessor && showWarning && } {!isSuccessor && showWarning && } {!isSuccessor && } diff --git a/src/plugins/discover/public/application/context/components/action_bar/action_bar_warning.tsx b/src/plugins/discover/public/application/context/components/action_bar/action_bar_warning.tsx index 65ad945429ced7..d833993aadfd71 100644 --- a/src/plugins/discover/public/application/context/components/action_bar/action_bar_warning.tsx +++ b/src/plugins/discover/public/application/context/components/action_bar/action_bar_warning.tsx @@ -15,9 +15,9 @@ export function ActionBarWarning({ docCount, type }: { docCount: number; type: S if (type === SurrDocType.PREDECESSORS) { return ( [fetchedState.predecessors, fetchedState.anchor, fetchedState.successors] ); + const interceptedWarnings = useMemo( + () => + removeInterceptedWarningDuplicates([ + ...(fetchedState.predecessorsInterceptedWarnings || []), + ...(fetchedState.anchorInterceptedWarnings || []), + ...(fetchedState.successorsInterceptedWarnings || []), + ]), + [ + fetchedState.predecessorsInterceptedWarnings, + fetchedState.anchorInterceptedWarnings, + fetchedState.successorsInterceptedWarnings, + ] + ); + const addFilter = useCallback( async (field: DataViewField | string, values: unknown, operation: string) => { const newFilters = generateFilters(filterManager, field, values, operation, dataView); @@ -251,6 +266,7 @@ export const ContextApp = ({ dataView, anchorId, referrer }: ContextAppProps) => anchorStatus={fetchedState.anchorStatus.value} predecessorsStatus={fetchedState.predecessorsStatus.value} successorsStatus={fetchedState.successorsStatus.value} + interceptedWarnings={interceptedWarnings} /> diff --git a/src/plugins/discover/public/application/context/context_app_content.tsx b/src/plugins/discover/public/application/context/context_app_content.tsx index 940c426817a968..fa9ed3b96c9ff7 100644 --- a/src/plugins/discover/public/application/context/context_app_content.tsx +++ b/src/plugins/discover/public/application/context/context_app_content.tsx @@ -8,12 +8,16 @@ import React, { useState, Fragment, useMemo, useCallback } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiHorizontalRule, EuiText } from '@elastic/eui'; +import { EuiHorizontalRule, EuiSpacer, EuiText } from '@elastic/eui'; import type { DataView } from '@kbn/data-views-plugin/public'; import { SortDirection } from '@kbn/data-plugin/public'; import type { SortOrder } from '@kbn/saved-search-plugin/public'; import { CellActionsProvider } from '@kbn/cell-actions'; import type { DataTableRecord } from '@kbn/discover-utils/types'; +import { + SearchResponseWarnings, + type SearchResponseInterceptedWarning, +} from '@kbn/search-response-warnings'; import { CONTEXT_STEP_SETTING, DOC_HIDE_TIME_COLUMN_SETTING } from '@kbn/discover-utils'; import { LoadingStatus } from './services/context_query_state'; import { ActionBar } from './components/action_bar/action_bar'; @@ -41,6 +45,7 @@ export interface ContextAppContentProps { anchorStatus: LoadingStatus; predecessorsStatus: LoadingStatus; successorsStatus: LoadingStatus; + interceptedWarnings: SearchResponseInterceptedWarning[] | undefined; useNewFieldsApi: boolean; isLegacy: boolean; setAppState: (newState: Partial) => void; @@ -71,6 +76,7 @@ export function ContextAppContent({ anchorStatus, predecessorsStatus, successorsStatus, + interceptedWarnings, useNewFieldsApi, isLegacy, setAppState, @@ -118,6 +124,16 @@ export function ContextAppContent({ return ( + {!!interceptedWarnings?.length && ( + <> + + + + )} ({ + originalWarning, +})); + const mockFilterManager = createFilterManagerMock(); +let mockOverrideInterceptedWarnings = false; + jest.mock('../services/context', () => { const originalModule = jest.requireActual('../services/context'); return { @@ -35,7 +42,12 @@ jest.mock('../services/context', () => { if (!dataView || !dataView.id) { throw new Error(); } - return type === 'predecessors' ? mockPredecessorHits : mockSuccessorHits; + return { + rows: type === 'predecessors' ? mockPredecessorHits : mockSuccessorHits, + interceptedWarnings: mockOverrideInterceptedWarnings + ? [mockInterceptedWarnings[type === 'predecessors' ? 0 : 1]] + : undefined, + }; }, }; }); @@ -45,7 +57,12 @@ jest.mock('../services/anchor', () => ({ if (!dataView.id || !anchorId) { throw new Error(); } - return mockAnchorHit; + return { + anchorRow: mockAnchorHit, + interceptedWarnings: mockOverrideInterceptedWarnings + ? [mockInterceptedWarnings[2]] + : undefined, + }; }, })); @@ -118,6 +135,9 @@ describe('test useContextAppFetch', () => { expect(result.current.fetchedState.anchor).toEqual({ ...mockAnchorHit, isAnchor: true }); expect(result.current.fetchedState.predecessors).toEqual(mockPredecessorHits); expect(result.current.fetchedState.successors).toEqual(mockSuccessorHits); + expect(result.current.fetchedState.predecessorsInterceptedWarnings).toBeUndefined(); + expect(result.current.fetchedState.successorsInterceptedWarnings).toBeUndefined(); + expect(result.current.fetchedState.anchorInterceptedWarnings).toBeUndefined(); }); it('should set anchorStatus to failed when tieBreakingField array is empty', async () => { @@ -187,4 +207,34 @@ describe('test useContextAppFetch', () => { expect(result.current.fetchedState.predecessors).toEqual([]); expect(result.current.fetchedState.successors).toEqual([]); }); + + it('should handle warnings', async () => { + mockOverrideInterceptedWarnings = true; + + const { result } = initDefaults(['_doc']); + + expect(result.current.fetchedState.anchorStatus.value).toBe(LoadingStatus.UNINITIALIZED); + expect(result.current.fetchedState.predecessorsStatus.value).toBe(LoadingStatus.UNINITIALIZED); + expect(result.current.fetchedState.successorsStatus.value).toBe(LoadingStatus.UNINITIALIZED); + + await act(async () => { + await result.current.fetchAllRows(); + }); + + expect(result.current.fetchedState.anchorStatus.value).toBe(LoadingStatus.LOADED); + expect(result.current.fetchedState.predecessorsStatus.value).toBe(LoadingStatus.LOADED); + expect(result.current.fetchedState.successorsStatus.value).toBe(LoadingStatus.LOADED); + expect(result.current.fetchedState.anchor).toEqual({ ...mockAnchorHit, isAnchor: true }); + expect(result.current.fetchedState.predecessors).toEqual(mockPredecessorHits); + expect(result.current.fetchedState.successors).toEqual(mockSuccessorHits); + expect(result.current.fetchedState.predecessorsInterceptedWarnings).toEqual([ + mockInterceptedWarnings[0], + ]); + expect(result.current.fetchedState.successorsInterceptedWarnings).toEqual([ + mockInterceptedWarnings[1], + ]); + expect(result.current.fetchedState.anchorInterceptedWarnings).toEqual([ + mockInterceptedWarnings[2], + ]); + }); }); diff --git a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx index 0f7da6d678cfd1..a2069f22c97c02 100644 --- a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx +++ b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx @@ -41,13 +41,8 @@ export function useContextAppFetch({ appState, useNewFieldsApi, }: ContextAppFetchProps) { - const { - uiSettings: config, - data, - toastNotifications, - filterManager, - core, - } = useDiscoverServices(); + const services = useDiscoverServices(); + const { uiSettings: config, data, toastNotifications, filterManager, core } = services; const { theme$ } = core.theme; const searchSource = useMemo(() => { @@ -95,9 +90,20 @@ export function useContextAppFetch({ { [dataView.timeFieldName!]: SortDirection.desc }, { [tieBreakerField]: SortDirection.desc }, ]; - const anchor = await fetchAnchor(anchorId, dataView, searchSource, sort, useNewFieldsApi); - setState({ anchor, anchorStatus: { value: LoadingStatus.LOADED } }); - return anchor; + const result = await fetchAnchor( + anchorId, + dataView, + searchSource, + sort, + useNewFieldsApi, + services + ); + setState({ + anchor: result.anchorRow, + anchorInterceptedWarnings: result.interceptedWarnings, + anchorStatus: { value: LoadingStatus.LOADED }, + }); + return result.anchorRow; } catch (error) { setState(createError('anchorStatus', FailureReason.UNKNOWN, error)); toastNotifications.addDanger({ @@ -106,6 +112,7 @@ export function useContextAppFetch({ }); } }, [ + services, tieBreakerField, setState, toastNotifications, @@ -124,13 +131,14 @@ export function useContextAppFetch({ type === SurrDocType.PREDECESSORS ? appState.predecessorCount : appState.successorCount; const anchor = fetchedAnchor || fetchedState.anchor; const statusKey = `${type}Status`; + const warningsKey = `${type}InterceptedWarnings`; const errorTitle = i18n.translate('discover.context.unableToLoadDocumentDescription', { defaultMessage: 'Unable to load documents', }); try { setState({ [statusKey]: { value: LoadingStatus.LOADING } }); - const rows = anchor.id + const result = anchor.id ? await fetchSurroundingDocs( type, dataView, @@ -140,10 +148,15 @@ export function useContextAppFetch({ count, filters, data, - useNewFieldsApi + useNewFieldsApi, + services ) - : []; - setState({ [type]: rows, [statusKey]: { value: LoadingStatus.LOADED } }); + : { rows: [], interceptedWarnings: undefined }; + setState({ + [type]: result.rows, + [warningsKey]: result.interceptedWarnings, + [statusKey]: { value: LoadingStatus.LOADED }, + }); } catch (error) { setState(createError(statusKey, FailureReason.UNKNOWN, error)); toastNotifications.addDanger({ @@ -155,6 +168,7 @@ export function useContextAppFetch({ } }, [ + services, filterManager, appState, fetchedState.anchor, diff --git a/src/plugins/discover/public/application/context/services/anchor.test.ts b/src/plugins/discover/public/application/context/services/anchor.test.ts index a20b2d454bcdde..415b468f38afdd 100644 --- a/src/plugins/discover/public/application/context/services/anchor.test.ts +++ b/src/plugins/discover/public/application/context/services/anchor.test.ts @@ -10,7 +10,9 @@ import { SortDirection } from '@kbn/data-plugin/public'; import { createSearchSourceStub } from './_stubs'; import { fetchAnchor, updateSearchSource } from './anchor'; import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; +import { searchResponseTimeoutWarningMock } from '@kbn/search-response-warnings/src/__mocks__/search_response_warnings'; import { savedSearchMock } from '../../../__mocks__/saved_search'; +import { discoverServiceMock } from '../../../__mocks__/services'; describe('context app', function () { // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -27,19 +29,27 @@ describe('context app', function () { }); it('should use the `fetch$` method of the SearchSource', function () { - return fetchAnchor('id', dataView, searchSourceStub, [ - { '@timestamp': SortDirection.desc }, - { _doc: SortDirection.desc }, - ]).then(() => { + return fetchAnchor( + 'id', + dataView, + searchSourceStub, + [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], + false, + discoverServiceMock + ).then(() => { expect(searchSourceStub.fetch$.calledOnce).toBe(true); }); }); it('should configure the SearchSource to not inherit from the implicit root', function () { - return fetchAnchor('id', dataView, searchSourceStub, [ - { '@timestamp': SortDirection.desc }, - { _doc: SortDirection.desc }, - ]).then(() => { + return fetchAnchor( + 'id', + dataView, + searchSourceStub, + [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], + false, + discoverServiceMock + ).then(() => { const setParentSpy = searchSourceStub.setParent; expect(setParentSpy.calledOnce).toBe(true); expect(setParentSpy.firstCall.args[0]).toBe(undefined); @@ -47,20 +57,28 @@ describe('context app', function () { }); it('should set the SearchSource data view', function () { - return fetchAnchor('id', dataView, searchSourceStub, [ - { '@timestamp': SortDirection.desc }, - { _doc: SortDirection.desc }, - ]).then(() => { + return fetchAnchor( + 'id', + dataView, + searchSourceStub, + [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], + false, + discoverServiceMock + ).then(() => { const setFieldSpy = searchSourceStub.setField; expect(setFieldSpy.firstCall.args[1].id).toEqual('DATA_VIEW_ID'); }); }); it('should set the SearchSource version flag to true', function () { - return fetchAnchor('id', dataView, searchSourceStub, [ - { '@timestamp': SortDirection.desc }, - { _doc: SortDirection.desc }, - ]).then(() => { + return fetchAnchor( + 'id', + dataView, + searchSourceStub, + [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], + false, + discoverServiceMock + ).then(() => { const setVersionSpy = searchSourceStub.setField.withArgs('version'); expect(setVersionSpy.calledOnce).toBe(true); expect(setVersionSpy.firstCall.args[1]).toEqual(true); @@ -68,10 +86,14 @@ describe('context app', function () { }); it('should set the SearchSource size to 1', function () { - return fetchAnchor('id', dataView, searchSourceStub, [ - { '@timestamp': SortDirection.desc }, - { _doc: SortDirection.desc }, - ]).then(() => { + return fetchAnchor( + 'id', + dataView, + searchSourceStub, + [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], + false, + discoverServiceMock + ).then(() => { const setSizeSpy = searchSourceStub.setField.withArgs('size'); expect(setSizeSpy.calledOnce).toBe(true); expect(setSizeSpy.firstCall.args[1]).toEqual(1); @@ -79,10 +101,14 @@ describe('context app', function () { }); it('should set the SearchSource query to an ids query', function () { - return fetchAnchor('id', dataView, searchSourceStub, [ - { '@timestamp': SortDirection.desc }, - { _doc: SortDirection.desc }, - ]).then(() => { + return fetchAnchor( + 'id', + dataView, + searchSourceStub, + [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], + false, + discoverServiceMock + ).then(() => { const setQuerySpy = searchSourceStub.setField.withArgs('query'); expect(setQuerySpy.calledOnce).toBe(true); expect(setQuerySpy.firstCall.args[1]).toEqual({ @@ -101,10 +127,14 @@ describe('context app', function () { }); it('should set the SearchSource sort order', function () { - return fetchAnchor('id', dataView, searchSourceStub, [ - { '@timestamp': SortDirection.desc }, - { _doc: SortDirection.desc }, - ]).then(() => { + return fetchAnchor( + 'id', + dataView, + searchSourceStub, + [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], + false, + discoverServiceMock + ).then(() => { const setSortSpy = searchSourceStub.setField.withArgs('sort'); expect(setSortSpy.calledOnce).toBe(true); expect(setSortSpy.firstCall.args[1]).toEqual([ @@ -143,10 +173,14 @@ describe('context app', function () { it('should reject with an error when no hits were found', function () { searchSourceStub = createSearchSourceStub([]); - return fetchAnchor('id', dataView, searchSourceStub, [ - { '@timestamp': SortDirection.desc }, - { _doc: SortDirection.desc }, - ]).then( + return fetchAnchor( + 'id', + dataView, + searchSourceStub, + [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], + false, + discoverServiceMock + ).then( () => { fail('expected the promise to be rejected'); }, @@ -162,12 +196,53 @@ describe('context app', function () { { _id: '3', _index: 't' }, ]); - return fetchAnchor('id', dataView, searchSourceStub, [ - { '@timestamp': SortDirection.desc }, - { _doc: SortDirection.desc }, - ]).then((anchorDocument) => { - expect(anchorDocument).toHaveProperty('raw._id', '1'); - expect(anchorDocument).toHaveProperty('isAnchor', true); + return fetchAnchor( + 'id', + dataView, + searchSourceStub, + [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], + false, + discoverServiceMock + ).then(({ anchorRow, interceptedWarnings }) => { + expect(anchorRow).toHaveProperty('raw._id', '1'); + expect(anchorRow).toHaveProperty('isAnchor', true); + expect(interceptedWarnings).toBeUndefined(); + }); + }); + + it('should intercept shard failures', function () { + searchSourceStub = createSearchSourceStub([ + { _id: '1', _index: 't' }, + { _id: '3', _index: 't' }, + ]); + + const mockWarnings = [ + { + originalWarning: searchResponseTimeoutWarningMock, + }, + ]; + + const services = discoverServiceMock; + services.data.search.showWarnings = jest.fn((adapter, callback) => { + // @ts-expect-error for empty meta + callback?.(mockWarnings[0].originalWarning, {}); + + // plus duplicates + // @ts-expect-error for empty meta + callback?.(mockWarnings[0].originalWarning, {}); + }); + + return fetchAnchor( + 'id', + dataView, + searchSourceStub, + [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], + false, + services + ).then(({ anchorRow, interceptedWarnings }) => { + expect(anchorRow).toHaveProperty('raw._id', '1'); + expect(anchorRow).toHaveProperty('isAnchor', true); + expect(interceptedWarnings).toEqual(mockWarnings); }); }); }); @@ -185,7 +260,8 @@ describe('context app', function () { dataView, searchSourceStub, [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], - true + true, + discoverServiceMock ).then(() => { const setFieldsSpy = searchSourceStub.setField.withArgs('fields'); const removeFieldsSpy = searchSourceStub.removeField.withArgs('fieldsFromSource'); diff --git a/src/plugins/discover/public/application/context/services/anchor.ts b/src/plugins/discover/public/application/context/services/anchor.ts index dce35fea932821..daf99030201a4f 100644 --- a/src/plugins/discover/public/application/context/services/anchor.ts +++ b/src/plugins/discover/public/application/context/services/anchor.ts @@ -8,19 +8,40 @@ import { lastValueFrom } from 'rxjs'; import { i18n } from '@kbn/i18n'; import { ISearchSource, EsQuerySortValue } from '@kbn/data-plugin/public'; -import { DataView } from '@kbn/data-views-plugin/public'; +import type { DataView } from '@kbn/data-views-plugin/public'; +import { RequestAdapter } from '@kbn/inspector-plugin/common'; import { buildDataTableRecord } from '@kbn/discover-utils'; import type { DataTableRecord, EsHitRecord } from '@kbn/discover-utils/types'; +import { + getSearchResponseInterceptedWarnings, + type SearchResponseInterceptedWarning, +} from '@kbn/search-response-warnings'; +import type { DiscoverServices } from '../../../build_services'; +import { DISABLE_SHARD_FAILURE_WARNING } from '../../../../common/constants'; export async function fetchAnchor( anchorId: string, dataView: DataView, searchSource: ISearchSource, sort: EsQuerySortValue[], - useNewFieldsApi: boolean = false -): Promise { + useNewFieldsApi: boolean = false, + services: DiscoverServices +): Promise<{ + anchorRow: DataTableRecord; + interceptedWarnings: SearchResponseInterceptedWarning[] | undefined; +}> { updateSearchSource(searchSource, anchorId, sort, useNewFieldsApi, dataView); - const { rawResponse } = await lastValueFrom(searchSource.fetch$()); + + const adapter = new RequestAdapter(); + const { rawResponse } = await lastValueFrom( + searchSource.fetch$({ + disableShardFailureWarning: DISABLE_SHARD_FAILURE_WARNING, + inspector: { + adapter, + title: 'anchor', + }, + }) + ); const doc = rawResponse.hits?.hits?.[0] as EsHitRecord; if (!doc) { @@ -30,7 +51,16 @@ export async function fetchAnchor( }) ); } - return buildDataTableRecord(doc, dataView, true); + return { + anchorRow: buildDataTableRecord(doc, dataView, true), + interceptedWarnings: getSearchResponseInterceptedWarnings({ + services, + adapter, + options: { + disableShardFailureWarning: DISABLE_SHARD_FAILURE_WARNING, + }, + }), + }; } export function updateSearchSource( diff --git a/src/plugins/discover/public/application/context/services/context.predecessors.test.ts b/src/plugins/discover/public/application/context/services/context.predecessors.test.ts index cf06344eace723..451c38e87399a4 100644 --- a/src/plugins/discover/public/application/context/services/context.predecessors.test.ts +++ b/src/plugins/discover/public/application/context/services/context.predecessors.test.ts @@ -14,8 +14,9 @@ import { Query } from '@kbn/es-query'; import { createContextSearchSourceStub } from './_stubs'; import { fetchSurroundingDocs, SurrDocType } from './context'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import type { DataTableRecord, EsHitRecord } from '@kbn/discover-utils/types'; +import type { EsHitRecord } from '@kbn/discover-utils/types'; import { buildDataTableRecord, buildDataTableRecordList } from '@kbn/discover-utils'; +import { discoverServiceMock } from '../../../__mocks__/services'; const MS_PER_DAY = 24 * 60 * 60 * 1000; const ANCHOR_TIMESTAMP = new Date(MS_PER_DAY).toJSON(); @@ -37,7 +38,7 @@ describe('context predecessors', function () { tieBreakerField: string, tieBreakerValue: number, size: number - ) => Promise; + ) => ReturnType; // eslint-disable-next-line @typescript-eslint/no-explicit-any let mockSearchSource: any; @@ -82,7 +83,9 @@ describe('context predecessors', function () { SortDirection.desc, size, [], - dataPluginMock + dataPluginMock, + false, + discoverServiceMock ); }; }); @@ -97,9 +100,9 @@ describe('context predecessors', function () { ]; return fetchPredecessors(ANCHOR_TIMESTAMP_3000, MS_PER_DAY * 3000, '_doc', 0, 3).then( - (hits) => { + ({ rows }) => { expect(mockSearchSource.fetch$.calledOnce).toBe(true); - expect(hits).toEqual( + expect(rows).toEqual( buildDataTableRecordList(mockSearchSource._stubHits.slice(0, 3), dataView) ); } @@ -116,7 +119,7 @@ describe('context predecessors', function () { ]; return fetchPredecessors(ANCHOR_TIMESTAMP_3000, MS_PER_DAY * 3000, '_doc', 0, 6).then( - (hits) => { + ({ rows }) => { const intervals: Timestamp[] = mockSearchSource.setField.args .filter(([property]: string) => property === 'query') .map(([, { query }]: [string, { query: Query }]) => @@ -131,7 +134,7 @@ describe('context predecessors', function () { // should have ended with a half-open interval expect(Object.keys(last(intervals) ?? {})).toEqual(['format', 'gte']); expect(intervals.length).toBeGreaterThan(1); - expect(hits).toEqual( + expect(rows).toEqual( buildDataTableRecordList(mockSearchSource._stubHits.slice(0, 3), dataView) ); } @@ -147,7 +150,7 @@ describe('context predecessors', function () { ]; return fetchPredecessors(ANCHOR_TIMESTAMP_1000, MS_PER_DAY * 1000, '_doc', 0, 3).then( - (hits) => { + ({ rows }) => { const intervals: Timestamp[] = mockSearchSource.setField.args .filter(([property]: string) => property === 'query') .map(([, { query }]: [string, { query: Query }]) => { @@ -167,7 +170,7 @@ describe('context predecessors', function () { expect(moment(last(intervals)?.lte).valueOf()).toBeLessThan(MS_PER_DAY * 1700); expect(intervals.length).toBeGreaterThan(1); - expect(hits).toEqual( + expect(rows).toEqual( buildDataTableRecordList(mockSearchSource._stubHits.slice(-3), dataView) ); } @@ -175,9 +178,11 @@ describe('context predecessors', function () { }); it('should return an empty array when no hits were found', function () { - return fetchPredecessors(ANCHOR_TIMESTAMP_3, MS_PER_DAY * 3, '_doc', 0, 3).then((hits) => { - expect(hits).toEqual([]); - }); + return fetchPredecessors(ANCHOR_TIMESTAMP_3, MS_PER_DAY * 3, '_doc', 0, 3).then( + ({ rows }) => { + expect(rows).toEqual([]); + } + ); }); it('should configure the SearchSource to not inherit from the implicit root', function () { @@ -233,7 +238,8 @@ describe('context predecessors', function () { size, [], dataPluginMock, - true + true, + discoverServiceMock ); }; }); @@ -248,13 +254,13 @@ describe('context predecessors', function () { ]; return fetchPredecessors(ANCHOR_TIMESTAMP_3000, MS_PER_DAY * 3000, '_doc', 0, 3).then( - (hits) => { + ({ rows }) => { const setFieldsSpy = mockSearchSource.setField.withArgs('fields'); const removeFieldsSpy = mockSearchSource.removeField.withArgs('fieldsFromSource'); expect(mockSearchSource.fetch$.calledOnce).toBe(true); expect(removeFieldsSpy.calledOnce).toBe(true); expect(setFieldsSpy.calledOnce).toBe(true); - expect(hits).toEqual( + expect(rows).toEqual( buildDataTableRecordList(mockSearchSource._stubHits.slice(0, 3), dataView) ); } diff --git a/src/plugins/discover/public/application/context/services/context.successors.test.ts b/src/plugins/discover/public/application/context/services/context.successors.test.ts index 049d9efa2abf74..9c2a0120c2a72a 100644 --- a/src/plugins/discover/public/application/context/services/context.successors.test.ts +++ b/src/plugins/discover/public/application/context/services/context.successors.test.ts @@ -14,8 +14,8 @@ import { createContextSearchSourceStub } from './_stubs'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { Query } from '@kbn/es-query'; import { fetchSurroundingDocs, SurrDocType } from './context'; -import type { DataTableRecord } from '@kbn/discover-utils/types'; import { buildDataTableRecord, buildDataTableRecordList } from '@kbn/discover-utils'; +import { discoverServiceMock } from '../../../__mocks__/services'; const MS_PER_DAY = 24 * 60 * 60 * 1000; const ANCHOR_TIMESTAMP = new Date(MS_PER_DAY).toJSON(); @@ -35,7 +35,7 @@ describe('context successors', function () { tieBreakerField: string, tieBreakerValue: number, size: number - ) => Promise; + ) => ReturnType; let dataPluginMock: DataPublicPluginStart; // eslint-disable-next-line @typescript-eslint/no-explicit-any let mockSearchSource: any; @@ -83,7 +83,9 @@ describe('context successors', function () { SortDirection.desc, size, [], - dataPluginMock + dataPluginMock, + false, + discoverServiceMock ); }; }); @@ -98,9 +100,9 @@ describe('context successors', function () { ]; return fetchSuccessors(ANCHOR_TIMESTAMP_3000, MS_PER_DAY * 3000, '_doc', 0, 3).then( - (hits) => { + ({ rows }) => { expect(mockSearchSource.fetch$.calledOnce).toBe(true); - expect(hits).toEqual( + expect(rows).toEqual( buildDataTableRecordList(mockSearchSource._stubHits.slice(-3), dataView) ); } @@ -117,7 +119,7 @@ describe('context successors', function () { ]; return fetchSuccessors(ANCHOR_TIMESTAMP_3000, MS_PER_DAY * 3000, '_doc', 0, 6).then( - (hits) => { + ({ rows }) => { const intervals: Timestamp[] = mockSearchSource.setField.args .filter(([property]: [string]) => property === 'query') .map(([, { query }]: [string, { query: Query }]) => @@ -132,7 +134,7 @@ describe('context successors', function () { // should have ended with a half-open interval expect(Object.keys(last(intervals) ?? {})).toEqual(['format', 'lte']); expect(intervals.length).toBeGreaterThan(1); - expect(hits).toEqual( + expect(rows).toEqual( buildDataTableRecordList(mockSearchSource._stubHits.slice(-3), dataView) ); } @@ -150,7 +152,7 @@ describe('context successors', function () { ]; return fetchSuccessors(ANCHOR_TIMESTAMP_3000, MS_PER_DAY * 3000, '_doc', 0, 4).then( - (hits) => { + ({ rows }) => { const intervals: Timestamp[] = mockSearchSource.setField.args .filter(([property]: [string]) => property === 'query') .map(([, { query }]: [string, { query: Query }]) => @@ -162,7 +164,7 @@ describe('context successors', function () { // should have stopped before reaching MS_PER_DAY * 2200 expect(moment(last(intervals)?.gte).valueOf()).toBeGreaterThan(MS_PER_DAY * 2200); expect(intervals.length).toBeGreaterThan(1); - expect(hits).toEqual( + expect(rows).toEqual( buildDataTableRecordList(mockSearchSource._stubHits.slice(0, 4), dataView) ); } @@ -170,8 +172,8 @@ describe('context successors', function () { }); it('should return an empty array when no hits were found', function () { - return fetchSuccessors(ANCHOR_TIMESTAMP_3, MS_PER_DAY * 3, '_doc', 0, 3).then((hits) => { - expect(hits).toEqual([]); + return fetchSuccessors(ANCHOR_TIMESTAMP_3, MS_PER_DAY * 3, '_doc', 0, 3).then(({ rows }) => { + expect(rows).toEqual([]); }); }); @@ -230,7 +232,8 @@ describe('context successors', function () { size, [], dataPluginMock, - true + true, + discoverServiceMock ); }; }); @@ -245,15 +248,104 @@ describe('context successors', function () { ]; return fetchSuccessors(ANCHOR_TIMESTAMP_3000, MS_PER_DAY * 3000, '_doc', 0, 3).then( - (hits) => { + ({ rows, interceptedWarnings }) => { expect(mockSearchSource.fetch$.calledOnce).toBe(true); - expect(hits).toEqual( + expect(rows).toEqual( buildDataTableRecordList(mockSearchSource._stubHits.slice(-3), dataView) ); const setFieldsSpy = mockSearchSource.setField.withArgs('fields'); const removeFieldsSpy = mockSearchSource.removeField.withArgs('fieldsFromSource'); expect(removeFieldsSpy.calledOnce).toBe(true); expect(setFieldsSpy.calledOnce).toBe(true); + expect(interceptedWarnings).toBeUndefined(); + } + ); + }); + }); + + describe('function fetchSuccessors with shard failures', function () { + const mockWarnings = [ + { + originalWarning: { + message: 'Data might be incomplete because your request timed out 1', + type: 'timed_out', + }, + }, + { + originalWarning: { + message: 'Data might be incomplete because your request timed out 2', + type: 'timed_out', + }, + }, + ]; + + beforeEach(() => { + mockSearchSource = createContextSearchSourceStub('@timestamp'); + + dataPluginMock = { + search: { + searchSource: { + createEmpty: jest.fn().mockImplementation(() => mockSearchSource), + }, + showWarnings: jest.fn((adapter, callback) => { + callback(mockWarnings[0].originalWarning, {}); + callback(mockWarnings[1].originalWarning, {}); + // plus duplicates + callback(mockWarnings[0].originalWarning, {}); + callback(mockWarnings[1].originalWarning, {}); + }), + }, + } as unknown as DataPublicPluginStart; + + fetchSuccessors = (timeValIso, timeValNr, tieBreakerField, tieBreakerValue, size) => { + const anchor = buildDataTableRecord( + { + _id: '1', + _index: 'test', + _source: { + [dataView.timeFieldName!]: timeValIso, + }, + sort: [timeValNr, tieBreakerValue], + }, + dataView, + true + ); + + return fetchSurroundingDocs( + SurrDocType.SUCCESSORS, + dataView, + anchor, + tieBreakerField, + SortDirection.desc, + size, + [], + dataPluginMock, + true, + { + ...discoverServiceMock, + data: dataPluginMock, + } + ); + }; + }); + + it('should intercept request warnings', function () { + mockSearchSource._stubHits = [ + mockSearchSource._createStubHit(MS_PER_DAY * 5000), + mockSearchSource._createStubHit(MS_PER_DAY * 4000), + mockSearchSource._createStubHit(MS_PER_DAY * 3000), + mockSearchSource._createStubHit(MS_PER_DAY * 3000 - 1), + mockSearchSource._createStubHit(MS_PER_DAY * 3000 - 2), + ]; + + return fetchSuccessors(ANCHOR_TIMESTAMP_3000, MS_PER_DAY * 3000, '_doc', 0, 3).then( + ({ rows, interceptedWarnings }) => { + expect(mockSearchSource.fetch$.calledOnce).toBe(true); + expect(rows).toEqual( + buildDataTableRecordList(mockSearchSource._stubHits.slice(-3), dataView) + ); + expect(dataPluginMock.search.showWarnings).toHaveBeenCalledTimes(1); + expect(interceptedWarnings).toEqual(mockWarnings); } ); }); diff --git a/src/plugins/discover/public/application/context/services/context.ts b/src/plugins/discover/public/application/context/services/context.ts index ce448d68f38efe..1386af851911e1 100644 --- a/src/plugins/discover/public/application/context/services/context.ts +++ b/src/plugins/discover/public/application/context/services/context.ts @@ -9,12 +9,17 @@ import type { Filter } from '@kbn/es-query'; import { DataView } from '@kbn/data-views-plugin/public'; import { DataPublicPluginStart, ISearchSource } from '@kbn/data-plugin/public'; import type { DataTableRecord } from '@kbn/discover-utils/types'; +import { + removeInterceptedWarningDuplicates, + type SearchResponseInterceptedWarning, +} from '@kbn/search-response-warnings'; import { reverseSortDir, SortDirection } from '../utils/sorting'; import { convertIsoToMillis, extractNanos } from '../utils/date_conversion'; import { fetchHitsInInterval } from '../utils/fetch_hits_in_interval'; import { generateIntervals } from '../utils/generate_intervals'; import { getEsQuerySearchAfter } from '../utils/get_es_query_search_after'; import { getEsQuerySort } from '../utils/get_es_query_sort'; +import type { DiscoverServices } from '../../../build_services'; export enum SurrDocType { SUCCESSORS = 'successors', @@ -36,7 +41,9 @@ const LOOKUP_OFFSETS = [0, 1, 7, 30, 365, 10000].map((days) => days * DAY_MILLIS * @param {SortDirection} sortDir - direction of sorting * @param {number} size - number of records to retrieve * @param {Filter[]} filters - to apply in the elastic query + * @param {DataPublicPluginStart} data * @param {boolean} useNewFieldsApi + * @param {DiscoverServices} services * @returns {Promise} */ export async function fetchSurroundingDocs( @@ -48,10 +55,17 @@ export async function fetchSurroundingDocs( size: number, filters: Filter[], data: DataPublicPluginStart, - useNewFieldsApi?: boolean -): Promise { + useNewFieldsApi: boolean | undefined, + services: DiscoverServices +): Promise<{ + rows: DataTableRecord[]; + interceptedWarnings: SearchResponseInterceptedWarning[] | undefined; +}> { if (typeof anchor !== 'object' || anchor === null || !size) { - return []; + return { + rows: [], + interceptedWarnings: undefined, + }; } const timeField = dataView.timeFieldName!; const searchSource = data.search.searchSource.createEmpty(); @@ -64,10 +78,11 @@ export async function fetchSurroundingDocs( nanos !== '' ? convertIsoToMillis(anchorRaw.fields?.[timeField][0]) : anchorRaw.sort?.[0]; const intervals = generateIntervals(LOOKUP_OFFSETS, timeValueMillis as number, type, sortDir); - let documents: DataTableRecord[] = []; + let rows: DataTableRecord[] = []; + let interceptedWarnings: SearchResponseInterceptedWarning[] = []; for (const interval of intervals) { - const remainingSize = size - documents.length; + const remainingSize = size - rows.length; if (remainingSize <= 0) { break; @@ -75,7 +90,7 @@ export async function fetchSurroundingDocs( const searchAfter = getEsQuerySearchAfter( type, - documents, + rows, timeField, anchor, nanos, @@ -84,7 +99,7 @@ export async function fetchSurroundingDocs( const sort = getEsQuerySort(timeField, tieBreakerField, sortDirToApply, nanos); - const hits = await fetchHitsInInterval( + const result = await fetchHitsInInterval( searchSource, timeField, sort, @@ -93,16 +108,28 @@ export async function fetchSurroundingDocs( searchAfter, remainingSize, nanos, - anchor.raw._id + anchor.raw._id, + type, + services ); - documents = + rows = type === SurrDocType.SUCCESSORS - ? [...documents, ...hits] - : [...hits.slice().reverse(), ...documents]; + ? [...rows, ...result.rows] + : [...result.rows.slice().reverse(), ...rows]; + + if (result.interceptedWarnings) { + interceptedWarnings = + type === SurrDocType.SUCCESSORS + ? [...interceptedWarnings, ...result.interceptedWarnings] + : [...result.interceptedWarnings.slice().reverse(), ...interceptedWarnings]; + } } - return documents; + return { + rows, + interceptedWarnings: removeInterceptedWarningDuplicates(interceptedWarnings), + }; } export function updateSearchSource( diff --git a/src/plugins/discover/public/application/context/services/context_query_state.ts b/src/plugins/discover/public/application/context/services/context_query_state.ts index a640c99e71e15a..0b44b036be1b3a 100644 --- a/src/plugins/discover/public/application/context/services/context_query_state.ts +++ b/src/plugins/discover/public/application/context/services/context_query_state.ts @@ -7,6 +7,7 @@ */ import type { DataTableRecord } from '@kbn/discover-utils/types'; +import type { SearchResponseInterceptedWarning } from '@kbn/search-response-warnings'; export interface ContextFetchState { /** @@ -33,6 +34,21 @@ export interface ContextFetchState { * Successors fetch status */ successorsStatus: LoadingStatusEntry; + + /** + * Intercepted warnings for anchor request + */ + anchorInterceptedWarnings: SearchResponseInterceptedWarning[] | undefined; + + /** + * Intercepted warnings for predecessors request + */ + predecessorsInterceptedWarnings: SearchResponseInterceptedWarning[] | undefined; + + /** + * Intercepted warnings for successors request + */ + successorsInterceptedWarnings: SearchResponseInterceptedWarning[] | undefined; } export enum LoadingStatus { @@ -60,4 +76,7 @@ export const getInitialContextQueryState = (): ContextFetchState => ({ anchorStatus: { value: LoadingStatus.UNINITIALIZED }, predecessorsStatus: { value: LoadingStatus.UNINITIALIZED }, successorsStatus: { value: LoadingStatus.UNINITIALIZED }, + anchorInterceptedWarnings: undefined, + predecessorsInterceptedWarnings: undefined, + successorsInterceptedWarnings: undefined, }); diff --git a/src/plugins/discover/public/application/context/utils/fetch_hits_in_interval.ts b/src/plugins/discover/public/application/context/utils/fetch_hits_in_interval.ts index 115d501eed1356..c6fed56de4c19d 100644 --- a/src/plugins/discover/public/application/context/utils/fetch_hits_in_interval.ts +++ b/src/plugins/discover/public/application/context/utils/fetch_hits_in_interval.ts @@ -10,8 +10,16 @@ import { ISearchSource, EsQuerySortValue, SortDirection } from '@kbn/data-plugin import { EsQuerySearchAfter } from '@kbn/data-plugin/common'; import { buildDataTableRecord } from '@kbn/discover-utils'; import type { DataTableRecord } from '@kbn/discover-utils/types'; +import { + getSearchResponseInterceptedWarnings, + type SearchResponseInterceptedWarning, +} from '@kbn/search-response-warnings'; +import { RequestAdapter } from '@kbn/inspector-plugin/common'; import { convertTimeValueToIso } from './date_conversion'; import { IntervalValue } from './generate_intervals'; +import { DISABLE_SHARD_FAILURE_WARNING } from '../../../../common/constants'; +import type { SurrDocType } from '../services/context'; +import type { DiscoverServices } from '../../../build_services'; interface RangeQuery { format: string; @@ -35,8 +43,13 @@ export async function fetchHitsInInterval( searchAfter: EsQuerySearchAfter, maxCount: number, nanosValue: string, - anchorId: string -): Promise { + anchorId: string, + type: SurrDocType, + services: DiscoverServices +): Promise<{ + rows: DataTableRecord[]; + interceptedWarnings: SearchResponseInterceptedWarning[] | undefined; +}> { const range: RangeQuery = { format: 'strict_date_optional_time', }; @@ -49,6 +62,8 @@ export async function fetchHitsInInterval( if (stop) { range[sortDir === SortDirection.asc ? 'lte' : 'gte'] = convertTimeValueToIso(stop, nanosValue); } + + const adapter = new RequestAdapter(); const fetch$ = searchSource .setField('size', maxCount) .setField('query', { @@ -75,11 +90,26 @@ export async function fetchHitsInInterval( .setField('searchAfter', searchAfter) .setField('sort', sort) .setField('version', true) - .fetch$(); + .fetch$({ + disableShardFailureWarning: DISABLE_SHARD_FAILURE_WARNING, + inspector: { + adapter, + title: type, + }, + }); const { rawResponse } = await lastValueFrom(fetch$); const dataView = searchSource.getField('index'); - const records = rawResponse.hits?.hits.map((hit) => buildDataTableRecord(hit, dataView!)); + const rows = rawResponse.hits?.hits.map((hit) => buildDataTableRecord(hit, dataView!)); - return records ?? []; + return { + rows: rows ?? [], + interceptedWarnings: getSearchResponseInterceptedWarnings({ + services, + adapter, + options: { + disableShardFailureWarning: DISABLE_SHARD_FAILURE_WARNING, + }, + }), + }; } diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx index 24b0b6ba9fb898..4b2b7aa8e7125a 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx @@ -20,6 +20,7 @@ import { DataView } from '@kbn/data-views-plugin/public'; import { SortOrder } from '@kbn/saved-search-plugin/public'; import { CellActionsProvider } from '@kbn/cell-actions'; import type { DataTableRecord } from '@kbn/discover-utils/types'; +import { SearchResponseWarnings } from '@kbn/search-response-warnings'; import { DOC_HIDE_TIME_COLUMN_SETTING, DOC_TABLE_LEGACY, @@ -203,6 +204,13 @@ function DiscoverDocumentsComponent({ + {!!documentState.interceptedWarnings?.length && ( + + )} {isLegacy && rows && rows.length && ( <> {!hideAnnouncements && } diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx index e1172a0e869d56..328153b6eeec5a 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx @@ -74,6 +74,7 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { spaces, inspector, } = useDiscoverServices(); + const globalQueryState = data.query.getState(); const { main$ } = stateContainer.dataState.data$; const [query, savedQuery, columns, sort] = useAppStateSelector((state) => [ state.query, @@ -195,20 +196,6 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { }, [onAddColumn, draggingFieldName, currentColumns]); const mainDisplay = useMemo(() => { - if (resultState === 'none') { - const globalQueryState = data.query.getState(); - - return ( - - ); - } - if (resultState === 'uninitialized') { addLog('[DiscoverLayout] uninitialized triggers data fetching'); return stateContainer.dataState.fetch()} />; @@ -232,12 +219,9 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { ); }, [ currentColumns, - data, dataView, isPlainRecord, - isTimeBased, onAddFilter, - onDisableFilters, onFieldEdited, resultState, stateContainer, @@ -316,14 +300,25 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { - {resultState === 'none' && dataState.error ? ( - + {resultState === 'none' ? ( + dataState.error ? ( + + ) : ( + + ) ) : ( ({ rawResponse: { @@ -35,9 +36,13 @@ jest.spyOn(RxApi, 'lastValueFrom').mockImplementation(async () => ({ })); async function mountAndFindSubjects( - props: Omit + props: Omit< + DiscoverNoResultsProps, + 'onDisableFilters' | 'data' | 'isTimeBased' | 'stateContainer' + > ) { const services = createDiscoverServicesMock(); + const isTimeBased = props.dataView.isTimeBased(); let component: ReactWrapper; @@ -45,7 +50,8 @@ async function mountAndFindSubjects( component = await mountWithIntl( {}} {...props} /> diff --git a/src/plugins/discover/public/application/main/components/no_results/no_results.tsx b/src/plugins/discover/public/application/main/components/no_results/no_results.tsx index bd010502df1493..86f73e18ca4d00 100644 --- a/src/plugins/discover/public/application/main/components/no_results/no_results.tsx +++ b/src/plugins/discover/public/application/main/components/no_results/no_results.tsx @@ -10,10 +10,14 @@ import React from 'react'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import type { DataView } from '@kbn/data-views-plugin/common'; import type { AggregateQuery, Filter, Query } from '@kbn/es-query'; +import { SearchResponseWarnings } from '@kbn/search-response-warnings'; import { NoResultsSuggestions } from './no_results_suggestions'; +import type { DiscoverStateContainer } from '../../services/discover_state'; +import { useDataState } from '../../hooks/use_data_state'; import './_no_results.scss'; export interface DiscoverNoResultsProps { + stateContainer: DiscoverStateContainer; isTimeBased?: boolean; query: Query | AggregateQuery | undefined; filters: Filter[] | undefined; @@ -22,12 +26,26 @@ export interface DiscoverNoResultsProps { } export function DiscoverNoResults({ + stateContainer, isTimeBased, query, filters, dataView, onDisableFilters, }: DiscoverNoResultsProps) { + const { documents$ } = stateContainer.dataState.data$; + const interceptedWarnings = useDataState(documents$).interceptedWarnings; + + if (interceptedWarnings?.length) { + return ( + + ); + } + return ( diff --git a/src/plugins/discover/public/application/main/components/no_results/no_results_suggestions/no_results_suggestions.tsx b/src/plugins/discover/public/application/main/components/no_results/no_results_suggestions/no_results_suggestions.tsx index c55e8de773942d..633f082c4792bf 100644 --- a/src/plugins/discover/public/application/main/components/no_results/no_results_suggestions/no_results_suggestions.tsx +++ b/src/plugins/discover/public/application/main/components/no_results/no_results_suggestions/no_results_suggestions.tsx @@ -121,6 +121,7 @@ export const NoResultsSuggestions: React.FC = ({ layout="horizontal" color="plain" icon={} + hasBorder title={

{ + .then(({ records, textBasedQueryColumns, interceptedWarnings }) => { if (services.analytics) { const duration = window.performance.now() - startTime; reportPerformanceMetricEvent(services.analytics, { @@ -131,6 +131,7 @@ export function fetchAll( fetchStatus, result: records, textBasedQueryColumns, + interceptedWarnings, recordRawType, query, }); diff --git a/src/plugins/discover/public/application/main/utils/fetch_documents.ts b/src/plugins/discover/public/application/main/utils/fetch_documents.ts index 4a4e388a273673..bce5f266d6def2 100644 --- a/src/plugins/discover/public/application/main/utils/fetch_documents.ts +++ b/src/plugins/discover/public/application/main/utils/fetch_documents.ts @@ -11,7 +11,9 @@ import { lastValueFrom } from 'rxjs'; import { isCompleteResponse, ISearchSource } from '@kbn/data-plugin/public'; import { SAMPLE_SIZE_SETTING, buildDataTableRecordList } from '@kbn/discover-utils'; import type { EsHitRecord } from '@kbn/discover-utils/types'; +import { getSearchResponseInterceptedWarnings } from '@kbn/search-response-warnings'; import type { RecordsFetchResponse } from '../../../types'; +import { DISABLE_SHARD_FAILURE_WARNING } from '../../../../common/constants'; import { FetchDeps } from './fetch_all'; /** @@ -53,6 +55,7 @@ export const fetchDocuments = ( }), }, executionContext, + disableShardFailureWarning: DISABLE_SHARD_FAILURE_WARNING, }) .pipe( filter((res) => isCompleteResponse(res)), @@ -61,5 +64,21 @@ export const fetchDocuments = ( }) ); - return lastValueFrom(fetch$).then((records) => ({ records })); + return lastValueFrom(fetch$).then((records) => { + const adapter = inspectorAdapters.requests; + const interceptedWarnings = adapter + ? getSearchResponseInterceptedWarnings({ + services, + adapter, + options: { + disableShardFailureWarning: DISABLE_SHARD_FAILURE_WARNING, + }, + }) + : []; + + return { + records, + interceptedWarnings, + }; + }); }; diff --git a/src/plugins/discover/public/components/common/error_callout.tsx b/src/plugins/discover/public/components/common/error_callout.tsx index 0f1fbb722bf823..d0e914a81e851e 100644 --- a/src/plugins/discover/public/components/common/error_callout.tsx +++ b/src/plugins/discover/public/components/common/error_callout.tsx @@ -10,9 +10,6 @@ import { EuiButton, EuiCallOut, EuiEmptyPrompt, - EuiFlexGroup, - EuiFlexItem, - EuiIcon, EuiLink, EuiModal, EuiModalBody, @@ -104,36 +101,31 @@ export const ErrorCallout = ({ /> ) : ( - - - - -

{formattedTitle}

-
- - } + title={

{formattedTitle}

} body={ - overrideDisplay?.body ?? ( - <> -

- {error.message} -

- {showErrorMessage} - - ) +
+ {overrideDisplay?.body ?? ( + <> +

+ {error.message} +

+ {showErrorMessage} + + )} +
} - css={css` - text-align: left; - `} data-test-subj={dataTestSubj} /> )} diff --git a/src/plugins/discover/public/components/doc_table/create_doc_table_embeddable.tsx b/src/plugins/discover/public/components/doc_table/create_doc_table_embeddable.tsx index e45faec8cbaa1e..570c980e649e5f 100644 --- a/src/plugins/discover/public/components/doc_table/create_doc_table_embeddable.tsx +++ b/src/plugins/discover/public/components/doc_table/create_doc_table_embeddable.tsx @@ -33,6 +33,7 @@ export function DiscoverDocTableEmbeddable(renderProps: DocTableEmbeddableProps) sharedItemTitle={renderProps.sharedItemTitle} isLoading={renderProps.isLoading} isPlainRecord={renderProps.isPlainRecord} + interceptedWarnings={renderProps.interceptedWarnings} dataTestSubj="embeddedSavedSearchDocTable" DocViewer={DocViewer} /> diff --git a/src/plugins/discover/public/components/doc_table/doc_table_embeddable.tsx b/src/plugins/discover/public/components/doc_table/doc_table_embeddable.tsx index 97ed5f3af9d14e..6901df855984e2 100644 --- a/src/plugins/discover/public/components/doc_table/doc_table_embeddable.tsx +++ b/src/plugins/discover/public/components/doc_table/doc_table_embeddable.tsx @@ -11,6 +11,7 @@ import './index.scss'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiText } from '@elastic/eui'; import { SAMPLE_SIZE_SETTING, usePager } from '@kbn/discover-utils'; +import type { SearchResponseInterceptedWarning } from '@kbn/search-response-warnings'; import { ToolBarPagination, MAX_ROWS_PER_PAGE_OPTION, @@ -22,6 +23,7 @@ import { SavedSearchEmbeddableBase } from '../../embeddable/saved_search_embedda export interface DocTableEmbeddableProps extends DocTableProps { totalHitCount: number; rowsPerPageState?: number; + interceptedWarnings?: SearchResponseInterceptedWarning[]; onUpdateRowsPerPage?: (rowsPerPage?: number) => void; } @@ -101,6 +103,7 @@ export const DocTableEmbeddable = (props: DocTableEmbeddableProps) => { return ( & filter?: (field: DataViewField, value: string[], operator: string) => void; hits?: DataTableRecord[]; totalHitCount?: number; + interceptedWarnings?: SearchResponseInterceptedWarning[]; onMoveColumn?: (column: string, index: number) => void; onUpdateRowHeight?: (rowHeight?: number) => void; onUpdateRowsPerPage?: (rowsPerPage?: number) => void; @@ -279,6 +284,7 @@ export class SavedSearchEmbeddable this.inspectorAdapters.requests!.reset(); searchProps.isLoading = true; + searchProps.interceptedWarnings = undefined; const wasAlreadyRendered = this.getOutput().rendered; @@ -357,9 +363,20 @@ export class SavedSearchEmbeddable }), }, executionContext, + disableShardFailureWarning: DISABLE_SHARD_FAILURE_WARNING, }) ); + if (this.inspectorAdapters.requests) { + searchProps.interceptedWarnings = getSearchResponseInterceptedWarnings({ + services: this.services, + adapter: this.inspectorAdapters.requests, + options: { + disableShardFailureWarning: DISABLE_SHARD_FAILURE_WARNING, + }, + }); + } + this.updateOutput({ ...this.getOutput(), loading: false, diff --git a/src/plugins/discover/public/embeddable/saved_search_embeddable_badge.tsx b/src/plugins/discover/public/embeddable/saved_search_embeddable_badge.tsx new file mode 100644 index 00000000000000..9944adb4be33ca --- /dev/null +++ b/src/plugins/discover/public/embeddable/saved_search_embeddable_badge.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { + SearchResponseWarnings, + type SearchResponseInterceptedWarning, +} from '@kbn/search-response-warnings'; + +export interface SavedSearchEmbeddableBadgeProps { + interceptedWarnings: SearchResponseInterceptedWarning[] | undefined; +} + +export const SavedSearchEmbeddableBadge: React.FC = ({ + interceptedWarnings, +}) => { + return interceptedWarnings?.length ? ( + + ) : null; +}; diff --git a/src/plugins/discover/public/embeddable/saved_search_embeddable_base.tsx b/src/plugins/discover/public/embeddable/saved_search_embeddable_base.tsx index 17785570b94878..b41c70676c7546 100644 --- a/src/plugins/discover/public/embeddable/saved_search_embeddable_base.tsx +++ b/src/plugins/discover/public/embeddable/saved_search_embeddable_base.tsx @@ -9,7 +9,9 @@ import React from 'react'; import { css } from '@emotion/react'; import { EuiFlexGroup, EuiFlexItem, EuiProgress } from '@elastic/eui'; +import type { SearchResponseInterceptedWarning } from '@kbn/search-response-warnings'; import { TotalDocuments } from '../application/main/components/total_documents/total_documents'; +import { SavedSearchEmbeddableBadge } from './saved_search_embeddable_badge'; const containerStyles = css` width: 100%; @@ -22,6 +24,7 @@ export interface SavedSearchEmbeddableBaseProps { prepend?: React.ReactElement; append?: React.ReactElement; dataTestSubj?: string; + interceptedWarnings?: SearchResponseInterceptedWarning[]; } export const SavedSearchEmbeddableBase: React.FC = ({ @@ -30,6 +33,7 @@ export const SavedSearchEmbeddableBase: React.FC prepend, append, dataTestSubj, + interceptedWarnings, children, }) => { return ( @@ -62,6 +66,12 @@ export const SavedSearchEmbeddableBase: React.FC {children} {Boolean(append) && {append}} + + {Boolean(interceptedWarnings?.length) && ( +
+ +
+ )} ); }; diff --git a/src/plugins/discover/public/embeddable/saved_search_grid.tsx b/src/plugins/discover/public/embeddable/saved_search_grid.tsx index 075a3ca9302353..87258347b474e2 100644 --- a/src/plugins/discover/public/embeddable/saved_search_grid.tsx +++ b/src/plugins/discover/public/embeddable/saved_search_grid.tsx @@ -7,6 +7,7 @@ */ import React, { useState, memo } from 'react'; import type { DataTableRecord } from '@kbn/discover-utils/types'; +import type { SearchResponseInterceptedWarning } from '@kbn/search-response-warnings'; import { DiscoverGrid, DiscoverGridProps } from '../components/discover_grid/discover_grid'; import './saved_search_grid.scss'; import { DiscoverGridFlyout } from '../components/discover_grid/discover_grid_flyout'; @@ -14,11 +15,13 @@ import { SavedSearchEmbeddableBase } from './saved_search_embeddable_base'; export interface DiscoverGridEmbeddableProps extends DiscoverGridProps { totalHitCount: number; + interceptedWarnings?: SearchResponseInterceptedWarning[]; } export const DataGridMemoized = memo(DiscoverGrid); export function DiscoverGridEmbeddable(props: DiscoverGridEmbeddableProps) { + const { interceptedWarnings, ...gridProps } = props; const [expandedDoc, setExpandedDoc] = useState(undefined); return ( @@ -26,9 +29,10 @@ export function DiscoverGridEmbeddable(props: DiscoverGridEmbeddableProps) { totalHitCount={props.totalHitCount} isLoading={props.isLoading} dataTestSubj="embeddedSavedSearchDocTable" + interceptedWarnings={props.interceptedWarnings} > { const embeddable = unifiedHistogramServicesMock.lens.EmbeddableComponent; const onLoad = component.find(embeddable).props().onLoad; const adapters = createDefaultInspectorAdapters(); + adapters.tables.tables.unifiedHistogram = { meta: { statistics: { totalCount: 100 } } } as any; const rawResponse = { _shards: { total: 1, @@ -215,14 +216,21 @@ describe('Histogram', () => { failed: 1, failures: [], }, + hits: { + total: 100, + max_score: null, + hits: [], + }, }; jest .spyOn(adapters.requests, 'getRequests') .mockReturnValue([{ response: { json: { rawResponse } } } as any]); - onLoad(false, adapters); + act(() => { + onLoad(false, adapters); + }); expect(props.onTotalHitsChange).toHaveBeenLastCalledWith( - UnifiedHistogramFetchStatus.error, - undefined + UnifiedHistogramFetchStatus.complete, + 100 ); expect(props.onChartLoad).toHaveBeenLastCalledWith({ adapters }); }); diff --git a/src/plugins/unified_histogram/public/chart/histogram.tsx b/src/plugins/unified_histogram/public/chart/histogram.tsx index 9983f2e0841dda..761e701e8f9a63 100644 --- a/src/plugins/unified_histogram/public/chart/histogram.tsx +++ b/src/plugins/unified_histogram/public/chart/histogram.tsx @@ -101,10 +101,10 @@ export function Histogram({ | undefined; const response = json?.rawResponse; - // Lens will swallow shard failures and return `isLoading: false` because it displays - // its own errors, but this causes us to emit onTotalHitsChange(UnifiedHistogramFetchStatus.complete, 0). - // This is incorrect, so we check for request failures and shard failures here, and emit an error instead. - if (requestFailed || response?._shards.failed) { + // The response can have `response?._shards.failed` but we should still be able to show hits number + // TODO: show shards warnings as a badge next to the total hits number + + if (requestFailed) { onTotalHitsChange?.(UnifiedHistogramFetchStatus.error, undefined); onChartLoad?.({ adapters: adapters ?? {} }); return; diff --git a/src/plugins/unified_histogram/public/chart/hooks/use_total_hits.ts b/src/plugins/unified_histogram/public/chart/hooks/use_total_hits.ts index 6903cdf6b4256b..c260d3171697bd 100644 --- a/src/plugins/unified_histogram/public/chart/hooks/use_total_hits.ts +++ b/src/plugins/unified_histogram/public/chart/hooks/use_total_hits.ts @@ -206,6 +206,7 @@ const fetchTotalHitsSearchSource = async ({ executionContext: { description: 'fetch total hits', }, + disableShardFailureWarning: true, // TODO: show warnings as a badge next to total hits number }) .pipe( filter((res) => isCompleteResponse(res)), diff --git a/tsconfig.base.json b/tsconfig.base.json index 12504320663e30..8efe5c62421dee 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1172,6 +1172,8 @@ "@kbn/screenshotting-plugin/*": ["x-pack/plugins/screenshotting/*"], "@kbn/search-examples-plugin": ["examples/search_examples"], "@kbn/search-examples-plugin/*": ["examples/search_examples/*"], + "@kbn/search-response-warnings": ["packages/kbn-search-response-warnings"], + "@kbn/search-response-warnings/*": ["packages/kbn-search-response-warnings/*"], "@kbn/searchprofiler-plugin": ["x-pack/plugins/searchprofiler"], "@kbn/searchprofiler-plugin/*": ["x-pack/plugins/searchprofiler/*"], "@kbn/security-api-integration-helpers": ["x-pack/test/security_api_integration/packages/helpers"], diff --git a/x-pack/test/functional/apps/discover/async_scripted_fields.js b/x-pack/test/functional/apps/discover/async_scripted_fields.js index 9a9d5e0d450f21..0d48f42c5ba1e9 100644 --- a/x-pack/test/functional/apps/discover/async_scripted_fields.js +++ b/x-pack/test/functional/apps/discover/async_scripted_fields.js @@ -15,9 +15,17 @@ export default function ({ getService, getPageObjects }) { const esArchiver = getService('esArchiver'); const log = getService('log'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'settings', 'discover', 'timePicker']); + const PageObjects = getPageObjects([ + 'common', + 'settings', + 'discover', + 'timePicker', + 'header', + 'dashboard', + ]); const queryBar = getService('queryBar'); const security = getService('security'); + const dashboardAddPanel = getService('dashboardAddPanel'); describe('async search with scripted fields', function () { this.tags(['skipFirefox']); @@ -43,7 +51,7 @@ export default function ({ getService, getPageObjects }) { await security.testUser.restoreDefaults(); }); - it('query should show failed shards pop up', async function () { + it('query should show failed shards callout', async function () { if (false) { /* If you had to modify the scripted fields, you could un-comment all this, run it, use es_archiver to update 'kibana_scripted_fields_on_logstash' */ @@ -69,12 +77,39 @@ export default function ({ getService, getPageObjects }) { await retry.tryForTime(20000, async function () { // wait for shards failed message - const shardMessage = await testSubjects.getVisibleText('euiToastHeader'); + const shardMessage = await testSubjects.getVisibleText( + 'dscNoResultsInterceptedWarningsCallout_warningTitle' + ); log.debug(shardMessage); expect(shardMessage).to.be('1 of 3 shards failed'); }); }); + it('query should show failed shards badge on dashboard', async function () { + await security.testUser.setRoles([ + 'test_logstash_reader', + 'global_discover_all', + 'global_dashboard_all', + ]); + await PageObjects.common.navigateToApp('discover'); + await PageObjects.discover.selectIndexPattern('logsta*'); + + await PageObjects.discover.saveSearch('search with warning'); + await PageObjects.header.waitUntilLoadingHasFinished(); + + await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.gotoDashboardLandingPage(); + await PageObjects.dashboard.clickNewDashboard(); + + await dashboardAddPanel.addSavedSearch('search with warning'); + await PageObjects.header.waitUntilLoadingHasFinished(); + + await retry.tryForTime(20000, async function () { + // wait for shards failed message + await testSubjects.existOrFail('savedSearchEmbeddableWarningsCallout_trigger'); + }); + }); + it('query return results with valid scripted field', async function () { if (false) { /* the skipped steps below were used to create the scripted fields in the logstash-* index pattern diff --git a/yarn.lock b/yarn.lock index 39981aa19923e2..a7e1003917f3d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5220,6 +5220,10 @@ version "0.0.0" uid "" +"@kbn/search-response-warnings@link:packages/kbn-search-response-warnings": + version "0.0.0" + uid "" + "@kbn/searchprofiler-plugin@link:x-pack/plugins/searchprofiler": version "0.0.0" uid "" From 39e11ffbac4bbeba5548300f292ff17fdf4a2fe3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yulia=20=C4=8Cech?= <6585477+yuliacech@users.noreply.github.com> Date: Thu, 10 Aug 2023 14:42:49 +0200 Subject: [PATCH 18/45] [Index Management] Disable index actions using contextRef (#163475) ## Summary Follow up to https://github.com/elastic/kibana/pull/161528 This PR leverages the [schema.contextRef('serverless') check](https://www.elastic.co/guide/en/kibana/master/configuration-service.html#validating-your-configuration-based-on-context-references) to prevent the config `enableIndexActions` from leaking to self-managed. ### Screenshots Stateful (no changes), index actions enabled Screenshot 2023-08-09 at 12 15 31 Serverless (no changes), index actions disabled Screenshot 2023-08-09 at 12 09 45 --- .../test_suites/core_plugins/rendering.ts | 2 +- .../public/application/mount_management_section.ts | 2 +- x-pack/plugins/index_management/public/types.ts | 2 +- x-pack/plugins/index_management/server/config.ts | 9 ++++++++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index f03af110fd8662..66a2e385d3e6c6 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -239,7 +239,7 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.graph.savePolicy (alternatives)', 'xpack.ilm.ui.enabled (boolean)', 'xpack.index_management.ui.enabled (boolean)', - 'xpack.index_management.enableIndexActions (boolean)', + 'xpack.index_management.enableIndexActions (any)', 'xpack.infra.sources.default.fields.message (array)', /** * xpack.infra.logs is conditional and will resolve to an object of properties diff --git a/x-pack/plugins/index_management/public/application/mount_management_section.ts b/x-pack/plugins/index_management/public/application/mount_management_section.ts index d00aa6ff1f0e6e..6bb3b834ce85fe 100644 --- a/x-pack/plugins/index_management/public/application/mount_management_section.ts +++ b/x-pack/plugins/index_management/public/application/mount_management_section.ts @@ -53,7 +53,7 @@ export async function mountManagementSection( extensionsService: ExtensionsService, isFleetEnabled: boolean, kibanaVersion: SemVer, - enableIndexActions: boolean + enableIndexActions: boolean = true ) { const { element, setBreadcrumbs, history, theme$ } = params; const [core, startDependencies] = await coreSetup.getStartServices(); diff --git a/x-pack/plugins/index_management/public/types.ts b/x-pack/plugins/index_management/public/types.ts index 59954c6659494f..20d2405a0fa4b0 100644 --- a/x-pack/plugins/index_management/public/types.ts +++ b/x-pack/plugins/index_management/public/types.ts @@ -28,5 +28,5 @@ export interface ClientConfigType { ui: { enabled: boolean; }; - enableIndexActions: boolean; + enableIndexActions?: boolean; } diff --git a/x-pack/plugins/index_management/server/config.ts b/x-pack/plugins/index_management/server/config.ts index 4fd24bf3fcdf7a..c5d459486a8ef9 100644 --- a/x-pack/plugins/index_management/server/config.ts +++ b/x-pack/plugins/index_management/server/config.ts @@ -22,7 +22,14 @@ const schemaLatest = schema.object( ui: schema.object({ enabled: schema.boolean({ defaultValue: true }), }), - enableIndexActions: schema.boolean({ defaultValue: true }), + enableIndexActions: schema.conditional( + schema.contextRef('serverless'), + true, + // Index actions are disabled in serverless; refer to the serverless.yml file as the source of truth + // We take this approach in order to have a central place (serverless.yml) for serverless config across Kibana + schema.boolean({ defaultValue: true }), + schema.never() + ), }, { defaultValue: undefined } ); From f99be4ede4c61af920b3b217cf8ea1c57c03c3b5 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Thu, 10 Aug 2023 08:43:41 -0400 Subject: [PATCH 19/45] [Fleet] add managed to imported saved object (#163526) --- .../server/services/epm/kibana/assets/install.ts | 2 ++ .../apis/epm/install_remove_assets.ts | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts b/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts index e9a4e255e9ea1c..ec0cbab539bcd0 100644 --- a/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts @@ -320,6 +320,7 @@ export async function installKibanaSavedObjects({ readStream: createListStream(toBeSavedObjects), createNewCopies: false, refresh: false, + managed: true, }) ); @@ -371,6 +372,7 @@ export async function installKibanaSavedObjects({ await savedObjectsImporter.resolveImportErrors({ readStream: createListStream(toBeSavedObjects), createNewCopies: false, + managed: true, retries, }); diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_remove_assets.ts b/x-pack/test/fleet_api_integration/apis/epm/install_remove_assets.ts index 3744c2aa9d2f02..aaf31e54798dbb 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_remove_assets.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_remove_assets.ts @@ -437,61 +437,75 @@ const expectAssetsInstalled = ({ id: 'sample_dashboard', }); expect(resDashboard.id).equal('sample_dashboard'); + expect(resDashboard.managed).be(true); expect(resDashboard.references.map((ref: any) => ref.id).includes('sample_tag')).equal(true); const resDashboard2 = await kibanaServer.savedObjects.get({ type: 'dashboard', id: 'sample_dashboard2', }); expect(resDashboard2.id).equal('sample_dashboard2'); + expect(resDashboard2.managed).be(true); const resVis = await kibanaServer.savedObjects.get({ type: 'visualization', id: 'sample_visualization', }); + expect(resVis.id).equal('sample_visualization'); + expect(resVis.managed).be(true); const resSearch = await kibanaServer.savedObjects.get({ type: 'search', id: 'sample_search', }); expect(resSearch.id).equal('sample_search'); + expect(resSearch.managed).be(true); const resLens = await kibanaServer.savedObjects.get({ type: 'lens', id: 'sample_lens', }); + expect(resLens.id).equal('sample_lens'); + expect(resLens.managed).be(true); const resMlModule = await kibanaServer.savedObjects.get({ type: 'ml-module', id: 'sample_ml_module', }); expect(resMlModule.id).equal('sample_ml_module'); + expect(resMlModule.managed).be(true); const resSecurityRule = await kibanaServer.savedObjects.get({ type: 'security-rule', id: 'sample_security_rule', }); expect(resSecurityRule.id).equal('sample_security_rule'); + expect(resSecurityRule.managed).be(true); const resOsqueryPackAsset = await kibanaServer.savedObjects.get({ type: 'osquery-pack-asset', id: 'sample_osquery_pack_asset', }); expect(resOsqueryPackAsset.id).equal('sample_osquery_pack_asset'); + expect(resOsqueryPackAsset.managed).be(true); const resOsquerySavedObject = await kibanaServer.savedObjects.get({ type: 'osquery-saved-query', id: 'sample_osquery_saved_query', }); expect(resOsquerySavedObject.id).equal('sample_osquery_saved_query'); + expect(resOsquerySavedObject.managed).be(true); const resCloudSecurityPostureRuleTemplate = await kibanaServer.savedObjects.get({ type: 'csp-rule-template', id: 'sample_csp_rule_template', }); expect(resCloudSecurityPostureRuleTemplate.id).equal('sample_csp_rule_template'); + expect(resCloudSecurityPostureRuleTemplate.managed).be(true); const resTag = await kibanaServer.savedObjects.get({ type: 'tag', id: 'sample_tag', }); + expect(resTag.managed).be(true); expect(resTag.id).equal('sample_tag'); const resIndexPattern = await kibanaServer.savedObjects.get({ type: 'index-pattern', id: 'test-*', }); + expect(resIndexPattern.managed).be(true); expect(resIndexPattern.id).equal('test-*'); let resInvalidTypeIndexPattern; From 94432d81e62eccfcbe872e559f882e5ef75f4ed6 Mon Sep 17 00:00:00 2001 From: Mark Hopkin Date: Thu, 10 Aug 2023 13:52:26 +0100 Subject: [PATCH 20/45] [Fleet] Re-enable and fix Fleet policy secret integration tests (#163428) ## Summary Closes #162732 Closes #157503 Wanted to sneak this in before we move over to the internal index, I have tidied the tests a bit to make that transition easier. Since we restricted the fleet service account permissions, we can no longer use a test index for the secret tests. The test index was added while .fleet-secrets didn't exist so I have switched to using the real index. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/fleet/server/config.ts | 1 - .../apis/policy_secrets.ts | 122 ++++++------------ .../test/fleet_api_integration/config.base.ts | 1 - 3 files changed, 43 insertions(+), 81 deletions(-) diff --git a/x-pack/plugins/fleet/server/config.ts b/x-pack/plugins/fleet/server/config.ts index 14e5a86aa73ade..9726837375eed0 100644 --- a/x-pack/plugins/fleet/server/config.ts +++ b/x-pack/plugins/fleet/server/config.ts @@ -139,7 +139,6 @@ export const config: PluginConfigDescriptor = { disableRegistryVersionCheck: schema.boolean({ defaultValue: false }), allowAgentUpgradeSourceUri: schema.boolean({ defaultValue: false }), bundledPackageLocation: schema.string({ defaultValue: DEFAULT_BUNDLED_PACKAGE_LOCATION }), - testSecretsIndex: schema.maybe(schema.string()), }), packageVerification: schema.object({ gpgKeyPath: schema.string({ defaultValue: DEFAULT_GPG_KEY_PATH }), diff --git a/x-pack/test/fleet_api_integration/apis/policy_secrets.ts b/x-pack/test/fleet_api_integration/apis/policy_secrets.ts index 34f20e88b0a810..52b614f389ba95 100644 --- a/x-pack/test/fleet_api_integration/apis/policy_secrets.ts +++ b/x-pack/test/fleet_api_integration/apis/policy_secrets.ts @@ -41,37 +41,43 @@ function createdPolicyToUpdatePolicy(policy: any) { return updatedPolicy; } +const SECRETS_INDEX_NAME = '.fleet-secrets'; export default function (providerContext: FtrProviderContext) { - // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/162732 - describe.skip('fleet policy secrets', () => { + describe('fleet policy secrets', () => { const { getService } = providerContext; const es: Client = getService('es'); const supertest = getService('supertest'); const kibanaServer = getService('kibanaServer'); - const getPackagePolicyById = async (id: string) => { - const { body } = await supertest.get(`/api/fleet/package_policies/${id}`); - return body.item; + const getSecrets = async (ids?: string[]) => { + const query = ids ? { terms: { _id: ids } } : { match_all: {} }; + return es.search({ + index: SECRETS_INDEX_NAME, + body: { + query, + }, + }); }; - const maybeCreateSecretsIndex = async () => { - // create mock .secrets index for testing - if (await es.indices.exists({ index: '.fleet-test-secrets' })) { - await es.indices.delete({ index: '.fleet-test-secrets' }); - } - await es.indices.create({ - index: '.fleet-test-secrets', - body: { - mappings: { - properties: { - value: { - type: 'keyword', - }, + const deleteAllSecrets = async () => { + try { + await es.deleteByQuery({ + index: SECRETS_INDEX_NAME, + body: { + query: { + match_all: {}, }, }, - }, - }); + }); + } catch (err) { + // index doesnt exis + } + }; + + const getPackagePolicyById = async (id: string) => { + const { body } = await supertest.get(`/api/fleet/package_policies/${id}`); + return body.item; }; const getFullAgentPolicyById = async (id: string) => { @@ -137,10 +143,8 @@ export default function (providerContext: FtrProviderContext) { let agentPolicyId: string; before(async () => { await kibanaServer.savedObjects.cleanStandardList(); - await getService('esArchiver').load( - 'x-pack/test/functional/es_archives/fleet/empty_fleet_server' - ); - await maybeCreateSecretsIndex(); + + await deleteAllSecrets(); }); setupFleetAndAgents(providerContext); @@ -261,16 +265,7 @@ export default function (providerContext: FtrProviderContext) { }); it('should have correctly created the secrets', async () => { - const searchRes = await es.search({ - index: '.fleet-test-secrets', - body: { - query: { - ids: { - values: [packageVarId, inputVarId, streamVarId], - }, - }, - }, - }); + const searchRes = await getSecrets([packageVarId, inputVarId, streamVarId]); expect(searchRes.hits.hits.length).to.eql(3); @@ -337,14 +332,7 @@ export default function (providerContext: FtrProviderContext) { }); it('should have correctly deleted unused secrets after update', async () => { - const searchRes = await es.search({ - index: '.fleet-test-secrets', - body: { - query: { - match_all: {}, - }, - }, - }); + const searchRes = await getSecrets(); expect(searchRes.hits.hits.length).to.eql(3); // should have created 1 and deleted 1 doc @@ -374,14 +362,7 @@ export default function (providerContext: FtrProviderContext) { expectCompiledPolicyVars(policyDoc, updatedPackageVarId); - const searchRes = await es.search({ - index: '.fleet-test-secrets', - body: { - query: { - match_all: {}, - }, - }, - }); + const searchRes = await getSecrets(); expect(searchRes.hits.hits.length).to.eql(3); @@ -413,53 +394,36 @@ export default function (providerContext: FtrProviderContext) { updatedPackagePolicy.vars.package_var_secret.value.id, updatedPackageVarId, ]; - - const searchRes = await es.search({ - index: '.fleet-test-secrets', - body: { - query: { - terms: { - _id: packageVarSecretIds, - }, - }, - }, - }); + const searchRes = await getSecrets(packageVarSecretIds); expect(searchRes.hits.hits.length).to.eql(2); }); it('should not delete used secrets on package policy delete', async () => { - return supertest + await supertest .delete(`/api/fleet/package_policies/${duplicatedPackagePolicyId}`) .set('kbn-xsrf', 'xxxx') .expect(200); - const searchRes = await es.search({ - index: '.fleet-test-secrets', - body: { - query: { - match_all: {}, - }, - }, - }); + // sleep to allow for secrets to be deleted + await new Promise((resolve) => setTimeout(resolve, 1000)); + + const searchRes = await getSecrets(); + // should have deleted new_package_secret_val_2 expect(searchRes.hits.hits.length).to.eql(3); }); it('should delete all secrets on package policy delete', async () => { - return supertest + await supertest .delete(`/api/fleet/package_policies/${createdPackagePolicyId}`) .set('kbn-xsrf', 'xxxx') .expect(200); - const searchRes = await es.search({ - index: '.fleet-test-secrets', - body: { - query: { - match_all: {}, - }, - }, - }); + // sleep to allow for secrets to be deleted + await new Promise((resolve) => setTimeout(resolve, 1000)); + + const searchRes = await getSecrets(); expect(searchRes.hits.hits.length).to.eql(0); }); diff --git a/x-pack/test/fleet_api_integration/config.base.ts b/x-pack/test/fleet_api_integration/config.base.ts index e5746278a26f90..3e4b35988efba5 100644 --- a/x-pack/test/fleet_api_integration/config.base.ts +++ b/x-pack/test/fleet_api_integration/config.base.ts @@ -74,7 +74,6 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { 'secretsStorage', 'agentTamperProtectionEnabled', ])}`, - `--xpack.fleet.developer.testSecretsIndex=.fleet-test-secrets`, `--logging.loggers=${JSON.stringify([ ...getKibanaCliLoggers(xPackAPITestsConfig.get('kbnTestServer.serverArgs')), From 7353dc66902fcff9e11ac88bc87be6244234a149 Mon Sep 17 00:00:00 2001 From: Konrad Szwarc Date: Thu, 10 Aug 2023 14:56:48 +0200 Subject: [PATCH 21/45] [Fleet] Add a banner to the top of the Kafka Output UI to say that Elastic Defend integration is not supported (#163579) Closes https://github.com/elastic/security-team/issues/7309 ![test](https://github.com/elastic/kibana/assets/29123534/8ce752d5-9340-4cdf-a4ec-7a9ae195a3d2) --- x-pack/plugins/fleet/cypress/screens/fleet.ts | 2 + .../fleet/cypress/screens/fleet_outputs.ts | 1 + .../components/edit_output_flyout/index.tsx | 57 ++++++++++++------- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/x-pack/plugins/fleet/cypress/screens/fleet.ts b/x-pack/plugins/fleet/cypress/screens/fleet.ts index e6b6ac1f470082..3b8ffcc63b6f65 100644 --- a/x-pack/plugins/fleet/cypress/screens/fleet.ts +++ b/x-pack/plugins/fleet/cypress/screens/fleet.ts @@ -121,6 +121,8 @@ export const SETTINGS_OUTPUTS = { NAME_INPUT: 'settingsOutputsFlyout.nameInput', TYPE_INPUT: 'settingsOutputsFlyout.typeInput', ADD_HOST_ROW_BTN: 'fleetServerHosts.multiRowInput.addRowButton', + WARNING_KAFKA_CALLOUT: 'settingsOutputsFlyout.kafkaOutputTypeCallout', + WARNING_ELASTICSEARCH_CALLOUT: 'settingsOutputsFlyout.elasticsearchOutputTypeCallout', }; export const getSpecificSelectorId = (selector: string, id: number) => { diff --git a/x-pack/plugins/fleet/cypress/screens/fleet_outputs.ts b/x-pack/plugins/fleet/cypress/screens/fleet_outputs.ts index de6ef1097b74ad..0e018cd301d1b7 100644 --- a/x-pack/plugins/fleet/cypress/screens/fleet_outputs.ts +++ b/x-pack/plugins/fleet/cypress/screens/fleet_outputs.ts @@ -21,6 +21,7 @@ export const selectKafkaOutput = () => { visit('/app/fleet/settings'); cy.getBySel(SETTINGS_OUTPUTS.ADD_BTN).click(); cy.getBySel(SETTINGS_OUTPUTS.TYPE_INPUT).select('kafka'); + cy.getBySel(SETTINGS_OUTPUTS.WARNING_KAFKA_CALLOUT); cy.getBySel(SETTINGS_OUTPUTS_KAFKA.AUTHENTICATION_USERNAME_PASSWORD_OPTION).click(); }; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx index 3f2055e9999143..e764e93527b346 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx @@ -73,7 +73,6 @@ export const EditOutputFlyout: React.FunctionComponent = [proxies] ); - const isESOutput = inputs.typeInput.value === outputType.Elasticsearch; const { kafkaOutput: isKafkaOutputEnabled } = ExperimentalFeaturesService.get(); const OUTPUT_TYPE_OPTIONS = [ @@ -249,6 +248,43 @@ export const EditOutputFlyout: React.FunctionComponent = } }; + const renderTypeSpecificWarning = () => { + const isESOutput = inputs.typeInput.value === outputType.Elasticsearch; + const isKafkaOutput = inputs.typeInput.value === outputType.Kafka; + if (!isKafkaOutput && !isESOutput) { + return null; + } + + const generateWarningMessage = () => { + switch (inputs.typeInput.value) { + case outputType.Kafka: + return i18n.translate('xpack.fleet.settings.editOutputFlyout.kafkaOutputTypeCallout', { + defaultMessage: + 'Kafka output is currently not supported on Agents using the Elastic Defend integration.', + }); + default: + case outputType.Elasticsearch: + return i18n.translate('xpack.fleet.settings.editOutputFlyout.esOutputTypeCallout', { + defaultMessage: + 'This output type currently does not support connectivity to a remote Elasticsearch cluster.', + }); + } + }; + return ( + <> + + + + ); + }; + return ( @@ -350,24 +386,7 @@ export const EditOutputFlyout: React.FunctionComponent = } )} /> - {isESOutput && ( - <> - - - - )} + {renderTypeSpecificWarning()} From 4a56d2009629db15d886087fadf681bc094e0c0a Mon Sep 17 00:00:00 2001 From: Carlos Crespo Date: Thu, 10 Aug 2023 15:05:50 +0200 Subject: [PATCH 22/45] [Infra UI] Implement telemetry for the asset details flyout (#163078) ## Summary This PR adds proper `data-test-subj` attributes to the Asset Details component and adds a new custom telemetry event image image Besides that, I've renamed 2 props,`node` -> `asset` and `nodeType` -> `assetType`, to make naming consistent with what we're naming these attributes across asset-related stuff. ### How to test - Setup a local Kibana instance - Navigate to `Infrastructure` > `Hosts` - Open the flyout - Upon opening, an event called `Asset Details Flyout Viewed` should be present in `kibana-browser` request - Click through the flyout and check the `kibana-browser` requests - All automatic events in the flyout should contain the `data-component-name` and `data-asset-type` attributes --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../context/fixtures/asset_details_state.ts | 4 +- .../asset_details/asset_details.stories.tsx | 10 +- .../asset_details/asset_details.tsx | 45 +++++++-- .../asset_details_embeddable.tsx | 4 +- .../components/alerts_tooltip_content.tsx | 2 +- .../components/expandable_content.tsx | 5 +- .../components/asset_details/constants.ts | 1 + .../asset_details/header/header.tsx | 16 ++-- .../hooks/use_asset_details_state.ts | 8 +- .../asset_details/hooks/use_tab_switcher.tsx | 1 + .../asset_details/links/link_to_alerts.tsx | 2 +- .../links/link_to_alerts_page.tsx | 10 +- .../links/link_to_apm_services.tsx | 8 +- .../links/link_to_node_details.tsx | 16 ++-- .../asset_details/links/tab_to_apm_traces.tsx | 8 +- .../asset_details/links/tab_to_uptime.tsx | 15 ++- .../tabs/anomalies/anomalies.tsx | 4 +- .../asset_details/tabs/logs/logs.tsx | 19 ++-- .../metadata/add_metadata_filter_button.tsx | 4 +- .../tabs/metadata/add_pin_to_row.tsx | 6 +- .../tabs/metadata/metadata.test.tsx | 19 ++-- .../asset_details/tabs/metadata/metadata.tsx | 12 +-- .../asset_details/tabs/metadata/table.tsx | 8 +- .../asset_details/tabs/osquery/osquery.tsx | 8 +- .../asset_details/tabs/overview/alerts.tsx | 24 ++--- .../tabs/overview/kpis/kpi_grid.tsx | 2 +- .../metadata_summary/metadata_header.tsx | 4 +- .../metadata_summary_list.tsx | 2 +- .../tabs/overview/metrics/metrics_grid.tsx | 6 +- .../asset_details/tabs/overview/overview.tsx | 16 ++-- .../tabs/processes/processes.tsx | 10 +- .../tabs/processes/processes_table.tsx | 2 +- .../tabs/processes/summary_table.tsx | 5 +- .../public/components/asset_details/types.ts | 11 +-- .../host_details_flyout/flyout_wrapper.tsx | 9 +- .../components/host_details_flyout/tabs.ts | 6 -- .../telemetry/telemetry_client.mock.ts | 1 + .../services/telemetry/telemetry_client.ts | 5 + .../services/telemetry/telemetry_events.ts | 28 ++++++ .../telemetry/telemetry_service.test.ts | 24 +++++ .../infra/public/services/telemetry/types.ts | 15 ++- .../page_objects/infra_hosts_view.ts | 95 +++++++++---------- 42 files changed, 304 insertions(+), 196 deletions(-) diff --git a/x-pack/plugins/infra/public/components/asset_details/__stories__/context/fixtures/asset_details_state.ts b/x-pack/plugins/infra/public/components/asset_details/__stories__/context/fixtures/asset_details_state.ts index edcd1d0627d3d7..4e88dc368ca0a2 100644 --- a/x-pack/plugins/infra/public/components/asset_details/__stories__/context/fixtures/asset_details_state.ts +++ b/x-pack/plugins/infra/public/components/asset_details/__stories__/context/fixtures/asset_details_state.ts @@ -9,7 +9,7 @@ import type { DataViewField, DataView } from '@kbn/data-views-plugin/common'; import { UseAssetDetailsStateProps } from '../../../hooks/use_asset_details_state'; export const assetDetailsState: UseAssetDetailsStateProps['state'] = { - node: { + asset: { name: 'host1', id: 'host1-macOS', ip: '192.168.0.1', @@ -29,7 +29,7 @@ export const assetDetailsState: UseAssetDetailsStateProps['state'] = { showActionsColumn: true, }, }, - nodeType: 'host', + assetType: 'host', dateRange: { from: '2023-04-09T11:07:49Z', to: '2023-04-09T11:23:49Z', diff --git a/x-pack/plugins/infra/public/components/asset_details/asset_details.stories.tsx b/x-pack/plugins/infra/public/components/asset_details/asset_details.stories.tsx index a90fe5764f531a..824a4e5f65ef06 100644 --- a/x-pack/plugins/infra/public/components/asset_details/asset_details.stories.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/asset_details.stories.tsx @@ -22,42 +22,36 @@ const tabs: Tab[] = [ name: i18n.translate('xpack.infra.nodeDetails.tabs.overview.title', { defaultMessage: 'Overview', }), - 'data-test-subj': 'hostsView-flyout-tabs-overview', }, { id: FlyoutTabIds.LOGS, name: i18n.translate('xpack.infra.nodeDetails.tabs.logs', { defaultMessage: 'Logs', }), - 'data-test-subj': 'hostsView-flyout-tabs-logs', }, { id: FlyoutTabIds.METADATA, name: i18n.translate('xpack.infra.metrics.nodeDetails.tabs.metadata', { defaultMessage: 'Metadata', }), - 'data-test-subj': 'hostsView-flyout-tabs-metadata', }, { id: FlyoutTabIds.PROCESSES, name: i18n.translate('xpack.infra.metrics.nodeDetails.tabs.processes', { defaultMessage: 'Processes', }), - 'data-test-subj': 'hostsView-flyout-tabs-processes', }, { id: FlyoutTabIds.ANOMALIES, name: i18n.translate('xpack.infra.nodeDetails.tabs.anomalies', { defaultMessage: 'Anomalies', }), - 'data-test-subj': 'hostsView-flyout-tabs-anomalies', }, { id: FlyoutTabIds.LINK_TO_APM, name: i18n.translate('xpack.infra.infra.nodeDetails.apmTabLabel', { defaultMessage: 'APM', }), - 'data-test-subj': 'hostsView-flyout-apm-link', }, ]; @@ -96,7 +90,7 @@ const FlyoutTemplate: Story = (args) => { Open flyout

); @@ -107,7 +101,7 @@ export const Page = PageTemplate.bind({}); export const Flyout = FlyoutTemplate.bind({}); Flyout.args = { renderMode: { - showInFlyout: true, + mode: 'flyout', closeFlyout: () => {}, }, }; diff --git a/x-pack/plugins/infra/public/components/asset_details/asset_details.tsx b/x-pack/plugins/infra/public/components/asset_details/asset_details.tsx index 101a23a4d084e8..238a8c5f002509 100644 --- a/x-pack/plugins/infra/public/components/asset_details/asset_details.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/asset_details.tsx @@ -7,11 +7,17 @@ import React from 'react'; import { EuiFlyout, EuiFlyoutHeader, EuiFlyoutBody } from '@elastic/eui'; +import useEffectOnce from 'react-use/lib/useEffectOnce'; import type { AssetDetailsProps, RenderMode } from './types'; import { Content } from './content/content'; import { Header } from './header/header'; -import { TabSwitcherProvider } from './hooks/use_tab_switcher'; -import { AssetDetailsStateProvider } from './hooks/use_asset_details_state'; +import { TabSwitcherProvider, useTabSwitcherContext } from './hooks/use_tab_switcher'; +import { + AssetDetailsStateProvider, + useAssetDetailsStateContext, +} from './hooks/use_asset_details_state'; +import { useKibanaContextForPlugin } from '../../hooks/use_kibana'; +import { ASSET_DETAILS_FLYOUT_COMPONENT_NAME } from './constants'; interface ContentTemplateProps { header: React.ReactElement; @@ -20,8 +26,27 @@ interface ContentTemplateProps { } const ContentTemplate = ({ header, body, renderMode }: ContentTemplateProps) => { - return renderMode.showInFlyout ? ( - + const { assetType } = useAssetDetailsStateContext(); + const { initialActiveTabId } = useTabSwitcherContext(); + const { + services: { telemetry }, + } = useKibanaContextForPlugin(); + + useEffectOnce(() => { + telemetry.reportAssetDetailsFlyoutViewed({ + componentName: ASSET_DETAILS_FLYOUT_COMPONENT_NAME, + assetType, + tabId: initialActiveTabId, + }); + }); + + return renderMode.mode === 'flyout' ? ( + {header} {body} @@ -34,25 +59,27 @@ const ContentTemplate = ({ header, body, renderMode }: ContentTemplateProps) => }; export const AssetDetails = ({ - node, + asset, dateRange, activeTabId, overrides, onTabsStateChange, tabs = [], links = [], - nodeType = 'host', + assetType = 'host', renderMode = { - showInFlyout: false, + mode: 'page', }, }: AssetDetailsProps) => { return ( - + 0 ? activeTabId ?? tabs[0].id : undefined} > } + header={
} body={} renderMode={renderMode} /> diff --git a/x-pack/plugins/infra/public/components/asset_details/asset_details_embeddable.tsx b/x-pack/plugins/infra/public/components/asset_details/asset_details_embeddable.tsx index 355d8fac0055bc..534ba4c2e4265f 100644 --- a/x-pack/plugins/infra/public/components/asset_details/asset_details_embeddable.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/asset_details_embeddable.tsx @@ -73,8 +73,8 @@ export class AssetDetailsEmbeddable extends Embeddable { values={{ documentation: ( diff --git a/x-pack/plugins/infra/public/components/asset_details/components/expandable_content.tsx b/x-pack/plugins/infra/public/components/asset_details/components/expandable_content.tsx index 60f487d52d0ea1..0cd5e1a53013a2 100644 --- a/x-pack/plugins/infra/public/components/asset_details/components/expandable_content.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/components/expandable_content.tsx @@ -31,7 +31,10 @@ export const ExpandableContent = (props: ExpandableContentProps) => { {shouldShowMore && ( <> {' ... '} - + & { const APM_FIELD = 'host.hostname'; export const Header = ({ tabs = [], links = [], compact }: Props) => { - const { node, nodeType, overrides, dateRange: timeRange } = useAssetDetailsStateContext(); + const { asset, assetType, overrides, dateRange: timeRange } = useAssetDetailsStateContext(); const { euiTheme } = useEuiTheme(); const { showTab, activeTabId } = useTabSwitcherContext(); @@ -46,23 +47,23 @@ export const Header = ({ tabs = [], links = [], compact }: Props) => { const tabLinkComponents = { [FlyoutTabIds.LINK_TO_APM]: (tab: Tab) => ( - + ), [FlyoutTabIds.LINK_TO_UPTIME]: (tab: Tab) => ( - + ), }; const topCornerLinkComponents: Record = { nodeDetails: ( ), alertRule: , - apmServices: , + apmServices: , }; const tabEntries = tabs.map(({ name, ...tab }) => { @@ -77,6 +78,7 @@ export const Header = ({ tabs = [], links = [], compact }: Props) => { return ( onTabClick(tab.id)} isSelected={tab.id === activeTabId} @@ -102,7 +104,7 @@ export const Header = ({ tabs = [], links = [], compact }: Props) => { `} > - {compact ?

{node.name}

:

{node.name}

} + {compact ?

{asset.name}

:

{asset.name}

}
; } export function useAssetDetailsState({ state }: UseAssetDetailsStateProps) { - const { node, nodeType, dateRange: rawDateRange, onTabsStateChange, overrides } = state; + const { asset, assetType, dateRange: rawDateRange, onTabsStateChange, overrides } = state; const dateRange = useMemo(() => { const { from = DEFAULT_DATE_RANGE.from, to = DEFAULT_DATE_RANGE.to } = @@ -36,8 +36,8 @@ export function useAssetDetailsState({ state }: UseAssetDetailsStateProps) { const dateRangeTs = toTimestampRange(dateRange); return { - node, - nodeType, + asset, + assetType, dateRange, dateRangeTs, onTabsStateChange, diff --git a/x-pack/plugins/infra/public/components/asset_details/hooks/use_tab_switcher.tsx b/x-pack/plugins/infra/public/components/asset_details/hooks/use_tab_switcher.tsx index 60dc710b8613fa..6bdcbca214d370 100644 --- a/x-pack/plugins/infra/public/components/asset_details/hooks/use_tab_switcher.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/hooks/use_tab_switcher.tsx @@ -33,6 +33,7 @@ export function useTabSwitcher({ initialActiveTabId }: TabSwitcherParams) { }; return { + initialActiveTabId, activeTabId, renderedTabsSet, showTab, diff --git a/x-pack/plugins/infra/public/components/asset_details/links/link_to_alerts.tsx b/x-pack/plugins/infra/public/components/asset_details/links/link_to_alerts.tsx index 47d7075cb60dc0..e5a5cc6340abe1 100644 --- a/x-pack/plugins/infra/public/components/asset_details/links/link_to_alerts.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/links/link_to_alerts.tsx @@ -15,7 +15,7 @@ export interface LinkToAlertsRuleProps { export const LinkToAlertsRule = ({ onClick }: LinkToAlertsRuleProps) => { return ( { +export const LinkToAlertsPage = ({ assetName, queryField, dateRange }: LinkToAlertsPageProps) => { const { services } = useKibanaContextForPlugin(); const { http } = services; const linkToAlertsPage = http.basePath.prepend( `${ALERTS_PATH}?_a=${encode({ - kuery: `${queryField}:"${nodeName}"`, + kuery: `${queryField}:"${assetName}"`, rangeFrom: dateRange.from, rangeTo: dateRange.to, status: 'all', @@ -35,7 +35,7 @@ export const LinkToAlertsPage = ({ nodeName, queryField, dateRange }: LinkToAler return ( { +export const LinkToApmServices = ({ assetName, apmField }: LinkToApmServicesProps) => { const { services } = useKibanaContextForPlugin(); const { http } = services; const queryString = new URLSearchParams( encode( stringify({ - kuery: `${apmField}:"${nodeName}"`, + kuery: `${apmField}:"${assetName}"`, }) ) ); @@ -34,7 +34,7 @@ export const LinkToApmServices = ({ nodeName, apmField }: LinkToApmServicesProps return ( { - const inventoryModel = findInventoryModel(nodeType); + const inventoryModel = findInventoryModel(assetType); const nodeDetailFrom = currentTimestamp - inventoryModel.metrics.defaultTimeRangeInSeconds * 1000; const nodeDetailMenuItemLinkProps = useLinkProps({ ...getNodeDetailUrl({ - nodeType, - nodeId: nodeName, + nodeType: assetType, + nodeId: assetName, from: nodeDetailFrom, to: currentTimestamp, }), @@ -37,7 +37,7 @@ export const LinkToNodeDetails = ({ return ( { +export const TabToApmTraces = ({ assetName, apmField, name, ...props }: LinkToApmServicesProps) => { const { euiTheme } = useEuiTheme(); const apmTracesMenuItemLinkProps = useLinkProps({ app: 'apm', hash: 'traces', search: { - kuery: `${apmField}:"${nodeName}"`, + kuery: `${apmField}:"${assetName}"`, }, }); @@ -30,7 +30,7 @@ export const TabToApmTraces = ({ nodeName, apmField, name, ...props }: LinkToApm { +export const TabToUptime = ({ + assetType, + assetName, + nodeIp, + name, + ...props +}: LinkToUptimeProps) => { const { share } = useKibanaContextForPlugin().services; const { euiTheme } = useEuiTheme(); return ( share.url.locators .get(uptimeOverviewLocatorID)! - .navigate({ [nodeType]: nodeName, ip: nodeIp }) + .navigate({ [assetType]: assetName, ip: nodeIp }) } > { - const { node, overrides } = useAssetDetailsStateContext(); + const { asset, overrides } = useAssetDetailsStateContext(); const { onClose = () => {} } = overrides?.anomalies ?? {}; - return ; + return ; }; diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/logs/logs.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/logs/logs.tsx index 087c34551c440e..35337032805c1b 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/logs/logs.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/logs/logs.tsx @@ -22,7 +22,7 @@ import { useAssetDetailsStateContext } from '../../hooks/use_asset_details_state const TEXT_QUERY_THROTTLE_INTERVAL_MS = 500; export const Logs = () => { - const { node, nodeType, overrides, onTabsStateChange, dateRangeTs } = + const { asset, assetType, overrides, onTabsStateChange, dateRangeTs } = useAssetDetailsStateContext(); const { logView: overrideLogView, query: overrideQuery } = overrides?.logs ?? {}; @@ -49,7 +49,7 @@ export const Logs = () => { const filter = useMemo(() => { const query = [ - `${findInventoryFields(nodeType).id}: "${node.name}"`, + `${findInventoryFields(assetType).id}: "${asset.name}"`, ...(textQueryDebounced !== '' ? [textQueryDebounced] : []), ].join(' and '); @@ -57,7 +57,7 @@ export const Logs = () => { language: 'kuery', query, }; - }, [nodeType, node.name, textQueryDebounced]); + }, [assetType, asset.name, textQueryDebounced]); const onQueryChange = useCallback((e: React.ChangeEvent) => { setTextQuery(e.target.value); @@ -70,13 +70,20 @@ export const Logs = () => { const logsUrl = useMemo(() => { return locators.nodeLogsLocator.getRedirectUrl({ - nodeType, - nodeId: node.name, + nodeType: assetType, + nodeId: asset.name, time: startTimestamp, filter: textQueryDebounced, logView, }); - }, [locators.nodeLogsLocator, node.name, nodeType, startTimestamp, textQueryDebounced, logView]); + }, [ + locators.nodeLogsLocator, + asset.name, + assetType, + startTimestamp, + textQueryDebounced, + logView, + ]); return ( diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/add_metadata_filter_button.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/add_metadata_filter_button.tsx index 31d978235be323..a2d04b1c36184a 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/add_metadata_filter_button.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/add_metadata_filter_button.tsx @@ -75,7 +75,7 @@ export const AddMetadataFilterButton = ({ item }: AddMetadataFilterButtonProps) color="text" iconType="filter" display="base" - data-test-subj="hostsView-flyout-metadata-remove-filter" + data-test-subj="infraAssetDetailsMetadataRemoveFilterButton" aria-label={i18n.translate('xpack.infra.metadataEmbeddable.filterAriaLabel', { defaultMessage: 'Filter', })} @@ -102,7 +102,7 @@ export const AddMetadataFilterButton = ({ item }: AddMetadataFilterButtonProps) color="primary" size="s" iconType="filter" - data-test-subj="hostsView-flyout-metadata-add-filter" + data-test-subj="infraAssetDetailsMetadataAddFilterButton" aria-label={i18n.translate('xpack.infra.metadataEmbeddable.AddFilterAriaLabel', { defaultMessage: 'Add Filter', })} diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/add_pin_to_row.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/add_pin_to_row.tsx index a1e7c3f1064976..1e5e31b887911c 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/add_pin_to_row.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/add_pin_to_row.tsx @@ -47,8 +47,8 @@ export const AddMetadataPinToRow = ({ size="s" color="primary" iconType="pinFilled" - data-test-subj="infraMetadataEmbeddableRemovePin" - aria-label={i18n.translate('xpack.infra.metadataEmbeddable.pinAriaLabel', { + data-test-subj="infraAssetDetailsMetadataRemovePin" + aria-label={i18n.translate('xpack.infra.metadata.pinAriaLabel', { defaultMessage: 'Pinned field', })} onClick={handleRemovePin} @@ -65,7 +65,7 @@ export const AddMetadataPinToRow = ({ color="primary" size="s" iconType="pin" - data-test-subj="infraMetadataEmbeddableAddPin" + data-test-subj="infraAssetDetailsMetadataAddPin" aria-label={PIN_FIELD} onClick={handleAddPin} /> diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/metadata.test.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/metadata.test.tsx index eeff58d30d1e7a..9f8a04ef64e6cf 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/metadata.test.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/metadata.test.tsx @@ -7,7 +7,6 @@ import React from 'react'; import { Metadata } from './metadata'; - import { useMetadata } from '../../hooks/use_metadata'; import { useSourceContext } from '../../../../containers/metrics_source'; import { render } from '@testing-library/react'; @@ -27,8 +26,8 @@ const renderHostMetadata = () => from: '2023-04-09T11:07:49Z', to: '2023-04-09T11:23:49Z', }, - nodeType: 'host', - node: { + assetType: 'host', + asset: { id: 'host-1', name: 'host-1', }, @@ -69,30 +68,30 @@ describe('Single Host Metadata (Hosts View)', () => { mockUseMetadata({ error: 'Internal server error' }); const result = renderHostMetadata(); - expect(result.queryByTestId('infraMetadataErrorCallout')).toBeInTheDocument(); + expect(result.queryByTestId('infraAssetDetailsMetadataErrorCallout')).toBeInTheDocument(); }); it('should show an no data message if fetching the metadata returns an empty array', async () => { mockUseMetadata({ metadata: [] }); const result = renderHostMetadata(); - expect(result.queryByTestId('infraHostMetadataSearchBarInput')).toBeInTheDocument(); - expect(result.queryByTestId('infraHostMetadataNoData')).toBeInTheDocument(); + expect(result.queryByTestId('infraAssetDetailsMetadataSearchBarInput')).toBeInTheDocument(); + expect(result.queryByTestId('infraAssetDetailsMetadataNoData')).toBeInTheDocument(); }); it('should show the metadata table if metadata is returned', async () => { mockUseMetadata({ metadata: [{ name: 'host.os.name', value: 'Ubuntu' }] }); const result = renderHostMetadata(); - expect(result.queryByTestId('infraHostMetadataSearchBarInput')).toBeInTheDocument(); - expect(result.queryByTestId('infraMetadataTable')).toBeInTheDocument(); + expect(result.queryByTestId('infraAssetDetailsMetadataSearchBarInput')).toBeInTheDocument(); + expect(result.queryByTestId('infraAssetDetailsMetadataTable')).toBeInTheDocument(); }); it('should return loading text if loading', async () => { mockUseMetadata({ loading: true }); const result = renderHostMetadata(); - expect(result.queryByTestId('infraHostMetadataSearchBarInput')).toBeInTheDocument(); - expect(result.queryByTestId('infraHostMetadataLoading')).toBeInTheDocument(); + expect(result.queryByTestId('infraAssetDetailsMetadataSearchBarInput')).toBeInTheDocument(); + expect(result.queryByTestId('infraAssetDetailsMetadataLoading')).toBeInTheDocument(); }); }); diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/metadata.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/metadata.tsx index 23a3e5f193409a..4a759e5718d133 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/metadata.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/metadata.tsx @@ -24,26 +24,26 @@ export interface MetadataSearchUrlState { } export interface MetadataProps { + assetName: string; + assetType: InventoryItemType; dateRange: TimeRange; - nodeName: string; - nodeType: InventoryItemType; showActionsColumn?: boolean; search?: string; onSearchChange?: (query: string) => void; } export const Metadata = () => { - const { node, nodeType, overrides, dateRangeTs, onTabsStateChange } = + const { asset, assetType, overrides, dateRangeTs, onTabsStateChange } = useAssetDetailsStateContext(); const { query, showActionsColumn = false } = overrides?.metadata ?? {}; - const inventoryModel = findInventoryModel(nodeType); + const inventoryModel = findInventoryModel(assetType); const { sourceId } = useSourceContext(); const { loading: metadataLoading, error: fetchMetadataError, metadata, - } = useMetadata(node.name, nodeType, inventoryModel.requiredMetrics, sourceId, dateRangeTs); + } = useMetadata(asset.name, assetType, inventoryModel.requiredMetrics, sourceId, dateRangeTs); const fields = useMemo(() => getAllFields(metadata), [metadata]); @@ -64,7 +64,7 @@ export const Metadata = () => { })} color="danger" iconType="error" - data-test-subj="infraMetadataErrorCallout" + data-test-subj="infraAssetDetailsMetadataErrorCallout" > {LOADING}
+
{LOADING}
) : ( -
{NO_METADATA_FOUND}
+
{NO_METADATA_FOUND}
) } /> diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/osquery/osquery.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/osquery/osquery.tsx index 06640540af16da..b18a2f802e085f 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/osquery/osquery.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/osquery/osquery.tsx @@ -14,12 +14,12 @@ import { useMetadata } from '../../hooks/use_metadata'; import { useAssetDetailsStateContext } from '../../hooks/use_asset_details_state'; export const Osquery = () => { - const { node, nodeType, dateRangeTs } = useAssetDetailsStateContext(); - const inventoryModel = findInventoryModel(nodeType); + const { asset, assetType, dateRangeTs } = useAssetDetailsStateContext(); + const inventoryModel = findInventoryModel(assetType); const { sourceId } = useSourceContext(); const { loading, metadata } = useMetadata( - node.name, - nodeType, + asset.name, + assetType, inventoryModel.requiredMetrics, sourceId, dateRangeTs diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/alerts.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/alerts.tsx index 87ebaae1f5f201..2edac4abbbddab 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/alerts.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/alerts.tsx @@ -25,12 +25,12 @@ import { useBoolean } from '../../../../hooks/use_boolean'; import { ALERT_STATUS_ALL } from '../../../../common/alerts/constants'; export const AlertsSummaryContent = ({ - nodeName, - nodeType, + assetName, + assetType, dateRange, }: { - nodeName: string; - nodeType: InventoryItemType; + assetName: string; + assetType: InventoryItemType; dateRange: TimeRange; }) => { const [isAlertFlyoutVisible, { toggle: toggleAlertFlyout }] = useBoolean(false); @@ -39,10 +39,10 @@ export const AlertsSummaryContent = ({ () => createAlertsEsQuery({ dateRange, - hostNodeNames: [nodeName], + hostNodeNames: [assetName], status: ALERT_STATUS_ALL, }), - [nodeName, dateRange] + [assetName, dateRange] ); return ( @@ -56,8 +56,8 @@ export const AlertsSummaryContent = ({ @@ -65,8 +65,8 @@ export const AlertsSummaryContent = ({ @@ -112,7 +112,7 @@ const AlertsSectionTitle = () => { return ( - +
{ diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/kpis/kpi_grid.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/kpis/kpi_grid.tsx index c134f0de6bb7a2..dfc7f8823ba71c 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/kpis/kpi_grid.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/kpis/kpi_grid.tsx @@ -35,7 +35,7 @@ export const KPIGrid = React.memo(({ nodeName, dataView, timeRange }: Props) => }, [dataView, nodeName]); return ( - + {KPI_CHARTS.map(({ id, layers, title, toolTip }, index) => ( { @@ -72,7 +72,7 @@ export const MetadataHeader = ({ metadataValue }: MetadataSummaryProps) => { values={{ documentation: ( diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_summary_list.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_summary_list.tsx index 1aedec3f050376..ee7210dd2d8dee 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_summary_list.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_summary_list.tsx @@ -78,7 +78,7 @@ export const MetadataSummaryList = ({ metadata, metadataLoading }: MetadataSumma - + {CHARTS_IN_ORDER.map(({ dataViewOrigin, id, layers, title, overrides }, index) => ( { - const { node, nodeType, overrides, dateRange } = useAssetDetailsStateContext(); + const { asset, assetType, overrides, dateRange } = useAssetDetailsStateContext(); const { logsDataView, metricsDataView } = overrides?.overview ?? {}; - const inventoryModel = findInventoryModel(nodeType); + const inventoryModel = findInventoryModel(assetType); const { sourceId } = useSourceContext(); const { loading: metadataLoading, error: fetchMetadataError, metadata, } = useMetadata( - node.name, - nodeType, + asset.name, + assetType, inventoryModel.requiredMetrics, sourceId, toTimestampRange(dateRange) @@ -41,7 +41,7 @@ export const Overview = () => { return ( - + {fetchMetadataError ? ( @@ -59,7 +59,7 @@ export const Overview = () => { values={{ reload: ( window.location.reload()} > {i18n.translate('xpack.infra.assetDetailsEmbeddable.overview.errorAction', { @@ -76,7 +76,7 @@ export const Overview = () => { - + @@ -84,7 +84,7 @@ export const Overview = () => { timeRange={dateRange} logsDataView={logsDataView} metricsDataView={metricsDataView} - nodeName={node.name} + nodeName={asset.name} /> diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/processes/processes.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/processes/processes.tsx index b91c96c3c948e8..7bb8e96276fd81 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/processes/processes.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/processes/processes.tsx @@ -35,7 +35,7 @@ const options = Object.entries(STATE_NAMES).map(([value, view]: [string, string] })); export const Processes = () => { - const { node, nodeType, overrides, dateRangeTs, onTabsStateChange } = + const { asset, assetType, overrides, dateRangeTs, onTabsStateChange } = useAssetDetailsStateContext(); const { query: overrideQuery } = overrides?.processes ?? {}; @@ -52,9 +52,9 @@ export const Processes = () => { }); const hostTerm = useMemo(() => { - const field = getFieldByType(nodeType) ?? nodeType; - return { [field]: node.name }; - }, [node.name, nodeType]); + const field = getFieldByType(assetType) ?? assetType; + return { [field]: asset.name }; + }, [asset.name, assetType]); const { loading, @@ -159,7 +159,7 @@ export const Processes = () => { } actions={ - + {columns.map((column) => ( diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/processes/summary_table.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/processes/summary_table.tsx index 57814aa7bacc2d..928f48307eee70 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/processes/summary_table.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/processes/summary_table.tsx @@ -59,7 +59,10 @@ export const SummaryTable = ({ processSummary, isLoading }: Props) => { {Object.entries(processCount).map(([field, value]) => ( - + {columnTitles[field as keyof SummaryRecord]} {value === -1 ? : value} diff --git a/x-pack/plugins/infra/public/components/asset_details/types.ts b/x-pack/plugins/infra/public/components/asset_details/types.ts index ebd3c8823b8caa..cbf66d66f0a27e 100644 --- a/x-pack/plugins/infra/public/components/asset_details/types.ts +++ b/x-pack/plugins/infra/public/components/asset_details/types.ts @@ -13,7 +13,7 @@ import type { InventoryItemType } from '../../../common/inventory_models/types'; interface Metadata { ip?: string | null; } -export type Node = Metadata & { +export type Asset = Metadata & { id: string; name: string; }; @@ -60,11 +60,11 @@ export interface TabState { export interface FlyoutProps { closeFlyout: () => void; - showInFlyout: true; + mode: 'flyout'; } export interface FullPageProps { - showInFlyout: false; + mode: 'page'; } export type RenderMode = FlyoutProps | FullPageProps; @@ -72,14 +72,13 @@ export type RenderMode = FlyoutProps | FullPageProps; export interface Tab { id: FlyoutTabIds; name: string; - 'data-test-subj': string; } export type LinkOptions = 'alertRule' | 'nodeDetails' | 'apmServices'; export interface AssetDetailsProps { - node: Node; - nodeType: InventoryItemType; + asset: Asset; + assetType: InventoryItemType; dateRange: TimeRange; tabs: Tab[]; activeTabId?: TabIds; diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/host_details_flyout/flyout_wrapper.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/host_details_flyout/flyout_wrapper.tsx index a1d8542130c14c..884e0dd389cd3f 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/host_details_flyout/flyout_wrapper.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/host_details_flyout/flyout_wrapper.tsx @@ -7,7 +7,6 @@ import React from 'react'; import useAsync from 'react-use/lib/useAsync'; -import type { InventoryItemType } from '../../../../../../common/inventory_models/types'; import { useUnifiedSearchContext } from '../../hooks/use_unified_search'; import type { HostNodeRow } from '../../hooks/use_hosts_table'; import { HostFlyout, useHostFlyoutUrlState } from '../../hooks/use_host_flyout_url_state'; @@ -21,8 +20,6 @@ export interface Props { closeFlyout: () => void; } -const NODE_TYPE = 'host' as InventoryItemType; - export const FlyoutWrapper = ({ node, closeFlyout }: Props) => { const { searchCriteria } = useUnifiedSearchContext(); const { dataView } = useMetricsDataViewContext(); @@ -39,8 +36,8 @@ export const FlyoutWrapper = ({ node, closeFlyout }: Props) => { return ( { tabs={orderedFlyoutTabs} links={['apmServices', 'nodeDetails']} renderMode={{ - showInFlyout: true, + mode: 'flyout', closeFlyout, }} /> diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/host_details_flyout/tabs.ts b/x-pack/plugins/infra/public/pages/metrics/hosts/components/host_details_flyout/tabs.ts index 4445e5fba924ad..7d354d19bed121 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/host_details_flyout/tabs.ts +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/host_details_flyout/tabs.ts @@ -14,41 +14,35 @@ export const orderedFlyoutTabs: Tab[] = [ name: i18n.translate('xpack.infra.nodeDetails.tabs.overview.title', { defaultMessage: 'Overview', }), - 'data-test-subj': 'hostsView-flyout-tabs-overview', }, { id: FlyoutTabIds.METADATA, name: i18n.translate('xpack.infra.nodeDetails.tabs.metadata.title', { defaultMessage: 'Metadata', }), - 'data-test-subj': 'hostsView-flyout-tabs-metadata', }, { id: FlyoutTabIds.PROCESSES, name: i18n.translate('xpack.infra.metrics.nodeDetails.tabs.processes', { defaultMessage: 'Processes', }), - 'data-test-subj': 'hostsView-flyout-tabs-processes', }, { id: FlyoutTabIds.LOGS, name: i18n.translate('xpack.infra.nodeDetails.tabs.logs.title', { defaultMessage: 'Logs', }), - 'data-test-subj': 'hostsView-flyout-tabs-logs', }, { id: FlyoutTabIds.ANOMALIES, name: i18n.translate('xpack.infra.nodeDetails.tabs.anomalies', { defaultMessage: 'Anomalies', }), - 'data-test-subj': 'hostsView-flyout-tabs-anomalies', }, { id: FlyoutTabIds.OSQUERY, name: i18n.translate('xpack.infra.nodeDetails.tabs.osquery', { defaultMessage: 'Osquery', }), - 'data-test-subj': 'hostsView-flyout-tabs-Osquery', }, ]; diff --git a/x-pack/plugins/infra/public/services/telemetry/telemetry_client.mock.ts b/x-pack/plugins/infra/public/services/telemetry/telemetry_client.mock.ts index 3f913bd8d5611b..604fdcc272493b 100644 --- a/x-pack/plugins/infra/public/services/telemetry/telemetry_client.mock.ts +++ b/x-pack/plugins/infra/public/services/telemetry/telemetry_client.mock.ts @@ -13,4 +13,5 @@ export const createTelemetryClientMock = (): jest.Mocked => ({ reportHostFlyoutFilterRemoved: jest.fn(), reportHostFlyoutFilterAdded: jest.fn(), reportHostsViewTotalHostCountRetrieved: jest.fn(), + reportAssetDetailsFlyoutViewed: jest.fn(), }); diff --git a/x-pack/plugins/infra/public/services/telemetry/telemetry_client.ts b/x-pack/plugins/infra/public/services/telemetry/telemetry_client.ts index 56eb8d1af2c779..9107157c9835d6 100644 --- a/x-pack/plugins/infra/public/services/telemetry/telemetry_client.ts +++ b/x-pack/plugins/infra/public/services/telemetry/telemetry_client.ts @@ -7,6 +7,7 @@ import { AnalyticsServiceSetup } from '@kbn/core-analytics-server'; import { + AssetDetailsFlyoutViewedParams, HostEntryClickedParams, HostFlyoutFilterActionParams, HostsViewQueryHostsCountRetrievedParams, @@ -60,4 +61,8 @@ export class TelemetryClient implements ITelemetryClient { params ); } + + public reportAssetDetailsFlyoutViewed = (params: AssetDetailsFlyoutViewedParams) => { + this.analytics.reportEvent(InfraTelemetryEventTypes.ASSET_DETAILS_FLYOUT_VIEWED, params); + }; } diff --git a/x-pack/plugins/infra/public/services/telemetry/telemetry_events.ts b/x-pack/plugins/infra/public/services/telemetry/telemetry_events.ts index 4d55baf61674bb..56cce313ec219e 100644 --- a/x-pack/plugins/infra/public/services/telemetry/telemetry_events.ts +++ b/x-pack/plugins/infra/public/services/telemetry/telemetry_events.ts @@ -112,7 +112,35 @@ const hostViewTotalHostCountRetrieved: InfraTelemetryEvent = { }, }; +const assetDetailsFlyoutViewed: InfraTelemetryEvent = { + eventType: InfraTelemetryEventTypes.ASSET_DETAILS_FLYOUT_VIEWED, + schema: { + componentName: { + type: 'keyword', + _meta: { + description: 'Hostname for the clicked host.', + optional: false, + }, + }, + assetType: { + type: 'keyword', + _meta: { + description: 'Cloud provider for the clicked host.', + optional: false, + }, + }, + tabId: { + type: 'keyword', + _meta: { + description: 'Cloud provider for the clicked host.', + optional: true, + }, + }, + }, +}; + export const infraTelemetryEvents = [ + assetDetailsFlyoutViewed, hostsViewQuerySubmittedEvent, hostsEntryClickedEvent, hostFlyoutRemoveFilter, diff --git a/x-pack/plugins/infra/public/services/telemetry/telemetry_service.test.ts b/x-pack/plugins/infra/public/services/telemetry/telemetry_service.test.ts index 6e2030a3fdaf3c..b3c4b02468ca6e 100644 --- a/x-pack/plugins/infra/public/services/telemetry/telemetry_service.test.ts +++ b/x-pack/plugins/infra/public/services/telemetry/telemetry_service.test.ts @@ -183,4 +183,28 @@ describe('TelemetryService', () => { ); }); }); + + describe('#reportAssetDetailsFlyoutViewed', () => { + it('should report asset details viewed with properties', async () => { + const setupParams = getSetupParams(); + service.setup(setupParams); + const telemetry = service.start(); + + telemetry.reportAssetDetailsFlyoutViewed({ + componentName: 'infraAssetDetailsFlyout', + assetType: 'host', + tabId: 'overview', + }); + + expect(setupParams.analytics.reportEvent).toHaveBeenCalledTimes(1); + expect(setupParams.analytics.reportEvent).toHaveBeenCalledWith( + InfraTelemetryEventTypes.ASSET_DETAILS_FLYOUT_VIEWED, + { + componentName: 'infraAssetDetailsFlyout', + assetType: 'host', + tabId: 'overview', + } + ); + }); + }); }); diff --git a/x-pack/plugins/infra/public/services/telemetry/types.ts b/x-pack/plugins/infra/public/services/telemetry/types.ts index 0ccd6c0633b4ab..2ecf8115eaa581 100644 --- a/x-pack/plugins/infra/public/services/telemetry/types.ts +++ b/x-pack/plugins/infra/public/services/telemetry/types.ts @@ -18,6 +18,7 @@ export enum InfraTelemetryEventTypes { HOST_FLYOUT_FILTER_REMOVED = 'Host Flyout Filter Removed', HOST_FLYOUT_FILTER_ADDED = 'Host Flyout Filter Added', HOST_VIEW_TOTAL_HOST_COUNT_RETRIEVED = 'Host View Total Host Count Retrieved', + ASSET_DETAILS_FLYOUT_VIEWED = 'Asset Details Flyout Viewed', } export interface HostsViewQuerySubmittedParams { @@ -41,11 +42,18 @@ export interface HostsViewQueryHostsCountRetrievedParams { total: number; } +export interface AssetDetailsFlyoutViewedParams { + assetType: string; + componentName: string; + tabId?: string; +} + export type InfraTelemetryEventParams = | HostsViewQuerySubmittedParams | HostEntryClickedParams | HostFlyoutFilterActionParams - | HostsViewQueryHostsCountRetrievedParams; + | HostsViewQueryHostsCountRetrievedParams + | AssetDetailsFlyoutViewedParams; export interface ITelemetryClient { reportHostEntryClicked(params: HostEntryClickedParams): void; @@ -53,6 +61,7 @@ export interface ITelemetryClient { reportHostFlyoutFilterAdded(params: HostFlyoutFilterActionParams): void; reportHostsViewTotalHostCountRetrieved(params: HostsViewQueryHostsCountRetrievedParams): void; reportHostsViewQuerySubmitted(params: HostsViewQuerySubmittedParams): void; + reportAssetDetailsFlyoutViewed(params: AssetDetailsFlyoutViewedParams): void; } export type InfraTelemetryEvent = @@ -75,4 +84,8 @@ export type InfraTelemetryEvent = | { eventType: InfraTelemetryEventTypes.HOST_VIEW_TOTAL_HOST_COUNT_RETRIEVED; schema: RootSchema; + } + | { + eventType: InfraTelemetryEventTypes.ASSET_DETAILS_FLYOUT_VIEWED; + schema: RootSchema; }; diff --git a/x-pack/test/functional/page_objects/infra_hosts_view.ts b/x-pack/test/functional/page_objects/infra_hosts_view.ts index 6bad2bf1630e56..25e4b0302a7637 100644 --- a/x-pack/test/functional/page_objects/infra_hosts_view.ts +++ b/x-pack/test/functional/page_objects/infra_hosts_view.ts @@ -12,14 +12,6 @@ export function InfraHostsViewProvider({ getService }: FtrProviderContext) { const testSubjects = getService('testSubjects'); return { - async clickTryHostViewLink() { - return await testSubjects.click('inventory-hostsView-link'); - }, - - async clickTryHostViewBadge() { - return await testSubjects.click('inventory-hostsView-link-badge'); - }, - async clickTableOpenFlyoutButton() { return testSubjects.click('hostsView-flyout-button'); }, @@ -40,32 +32,47 @@ export function InfraHostsViewProvider({ getService }: FtrProviderContext) { return testSubjects.click('euiFlyoutCloseButton'); }, + async getBetaBadgeExists() { + return testSubjects.exists('infra-beta-badge'); + }, + + // Inventory UI + async clickTryHostViewLink() { + return await testSubjects.click('inventory-hostsView-link'); + }, + + async clickTryHostViewBadge() { + return await testSubjects.click('inventory-hostsView-link-badge'); + }, + + // Asset Details Flyout + async clickOverviewFlyoutTab() { - return testSubjects.click('hostsView-flyout-tabs-overview'); + return testSubjects.click('infraAssetDetailsOverviewTab'); }, async clickMetadataFlyoutTab() { - return testSubjects.click('hostsView-flyout-tabs-metadata'); + return testSubjects.click('infraAssetDetailsMetadataTab'); }, - async clickOverviewLinkToAlerts() { - return testSubjects.click('assetDetails-flyout-alerts-link'); + async clickProcessesFlyoutTab() { + return testSubjects.click('infraAssetDetailsProcessesTab'); }, - async clickOverviewOpenAlertsFlyout() { - return testSubjects.click('infraNodeContextPopoverCreateInventoryRuleButton'); + async clickLogsFlyoutTab() { + return testSubjects.click('infraAssetDetailsLogsTab'); }, - async clickProcessesFlyoutTab() { - return testSubjects.click('hostsView-flyout-tabs-processes'); + async clickOverviewLinkToAlerts() { + return testSubjects.click('infraAssetDetailsAlertsShowAllButton'); }, - async clickShowAllMetadataOverviewTab() { - return testSubjects.click('infraMetadataSummaryShowAllMetadataButton'); + async clickOverviewOpenAlertsFlyout() { + return testSubjects.click('infraAssetDetailsCreateAlertsRuleButton'); }, - async clickLogsFlyoutTab() { - return testSubjects.click('hostsView-flyout-tabs-logs'); + async clickShowAllMetadataOverviewTab() { + return testSubjects.click('infraAssetDetailsMetadataShowAllButton'); }, async clickProcessesTableExpandButton() { @@ -73,28 +80,26 @@ export function InfraHostsViewProvider({ getService }: FtrProviderContext) { }, async clickFlyoutApmServicesLink() { - return testSubjects.click('hostsView-flyout-apm-services-link'); + return testSubjects.click('infraAssetDetailsViewAPMServicesButton'); }, async clickAddMetadataPin() { - return testSubjects.click('infraMetadataEmbeddableAddPin'); + return testSubjects.click('infraAssetDetailsMetadataAddPin'); }, async clickRemoveMetadataPin() { - return testSubjects.click('infraMetadataEmbeddableRemovePin'); + return testSubjects.click('infraAssetDetailsMetadataRemovePin'); }, async clickAddMetadataFilter() { - return testSubjects.click('hostsView-flyout-metadata-add-filter'); + return testSubjects.click('infraAssetDetailsMetadataAddFilterButton'); }, async clickRemoveMetadataFilter() { - return testSubjects.click('hostsView-flyout-metadata-remove-filter'); + return testSubjects.click('infraAssetDetailsMetadataRemoveFilterButton'); }, - async getBetaBadgeExists() { - return testSubjects.exists('infra-beta-badge'); - }, + // Splash screen async getHostsLandingPageDisabled() { const container = await testSubjects.find('hostView-no-enable-access'); @@ -203,39 +208,29 @@ export function InfraHostsViewProvider({ getService }: FtrProviderContext) { return div.getAttribute('title'); }, - // Flyout Tabs + // Asset Details Flyout Tabs async getAssetDetailsKPITileValue(type: string) { - const container = await testSubjects.find('assetDetailsKPIGrid'); + const container = await testSubjects.find('infraAssetDetailsKPIGrid'); const element = await container.findByTestSubject(`infraAssetDetailsKPI${type}`); const div = await element.findByClassName('echMetricText__value'); return div.getAttribute('title'); }, overviewAlertsTitleExist() { - return testSubjects.exists('assetDetailsAlertsTitle'); + return testSubjects.exists('infraAssetDetailsAlertsTitle'); }, async getAssetDetailsMetricsCharts() { - const container = await testSubjects.find('assetDetailsMetricsChartGrid'); + const container = await testSubjects.find('infraAssetDetailsMetricsChartGrid'); return container.findAllByCssSelector('[data-test-subj*="infraAssetDetailsMetricsChart"]'); }, - getMetadataTab() { - return testSubjects.find('hostsView-flyout-tabs-metadata'); - }, - metadataTableExist() { - return testSubjects.exists('infraMetadataTable'); - }, - - async getMetadataTabName() { - const tabElement = await this.getMetadataTab(); - const tabTitle = await tabElement.findByClassName('euiTab__content'); - return tabTitle.getVisibleText(); + return testSubjects.exists('infraAssetDetailsMetadataTable'); }, async getRemovePinExist() { - return testSubjects.exists('infraMetadataEmbeddableRemovePin'); + return testSubjects.exists('infraAssetDetailsMetadataRemovePin'); }, async getAppliedFilter() { @@ -246,21 +241,25 @@ export function InfraHostsViewProvider({ getService }: FtrProviderContext) { }, async getRemoveFilterExist() { - return testSubjects.exists('hostsView-flyout-metadata-remove-filter'); + return testSubjects.exists('infraAssetDetailsMetadataRemoveFilterButton'); }, async getProcessesTabContentTitle(index: number) { - const processesListElements = await testSubjects.findAll('infraProcessesSummaryTableItem'); + const processesListElements = await testSubjects.findAll( + 'infraAssetDetailsProcessesSummaryTableItem' + ); return processesListElements[index].findByCssSelector('dt'); }, async getProcessesTabContentTotalValue() { - const processesListElements = await testSubjects.findAll('infraProcessesSummaryTableItem'); + const processesListElements = await testSubjects.findAll( + 'infraAssetDetailsProcessesSummaryTableItem' + ); return processesListElements[0].findByCssSelector('dd'); }, getProcessesTable() { - return testSubjects.find('infraProcessesTable'); + return testSubjects.find('infraAssetDetailsProcessesTable'); }, async getProcessesTableBody() { From 6463418c3546f5050c5de8ccf195b5f23a2c22e6 Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Thu, 10 Aug 2023 09:12:29 -0400 Subject: [PATCH 23/45] fix(slo): settings and access for serverless (#163514) --- .../component_templates/slo_settings_template.ts | 2 +- .../observability/server/routes/slo/route.ts | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/observability/server/assets/component_templates/slo_settings_template.ts b/x-pack/plugins/observability/server/assets/component_templates/slo_settings_template.ts index e2adb74dd1104e..9b0a6931e7c152 100644 --- a/x-pack/plugins/observability/server/assets/component_templates/slo_settings_template.ts +++ b/x-pack/plugins/observability/server/assets/component_templates/slo_settings_template.ts @@ -11,7 +11,7 @@ export const getSLOSettingsTemplate = (name: string) => ({ name, template: { settings: { - auto_expand_replicas: '0-all', + auto_expand_replicas: '0-1', hidden: true, }, }, diff --git a/x-pack/plugins/observability/server/routes/slo/route.ts b/x-pack/plugins/observability/server/routes/slo/route.ts index fdcdde0197a04b..14e5a26e7c7ffe 100644 --- a/x-pack/plugins/observability/server/routes/slo/route.ts +++ b/x-pack/plugins/observability/server/routes/slo/route.ts @@ -65,7 +65,7 @@ const isLicenseAtLeastPlatinum = async (context: ObservabilityRequestHandlerCont const createSLORoute = createObservabilityServerRoute({ endpoint: 'POST /api/observability/slos 2023-10-31', options: { - tags: ['access:public', 'access:slo_write'], + tags: ['access:slo_write'], }, params: createSLOParamsSchema, handler: async ({ context, params, logger }) => { @@ -90,7 +90,7 @@ const createSLORoute = createObservabilityServerRoute({ const updateSLORoute = createObservabilityServerRoute({ endpoint: 'PUT /api/observability/slos/{id} 2023-10-31', options: { - tags: ['access:public', 'access:slo_write'], + tags: ['access:slo_write'], }, params: updateSLOParamsSchema, handler: async ({ context, params, logger }) => { @@ -116,7 +116,7 @@ const updateSLORoute = createObservabilityServerRoute({ const deleteSLORoute = createObservabilityServerRoute({ endpoint: 'DELETE /api/observability/slos/{id} 2023-10-31', options: { - tags: ['access:public', 'access:slo_write'], + tags: ['access:slo_write'], }, params: deleteSLOParamsSchema, handler: async ({ @@ -148,7 +148,7 @@ const deleteSLORoute = createObservabilityServerRoute({ const getSLORoute = createObservabilityServerRoute({ endpoint: 'GET /api/observability/slos/{id} 2023-10-31', options: { - tags: ['access:public', 'access:slo_read'], + tags: ['access:slo_read'], }, params: getSLOParamsSchema, handler: async ({ context, params }) => { @@ -173,7 +173,7 @@ const getSLORoute = createObservabilityServerRoute({ const enableSLORoute = createObservabilityServerRoute({ endpoint: 'POST /api/observability/slos/{id}/enable 2023-10-31', options: { - tags: ['access:public', 'access:slo_write'], + tags: ['access:slo_write'], }, params: manageSLOParamsSchema, handler: async ({ context, params, logger }) => { @@ -199,7 +199,7 @@ const enableSLORoute = createObservabilityServerRoute({ const disableSLORoute = createObservabilityServerRoute({ endpoint: 'POST /api/observability/slos/{id}/disable 2023-10-31', options: { - tags: ['access:public', 'access:slo_write'], + tags: ['access:slo_write'], }, params: manageSLOParamsSchema, handler: async ({ context, params, logger }) => { @@ -225,7 +225,7 @@ const disableSLORoute = createObservabilityServerRoute({ const findSLORoute = createObservabilityServerRoute({ endpoint: 'GET /api/observability/slos 2023-10-31', options: { - tags: ['access:public', 'access:slo_read'], + tags: ['access:slo_read'], }, params: findSLOParamsSchema, handler: async ({ context, params, logger }) => { From 2d8f045c75b122bb5963b0a277184639f49872d6 Mon Sep 17 00:00:00 2001 From: Saarika Bhasi <55930906+saarikabhasi@users.noreply.github.com> Date: Thu, 10 Aug 2023 19:03:31 +0530 Subject: [PATCH 24/45] [Enterprise Search]Migrate all usages of EuiPage*_Deprecated (#163482) ## Summary This PR migrates all the usage of EuiPage*_Deprecated in Enterprise Search ### Checklist - [ ] 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/packages/kbn-i18n/README.md) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) --- .../components/analytics_section.tsx | 8 +-- .../components/credentials/credentials.tsx | 49 +++++++++---------- .../app_search/components/library/library.tsx | 12 ++--- .../shared/setup_guide/cloud/instructions.tsx | 12 ++--- .../shared/setup_guide/instructions.tsx | 6 +-- .../shared/setup_guide/setup_guide.tsx | 8 +-- .../personal_dashboard_layout.scss | 1 + .../personal_dashboard_layout.tsx | 28 +++++++---- .../translations/translations/fr-FR.json | 2 +- .../translations/translations/ja-JP.json | 2 +- .../translations/translations/zh-CN.json | 2 +- 11 files changed, 65 insertions(+), 65 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/analytics/components/analytics_section.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/analytics/components/analytics_section.tsx index 1bf181c44d708a..4be1cfb5ef9f35 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/analytics/components/analytics_section.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/analytics/components/analytics_section.tsx @@ -11,7 +11,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiIcon, - EuiPageContentBody_Deprecated as EuiPageContentBody, + EuiPageSection, EuiSpacer, EuiText, EuiTitle, @@ -19,9 +19,9 @@ import { } from '@elastic/eui'; interface Props { - title: string; - subtitle: string; iconType?: IconType; + subtitle: string; + title: string; } export const AnalyticsSection: React.FC = ({ title, subtitle, iconType, children }) => (
@@ -49,6 +49,6 @@ export const AnalyticsSection: React.FC = ({ title, subtitle, iconType, c - {children} + {children}
); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials.tsx index 1cf22f472fc4c5..9b85406225b76f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials.tsx @@ -16,8 +16,7 @@ import { EuiButtonIcon, EuiSpacer, EuiButton, - EuiPageContentHeader_Deprecated as EuiPageContentHeader, - EuiPageContentHeaderSection_Deprecated as EuiPageContentHeaderSection, + EuiPageHeader, EuiSkeletonText, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -85,31 +84,27 @@ export const Credentials: React.FC = () => { - - - -

- {i18n.translate('xpack.enterpriseSearch.appSearch.credentials.apiKeys', { - defaultMessage: 'API keys', - })} -

-
-
- - {!dataLoading && ( - showCredentialsForm()} - > - {i18n.translate('xpack.enterpriseSearch.appSearch.credentials.createKey', { - defaultMessage: 'Create key', - })} - - )} - -
+ + +

+ {i18n.translate('xpack.enterpriseSearch.appSearch.credentials.apiKeys', { + defaultMessage: 'API keys', + })} +

+
+ {!dataLoading && ( + showCredentialsForm()} + > + {i18n.translate('xpack.enterpriseSearch.appSearch.credentials.createKey', { + defaultMessage: 'Create key', + })} + + )} +
diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/library/library.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/library/library.tsx index b9d571cc315f6a..24ab03d5e93a73 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/library/library.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/library/library.tsx @@ -13,13 +13,13 @@ import { EuiSpacer, EuiPageHeader, EuiTitle, - EuiPageContentBody_Deprecated as EuiPageContentBody, - EuiPageContent_Deprecated as EuiPageContent, + EuiPageSection, EuiDragDropContext, EuiDroppable, EuiDraggable, EuiButtonIconProps, EuiEmptyPrompt, + EuiPageBody, } from '@elastic/eui'; import { SetAppSearchChrome as SetPageChrome } from '../../../shared/kibana_chrome'; @@ -167,8 +167,8 @@ export const Library: React.FC = () => { <> - - + +

Result

@@ -540,8 +540,8 @@ export const Library: React.FC = () => { -
-
+ + ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/setup_guide/cloud/instructions.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/setup_guide/cloud/instructions.tsx index 84c634cd8633d1..d19e264b30df2f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/setup_guide/cloud/instructions.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/setup_guide/cloud/instructions.tsx @@ -9,13 +9,7 @@ import React from 'react'; -import { - EuiPageContent_Deprecated as EuiPageContent, - EuiSteps, - EuiText, - EuiLink, - EuiCallOut, -} from '@elastic/eui'; +import { EuiPageSection, EuiSteps, EuiText, EuiLink, EuiCallOut } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -27,7 +21,7 @@ interface Props { } export const CloudSetupInstructions: React.FC = ({ productName, cloudDeploymentLink }) => ( - + = ({ productName, cloudDepl }, ]} /> - + ); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/setup_guide/instructions.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/setup_guide/instructions.tsx index dc21bfd608840b..6e0c75f1beb80e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/setup_guide/instructions.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/setup_guide/instructions.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { - EuiPageContent_Deprecated as EuiPageContent, + EuiPageSection, EuiText, EuiSteps, EuiCode, @@ -27,7 +27,7 @@ interface Props { } export const SetupInstructions: React.FC = ({ productName }) => ( - + = ({ productName }) => ( }, ]} /> - + ); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/setup_guide/setup_guide.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/setup_guide/setup_guide.tsx index 9b3a3e61f70ad7..7d277e3977ce24 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/setup_guide/setup_guide.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/setup_guide/setup_guide.tsx @@ -11,7 +11,7 @@ import { useValues } from 'kea'; import { EuiPage, - EuiPageSideBar_Deprecated as EuiPageSideBar, + EuiPageSidebar, EuiPageBody, EuiSpacer, EuiFlexGroup, @@ -35,8 +35,8 @@ import './setup_guide.scss'; interface Props { children: React.ReactNode; - productName: string; productEuiIcon: 'logoAppSearch' | 'logoWorkplaceSearch' | 'logoEnterpriseSearch'; + productName: string; } export const SetupGuideLayout: React.FC = ({ children, productName, productEuiIcon }) => { @@ -46,7 +46,7 @@ export const SetupGuideLayout: React.FC = ({ children, productName, produ return ( - + {SETUP_GUIDE_TITLE} @@ -64,7 +64,7 @@ export const SetupGuideLayout: React.FC = ({ children, productName, produ
{children} - + {isCloudEnabled ? ( diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/personal_dashboard_layout/personal_dashboard_layout.scss b/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/personal_dashboard_layout/personal_dashboard_layout.scss index 3287cb21783cbf..317c87c3516a27 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/personal_dashboard_layout/personal_dashboard_layout.scss +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/personal_dashboard_layout/personal_dashboard_layout.scss @@ -18,6 +18,7 @@ } &__body { + padding-top:0; position: relative; width: 100%; height: 100%; diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/personal_dashboard_layout/personal_dashboard_layout.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/personal_dashboard_layout/personal_dashboard_layout.tsx index 5ea3783fc206fc..1b87f8fdce4b23 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/personal_dashboard_layout/personal_dashboard_layout.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/personal_dashboard_layout/personal_dashboard_layout.tsx @@ -11,12 +11,12 @@ import { useRouteMatch } from 'react-router-dom'; import { useValues } from 'kea'; import { - EuiPage, - EuiPageSideBar_Deprecated as EuiPageSideBar, + EuiPageSidebar, EuiPageBody, - EuiPageContentBody_Deprecated as EuiPageContentBody, + EuiPageSection, EuiCallOut, EuiSpacer, + EuiPageTemplate, } from '@elastic/eui'; import { AccountHeader, AccountSettingsSidebar, PrivateSourcesSidebar } from '..'; @@ -47,13 +47,22 @@ export const PersonalDashboardLayout: React.FC = ({ <> {pageChrome && } - - + + {useRouteMatch(PRIVATE_SOURCES_PATH) && } {useRouteMatch(PERSONAL_SETTINGS_PATH) && } - + - + {readOnlyMode && ( <> = ({ )} + {isLoading ? : children} - + - + ); }; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index f70caee66aec92..11f7f76868a517 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -40464,4 +40464,4 @@ "xpack.painlessLab.walkthroughButtonLabel": "Présentation", "xpack.serverlessObservability.nav.getStarted": "Démarrer" } -} \ No newline at end of file +} diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index ca71e8c833cb56..db52ef8b1fae05 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -40455,4 +40455,4 @@ "xpack.painlessLab.walkthroughButtonLabel": "実地検証", "xpack.serverlessObservability.nav.getStarted": "使ってみる" } -} \ No newline at end of file +} diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index ef716366893830..b15afb493e31d0 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -40449,4 +40449,4 @@ "xpack.painlessLab.walkthroughButtonLabel": "指导", "xpack.serverlessObservability.nav.getStarted": "开始使用" } -} \ No newline at end of file +} From a5af1aaa2362b2a2e2565d25e22bd6615a4121d8 Mon Sep 17 00:00:00 2001 From: jennypavlova Date: Thu, 10 Aug 2023 15:34:08 +0200 Subject: [PATCH 25/45] [Infra UI] Implement Telemetry on 'Show' buttons within Inventory (#163587) ## Summary This PR adds telemetry for AWS buttons in the Inventory show menu. ## Testing 1. Go to inventory page 2. Open show drop down and check is all mentioned `data-test-subj` are present - data-test-subj="goToAWS-open" ![image](https://github.com/elastic/kibana/assets/14139027/d13439f0-712b-401b-869d-fb73f97e1f81) - data-test-subj="goToAWS-EC2" - data-test-subj="goToAWS-S3" - data-test-subj="goToAWS-RDS" - data-test-subj="goToAWS-SQS" ![image](https://github.com/elastic/kibana/assets/14139027/0fca9d28-7c41-47b4-a025-17cdb8b5fac0) Check in the Network tab the `kibana-browser` request after clicking on the button: image --- .../components/waffle/waffle_inventory_switcher.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_inventory_switcher.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_inventory_switcher.tsx index e3ca9b770e2efa..6806fbd31d79a1 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_inventory_switcher.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_inventory_switcher.tsx @@ -86,6 +86,7 @@ export const WaffleInventorySwitcher: React.FC = () => { { name: 'AWS', panel: 'awsPanel', + 'data-test-subj': 'goToAWS-open', }, ], }, @@ -96,18 +97,22 @@ export const WaffleInventorySwitcher: React.FC = () => { { name: getDisplayNameForType('awsEC2'), onClick: goToAwsEC2, + 'data-test-subj': 'goToAWS-EC2', }, { name: getDisplayNameForType('awsS3'), onClick: goToAwsS3, + 'data-test-subj': 'goToAWS-S3', }, { name: getDisplayNameForType('awsRDS'), onClick: goToAwsRDS, + 'data-test-subj': 'goToAWS-RDS', }, { name: getDisplayNameForType('awsSQS'), onClick: goToAwsSQS, + 'data-test-subj': 'goToAWS-SQS', }, ], }, From f4224848b4a55e74f4af5c4965793b1d202897bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20St=C3=BCrmer?= Date: Thu, 10 Aug 2023 15:39:58 +0200 Subject: [PATCH 26/45] [Logs UI] Adapt test to ES highlighting changes and unskip (#163592) --- .../api_integration/apis/metrics_ui/log_entry_highlights.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/x-pack/test/api_integration/apis/metrics_ui/log_entry_highlights.ts b/x-pack/test/api_integration/apis/metrics_ui/log_entry_highlights.ts index f1be3edf0f4ac7..1e565f63b0733d 100644 --- a/x-pack/test/api_integration/apis/metrics_ui/log_entry_highlights.ts +++ b/x-pack/test/api_integration/apis/metrics_ui/log_entry_highlights.ts @@ -45,8 +45,7 @@ export default function ({ getService }: FtrProviderContext) { after(() => esArchiver.unload('x-pack/test/functional/es_archives/infra/simple_logs')); describe('/log_entries/highlights', () => { - // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/163486 - describe.skip('with the default source', () => { + describe('with the default source', () => { before(() => kibanaServer.savedObjects.cleanStandardList()); after(() => kibanaServer.savedObjects.cleanStandardList()); @@ -120,7 +119,7 @@ export default function ({ getService }: FtrProviderContext) { entries.forEach((entry) => { entry.columns.forEach((column) => { if ('message' in column && 'highlights' in column.message[0]) { - expect(column.message[0].highlights).to.eql(['message', 'of', 'document', '0']); + expect(column.message[0].highlights).to.eql(['message of document 0']); } }); }); From 582d97ddb20e594de5300524e6c3b7851ed81f9a Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Thu, 10 Aug 2023 10:23:11 -0400 Subject: [PATCH 27/45] [Response Ops][Task Manager] Expose SLI metrics in HTTP API (#162178) Towards https://github.com/elastic/kibana/issues/160334 ## Summary Exposes a new HTTP API at `/api/task_manager/metrics` that collects SLI metrics for task manager. The following metrics are exposed: - count of task claim successes & count of task claim tries - this is a counter metric that keeps track over overall task claim success, not task claim success of individual background task workers - count of task run success & count of task runs - this is a counter metric that keeps track of overall task run successes, as well as successes grouped by task type. Alerting and action task types are rolled up into an `alerting` and an `actions` group to allow us to calculate SLIs across all alerting rules and all actions - task claim duration in milliseconds - this is a histogram counter metric that is bucketed into 100 ms buckets These counter metrics are incremented until a reset event is received, in which case the counter is reset back to 0. This allows the collection mechanism (in this case Elastic Agent) to determine the interval at which these metrics are collected as well as to collect the rate of change for these SLI metrics without having to perform complicated Elasticsearch aggregation math. In addition, the counters are reset every 30 seconds (this is configurable) to avoid providing the metrics collector with stale data in case of a collector outage. Flaky test runner: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/2813 --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../task_manager/server/config.test.ts | 3 + x-pack/plugins/task_manager/server/config.ts | 107 +- .../server/ephemeral_task_lifecycle.test.ts | 1 + .../managed_configuration.test.ts | 1 + .../runtime_statistics_aggregator.ts | 0 .../server/metrics/create_aggregator.test.ts | 1070 +++++++++++++++++ .../server/metrics/create_aggregator.ts | 57 + .../task_manager/server/metrics/index.ts | 26 + .../server/metrics/metrics_aggregator.mock.ts | 21 + .../server/metrics/metrics_stream.test.ts | 89 ++ .../server/metrics/metrics_stream.ts | 89 ++ .../metrics/success_rate_counter.test.ts | 49 + .../server/metrics/success_rate_counter.ts | 44 + .../task_claim_metrics_aggregator.test.ts | 102 ++ .../metrics/task_claim_metrics_aggregator.ts | 71 ++ .../task_run_metrics_aggregator.test.ts | 208 ++++ .../metrics/task_run_metrics_aggregator.ts | 85 ++ .../task_manager/server/metrics/types.ts | 15 + ...ground_task_utilization_statistics.test.ts | 2 +- .../background_task_utilization_statistics.ts | 2 +- .../configuration_statistics.test.ts | 1 + .../monitoring/configuration_statistics.ts | 2 +- .../ephemeral_task_statistics.test.ts | 2 +- .../monitoring/ephemeral_task_statistics.ts | 2 +- .../monitoring_stats_stream.test.ts | 4 +- .../monitoring/monitoring_stats_stream.ts | 4 +- .../monitoring/task_run_statistics.test.ts | 2 +- .../server/monitoring/task_run_statistics.ts | 2 +- .../server/monitoring/workload_statistics.ts | 2 +- .../task_manager/server/plugin.test.ts | 1 + x-pack/plugins/task_manager/server/plugin.ts | 15 +- .../server/polling_lifecycle.test.ts | 1 + .../task_manager/server/routes/index.ts | 1 + .../server/routes/metrics.test.ts | 82 ++ .../task_manager/server/routes/metrics.ts | 71 ++ .../server/task_running/task_runner.test.ts | 39 + .../server/task_running/task_runner.ts | 54 +- .../test_suites/task_manager/index.ts | 1 + .../test_suites/task_manager/metrics_route.ts | 227 ++++ 39 files changed, 2469 insertions(+), 86 deletions(-) rename x-pack/plugins/task_manager/server/{monitoring => lib}/runtime_statistics_aggregator.ts (100%) create mode 100644 x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts create mode 100644 x-pack/plugins/task_manager/server/metrics/create_aggregator.ts create mode 100644 x-pack/plugins/task_manager/server/metrics/index.ts create mode 100644 x-pack/plugins/task_manager/server/metrics/metrics_aggregator.mock.ts create mode 100644 x-pack/plugins/task_manager/server/metrics/metrics_stream.test.ts create mode 100644 x-pack/plugins/task_manager/server/metrics/metrics_stream.ts create mode 100644 x-pack/plugins/task_manager/server/metrics/success_rate_counter.test.ts create mode 100644 x-pack/plugins/task_manager/server/metrics/success_rate_counter.ts create mode 100644 x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.test.ts create mode 100644 x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts create mode 100644 x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts create mode 100644 x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts create mode 100644 x-pack/plugins/task_manager/server/metrics/types.ts create mode 100644 x-pack/plugins/task_manager/server/routes/metrics.test.ts create mode 100644 x-pack/plugins/task_manager/server/routes/metrics.ts create mode 100644 x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts diff --git a/x-pack/plugins/task_manager/server/config.test.ts b/x-pack/plugins/task_manager/server/config.test.ts index 9782d6ae08dbfb..c196a334931ba0 100644 --- a/x-pack/plugins/task_manager/server/config.test.ts +++ b/x-pack/plugins/task_manager/server/config.test.ts @@ -23,6 +23,7 @@ describe('config validation', () => { }, "max_attempts": 3, "max_workers": 10, + "metrics_reset_interval": 30000, "monitored_aggregated_stats_refresh_rate": 60000, "monitored_stats_health_verbose_log": Object { "enabled": false, @@ -81,6 +82,7 @@ describe('config validation', () => { }, "max_attempts": 3, "max_workers": 10, + "metrics_reset_interval": 30000, "monitored_aggregated_stats_refresh_rate": 60000, "monitored_stats_health_verbose_log": Object { "enabled": false, @@ -137,6 +139,7 @@ describe('config validation', () => { }, "max_attempts": 3, "max_workers": 10, + "metrics_reset_interval": 30000, "monitored_aggregated_stats_refresh_rate": 60000, "monitored_stats_health_verbose_log": Object { "enabled": false, diff --git a/x-pack/plugins/task_manager/server/config.ts b/x-pack/plugins/task_manager/server/config.ts index c2d4940d36450c..490d25a7bdfb0e 100644 --- a/x-pack/plugins/task_manager/server/config.ts +++ b/x-pack/plugins/task_manager/server/config.ts @@ -20,6 +20,8 @@ export const DEFAULT_MONITORING_REFRESH_RATE = 60 * 1000; export const DEFAULT_MONITORING_STATS_RUNNING_AVERAGE_WINDOW = 50; export const DEFAULT_MONITORING_STATS_WARN_DELAYED_TASK_START_IN_SECONDS = 60; +export const DEFAULT_METRICS_RESET_INTERVAL = 30 * 1000; // 30 seconds + // At the default poll interval of 3sec, this averages over the last 15sec. export const DEFAULT_WORKER_UTILIZATION_RUNNING_AVERAGE_WINDOW = 5; @@ -52,46 +54,40 @@ const eventLoopDelaySchema = schema.object({ }); const requeueInvalidTasksConfig = schema.object({ - enabled: schema.boolean({ defaultValue: false }), delay: schema.number({ defaultValue: 3000, min: 0 }), + enabled: schema.boolean({ defaultValue: false }), max_attempts: schema.number({ defaultValue: 100, min: 1, max: 500 }), }); export const configSchema = schema.object( { + allow_reading_invalid_state: schema.boolean({ defaultValue: true }), + ephemeral_tasks: schema.object({ + enabled: schema.boolean({ defaultValue: false }), + /* How many requests can Task Manager buffer before it rejects new requests. */ + request_capacity: schema.number({ + // a nice round contrived number, feel free to change as we learn how it behaves + defaultValue: 10, + min: 1, + max: DEFAULT_MAX_EPHEMERAL_REQUEST_CAPACITY, + }), + }), + event_loop_delay: eventLoopDelaySchema, /* The maximum number of times a task will be attempted before being abandoned as failed */ max_attempts: schema.number({ defaultValue: 3, min: 1, }), - /* How often, in milliseconds, the task manager will look for more work. */ - poll_interval: schema.number({ - defaultValue: DEFAULT_POLL_INTERVAL, - min: 100, - }), - /* How many requests can Task Manager buffer before it rejects new requests. */ - request_capacity: schema.number({ - // a nice round contrived number, feel free to change as we learn how it behaves - defaultValue: 1000, - min: 1, - }), /* The maximum number of tasks that this Kibana instance will run simultaneously. */ max_workers: schema.number({ defaultValue: DEFAULT_MAX_WORKERS, // disable the task manager rather than trying to specify it with 0 workers min: 1, }), - /* The threshold percenatge for workers experiencing version conflicts for shifting the polling interval. */ - version_conflict_threshold: schema.number({ - defaultValue: DEFAULT_VERSION_CONFLICT_THRESHOLD, - min: 50, - max: 100, - }), - /* The rate at which we emit fresh monitored stats. By default we'll use the poll_interval (+ a slight buffer) */ - monitored_stats_required_freshness: schema.number({ - defaultValue: (config?: unknown) => - ((config as { poll_interval: number })?.poll_interval ?? DEFAULT_POLL_INTERVAL) + 1000, - min: 100, + /* The interval at which monotonically increasing metrics counters will reset */ + metrics_reset_interval: schema.number({ + defaultValue: DEFAULT_METRICS_RESET_INTERVAL, + min: 10 * 1000, // minimum 10 seconds }), /* The rate at which we refresh monitored stats that require aggregation queries against ES. */ monitored_aggregated_stats_refresh_rate: schema.number({ @@ -99,6 +95,22 @@ export const configSchema = schema.object( /* don't run monitored stat aggregations any faster than once every 5 seconds */ min: 5000, }), + monitored_stats_health_verbose_log: schema.object({ + enabled: schema.boolean({ defaultValue: false }), + level: schema.oneOf([schema.literal('debug'), schema.literal('info')], { + defaultValue: 'debug', + }), + /* The amount of seconds we allow a task to delay before printing a warning server log */ + warn_delayed_task_start_in_seconds: schema.number({ + defaultValue: DEFAULT_MONITORING_STATS_WARN_DELAYED_TASK_START_IN_SECONDS, + }), + }), + /* The rate at which we emit fresh monitored stats. By default we'll use the poll_interval (+ a slight buffer) */ + monitored_stats_required_freshness: schema.number({ + defaultValue: (config?: unknown) => + ((config as { poll_interval: number })?.poll_interval ?? DEFAULT_POLL_INTERVAL) + 1000, + min: 100, + }), /* The size of the running average window for monitored stats. */ monitored_stats_running_average_window: schema.number({ defaultValue: DEFAULT_MONITORING_STATS_RUNNING_AVERAGE_WINDOW, @@ -107,44 +119,39 @@ export const configSchema = schema.object( }), /* Task Execution result warn & error thresholds. */ monitored_task_execution_thresholds: schema.object({ - default: taskExecutionFailureThresholdSchema, custom: schema.recordOf(schema.string(), taskExecutionFailureThresholdSchema, { defaultValue: {}, }), + default: taskExecutionFailureThresholdSchema, }), - monitored_stats_health_verbose_log: schema.object({ - enabled: schema.boolean({ defaultValue: false }), - level: schema.oneOf([schema.literal('debug'), schema.literal('info')], { - defaultValue: 'debug', - }), - /* The amount of seconds we allow a task to delay before printing a warning server log */ - warn_delayed_task_start_in_seconds: schema.number({ - defaultValue: DEFAULT_MONITORING_STATS_WARN_DELAYED_TASK_START_IN_SECONDS, - }), - }), - ephemeral_tasks: schema.object({ - enabled: schema.boolean({ defaultValue: false }), - /* How many requests can Task Manager buffer before it rejects new requests. */ - request_capacity: schema.number({ - // a nice round contrived number, feel free to change as we learn how it behaves - defaultValue: 10, - min: 1, - max: DEFAULT_MAX_EPHEMERAL_REQUEST_CAPACITY, - }), + /* How often, in milliseconds, the task manager will look for more work. */ + poll_interval: schema.number({ + defaultValue: DEFAULT_POLL_INTERVAL, + min: 100, }), - event_loop_delay: eventLoopDelaySchema, - worker_utilization_running_average_window: schema.number({ - defaultValue: DEFAULT_WORKER_UTILIZATION_RUNNING_AVERAGE_WINDOW, - max: 100, + /* How many requests can Task Manager buffer before it rejects new requests. */ + request_capacity: schema.number({ + // a nice round contrived number, feel free to change as we learn how it behaves + defaultValue: 1000, min: 1, }), + requeue_invalid_tasks: requeueInvalidTasksConfig, /* These are not designed to be used by most users. Please use caution when changing these */ unsafe: schema.object({ - exclude_task_types: schema.arrayOf(schema.string(), { defaultValue: [] }), authenticate_background_task_utilization: schema.boolean({ defaultValue: true }), + exclude_task_types: schema.arrayOf(schema.string(), { defaultValue: [] }), + }), + /* The threshold percenatge for workers experiencing version conflicts for shifting the polling interval. */ + version_conflict_threshold: schema.number({ + defaultValue: DEFAULT_VERSION_CONFLICT_THRESHOLD, + min: 50, + max: 100, + }), + worker_utilization_running_average_window: schema.number({ + defaultValue: DEFAULT_WORKER_UTILIZATION_RUNNING_AVERAGE_WINDOW, + max: 100, + min: 1, }), - requeue_invalid_tasks: requeueInvalidTasksConfig, - allow_reading_invalid_state: schema.boolean({ defaultValue: true }), }, { validate: (config) => { diff --git a/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts b/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts index 863b5d986d3da2..6a06ea93f3dcb4 100644 --- a/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts +++ b/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts @@ -84,6 +84,7 @@ describe('EphemeralTaskLifecycle', () => { delay: 3000, max_attempts: 20, }, + metrics_reset_interval: 3000, ...config, }, elasticsearchAndSOAvailability$, diff --git a/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts b/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts index e2d290d256ec25..f034feb1544625 100644 --- a/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts +++ b/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts @@ -79,6 +79,7 @@ describe('managed configuration', () => { delay: 3000, max_attempts: 20, }, + metrics_reset_interval: 3000, }); logger = context.logger.get('taskManager'); diff --git a/x-pack/plugins/task_manager/server/monitoring/runtime_statistics_aggregator.ts b/x-pack/plugins/task_manager/server/lib/runtime_statistics_aggregator.ts similarity index 100% rename from x-pack/plugins/task_manager/server/monitoring/runtime_statistics_aggregator.ts rename to x-pack/plugins/task_manager/server/lib/runtime_statistics_aggregator.ts diff --git a/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts new file mode 100644 index 00000000000000..96716983294473 --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts @@ -0,0 +1,1070 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import sinon from 'sinon'; +import { Subject, Observable } from 'rxjs'; +import { take, bufferCount, skip } from 'rxjs/operators'; +import { isTaskPollingCycleEvent, isTaskRunEvent } from '../task_events'; +import { TaskLifecycleEvent } from '../polling_lifecycle'; +import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; +import { taskPollingLifecycleMock } from '../polling_lifecycle.mock'; +import { TaskManagerConfig } from '../config'; +import { createAggregator } from './create_aggregator'; +import { TaskClaimMetric, TaskClaimMetricsAggregator } from './task_claim_metrics_aggregator'; +import { taskClaimFailureEvent, taskClaimSuccessEvent } from './task_claim_metrics_aggregator.test'; +import { getTaskRunFailedEvent, getTaskRunSuccessEvent } from './task_run_metrics_aggregator.test'; +import { TaskRunMetric, TaskRunMetricsAggregator } from './task_run_metrics_aggregator'; +import * as TaskClaimMetricsAggregatorModule from './task_claim_metrics_aggregator'; +import { metricsAggregatorMock } from './metrics_aggregator.mock'; + +const mockMetricsAggregator = metricsAggregatorMock.create(); +const config: TaskManagerConfig = { + allow_reading_invalid_state: false, + ephemeral_tasks: { + enabled: true, + request_capacity: 10, + }, + event_loop_delay: { + monitor: true, + warn_threshold: 5000, + }, + max_attempts: 9, + max_workers: 10, + metrics_reset_interval: 30000, + monitored_aggregated_stats_refresh_rate: 5000, + monitored_stats_health_verbose_log: { + enabled: false, + level: 'debug' as const, + warn_delayed_task_start_in_seconds: 60, + }, + monitored_stats_required_freshness: 6000000, + monitored_stats_running_average_window: 50, + monitored_task_execution_thresholds: { + custom: {}, + default: { + error_threshold: 90, + warn_threshold: 80, + }, + }, + poll_interval: 6000000, + request_capacity: 1000, + requeue_invalid_tasks: { + enabled: false, + delay: 3000, + max_attempts: 20, + }, + unsafe: { + authenticate_background_task_utilization: true, + exclude_task_types: [], + }, + version_conflict_threshold: 80, + worker_utilization_running_average_window: 5, +}; + +describe('createAggregator', () => { + beforeEach(() => { + jest.resetAllMocks(); + }); + + describe('with TaskClaimMetricsAggregator', () => { + test('returns a cumulative count of successful polling cycles and total polling cycles', async () => { + const pollingCycleEvents = [ + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimFailureEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimFailureEvent, + taskClaimSuccessEvent, + ]; + const events$ = new Subject(); + const taskPollingLifecycle = taskPollingLifecycleMock.create({ + events$: events$ as Observable, + }); + + const taskClaimAggregator = createAggregator({ + key: 'task_claim', + taskPollingLifecycle, + config, + resetMetrics$: new Subject(), + taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskPollingCycleEvent(taskEvent), + metricsAggregator: new TaskClaimMetricsAggregator(), + }); + + return new Promise((resolve) => { + taskClaimAggregator + .pipe( + // skip initial metric which is just initialized data which + // ensures we don't stall on combineLatest + skip(1), + take(pollingCycleEvents.length), + bufferCount(pollingCycleEvents.length) + ) + .subscribe((metrics: Array>) => { + expect(metrics[0]).toEqual({ + key: 'task_claim', + value: { success: 1, total: 1, duration: { counts: [1], values: [100] } }, + }); + expect(metrics[1]).toEqual({ + key: 'task_claim', + value: { success: 2, total: 2, duration: { counts: [2], values: [100] } }, + }); + expect(metrics[2]).toEqual({ + key: 'task_claim', + value: { success: 3, total: 3, duration: { counts: [3], values: [100] } }, + }); + expect(metrics[3]).toEqual({ + key: 'task_claim', + value: { success: 4, total: 4, duration: { counts: [4], values: [100] } }, + }); + expect(metrics[4]).toEqual({ + key: 'task_claim', + value: { success: 4, total: 5, duration: { counts: [4], values: [100] } }, + }); + expect(metrics[5]).toEqual({ + key: 'task_claim', + value: { success: 5, total: 6, duration: { counts: [5], values: [100] } }, + }); + expect(metrics[6]).toEqual({ + key: 'task_claim', + value: { success: 6, total: 7, duration: { counts: [6], values: [100] } }, + }); + expect(metrics[7]).toEqual({ + key: 'task_claim', + value: { success: 7, total: 8, duration: { counts: [7], values: [100] } }, + }); + expect(metrics[8]).toEqual({ + key: 'task_claim', + value: { success: 8, total: 9, duration: { counts: [8], values: [100] } }, + }); + expect(metrics[9]).toEqual({ + key: 'task_claim', + value: { success: 8, total: 10, duration: { counts: [8], values: [100] } }, + }); + expect(metrics[10]).toEqual({ + key: 'task_claim', + value: { success: 9, total: 11, duration: { counts: [9], values: [100] } }, + }); + resolve(); + }); + + for (const event of pollingCycleEvents) { + events$.next(event); + } + }); + }); + + test('resets count when resetMetric$ event is received', async () => { + const resetMetrics$ = new Subject(); + const pollingCycleEvents1 = [ + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimFailureEvent, + taskClaimSuccessEvent, + ]; + + const pollingCycleEvents2 = [ + taskClaimSuccessEvent, + taskClaimFailureEvent, + taskClaimFailureEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + ]; + const events$ = new Subject(); + const taskPollingLifecycle = taskPollingLifecycleMock.create({ + events$: events$ as Observable, + }); + + const taskClaimAggregator = createAggregator({ + key: 'task_claim', + taskPollingLifecycle, + config, + resetMetrics$, + taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskPollingCycleEvent(taskEvent), + metricsAggregator: new TaskClaimMetricsAggregator(), + }); + + return new Promise((resolve) => { + taskClaimAggregator + .pipe( + // skip initial metric which is just initialized data which + // ensures we don't stall on combineLatest + skip(1), + take(pollingCycleEvents1.length + pollingCycleEvents2.length), + bufferCount(pollingCycleEvents1.length + pollingCycleEvents2.length) + ) + .subscribe((metrics: Array>) => { + expect(metrics[0]).toEqual({ + key: 'task_claim', + value: { success: 1, total: 1, duration: { counts: [1], values: [100] } }, + }); + expect(metrics[1]).toEqual({ + key: 'task_claim', + value: { success: 2, total: 2, duration: { counts: [2], values: [100] } }, + }); + expect(metrics[2]).toEqual({ + key: 'task_claim', + value: { success: 3, total: 3, duration: { counts: [3], values: [100] } }, + }); + expect(metrics[3]).toEqual({ + key: 'task_claim', + value: { success: 4, total: 4, duration: { counts: [4], values: [100] } }, + }); + expect(metrics[4]).toEqual({ + key: 'task_claim', + value: { success: 4, total: 5, duration: { counts: [4], values: [100] } }, + }); + expect(metrics[5]).toEqual({ + key: 'task_claim', + value: { success: 5, total: 6, duration: { counts: [5], values: [100] } }, + }); + // reset event should have been received here + expect(metrics[6]).toEqual({ + key: 'task_claim', + value: { success: 1, total: 1, duration: { counts: [1], values: [100] } }, + }); + expect(metrics[7]).toEqual({ + key: 'task_claim', + value: { success: 1, total: 2, duration: { counts: [1], values: [100] } }, + }); + expect(metrics[8]).toEqual({ + key: 'task_claim', + value: { success: 1, total: 3, duration: { counts: [1], values: [100] } }, + }); + expect(metrics[9]).toEqual({ + key: 'task_claim', + value: { success: 2, total: 4, duration: { counts: [2], values: [100] } }, + }); + expect(metrics[10]).toEqual({ + key: 'task_claim', + value: { success: 3, total: 5, duration: { counts: [3], values: [100] } }, + }); + resolve(); + }); + + for (const event of pollingCycleEvents1) { + events$.next(event); + } + resetMetrics$.next(true); + for (const event of pollingCycleEvents2) { + events$.next(event); + } + }); + }); + + test('resets count when configured metrics reset interval expires', async () => { + const clock = sinon.useFakeTimers(); + clock.tick(0); + const pollingCycleEvents1 = [ + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimFailureEvent, + taskClaimSuccessEvent, + ]; + + const pollingCycleEvents2 = [ + taskClaimSuccessEvent, + taskClaimFailureEvent, + taskClaimFailureEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + ]; + const events$ = new Subject(); + const taskPollingLifecycle = taskPollingLifecycleMock.create({ + events$: events$ as Observable, + }); + + const taskClaimAggregator = createAggregator({ + key: 'task_claim', + taskPollingLifecycle, + config: { + ...config, + metrics_reset_interval: 10, + }, + resetMetrics$: new Subject(), + taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskPollingCycleEvent(taskEvent), + metricsAggregator: new TaskClaimMetricsAggregator(), + }); + + return new Promise((resolve) => { + taskClaimAggregator + .pipe( + // skip initial metric which is just initialized data which + // ensures we don't stall on combineLatest + skip(1), + take(pollingCycleEvents1.length + pollingCycleEvents2.length), + bufferCount(pollingCycleEvents1.length + pollingCycleEvents2.length) + ) + .subscribe((metrics: Array>) => { + expect(metrics[0]).toEqual({ + key: 'task_claim', + value: { success: 1, total: 1, duration: { counts: [1], values: [100] } }, + }); + expect(metrics[1]).toEqual({ + key: 'task_claim', + value: { success: 2, total: 2, duration: { counts: [2], values: [100] } }, + }); + expect(metrics[2]).toEqual({ + key: 'task_claim', + value: { success: 3, total: 3, duration: { counts: [3], values: [100] } }, + }); + expect(metrics[3]).toEqual({ + key: 'task_claim', + value: { success: 4, total: 4, duration: { counts: [4], values: [100] } }, + }); + expect(metrics[4]).toEqual({ + key: 'task_claim', + value: { success: 4, total: 5, duration: { counts: [4], values: [100] } }, + }); + expect(metrics[5]).toEqual({ + key: 'task_claim', + value: { success: 5, total: 6, duration: { counts: [5], values: [100] } }, + }); + // reset interval should have fired here + expect(metrics[6]).toEqual({ + key: 'task_claim', + value: { success: 1, total: 1, duration: { counts: [1], values: [100] } }, + }); + expect(metrics[7]).toEqual({ + key: 'task_claim', + value: { success: 1, total: 2, duration: { counts: [1], values: [100] } }, + }); + expect(metrics[8]).toEqual({ + key: 'task_claim', + value: { success: 1, total: 3, duration: { counts: [1], values: [100] } }, + }); + expect(metrics[9]).toEqual({ + key: 'task_claim', + value: { success: 2, total: 4, duration: { counts: [2], values: [100] } }, + }); + expect(metrics[10]).toEqual({ + key: 'task_claim', + value: { success: 3, total: 5, duration: { counts: [3], values: [100] } }, + }); + resolve(); + }); + + for (const event of pollingCycleEvents1) { + events$.next(event); + } + clock.tick(20); + for (const event of pollingCycleEvents2) { + events$.next(event); + } + + clock.restore(); + }); + }); + }); + + describe('with TaskRunMetricsAggregator', () => { + test('returns a cumulative count of successful task runs and total task runs, broken down by type', async () => { + const taskRunEvents = [ + getTaskRunSuccessEvent('alerting:example'), + getTaskRunSuccessEvent('telemetry'), + getTaskRunSuccessEvent('alerting:example'), + getTaskRunSuccessEvent('report'), + getTaskRunFailedEvent('alerting:example'), + getTaskRunSuccessEvent('alerting:.index-threshold'), + getTaskRunSuccessEvent('alerting:example'), + getTaskRunFailedEvent('alerting:example'), + getTaskRunSuccessEvent('alerting:example'), + getTaskRunFailedEvent('actions:webhook'), + ]; + const events$ = new Subject(); + const taskPollingLifecycle = taskPollingLifecycleMock.create({ + events$: events$ as Observable, + }); + + const taskRunAggregator = createAggregator({ + key: 'task_run', + taskPollingLifecycle, + config, + resetMetrics$: new Subject(), + taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent), + metricsAggregator: new TaskRunMetricsAggregator(), + }); + + return new Promise((resolve) => { + taskRunAggregator + .pipe( + // skip initial metric which is just initialized data which + // ensures we don't stall on combineLatest + skip(1), + take(taskRunEvents.length), + bufferCount(taskRunEvents.length) + ) + .subscribe((metrics: Array>) => { + expect(metrics[0]).toEqual({ + key: 'task_run', + value: { + overall: { success: 1, total: 1 }, + by_type: { + alerting: { success: 1, total: 1 }, + 'alerting:example': { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[1]).toEqual({ + key: 'task_run', + value: { + overall: { success: 2, total: 2 }, + by_type: { + alerting: { success: 1, total: 1 }, + 'alerting:example': { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[2]).toEqual({ + key: 'task_run', + value: { + overall: { success: 3, total: 3 }, + by_type: { + alerting: { success: 2, total: 2 }, + 'alerting:example': { success: 2, total: 2 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[3]).toEqual({ + key: 'task_run', + value: { + overall: { success: 4, total: 4 }, + by_type: { + alerting: { success: 2, total: 2 }, + 'alerting:example': { success: 2, total: 2 }, + report: { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[4]).toEqual({ + key: 'task_run', + value: { + overall: { success: 4, total: 5 }, + by_type: { + alerting: { success: 2, total: 3 }, + 'alerting:example': { success: 2, total: 3 }, + report: { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[5]).toEqual({ + key: 'task_run', + value: { + overall: { success: 5, total: 6 }, + by_type: { + alerting: { success: 3, total: 4 }, + 'alerting:.index-threshold': { success: 1, total: 1 }, + 'alerting:example': { success: 2, total: 3 }, + report: { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[6]).toEqual({ + key: 'task_run', + value: { + overall: { success: 6, total: 7 }, + by_type: { + alerting: { success: 4, total: 5 }, + 'alerting:.index-threshold': { success: 1, total: 1 }, + 'alerting:example': { success: 3, total: 4 }, + report: { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[7]).toEqual({ + key: 'task_run', + value: { + overall: { success: 6, total: 8 }, + by_type: { + alerting: { success: 4, total: 6 }, + 'alerting:.index-threshold': { success: 1, total: 1 }, + 'alerting:example': { success: 3, total: 5 }, + report: { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[8]).toEqual({ + key: 'task_run', + value: { + overall: { success: 7, total: 9 }, + by_type: { + alerting: { success: 5, total: 7 }, + 'alerting:.index-threshold': { success: 1, total: 1 }, + 'alerting:example': { success: 4, total: 6 }, + report: { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[9]).toEqual({ + key: 'task_run', + value: { + overall: { success: 7, total: 10 }, + by_type: { + actions: { success: 0, total: 1 }, + alerting: { success: 5, total: 7 }, + 'actions:webhook': { success: 0, total: 1 }, + 'alerting:.index-threshold': { success: 1, total: 1 }, + 'alerting:example': { success: 4, total: 6 }, + report: { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + resolve(); + }); + + for (const event of taskRunEvents) { + events$.next(event); + } + }); + }); + + test('resets count when resetMetric$ event is received', async () => { + const resetMetrics$ = new Subject(); + const taskRunEvents1 = [ + getTaskRunSuccessEvent('alerting:example'), + getTaskRunSuccessEvent('telemetry'), + getTaskRunSuccessEvent('alerting:example'), + getTaskRunSuccessEvent('report'), + getTaskRunFailedEvent('alerting:example'), + ]; + + const taskRunEvents2 = [ + getTaskRunSuccessEvent('alerting:example'), + getTaskRunSuccessEvent('alerting:example'), + getTaskRunFailedEvent('alerting:example'), + getTaskRunSuccessEvent('alerting:example'), + getTaskRunFailedEvent('actions:webhook'), + ]; + const events$ = new Subject(); + const taskPollingLifecycle = taskPollingLifecycleMock.create({ + events$: events$ as Observable, + }); + + const taskRunAggregator = createAggregator({ + key: 'task_run', + taskPollingLifecycle, + config, + resetMetrics$, + taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent), + metricsAggregator: new TaskRunMetricsAggregator(), + }); + + return new Promise((resolve) => { + taskRunAggregator + .pipe( + // skip initial metric which is just initialized data which + // ensures we don't stall on combineLatest + skip(1), + take(taskRunEvents1.length + taskRunEvents2.length), + bufferCount(taskRunEvents1.length + taskRunEvents2.length) + ) + .subscribe((metrics: Array>) => { + expect(metrics[0]).toEqual({ + key: 'task_run', + value: { + overall: { success: 1, total: 1 }, + by_type: { + alerting: { success: 1, total: 1 }, + 'alerting:example': { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[1]).toEqual({ + key: 'task_run', + value: { + overall: { success: 2, total: 2 }, + by_type: { + alerting: { success: 1, total: 1 }, + 'alerting:example': { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[2]).toEqual({ + key: 'task_run', + value: { + overall: { success: 3, total: 3 }, + by_type: { + alerting: { success: 2, total: 2 }, + 'alerting:example': { success: 2, total: 2 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[3]).toEqual({ + key: 'task_run', + value: { + overall: { success: 4, total: 4 }, + by_type: { + alerting: { success: 2, total: 2 }, + 'alerting:example': { success: 2, total: 2 }, + report: { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[4]).toEqual({ + key: 'task_run', + value: { + overall: { success: 4, total: 5 }, + by_type: { + alerting: { success: 2, total: 3 }, + 'alerting:example': { success: 2, total: 3 }, + report: { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + // reset event should have been received here + expect(metrics[5]).toEqual({ + key: 'task_run', + value: { + overall: { success: 1, total: 1 }, + by_type: { + alerting: { success: 1, total: 1 }, + 'alerting:example': { success: 1, total: 1 }, + report: { success: 0, total: 0 }, + telemetry: { success: 0, total: 0 }, + }, + }, + }); + expect(metrics[6]).toEqual({ + key: 'task_run', + value: { + overall: { success: 2, total: 2 }, + by_type: { + alerting: { success: 2, total: 2 }, + 'alerting:example': { success: 2, total: 2 }, + report: { success: 0, total: 0 }, + telemetry: { success: 0, total: 0 }, + }, + }, + }); + expect(metrics[7]).toEqual({ + key: 'task_run', + value: { + overall: { success: 2, total: 3 }, + by_type: { + alerting: { success: 2, total: 3 }, + 'alerting:example': { success: 2, total: 3 }, + report: { success: 0, total: 0 }, + telemetry: { success: 0, total: 0 }, + }, + }, + }); + expect(metrics[8]).toEqual({ + key: 'task_run', + value: { + overall: { success: 3, total: 4 }, + by_type: { + alerting: { success: 3, total: 4 }, + 'alerting:example': { success: 3, total: 4 }, + report: { success: 0, total: 0 }, + telemetry: { success: 0, total: 0 }, + }, + }, + }); + expect(metrics[9]).toEqual({ + key: 'task_run', + value: { + overall: { success: 3, total: 5 }, + by_type: { + actions: { success: 0, total: 1 }, + alerting: { success: 3, total: 4 }, + 'actions:webhook': { success: 0, total: 1 }, + 'alerting:example': { success: 3, total: 4 }, + report: { success: 0, total: 0 }, + telemetry: { success: 0, total: 0 }, + }, + }, + }); + resolve(); + }); + + for (const event of taskRunEvents1) { + events$.next(event); + } + resetMetrics$.next(true); + for (const event of taskRunEvents2) { + events$.next(event); + } + }); + }); + + test('resets count when configured metrics reset interval expires', async () => { + const clock = sinon.useFakeTimers(); + clock.tick(0); + const taskRunEvents1 = [ + getTaskRunSuccessEvent('alerting:example'), + getTaskRunSuccessEvent('telemetry'), + getTaskRunSuccessEvent('alerting:example'), + getTaskRunSuccessEvent('report'), + getTaskRunFailedEvent('alerting:example'), + ]; + + const taskRunEvents2 = [ + getTaskRunSuccessEvent('alerting:example'), + getTaskRunSuccessEvent('alerting:example'), + getTaskRunFailedEvent('alerting:example'), + getTaskRunSuccessEvent('alerting:example'), + getTaskRunFailedEvent('actions:webhook'), + ]; + const events$ = new Subject(); + const taskPollingLifecycle = taskPollingLifecycleMock.create({ + events$: events$ as Observable, + }); + + const taskRunAggregator = createAggregator({ + key: 'task_run', + taskPollingLifecycle, + config: { + ...config, + metrics_reset_interval: 10, + }, + resetMetrics$: new Subject(), + taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent), + metricsAggregator: new TaskRunMetricsAggregator(), + }); + + return new Promise((resolve) => { + taskRunAggregator + .pipe( + // skip initial metric which is just initialized data which + // ensures we don't stall on combineLatest + skip(1), + take(taskRunEvents1.length + taskRunEvents2.length), + bufferCount(taskRunEvents1.length + taskRunEvents2.length) + ) + .subscribe((metrics: Array>) => { + expect(metrics[0]).toEqual({ + key: 'task_run', + value: { + overall: { success: 1, total: 1 }, + by_type: { + alerting: { success: 1, total: 1 }, + 'alerting:example': { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[1]).toEqual({ + key: 'task_run', + value: { + overall: { success: 2, total: 2 }, + by_type: { + alerting: { success: 1, total: 1 }, + 'alerting:example': { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[2]).toEqual({ + key: 'task_run', + value: { + overall: { success: 3, total: 3 }, + by_type: { + alerting: { success: 2, total: 2 }, + 'alerting:example': { success: 2, total: 2 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[3]).toEqual({ + key: 'task_run', + value: { + overall: { success: 4, total: 4 }, + by_type: { + alerting: { success: 2, total: 2 }, + 'alerting:example': { success: 2, total: 2 }, + report: { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + expect(metrics[4]).toEqual({ + key: 'task_run', + value: { + overall: { success: 4, total: 5 }, + by_type: { + alerting: { success: 2, total: 3 }, + 'alerting:example': { success: 2, total: 3 }, + report: { success: 1, total: 1 }, + telemetry: { success: 1, total: 1 }, + }, + }, + }); + // reset event should have been received here + expect(metrics[5]).toEqual({ + key: 'task_run', + value: { + overall: { success: 1, total: 1 }, + by_type: { + alerting: { success: 1, total: 1 }, + 'alerting:example': { success: 1, total: 1 }, + report: { success: 0, total: 0 }, + telemetry: { success: 0, total: 0 }, + }, + }, + }); + expect(metrics[6]).toEqual({ + key: 'task_run', + value: { + overall: { success: 2, total: 2 }, + by_type: { + alerting: { success: 2, total: 2 }, + 'alerting:example': { success: 2, total: 2 }, + report: { success: 0, total: 0 }, + telemetry: { success: 0, total: 0 }, + }, + }, + }); + expect(metrics[7]).toEqual({ + key: 'task_run', + value: { + overall: { success: 2, total: 3 }, + by_type: { + alerting: { success: 2, total: 3 }, + 'alerting:example': { success: 2, total: 3 }, + report: { success: 0, total: 0 }, + telemetry: { success: 0, total: 0 }, + }, + }, + }); + expect(metrics[8]).toEqual({ + key: 'task_run', + value: { + overall: { success: 3, total: 4 }, + by_type: { + alerting: { success: 3, total: 4 }, + 'alerting:example': { success: 3, total: 4 }, + report: { success: 0, total: 0 }, + telemetry: { success: 0, total: 0 }, + }, + }, + }); + expect(metrics[9]).toEqual({ + key: 'task_run', + value: { + overall: { success: 3, total: 5 }, + by_type: { + actions: { success: 0, total: 1 }, + alerting: { success: 3, total: 4 }, + 'actions:webhook': { success: 0, total: 1 }, + 'alerting:example': { success: 3, total: 4 }, + report: { success: 0, total: 0 }, + telemetry: { success: 0, total: 0 }, + }, + }, + }); + resolve(); + }); + + for (const event of taskRunEvents1) { + events$.next(event); + } + clock.tick(20); + for (const event of taskRunEvents2) { + events$.next(event); + } + + clock.restore(); + }); + }); + }); + + test('should filter task lifecycle events using specified taskEventFilter', () => { + const pollingCycleEvents = [ + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimFailureEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimFailureEvent, + taskClaimSuccessEvent, + ]; + const taskEventFilter = jest.fn().mockReturnValue(true); + const events$ = new Subject(); + const taskPollingLifecycle = taskPollingLifecycleMock.create({ + events$: events$ as Observable, + }); + const aggregator = createAggregator({ + key: 'test', + taskPollingLifecycle, + config, + resetMetrics$: new Subject(), + taskEventFilter, + metricsAggregator: new TaskClaimMetricsAggregator(), + }); + + return new Promise((resolve) => { + aggregator + .pipe( + // skip initial metric which is just initialized data which + // ensures we don't stall on combineLatest + skip(1), + take(pollingCycleEvents.length), + bufferCount(pollingCycleEvents.length) + ) + .subscribe(() => { + resolve(); + }); + + for (const event of pollingCycleEvents) { + events$.next(event); + } + + expect(taskEventFilter).toHaveBeenCalledTimes(pollingCycleEvents.length); + }); + }); + + test('should call metricAggregator to process task lifecycle events', () => { + const spy = jest + .spyOn(TaskClaimMetricsAggregatorModule, 'TaskClaimMetricsAggregator') + .mockImplementation(() => mockMetricsAggregator); + + const pollingCycleEvents = [ + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimFailureEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimFailureEvent, + taskClaimSuccessEvent, + ]; + const taskEventFilter = jest.fn().mockReturnValue(true); + const events$ = new Subject(); + const taskPollingLifecycle = taskPollingLifecycleMock.create({ + events$: events$ as Observable, + }); + const aggregator = createAggregator({ + key: 'test', + taskPollingLifecycle, + config, + resetMetrics$: new Subject(), + taskEventFilter, + metricsAggregator: mockMetricsAggregator, + }); + + return new Promise((resolve) => { + aggregator + .pipe( + // skip initial metric which is just initialized data which + // ensures we don't stall on combineLatest + skip(1), + take(pollingCycleEvents.length), + bufferCount(pollingCycleEvents.length) + ) + .subscribe(() => { + resolve(); + }); + + for (const event of pollingCycleEvents) { + events$.next(event); + } + + expect(mockMetricsAggregator.initialMetric).toHaveBeenCalledTimes(1); + expect(mockMetricsAggregator.processTaskLifecycleEvent).toHaveBeenCalledTimes( + pollingCycleEvents.length + ); + expect(mockMetricsAggregator.collect).toHaveBeenCalledTimes(pollingCycleEvents.length); + expect(mockMetricsAggregator.reset).not.toHaveBeenCalled(); + spy.mockRestore(); + }); + }); + + test('should call metricAggregator reset when resetMetric$ event is received', () => { + const spy = jest + .spyOn(TaskClaimMetricsAggregatorModule, 'TaskClaimMetricsAggregator') + .mockImplementation(() => mockMetricsAggregator); + + const resetMetrics$ = new Subject(); + const pollingCycleEvents = [ + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimFailureEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimSuccessEvent, + taskClaimFailureEvent, + taskClaimSuccessEvent, + ]; + const taskEventFilter = jest.fn().mockReturnValue(true); + const events$ = new Subject(); + const taskPollingLifecycle = taskPollingLifecycleMock.create({ + events$: events$ as Observable, + }); + const aggregator = createAggregator({ + key: 'test', + taskPollingLifecycle, + config, + resetMetrics$, + taskEventFilter, + metricsAggregator: mockMetricsAggregator, + }); + + return new Promise((resolve) => { + aggregator + .pipe( + // skip initial metric which is just initialized data which + // ensures we don't stall on combineLatest + skip(1), + take(pollingCycleEvents.length), + bufferCount(pollingCycleEvents.length) + ) + .subscribe(() => { + resolve(); + }); + + for (const event of pollingCycleEvents) { + events$.next(event); + } + + for (let i = 0; i < 5; i++) { + events$.next(pollingCycleEvents[i]); + } + resetMetrics$.next(true); + for (let i = 0; i < pollingCycleEvents.length; i++) { + events$.next(pollingCycleEvents[i]); + } + + expect(mockMetricsAggregator.initialMetric).toHaveBeenCalledTimes(1); + expect(mockMetricsAggregator.processTaskLifecycleEvent).toHaveBeenCalledTimes( + pollingCycleEvents.length + ); + expect(mockMetricsAggregator.collect).toHaveBeenCalledTimes(pollingCycleEvents.length); + expect(mockMetricsAggregator.reset).toHaveBeenCalledTimes(1); + spy.mockRestore(); + }); + }); +}); diff --git a/x-pack/plugins/task_manager/server/metrics/create_aggregator.ts b/x-pack/plugins/task_manager/server/metrics/create_aggregator.ts new file mode 100644 index 00000000000000..cece8c0f70b23f --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/create_aggregator.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 { combineLatest, filter, interval, map, merge, Observable, startWith } from 'rxjs'; +import { JsonValue } from '@kbn/utility-types'; +import { TaskLifecycleEvent, TaskPollingLifecycle } from '../polling_lifecycle'; +import { AggregatedStat, AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; +import { TaskManagerConfig } from '../config'; +import { ITaskMetricsAggregator } from './types'; + +export interface CreateMetricsAggregatorOpts { + key: string; + config: TaskManagerConfig; + resetMetrics$: Observable; + taskPollingLifecycle: TaskPollingLifecycle; + taskEventFilter: (taskEvent: TaskLifecycleEvent) => boolean; + metricsAggregator: ITaskMetricsAggregator; +} + +export function createAggregator({ + key, + taskPollingLifecycle, + config, + resetMetrics$, + taskEventFilter, + metricsAggregator, +}: CreateMetricsAggregatorOpts): AggregatedStatProvider { + // Resets the aggregators either when the reset interval has passed or + // a resetMetrics$ event is received + merge( + interval(config.metrics_reset_interval).pipe(map(() => true)), + resetMetrics$.pipe(map(() => true)) + ).subscribe(() => { + metricsAggregator.reset(); + }); + + const taskEvents$: Observable = taskPollingLifecycle.events.pipe( + filter((taskEvent: TaskLifecycleEvent) => taskEventFilter(taskEvent)), + map((taskEvent: TaskLifecycleEvent) => { + metricsAggregator.processTaskLifecycleEvent(taskEvent); + return metricsAggregator.collect(); + }) + ); + + return combineLatest([taskEvents$.pipe(startWith(metricsAggregator.initialMetric()))]).pipe( + map(([value]: [T]) => { + return { + key, + value, + } as AggregatedStat; + }) + ); +} diff --git a/x-pack/plugins/task_manager/server/metrics/index.ts b/x-pack/plugins/task_manager/server/metrics/index.ts new file mode 100644 index 00000000000000..5e2a73f91dd73e --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/index.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Observable } from 'rxjs'; +import { TaskManagerConfig } from '../config'; +import { Metrics, createMetricsAggregators, createMetricsStream } from './metrics_stream'; +import { TaskPollingLifecycle } from '../polling_lifecycle'; +export type { Metrics } from './metrics_stream'; + +export function metricsStream( + config: TaskManagerConfig, + resetMetrics$: Observable, + taskPollingLifecycle?: TaskPollingLifecycle +): Observable { + return createMetricsStream( + createMetricsAggregators({ + config, + resetMetrics$, + taskPollingLifecycle, + }) + ); +} diff --git a/x-pack/plugins/task_manager/server/metrics/metrics_aggregator.mock.ts b/x-pack/plugins/task_manager/server/metrics/metrics_aggregator.mock.ts new file mode 100644 index 00000000000000..691ba9d0290d21 --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/metrics_aggregator.mock.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const createIMetricsAggregatorMock = () => { + return jest.fn().mockImplementation(() => { + return { + initialMetric: jest.fn().mockReturnValue({ count: 0 }), + reset: jest.fn(), + collect: jest.fn(), + processTaskLifecycleEvent: jest.fn(), + }; + }); +}; + +export const metricsAggregatorMock = { + create: createIMetricsAggregatorMock(), +}; diff --git a/x-pack/plugins/task_manager/server/metrics/metrics_stream.test.ts b/x-pack/plugins/task_manager/server/metrics/metrics_stream.test.ts new file mode 100644 index 00000000000000..5aec856a7a4f05 --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/metrics_stream.test.ts @@ -0,0 +1,89 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Subject } from 'rxjs'; +import { take, bufferCount } from 'rxjs/operators'; +import { createMetricsStream } from './metrics_stream'; +import { JsonValue } from '@kbn/utility-types'; +import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; + +beforeEach(() => { + jest.resetAllMocks(); +}); + +describe('createMetricsStream', () => { + it('incrementally updates the metrics returned by the endpoint', async () => { + const aggregatedStats$ = new Subject(); + + return new Promise((resolve) => { + createMetricsStream(aggregatedStats$) + .pipe(take(3), bufferCount(3)) + .subscribe(([initialValue, secondValue, thirdValue]) => { + expect(initialValue.metrics).toMatchObject({ + lastUpdate: expect.any(String), + metrics: {}, + }); + + expect(secondValue).toMatchObject({ + lastUpdate: expect.any(String), + metrics: { + newAggregatedStat: { + timestamp: expect.any(String), + value: { + some: { + complex: { + value: 123, + }, + }, + }, + }, + }, + }); + + expect(thirdValue).toMatchObject({ + lastUpdate: expect.any(String), + metrics: { + newAggregatedStat: { + timestamp: expect.any(String), + value: { + some: { + updated: { + value: 456, + }, + }, + }, + }, + }, + }); + }); + + aggregatedStats$.next({ + key: 'newAggregatedStat', + value: { + some: { + complex: { + value: 123, + }, + }, + } as JsonValue, + }); + + aggregatedStats$.next({ + key: 'newAggregatedStat', + value: { + some: { + updated: { + value: 456, + }, + }, + } as JsonValue, + }); + + resolve(); + }); + }); +}); diff --git a/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts b/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts new file mode 100644 index 00000000000000..29558308c51963 --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts @@ -0,0 +1,89 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { merge, of, Observable } from 'rxjs'; +import { map, scan } from 'rxjs/operators'; +import { set } from '@kbn/safer-lodash-set'; +import { TaskLifecycleEvent, TaskPollingLifecycle } from '../polling_lifecycle'; +import { TaskManagerConfig } from '../config'; +import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; +import { isTaskPollingCycleEvent, isTaskRunEvent } from '../task_events'; +import { TaskClaimMetric, TaskClaimMetricsAggregator } from './task_claim_metrics_aggregator'; +import { createAggregator } from './create_aggregator'; +import { TaskRunMetric, TaskRunMetricsAggregator } from './task_run_metrics_aggregator'; +export interface Metrics { + last_update: string; + metrics: { + task_claim?: Metric; + task_run?: Metric; + }; +} + +export interface Metric { + timestamp: string; + value: T; +} + +interface CreateMetricsAggregatorsOpts { + config: TaskManagerConfig; + resetMetrics$: Observable; + taskPollingLifecycle?: TaskPollingLifecycle; +} +export function createMetricsAggregators({ + config, + resetMetrics$, + taskPollingLifecycle, +}: CreateMetricsAggregatorsOpts): AggregatedStatProvider { + const aggregators: AggregatedStatProvider[] = []; + if (taskPollingLifecycle) { + aggregators.push( + createAggregator({ + key: 'task_claim', + taskPollingLifecycle, + config, + resetMetrics$, + taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskPollingCycleEvent(taskEvent), + metricsAggregator: new TaskClaimMetricsAggregator(), + }), + createAggregator({ + key: 'task_run', + taskPollingLifecycle, + config, + resetMetrics$, + taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent), + metricsAggregator: new TaskRunMetricsAggregator(), + }) + ); + } + return merge(...aggregators); +} + +export function createMetricsStream(provider$: AggregatedStatProvider): Observable { + const initialMetrics = { + last_update: new Date().toISOString(), + metrics: {}, + }; + return merge( + // emit the initial metrics + of(initialMetrics), + // emit updated metrics whenever a provider updates a specific key on the stats + provider$.pipe( + map(({ key, value }) => { + return { + value: { timestamp: new Date().toISOString(), value }, + key, + }; + }), + scan((metrics: Metrics, { key, value }) => { + // incrementally merge stats as they come in + set(metrics.metrics, key, value); + metrics.last_update = new Date().toISOString(); + return metrics; + }, initialMetrics) + ) + ); +} diff --git a/x-pack/plugins/task_manager/server/metrics/success_rate_counter.test.ts b/x-pack/plugins/task_manager/server/metrics/success_rate_counter.test.ts new file mode 100644 index 00000000000000..eb34f3a34c005f --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/success_rate_counter.test.ts @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { SuccessRateCounter } from './success_rate_counter'; + +describe('SuccessRateCounter', () => { + let successRateCounter: SuccessRateCounter; + beforeEach(() => { + successRateCounter = new SuccessRateCounter(); + }); + + test('should correctly initialize', () => { + expect(successRateCounter.get()).toEqual({ success: 0, total: 0 }); + }); + + test('should correctly return initialMetrics', () => { + expect(successRateCounter.initialMetric()).toEqual({ success: 0, total: 0 }); + }); + + test('should correctly increment counter when success is true', () => { + successRateCounter.increment(true); + successRateCounter.increment(true); + expect(successRateCounter.get()).toEqual({ success: 2, total: 2 }); + }); + + test('should correctly increment counter when success is false', () => { + successRateCounter.increment(false); + successRateCounter.increment(false); + expect(successRateCounter.get()).toEqual({ success: 0, total: 2 }); + }); + + test('should correctly reset counter', () => { + successRateCounter.increment(true); + successRateCounter.increment(true); + successRateCounter.increment(false); + successRateCounter.increment(false); + successRateCounter.increment(true); + successRateCounter.increment(true); + successRateCounter.increment(false); + expect(successRateCounter.get()).toEqual({ success: 4, total: 7 }); + + successRateCounter.reset(); + expect(successRateCounter.get()).toEqual({ success: 0, total: 0 }); + }); +}); diff --git a/x-pack/plugins/task_manager/server/metrics/success_rate_counter.ts b/x-pack/plugins/task_manager/server/metrics/success_rate_counter.ts new file mode 100644 index 00000000000000..d9c61575a2698b --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/success_rate_counter.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 { JsonObject } from '@kbn/utility-types'; + +export interface SuccessRate extends JsonObject { + success: number; + total: number; +} + +export class SuccessRateCounter { + private success = 0; + private total = 0; + + public initialMetric(): SuccessRate { + return { + success: 0, + total: 0, + }; + } + + public get(): SuccessRate { + return { + success: this.success, + total: this.total, + }; + } + + public increment(success: boolean) { + if (success) { + this.success++; + } + this.total++; + } + + public reset() { + this.success = 0; + this.total = 0; + } +} diff --git a/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.test.ts new file mode 100644 index 00000000000000..cfcf4bfdf8d0b6 --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.test.ts @@ -0,0 +1,102 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { none } from 'fp-ts/lib/Option'; +import { FillPoolResult } from '../lib/fill_pool'; +import { asOk, asErr } from '../lib/result_type'; +import { PollingError, PollingErrorType } from '../polling'; +import { asTaskPollingCycleEvent } from '../task_events'; +import { TaskClaimMetricsAggregator } from './task_claim_metrics_aggregator'; + +export const taskClaimSuccessEvent = asTaskPollingCycleEvent( + asOk({ + result: FillPoolResult.PoolFilled, + stats: { + tasksUpdated: 0, + tasksConflicted: 0, + tasksClaimed: 0, + }, + }), + { + start: 1689698780490, + stop: 1689698780500, + } +); +export const taskClaimFailureEvent = asTaskPollingCycleEvent( + asErr( + new PollingError( + 'Failed to poll for work: Error: failed to work', + PollingErrorType.WorkError, + none + ) + ) +); + +describe('TaskClaimMetricsAggregator', () => { + let taskClaimMetricsAggregator: TaskClaimMetricsAggregator; + beforeEach(() => { + taskClaimMetricsAggregator = new TaskClaimMetricsAggregator(); + }); + + test('should correctly initialize', () => { + expect(taskClaimMetricsAggregator.collect()).toEqual({ + success: 0, + total: 0, + duration: { counts: [], values: [] }, + }); + }); + + test('should correctly return initialMetrics', () => { + expect(taskClaimMetricsAggregator.initialMetric()).toEqual({ + success: 0, + total: 0, + duration: { counts: [], values: [] }, + }); + }); + + test('should correctly process task lifecycle success event', () => { + taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent); + taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent); + expect(taskClaimMetricsAggregator.collect()).toEqual({ + success: 2, + total: 2, + duration: { counts: [2], values: [100] }, + }); + }); + + test('should correctly process task lifecycle failure event', () => { + taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent); + taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent); + expect(taskClaimMetricsAggregator.collect()).toEqual({ + success: 0, + total: 2, + duration: { counts: [], values: [] }, + }); + }); + + test('should correctly reset counter', () => { + taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent); + taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent); + taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent); + taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent); + taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent); + taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent); + taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent); + expect(taskClaimMetricsAggregator.collect()).toEqual({ + success: 4, + total: 7, + duration: { counts: [4], values: [100] }, + }); + + taskClaimMetricsAggregator.reset(); + expect(taskClaimMetricsAggregator.collect()).toEqual({ + success: 0, + total: 0, + duration: { counts: [], values: [] }, + }); + }); +}); diff --git a/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts b/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts new file mode 100644 index 00000000000000..75c03105287fa0 --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts @@ -0,0 +1,71 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// @ts-expect-error +// eslint-disable-next-line import/no-extraneous-dependencies +import Histogram from 'native-hdr-histogram'; +import { isOk } from '../lib/result_type'; +import { TaskLifecycleEvent } from '../polling_lifecycle'; +import { TaskRun } from '../task_events'; +import { SuccessRate, SuccessRateCounter } from './success_rate_counter'; +import { ITaskMetricsAggregator } from './types'; + +const HDR_HISTOGRAM_MIN = 1; // 1 millis +const HDR_HISTOGRAM_MAX = 30000; // 30 seconds +const HDR_HISTOGRAM_BUCKET_SIZE = 100; // 100 millis + +export type TaskClaimMetric = SuccessRate & { + duration: { + counts: number[]; + values: number[]; + }; +}; + +export class TaskClaimMetricsAggregator implements ITaskMetricsAggregator { + private claimSuccessRate = new SuccessRateCounter(); + private durationHistogram = new Histogram(HDR_HISTOGRAM_MIN, HDR_HISTOGRAM_MAX); + + public initialMetric(): TaskClaimMetric { + return { + ...this.claimSuccessRate.initialMetric(), + duration: { counts: [], values: [] }, + }; + } + public collect(): TaskClaimMetric { + return { + ...this.claimSuccessRate.get(), + duration: this.serializeHistogram(), + }; + } + + public reset() { + this.claimSuccessRate.reset(); + this.durationHistogram.reset(); + } + + public processTaskLifecycleEvent(taskEvent: TaskLifecycleEvent) { + const success = isOk((taskEvent as TaskRun).event); + this.claimSuccessRate.increment(success); + + if (taskEvent.timing) { + const durationInMs = taskEvent.timing.stop - taskEvent.timing.start; + this.durationHistogram.record(durationInMs); + } + } + + private serializeHistogram() { + const counts: number[] = []; + const values: number[] = []; + + for (const { count, value } of this.durationHistogram.linearcounts(HDR_HISTOGRAM_BUCKET_SIZE)) { + counts.push(count); + values.push(value); + } + + return { counts, values }; + } +} diff --git a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts new file mode 100644 index 00000000000000..e3654fd9a21d53 --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts @@ -0,0 +1,208 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 uuid from 'uuid'; +import { asOk, asErr } from '../lib/result_type'; +import { TaskStatus } from '../task'; +import { asTaskRunEvent, TaskPersistence } from '../task_events'; +import { TaskRunResult } from '../task_running'; +import { TaskRunMetricsAggregator } from './task_run_metrics_aggregator'; + +export const getTaskRunSuccessEvent = (type: string) => { + const id = uuid.v4(); + return asTaskRunEvent( + id, + asOk({ + task: { + id, + attempts: 0, + status: TaskStatus.Running, + version: '123', + runAt: new Date(), + scheduledAt: new Date(), + startedAt: new Date(), + retryAt: new Date(Date.now() + 5 * 60 * 1000), + state: {}, + taskType: type, + params: {}, + ownerId: null, + }, + persistence: TaskPersistence.Recurring, + result: TaskRunResult.Success, + }), + { + start: 1689698780490, + stop: 1689698780500, + } + ); +}; + +export const getTaskRunFailedEvent = (type: string) => { + const id = uuid.v4(); + return asTaskRunEvent( + id, + asErr({ + error: new Error('task failed to run'), + task: { + id, + attempts: 0, + status: TaskStatus.Running, + version: '123', + runAt: new Date(), + scheduledAt: new Date(), + startedAt: new Date(), + retryAt: new Date(Date.now() + 5 * 60 * 1000), + state: {}, + taskType: type, + params: {}, + ownerId: null, + }, + persistence: TaskPersistence.Recurring, + result: TaskRunResult.Failed, + }) + ); +}; + +describe('TaskRunMetricsAggregator', () => { + let taskRunMetricsAggregator: TaskRunMetricsAggregator; + beforeEach(() => { + taskRunMetricsAggregator = new TaskRunMetricsAggregator(); + }); + + test('should correctly initialize', () => { + expect(taskRunMetricsAggregator.collect()).toEqual({ + overall: { success: 0, total: 0 }, + by_type: {}, + }); + }); + + test('should correctly return initialMetrics', () => { + expect(taskRunMetricsAggregator.initialMetric()).toEqual({ + overall: { success: 0, total: 0 }, + by_type: {}, + }); + }); + + test('should correctly process task run success event', () => { + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); + expect(taskRunMetricsAggregator.collect()).toEqual({ + overall: { success: 2, total: 2 }, + by_type: { + telemetry: { success: 2, total: 2 }, + }, + }); + }); + + test('should correctly process task run failure event', () => { + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); + expect(taskRunMetricsAggregator.collect()).toEqual({ + overall: { success: 0, total: 2 }, + by_type: { + telemetry: { success: 0, total: 2 }, + }, + }); + }); + + test('should correctly process different task types', () => { + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); + expect(taskRunMetricsAggregator.collect()).toEqual({ + overall: { success: 3, total: 4 }, + by_type: { + report: { success: 2, total: 2 }, + telemetry: { success: 1, total: 2 }, + }, + }); + }); + + test('should correctly group alerting and action task types', () => { + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example')); + taskRunMetricsAggregator.processTaskLifecycleEvent( + getTaskRunSuccessEvent('alerting:.index-threshold') + ); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:webhook')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('alerting:example')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:webhook')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('alerting:example')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:.email')); + taskRunMetricsAggregator.processTaskLifecycleEvent( + getTaskRunSuccessEvent('alerting:.index-threshold') + ); + expect(taskRunMetricsAggregator.collect()).toEqual({ + overall: { success: 11, total: 14 }, + by_type: { + actions: { success: 3, total: 3 }, + 'actions:.email': { success: 1, total: 1 }, + 'actions:webhook': { success: 2, total: 2 }, + alerting: { success: 5, total: 7 }, + 'alerting:example': { success: 3, total: 5 }, + 'alerting:.index-threshold': { success: 2, total: 2 }, + report: { success: 2, total: 2 }, + telemetry: { success: 1, total: 2 }, + }, + }); + }); + + test('should correctly reset counter', () => { + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example')); + taskRunMetricsAggregator.processTaskLifecycleEvent( + getTaskRunSuccessEvent('alerting:.index-threshold') + ); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:webhook')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('alerting:example')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:webhook')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('alerting:example')); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:.email')); + taskRunMetricsAggregator.processTaskLifecycleEvent( + getTaskRunSuccessEvent('alerting:.index-threshold') + ); + expect(taskRunMetricsAggregator.collect()).toEqual({ + overall: { success: 11, total: 14 }, + by_type: { + actions: { success: 3, total: 3 }, + 'actions:.email': { success: 1, total: 1 }, + 'actions:webhook': { success: 2, total: 2 }, + alerting: { success: 5, total: 7 }, + 'alerting:example': { success: 3, total: 5 }, + 'alerting:.index-threshold': { success: 2, total: 2 }, + report: { success: 2, total: 2 }, + telemetry: { success: 1, total: 2 }, + }, + }); + + taskRunMetricsAggregator.reset(); + expect(taskRunMetricsAggregator.collect()).toEqual({ + overall: { success: 0, total: 0 }, + by_type: { + actions: { success: 0, total: 0 }, + 'actions:.email': { success: 0, total: 0 }, + 'actions:webhook': { success: 0, total: 0 }, + alerting: { success: 0, total: 0 }, + 'alerting:example': { success: 0, total: 0 }, + 'alerting:.index-threshold': { success: 0, total: 0 }, + report: { success: 0, total: 0 }, + telemetry: { success: 0, total: 0 }, + }, + }); + }); +}); diff --git a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts new file mode 100644 index 00000000000000..c25d80f112df1d --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts @@ -0,0 +1,85 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { JsonObject } from '@kbn/utility-types'; +import { isOk, unwrap } from '../lib/result_type'; +import { TaskLifecycleEvent } from '../polling_lifecycle'; +import { ErroredTask, RanTask, TaskRun } from '../task_events'; +import { SuccessRate, SuccessRateCounter } from './success_rate_counter'; +import { ITaskMetricsAggregator } from './types'; + +const taskTypeGrouping = new Set(['alerting:', 'actions:']); + +export interface TaskRunMetric extends JsonObject { + overall: SuccessRate; + by_type: { + [key: string]: SuccessRate; + }; +} + +export class TaskRunMetricsAggregator implements ITaskMetricsAggregator { + private taskRunSuccessRate = new SuccessRateCounter(); + private taskRunCounter: Map = new Map(); + + public initialMetric(): TaskRunMetric { + return { + overall: this.taskRunSuccessRate.initialMetric(), + by_type: {}, + }; + } + + public collect(): TaskRunMetric { + return { + overall: this.taskRunSuccessRate.get(), + by_type: this.collectTaskTypeEntries(), + }; + } + + public reset() { + this.taskRunSuccessRate.reset(); + for (const taskType of this.taskRunCounter.keys()) { + this.taskRunCounter.get(taskType)!.reset(); + } + } + + public processTaskLifecycleEvent(taskEvent: TaskLifecycleEvent) { + const { task }: RanTask | ErroredTask = unwrap((taskEvent as TaskRun).event); + const taskType = task.taskType; + + const taskTypeSuccessRate: SuccessRateCounter = + this.taskRunCounter.get(taskType) ?? new SuccessRateCounter(); + + const success = isOk((taskEvent as TaskRun).event); + this.taskRunSuccessRate.increment(success); + taskTypeSuccessRate.increment(success); + this.taskRunCounter.set(taskType, taskTypeSuccessRate); + + const taskTypeGroup = this.getTaskTypeGroup(taskType); + if (taskTypeGroup) { + const taskTypeGroupSuccessRate: SuccessRateCounter = + this.taskRunCounter.get(taskTypeGroup) ?? new SuccessRateCounter(); + taskTypeGroupSuccessRate.increment(success); + this.taskRunCounter.set(taskTypeGroup, taskTypeGroupSuccessRate); + } + } + + private collectTaskTypeEntries() { + const collected: Record = {}; + for (const [key, value] of this.taskRunCounter) { + collected[key] = value.get(); + } + return collected; + } + + private getTaskTypeGroup(taskType: string): string | undefined { + for (const group of taskTypeGrouping) { + if (taskType.startsWith(group)) { + return group.replaceAll(':', ''); + } + } + } +} diff --git a/x-pack/plugins/task_manager/server/metrics/types.ts b/x-pack/plugins/task_manager/server/metrics/types.ts new file mode 100644 index 00000000000000..7fbee1fe8abdd9 --- /dev/null +++ b/x-pack/plugins/task_manager/server/metrics/types.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 { TaskLifecycleEvent } from '../polling_lifecycle'; + +export interface ITaskMetricsAggregator { + initialMetric: () => T; + collect: () => T; + reset: () => void; + processTaskLifecycleEvent: (taskEvent: TaskLifecycleEvent) => void; +} diff --git a/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.test.ts index cdd67a07ff9e71..9507b3ab0e4cd3 100644 --- a/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.test.ts @@ -19,7 +19,7 @@ import { import { asOk } from '../lib/result_type'; import { TaskLifecycleEvent } from '../polling_lifecycle'; import { TaskRunResult } from '../task_running'; -import { AggregatedStat } from './runtime_statistics_aggregator'; +import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; import { taskPollingLifecycleMock } from '../polling_lifecycle.mock'; import { BackgroundTaskUtilizationStat, diff --git a/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.ts index fd116cbdd71d82..837f29c83f108b 100644 --- a/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.ts @@ -20,7 +20,7 @@ import { TaskTiming, } from '../task_events'; import { MonitoredStat } from './monitoring_stats_stream'; -import { AggregatedStat, AggregatedStatProvider } from './runtime_statistics_aggregator'; +import { AggregatedStat, AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; import { createRunningAveragedStat } from './task_run_calcultors'; import { DEFAULT_WORKER_UTILIZATION_RUNNING_AVERAGE_WINDOW } from '../config'; diff --git a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts index 98493ae89b6838..689c9c882bee32 100644 --- a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts @@ -52,6 +52,7 @@ describe('Configuration Statistics Aggregator', () => { delay: 3000, max_attempts: 20, }, + metrics_reset_interval: 3000, }; const managedConfig = { diff --git a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.ts index 6414c9e80ce06a..2212affcc8db3a 100644 --- a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.ts @@ -8,7 +8,7 @@ import { combineLatest, of } from 'rxjs'; import { pick, merge } from 'lodash'; import { map, startWith } from 'rxjs/operators'; -import { AggregatedStatProvider } from './runtime_statistics_aggregator'; +import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; import { TaskManagerConfig } from '../config'; import { ManagedConfiguration } from '../lib/create_managed_configuration'; diff --git a/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.test.ts index 8a2305c3076a50..8d4ef4fab2ebad 100644 --- a/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.test.ts @@ -26,7 +26,7 @@ import { SummarizedEphemeralTaskStat, EphemeralTaskStat, } from './ephemeral_task_statistics'; -import { AggregatedStat } from './runtime_statistics_aggregator'; +import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; import { ephemeralTaskLifecycleMock } from '../ephemeral_task_lifecycle.mock'; import { times, takeRight, take as takeLeft } from 'lodash'; diff --git a/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.ts index 52aa2b1eead251..8a6ade503b041d 100644 --- a/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.ts @@ -9,7 +9,7 @@ import { map, filter, startWith, buffer, share } from 'rxjs/operators'; import { JsonObject } from '@kbn/utility-types'; import { combineLatest, Observable, zip } from 'rxjs'; import { isOk, Ok } from '../lib/result_type'; -import { AggregatedStat, AggregatedStatProvider } from './runtime_statistics_aggregator'; +import { AggregatedStat, AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; import { EphemeralTaskLifecycle } from '../ephemeral_task_lifecycle'; import { TaskLifecycleEvent } from '../polling_lifecycle'; import { isTaskRunEvent, isTaskManagerStatEvent } from '../task_events'; diff --git a/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.test.ts b/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.test.ts index 995db14fa09eaa..daf3f2baf085df 100644 --- a/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.test.ts @@ -8,8 +8,9 @@ import { TaskManagerConfig } from '../config'; import { of, Subject } from 'rxjs'; import { take, bufferCount } from 'rxjs/operators'; -import { createMonitoringStatsStream, AggregatedStat } from './monitoring_stats_stream'; +import { createMonitoringStatsStream } from './monitoring_stats_stream'; import { JsonValue } from '@kbn/utility-types'; +import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; beforeEach(() => { jest.resetAllMocks(); @@ -56,6 +57,7 @@ describe('createMonitoringStatsStream', () => { delay: 3000, max_attempts: 20, }, + metrics_reset_interval: 3000, }; it('returns the initial config used to configure Task Manager', async () => { diff --git a/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.ts b/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.ts index e1ff38d1c96078..62505a34d7f89a 100644 --- a/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.ts +++ b/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.ts @@ -37,13 +37,11 @@ import { import { ConfigStat, createConfigurationAggregator } from './configuration_statistics'; import { TaskManagerConfig } from '../config'; -import { AggregatedStatProvider } from './runtime_statistics_aggregator'; import { ManagedConfiguration } from '../lib/create_managed_configuration'; import { EphemeralTaskLifecycle } from '../ephemeral_task_lifecycle'; import { CapacityEstimationStat, withCapacityEstimate } from './capacity_estimation'; import { AdHocTaskCounter } from '../lib/adhoc_task_counter'; - -export type { AggregatedStatProvider, AggregatedStat } from './runtime_statistics_aggregator'; +import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; export interface MonitoringStats { last_update: string; diff --git a/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.test.ts index 4d69b23b699b79..91e81013b726f7 100644 --- a/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.test.ts @@ -30,7 +30,7 @@ import { TaskRunStat, SummarizedTaskRunStat, } from './task_run_statistics'; -import { AggregatedStat } from './runtime_statistics_aggregator'; +import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; import { FillPoolResult } from '../lib/fill_pool'; import { taskPollingLifecycleMock } from '../polling_lifecycle.mock'; import { configSchema } from '../config'; diff --git a/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.ts index 0c6063af19286c..7b7db8cb25eed5 100644 --- a/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.ts @@ -10,7 +10,7 @@ import { filter, startWith, map } from 'rxjs/operators'; import { JsonObject, JsonValue } from '@kbn/utility-types'; import { isNumber, mapValues } from 'lodash'; import { Logger } from '@kbn/core/server'; -import { AggregatedStatProvider, AggregatedStat } from './runtime_statistics_aggregator'; +import { AggregatedStatProvider, AggregatedStat } from '../lib/runtime_statistics_aggregator'; import { TaskLifecycleEvent } from '../polling_lifecycle'; import { isTaskRunEvent, diff --git a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts index bacd05dcb6a06a..b4d5db14a12e4d 100644 --- a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts @@ -12,7 +12,7 @@ import { JsonObject } from '@kbn/utility-types'; import { keyBy, mapValues } from 'lodash'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { AggregationResultOf } from '@kbn/es-types'; -import { AggregatedStatProvider } from './runtime_statistics_aggregator'; +import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; import { parseIntervalAsSecond, asInterval, parseIntervalAsMillisecond } from '../lib/intervals'; import { HealthStatus } from './monitoring_stats_stream'; import { TaskStore } from '../task_store'; diff --git a/x-pack/plugins/task_manager/server/plugin.test.ts b/x-pack/plugins/task_manager/server/plugin.test.ts index 4c0c96c7f76a65..1e7215d6d7a1b1 100644 --- a/x-pack/plugins/task_manager/server/plugin.test.ts +++ b/x-pack/plugins/task_manager/server/plugin.test.ts @@ -77,6 +77,7 @@ const pluginInitializerContextParams = { delay: 3000, max_attempts: 20, }, + metrics_reset_interval: 3000, }; describe('TaskManagerPlugin', () => { diff --git a/x-pack/plugins/task_manager/server/plugin.ts b/x-pack/plugins/task_manager/server/plugin.ts index e65574cef779a8..3b8ab4a54be1fb 100644 --- a/x-pack/plugins/task_manager/server/plugin.ts +++ b/x-pack/plugins/task_manager/server/plugin.ts @@ -27,7 +27,7 @@ import { TaskDefinitionRegistry, TaskTypeDictionary, REMOVED_TYPES } from './tas import { AggregationOpts, FetchResult, SearchOpts, TaskStore } from './task_store'; import { createManagedConfiguration } from './lib/create_managed_configuration'; import { TaskScheduling } from './task_scheduling'; -import { backgroundTaskUtilizationRoute, healthRoute } from './routes'; +import { backgroundTaskUtilizationRoute, healthRoute, metricsRoute } from './routes'; import { createMonitoringStats, MonitoringStats } from './monitoring'; import { EphemeralTaskLifecycle } from './ephemeral_task_lifecycle'; import { EphemeralTask, ConcreteTaskInstance } from './task'; @@ -35,6 +35,7 @@ import { registerTaskManagerUsageCollector } from './usage'; import { TASK_MANAGER_INDEX } from './constants'; import { AdHocTaskCounter } from './lib/adhoc_task_counter'; import { setupIntervalLogging } from './lib/log_health_metrics'; +import { metricsStream, Metrics } from './metrics'; export interface TaskManagerSetupContract { /** @@ -82,6 +83,8 @@ export class TaskManagerPlugin private middleware: Middleware = createInitialMiddleware(); private elasticsearchAndSOAvailability$?: Observable; private monitoringStats$ = new Subject(); + private metrics$ = new Subject(); + private resetMetrics$ = new Subject(); private shouldRunBackgroundTasks: boolean; private readonly kibanaVersion: PluginInitializerContext['env']['packageInfo']['version']; private adHocTaskCounter: AdHocTaskCounter; @@ -155,6 +158,12 @@ export class TaskManagerPlugin getClusterClient: () => startServicesPromise.then(({ elasticsearch }) => elasticsearch.client), }); + metricsRoute({ + router, + metrics$: this.metrics$, + resetMetrics$: this.resetMetrics$, + taskManagerId: this.taskManagerId, + }); core.status.derivedStatus$.subscribe((status) => this.logger.debug(`status core.status.derivedStatus now set to ${status.level}`) @@ -276,6 +285,10 @@ export class TaskManagerPlugin this.ephemeralTaskLifecycle ).subscribe((stat) => this.monitoringStats$.next(stat)); + metricsStream(this.config!, this.resetMetrics$, this.taskPollingLifecycle).subscribe((metric) => + this.metrics$.next(metric) + ); + const taskScheduling = new TaskScheduling({ logger: this.logger, taskStore, diff --git a/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts b/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts index 62e6be589b4cfc..79b153f42a88d6 100644 --- a/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts +++ b/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts @@ -82,6 +82,7 @@ describe('TaskPollingLifecycle', () => { delay: 3000, max_attempts: 20, }, + metrics_reset_interval: 3000, }, taskStore: mockTaskStore, logger: taskManagerLogger, diff --git a/x-pack/plugins/task_manager/server/routes/index.ts b/x-pack/plugins/task_manager/server/routes/index.ts index f3ba539323f8e9..372996f7cea3df 100644 --- a/x-pack/plugins/task_manager/server/routes/index.ts +++ b/x-pack/plugins/task_manager/server/routes/index.ts @@ -7,3 +7,4 @@ export { healthRoute } from './health'; export { backgroundTaskUtilizationRoute } from './background_task_utilization'; +export { metricsRoute } from './metrics'; diff --git a/x-pack/plugins/task_manager/server/routes/metrics.test.ts b/x-pack/plugins/task_manager/server/routes/metrics.test.ts new file mode 100644 index 00000000000000..a9703aa7548dd1 --- /dev/null +++ b/x-pack/plugins/task_manager/server/routes/metrics.test.ts @@ -0,0 +1,82 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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, Subject } from 'rxjs'; +import { v4 as uuidv4 } from 'uuid'; +import { httpServiceMock } from '@kbn/core/server/mocks'; +import { metricsRoute } from './metrics'; +import { mockHandlerArguments } from './_mock_handler_arguments'; + +describe('metricsRoute', () => { + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('registers route', async () => { + const router = httpServiceMock.createRouter(); + metricsRoute({ + router, + metrics$: of(), + resetMetrics$: new Subject(), + taskManagerId: uuidv4(), + }); + + const [config] = router.get.mock.calls[0]; + + expect(config.path).toMatchInlineSnapshot(`"/api/task_manager/metrics"`); + }); + + it('emits resetMetric$ event when route is accessed and reset query param is true', async () => { + let resetCalledTimes = 0; + const resetMetrics$ = new Subject(); + + resetMetrics$.subscribe(() => { + resetCalledTimes++; + }); + const router = httpServiceMock.createRouter(); + metricsRoute({ + router, + metrics$: of(), + resetMetrics$, + taskManagerId: uuidv4(), + }); + + const [config, handler] = router.get.mock.calls[0]; + const [context, req, res] = mockHandlerArguments({}, { query: { reset: true } }, ['ok']); + + expect(config.path).toMatchInlineSnapshot(`"/api/task_manager/metrics"`); + + await handler(context, req, res); + + expect(resetCalledTimes).toEqual(1); + }); + + it('does not emit resetMetric$ event when route is accessed and reset query param is false', async () => { + let resetCalledTimes = 0; + const resetMetrics$ = new Subject(); + + resetMetrics$.subscribe(() => { + resetCalledTimes++; + }); + const router = httpServiceMock.createRouter(); + metricsRoute({ + router, + metrics$: of(), + resetMetrics$, + taskManagerId: uuidv4(), + }); + + const [config, handler] = router.get.mock.calls[0]; + const [context, req, res] = mockHandlerArguments({}, { query: { reset: false } }, ['ok']); + + expect(config.path).toMatchInlineSnapshot(`"/api/task_manager/metrics"`); + + await handler(context, req, res); + + expect(resetCalledTimes).toEqual(0); + }); +}); diff --git a/x-pack/plugins/task_manager/server/routes/metrics.ts b/x-pack/plugins/task_manager/server/routes/metrics.ts new file mode 100644 index 00000000000000..f9dcf447fa101b --- /dev/null +++ b/x-pack/plugins/task_manager/server/routes/metrics.ts @@ -0,0 +1,71 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + IRouter, + RequestHandlerContext, + KibanaRequest, + IKibanaResponse, + KibanaResponseFactory, +} from '@kbn/core/server'; +import { schema, TypeOf } from '@kbn/config-schema'; +import { Observable, Subject } from 'rxjs'; +import { Metrics } from '../metrics'; + +export interface NodeMetrics { + process_uuid: string; + timestamp: string; + last_update: string; + metrics: Metrics['metrics'] | null; +} + +export interface MetricsRouteParams { + router: IRouter; + metrics$: Observable; + resetMetrics$: Subject; + taskManagerId: string; +} + +const QuerySchema = schema.object({ + reset: schema.boolean({ defaultValue: true }), +}); + +export function metricsRoute(params: MetricsRouteParams) { + const { router, metrics$, resetMetrics$, taskManagerId } = params; + + let lastMetrics: NodeMetrics | null = null; + + metrics$.subscribe((metrics) => { + lastMetrics = { process_uuid: taskManagerId, timestamp: new Date().toISOString(), ...metrics }; + }); + + router.get( + { + path: `/api/task_manager/metrics`, + // Uncomment when we determine that we can restrict API usage to Global admins based on telemetry + // options: { tags: ['access:taskManager'] }, + validate: { + query: QuerySchema, + }, + }, + async function ( + _: RequestHandlerContext, + req: KibanaRequest, unknown>, + res: KibanaResponseFactory + ): Promise { + if (req.query.reset) { + resetMetrics$.next(true); + } + + return res.ok({ + body: lastMetrics + ? lastMetrics + : { process_uuid: taskManagerId, timestamp: new Date().toISOString(), metrics: {} }, + }); + } + ); +} diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts index 97eeb17f0cd4e0..7e897840f72c7b 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts @@ -1298,6 +1298,45 @@ describe('TaskManagerRunner', () => { ); }); + test('emits TaskEvent when a recurring task returns a success result with hasError=true', async () => { + const id = _.random(1, 20).toString(); + const runAt = minutesFromNow(_.random(5)); + const onTaskEvent = jest.fn(); + const { runner, instance } = await readyToRunStageSetup({ + onTaskEvent, + instance: { + id, + schedule: { interval: '1m' }, + }, + definitions: { + bar: { + title: 'Bar!', + createTaskRunner: () => ({ + async run() { + return { runAt, state: {}, hasError: true }; + }, + }), + }, + }, + }); + + await runner.run(); + + expect(onTaskEvent).toHaveBeenCalledWith( + withAnyTiming( + asTaskRunEvent( + id, + asErr({ + task: instance, + persistence: TaskPersistence.Recurring, + result: TaskRunResult.Success, + error: new Error(`Alerting task failed to run.`), + }) + ) + ) + ); + }); + test('emits TaskEvent when a task run throws an error', async () => { const id = _.random(1, 20).toString(); const error = new Error('Dangit!'); diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.ts index 8ad020684e2696..e8ec5cb0f2d917 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.ts @@ -47,6 +47,7 @@ import { FailedRunResult, FailedTaskResult, isFailedRunResult, + RunContext, SuccessfulRunResult, TaskDefinition, TaskStatus, @@ -321,9 +322,9 @@ export class TaskManagerRunner implements TaskRunner { let taskParamsValidation; if (this.requeueInvalidTasksConfig.enabled) { - taskParamsValidation = this.validateTaskParams(); + taskParamsValidation = this.validateTaskParams(modifiedContext); if (!taskParamsValidation.error) { - taskParamsValidation = await this.validateIndirectTaskParams(); + taskParamsValidation = await this.validateIndirectTaskParams(modifiedContext); } } @@ -359,9 +360,9 @@ export class TaskManagerRunner implements TaskRunner { } } - private validateTaskParams() { + private validateTaskParams({ taskInstance }: RunContext) { let error; - const { state, taskType, params, id, numSkippedRuns = 0 } = this.instance.task; + const { state, taskType, params, id, numSkippedRuns = 0 } = taskInstance; const { max_attempts: maxAttempts } = this.requeueInvalidTasksConfig; try { @@ -383,9 +384,9 @@ export class TaskManagerRunner implements TaskRunner { return { ...(error ? { error } : {}), state }; } - private async validateIndirectTaskParams() { + private async validateIndirectTaskParams({ taskInstance }: RunContext) { let error; - const { state, taskType, id, numSkippedRuns = 0 } = this.instance.task; + const { state, taskType, id, numSkippedRuns = 0 } = taskInstance; const { max_attempts: maxAttempts } = this.requeueInvalidTasksConfig; const indirectParamsSchema = this.definition.indirectParamsSchema; @@ -735,23 +736,30 @@ export class TaskManagerRunner implements TaskRunner { await eitherAsync( result, - async ({ runAt, schedule }: SuccessfulRunResult) => { - this.onTaskEvent( - asTaskRunEvent( - this.id, - asOk({ - task, - persistence: - schedule || task.schedule - ? TaskPersistence.Recurring - : TaskPersistence.NonRecurring, - result: await (runAt || schedule || task.schedule - ? this.processResultForRecurringTask(result) - : this.processResultWhenDone()), - }), - taskTiming - ) - ); + async ({ runAt, schedule, hasError }: SuccessfulRunResult) => { + const processedResult = { + task, + persistence: + schedule || task.schedule ? TaskPersistence.Recurring : TaskPersistence.NonRecurring, + result: await (runAt || schedule || task.schedule + ? this.processResultForRecurringTask(result) + : this.processResultWhenDone()), + }; + + // Alerting task runner returns SuccessfulRunResult with hasError=true + // when the alerting task fails, so we check for this condition in order + // to emit the correct task run event for metrics collection + const taskRunEvent = hasError + ? asTaskRunEvent( + this.id, + asErr({ + ...processedResult, + error: new Error(`Alerting task failed to run.`), + }), + taskTiming + ) + : asTaskRunEvent(this.id, asOk(processedResult), taskTiming); + this.onTaskEvent(taskRunEvent); }, async ({ error }: FailedRunResult) => { this.onTaskEvent( diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts index af17d1b76ed993..420dfe795f322f 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts @@ -10,6 +10,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('task_manager', function taskManagerSuite() { loadTestFile(require.resolve('./background_task_utilization_route')); + loadTestFile(require.resolve('./metrics_route')); loadTestFile(require.resolve('./health_route')); loadTestFile(require.resolve('./task_management')); loadTestFile(require.resolve('./task_management_scheduled_at')); diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts new file mode 100644 index 00000000000000..4da679b6839aca --- /dev/null +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts @@ -0,0 +1,227 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 url from 'url'; +import supertest from 'supertest'; +import { NodeMetrics } from '@kbn/task-manager-plugin/server/routes/metrics'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getService }: FtrProviderContext) { + const config = getService('config'); + const retry = getService('retry'); + const request = supertest(url.format(config.get('servers.kibana'))); + + const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + + function getMetricsRequest(reset: boolean = false) { + return request + .get(`/api/task_manager/metrics${reset ? '' : '?reset=false'}`) + .set('kbn-xsrf', 'foo') + .expect(200) + .then((response) => response.body); + } + + function getMetrics( + reset: boolean = false, + callback: (metrics: NodeMetrics) => boolean + ): Promise { + return retry.try(async () => { + const metrics = await getMetricsRequest(reset); + + if (metrics.metrics && callback(metrics)) { + return metrics; + } + + await delay(500); + throw new Error('Expected metrics not received'); + }); + } + + describe('task manager metrics', () => { + describe('task claim', () => { + it('should increment task claim success/total counters', async () => { + // counters are reset every 30 seconds, so wait until the start of a + // fresh counter cycle to make sure values are incrementing + const initialMetrics = ( + await getMetrics(false, (metrics) => metrics?.metrics?.task_claim?.value.total === 1) + ).metrics; + expect(initialMetrics).not.to.be(null); + expect(initialMetrics?.task_claim).not.to.be(null); + expect(initialMetrics?.task_claim?.value).not.to.be(null); + + let previousTaskClaimSuccess = initialMetrics?.task_claim?.value.total!; + let previousTaskClaimTotal = initialMetrics?.task_claim?.value.success!; + let previousTaskClaimTimestamp: string = initialMetrics?.task_claim?.timestamp!; + + for (let i = 0; i < 5; ++i) { + const metrics = ( + await getMetrics( + false, + (m: NodeMetrics) => m.metrics?.task_claim?.timestamp !== previousTaskClaimTimestamp + ) + ).metrics; + expect(metrics).not.to.be(null); + expect(metrics?.task_claim).not.to.be(null); + expect(metrics?.task_claim?.value).not.to.be(null); + + expect(metrics?.task_claim?.value.success).to.be.greaterThan(previousTaskClaimSuccess); + expect(metrics?.task_claim?.value.total).to.be.greaterThan(previousTaskClaimTotal); + + previousTaskClaimTimestamp = metrics?.task_claim?.timestamp!; + previousTaskClaimSuccess = metrics?.task_claim?.value.success!; + previousTaskClaimTotal = metrics?.task_claim?.value.total!; + + // check that duration histogram exists + expect(metrics?.task_claim?.value.duration).not.to.be(null); + expect(Array.isArray(metrics?.task_claim?.value.duration.counts)).to.be(true); + expect(Array.isArray(metrics?.task_claim?.value.duration.values)).to.be(true); + } + }); + + it('should reset task claim success/total counters at an interval', async () => { + const initialCounterValue = 7; + const initialMetrics = ( + await getMetrics( + false, + (metrics) => metrics?.metrics?.task_claim?.value.total === initialCounterValue + ) + ).metrics; + expect(initialMetrics).not.to.be(null); + expect(initialMetrics?.task_claim).not.to.be(null); + expect(initialMetrics?.task_claim?.value).not.to.be(null); + + // retry until counter value resets + const resetMetrics = ( + await getMetrics(false, (m: NodeMetrics) => m?.metrics?.task_claim?.value.total === 1) + ).metrics; + expect(resetMetrics).not.to.be(null); + expect(resetMetrics?.task_claim).not.to.be(null); + expect(resetMetrics?.task_claim?.value).not.to.be(null); + }); + + it('should reset task claim success/total counters on request', async () => { + const initialCounterValue = 1; + const initialMetrics = ( + await getMetrics( + false, + (metrics) => metrics?.metrics?.task_claim?.value.total === initialCounterValue + ) + ).metrics; + expect(initialMetrics).not.to.be(null); + expect(initialMetrics?.task_claim).not.to.be(null); + expect(initialMetrics?.task_claim?.value).not.to.be(null); + + let previousTaskClaimTimestamp: string = initialMetrics?.task_claim?.timestamp!; + + for (let i = 0; i < 5; ++i) { + const metrics = ( + await getMetrics( + true, + (m: NodeMetrics) => m.metrics?.task_claim?.timestamp !== previousTaskClaimTimestamp + ) + ).metrics; + expect(metrics).not.to.be(null); + expect(metrics?.task_claim).not.to.be(null); + expect(metrics?.task_claim?.value).not.to.be(null); + + expect(metrics?.task_claim?.value.success).to.equal(1); + expect(metrics?.task_claim?.value.total).to.equal(1); + + previousTaskClaimTimestamp = metrics?.task_claim?.timestamp!; + + // check that duration histogram exists + expect(metrics?.task_claim?.value.duration).not.to.be(null); + expect(Array.isArray(metrics?.task_claim?.value.duration.counts)).to.be(true); + expect(Array.isArray(metrics?.task_claim?.value.duration.values)).to.be(true); + } + }); + }); + + describe('task run test', () => { + let ruleId: string | null = null; + before(async () => { + // create a rule that fires actions + const rule = await request + .post(`/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send({ + enabled: true, + name: 'test rule', + tags: [], + rule_type_id: '.es-query', + consumer: 'alerts', + // set schedule long so we can control when it runs + schedule: { interval: '1d' }, + actions: [], + params: { + aggType: 'count', + esQuery: '{\n "query":{\n "match_all" : {}\n }\n}', + excludeHitsFromPreviousRun: false, + groupBy: 'all', + index: ['.kibana-event-log*'], + searchType: 'esQuery', + size: 100, + termSize: 5, + threshold: [0], + thresholdComparator: '>', + timeField: '@timestamp', + timeWindowSize: 5, + timeWindowUnit: 'm', + }, + }) + .expect(200) + .then((response) => response.body); + + ruleId = rule.id; + }); + + after(async () => { + // delete rule + await request.delete(`/api/alerting/rule/${ruleId}`).set('kbn-xsrf', 'foo').expect(204); + }); + + it('should increment task run success/total counters', async () => { + const initialMetrics = ( + await getMetrics( + false, + (metrics) => + metrics?.metrics?.task_run?.value.by_type.alerting?.total === 1 && + metrics?.metrics?.task_run?.value.by_type.alerting?.success === 1 + ) + ).metrics; + expect(initialMetrics).not.to.be(null); + expect(initialMetrics?.task_claim).not.to.be(null); + expect(initialMetrics?.task_claim?.value).not.to.be(null); + + for (let i = 0; i < 1; ++i) { + // run the rule and expect counters to increment + await request + .post('/api/sample_tasks/run_soon') + .set('kbn-xsrf', 'xxx') + .send({ task: { id: ruleId } }) + .expect(200); + + await getMetrics( + false, + (metrics) => + metrics?.metrics?.task_run?.value.by_type.alerting?.total === i + 2 && + metrics?.metrics?.task_run?.value.by_type.alerting?.success === i + 2 + ); + } + + // counter should reset on its own + await getMetrics( + false, + (metrics) => + metrics?.metrics?.task_run?.value.by_type.alerting?.total === 0 && + metrics?.metrics?.task_run?.value.by_type.alerting?.success === 0 + ); + }); + }); + }); +} From 17936ffd21d4b4b274d2cda90902764ed0d4ae07 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 10 Aug 2023 15:35:34 +0100 Subject: [PATCH 28/45] fix(NA): yarn env vars for node_modules mirrors (#163549) This PR fixes the setup we have for the node_module mirrors vars that are overriding and pointing into our middle cache. The previous configuration was not working as intended as the env vars set globally on CI never ended up in the bazel managed yarn install. Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- WORKSPACE.bazel | 4 ++++ src/dev/ci_setup/setup_env.sh | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel index 0b5c0d0bc36347..baec1394531438 100644 --- a/WORKSPACE.bazel +++ b/WORKSPACE.bazel @@ -57,7 +57,11 @@ yarn_install( quiet = False, frozen_lockfile = False, environment = { + "GECKODRIVER_CDNURL": "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache", + "CHROMEDRIVER_CDNURL": "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache", + "CHROMEDRIVER_CDNBINARIESURL": "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache", "SASS_BINARY_SITE": "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-sass", "RE2_DOWNLOAD_MIRROR": "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2", + "CYPRESS_DOWNLOAD_MIRROR": "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/cypress", } ) diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh index 2bcf3775183e58..c1942775c88b54 100644 --- a/src/dev/ci_setup/setup_env.sh +++ b/src/dev/ci_setup/setup_env.sh @@ -128,10 +128,10 @@ export PATH="$PATH:$yarnGlobalDir" # use a proxy to fetch chromedriver/geckodriver asset export GECKODRIVER_CDNURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" -export CHROMEDRIVER_LEGACY_CDNURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" export CHROMEDRIVER_CDNURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" export CHROMEDRIVER_CDNBINARIESURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" export RE2_DOWNLOAD_MIRROR="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" +export SASS_BINARY_SITE="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-sass" export CYPRESS_DOWNLOAD_MIRROR="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/cypress" export CHECKS_REPORTER_ACTIVE=false From ea57caed71e5a9eca5325fc9e16f0bd34ebf3c7a Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Thu, 10 Aug 2023 07:43:05 -0700 Subject: [PATCH 29/45] unskip license type functional test (#163199) --- x-pack/test/licensing_plugin/scenario.ts | 16 ++++++++-------- x-pack/test/licensing_plugin/server/updates.ts | 3 +-- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/x-pack/test/licensing_plugin/scenario.ts b/x-pack/test/licensing_plugin/scenario.ts index f7d2f5790460dc..051a937d98d354 100644 --- a/x-pack/test/licensing_plugin/scenario.ts +++ b/x-pack/test/licensing_plugin/scenario.ts @@ -74,18 +74,18 @@ export function createScenario({ getService, getPageObjects }: FtrProviderContex .post('/_license/?acknowledge=true') .send({ license: { - uid: '00000000-d3ad-7357-c0d3-000000000000', + uid: '504430e6-503c-4316-85cb-b402c730ca08', type: 'enterprise', - issue_date_in_millis: 1577836800000, - start_date_in_millis: 1577836800000, - // expires 2022-12-31 - expiry_date_in_millis: 1672531199999, + issue_date_in_millis: 1669680000000, + start_date_in_millis: 1669680000000, + // expires 2024-12-31 + expiry_date_in_millis: 1735689599999, max_resource_units: 250, max_nodes: null, - issued_to: 'Elastic Internal Use (development environments)', - issuer: 'Elastic', + issued_to: 'Elastic - INTERNAL (development environments)', + issuer: 'API', signature: - 'AAAABQAAAA1gHUVis7hel8b8nNCAAAAAIAo5/x6hrsGh1GqqrJmy4qgmEC7gK0U4zQ6q5ZEMhm4jAAABAKMR+w3KZsMJfG5jNWgZXJLwRmiNqN7k94vKFgRdj1yM+gA9ufhXIn9d01OvFhPjilIqm+fxVjCxXwGKbFRiwtTWnTYjXPuNml+qCFGgUWguWEcVoIW6VU7/lYOqMJ4EB4zOMLe93P267iaDm542aelQrW1OJ69lGGuPBik8v9r1bNZzKBQ99VUr/qoosGDAm0udh2HxWzYoCL5lDML5Niy87xlVCubSSBXdUXzUgdZKKk6pKaMdHswB1gjvEfnwqPxEWAyrV0BCr/T1WehXd7U4p6/zt6sJ6cPh+34AZe9g4+3WPKrZhX4iaSHMDDHn4HNjO72CZ2oi42ZDNnJ37tA=', + 'AAAABQAAAA2h1vBafHuRhjOHREKYAAAAIAo5/x6hrsGh1GqqrJmy4qgmEC7gK0U4zQ6q5ZEMhm4jAAABAByGz9MmRW/L7vQriISa6u8Oov7zykA+Cv55BToWEthSn0c5KQUxcWG+K5Cm4/OkFsXA8TE4zFnlSgYxmQi2Eqq7IAKGdcxI/xhQfMsq5RWlSEwtfyV0M2RKJxgam8o2lvKC9EbrU76ISYr7jTkgoBl6GFSjdfXMHmxNXBSKDDm03ZeXkWkvuNNFrHJuYivf2Se9OeeB/eu4jqUI0UuNfPYF07ZcYvtKfj3KX+aysCSV2FW8wgyAjndOPEinfYcwAJ09zcl+MTig2K0DQTsYkLykXmzZnLz6qeuVVFjCTowxizDFW+5MrpzUnwkjqv8CFhLfvxG7waWQWslv8fXLUn8=', }, }) .auth('license_manager_user', 'license_manager_user-password') diff --git a/x-pack/test/licensing_plugin/server/updates.ts b/x-pack/test/licensing_plugin/server/updates.ts index 6acbe42bc1abe4..ccec87dc0cdc67 100644 --- a/x-pack/test/licensing_plugin/server/updates.ts +++ b/x-pack/test/licensing_plugin/server/updates.ts @@ -17,8 +17,7 @@ export default function (ftrContext: FtrProviderContext) { const scenario = createScenario(ftrContext); - // FLAKY: https://github.com/elastic/kibana/issues/110938 - describe.skip('changes in license types', () => { + describe('changes in license types', () => { after(async () => { await scenario.teardown(); }); From b97059c2dc1c45b80d2c2de211eec0fb262567b3 Mon Sep 17 00:00:00 2001 From: Maryam Saeidi Date: Thu, 10 Aug 2023 16:56:30 +0200 Subject: [PATCH 30/45] [AO] Fix add_to_case functional test (#163155) Fixes #156312, fixes #156677, fixes #156928, fixes #156929, fixes #156588 ## Summary Fixes the functional test based on @dmlemeshko 's suggestion. Flaky test runner [50]: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/2776 Flaky test runner [200]: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/2804 Flaky test runner [200]: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/2843 --> After the last change related to redirect, failures in this test are related to https://github.com/elastic/kibana/issues/163427 [DONE] ~~**[On hold]** Will merge it after investigating https://github.com/elastic/kibana/issues/156588 to make sure all the related issues are fixed for this function test.~~ --- .../pages/alerts/components/alert_actions.tsx | 6 +++++- .../services/observability/alerts/add_to_case.ts | 3 ++- .../services/observability/alerts/common.ts | 2 ++ .../functional/services/observability/users.ts | 5 ++++- .../observability/pages/alerts/add_to_case.ts | 16 +++++----------- 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx index b82b45f1065e23..14afd4994b2be0 100644 --- a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx +++ b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx @@ -248,7 +248,11 @@ export function AlertActions({ isOpen={isPopoverOpen} panelPaddingSize="none" > - +
diff --git a/x-pack/test/functional/services/observability/alerts/add_to_case.ts b/x-pack/test/functional/services/observability/alerts/add_to_case.ts index 7211325fad2a1c..61972732434320 100644 --- a/x-pack/test/functional/services/observability/alerts/add_to_case.ts +++ b/x-pack/test/functional/services/observability/alerts/add_to_case.ts @@ -52,7 +52,8 @@ export function ObservabilityAlertsAddToCaseProvider({ getService }: FtrProvider }; const closeFlyout = async () => { - return await (await testSubjects.find('euiFlyoutCloseButton')).click(); + await testSubjects.click('euiFlyoutCloseButton'); // click close button + await testSubjects.missingOrFail('euiFlyoutCloseButton'); // wait for flyout to be closed }; const getAddToExistingCaseModalOrFail = async () => { diff --git a/x-pack/test/functional/services/observability/alerts/common.ts b/x-pack/test/functional/services/observability/alerts/common.ts index 7a3f1f609a4031..5986de63a2d74f 100644 --- a/x-pack/test/functional/services/observability/alerts/common.ts +++ b/x-pack/test/functional/services/observability/alerts/common.ts @@ -20,6 +20,7 @@ const DATE_WITH_DATA = { const ALERTS_FLYOUT_SELECTOR = 'alertsFlyout'; const FILTER_FOR_VALUE_BUTTON_SELECTOR = 'filterForValue'; const ALERTS_TABLE_CONTAINER_SELECTOR = 'alertsTable'; +const ALERTS_TABLE_ACTIONS_MENU_SELECTOR = 'alertsTableActionsMenu'; const VIEW_RULE_DETAILS_SELECTOR = 'viewRuleDetails'; const VIEW_RULE_DETAILS_FLYOUT_SELECTOR = 'viewRuleDetailsFlyout'; @@ -209,6 +210,7 @@ export function ObservabilityAlertsCommonProvider({ const openActionsMenuForRow = retryOnStale.wrap(async (rowIndex: number) => { const actionsOverflowButton = await getActionsButtonByIndex(rowIndex); await actionsOverflowButton.click(); + await testSubjects.existOrFail(ALERTS_TABLE_ACTIONS_MENU_SELECTOR); }); const viewRuleDetailsButtonClick = async () => { diff --git a/x-pack/test/functional/services/observability/users.ts b/x-pack/test/functional/services/observability/users.ts index 4e33afe270223e..ba67ce8602f50d 100644 --- a/x-pack/test/functional/services/observability/users.ts +++ b/x-pack/test/functional/services/observability/users.ts @@ -11,9 +11,11 @@ import { FtrProviderContext } from '../../ftr_provider_context'; type CreateRolePayload = Pick; const OBSERVABILITY_TEST_ROLE_NAME = 'observability-functional-test-role'; +const HOME_PAGE_SELECTOR = 'homeApp'; export function ObservabilityUsersProvider({ getPageObject, getService }: FtrProviderContext) { const security = getService('security'); + const testSubjects = getService('testSubjects'); const commonPageObject = getPageObject('common'); /** @@ -24,7 +26,8 @@ export function ObservabilityUsersProvider({ getPageObject, getService }: FtrPro */ const setTestUserRole = async (roleDefinition: CreateRolePayload) => { // return to neutral grounds to avoid running into permission problems on reload - await commonPageObject.navigateToActualUrl('kibana'); + await commonPageObject.navigateToActualUrl('home'); + await testSubjects.existOrFail(HOME_PAGE_SELECTOR); await security.role.create(OBSERVABILITY_TEST_ROLE_NAME, roleDefinition); diff --git a/x-pack/test/observability_functional/apps/observability/pages/alerts/add_to_case.ts b/x-pack/test/observability_functional/apps/observability/pages/alerts/add_to_case.ts index cd33c64cc01834..062678ec989caa 100644 --- a/x-pack/test/observability_functional/apps/observability/pages/alerts/add_to_case.ts +++ b/x-pack/test/observability_functional/apps/observability/pages/alerts/add_to_case.ts @@ -25,8 +25,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { await esArchiver.unload('x-pack/test/functional/es_archives/observability/alerts'); }); - // FLAKY: https://github.com/elastic/kibana/issues/156312 - describe.skip('When user has all privileges for cases', () => { + describe('When user has all privileges for cases', () => { before(async () => { await observability.users.setTestUserRole( observability.users.defineBasicObservabilityRole({ @@ -42,9 +41,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { }); it('renders case options in the overflow menu', async () => { - await retry.try(async () => { - await observability.alerts.common.openActionsMenuForRow(0); - }); + await observability.alerts.common.openActionsMenuForRow(0); await retry.try(async () => { await observability.alerts.addToCase.getAddToExistingCaseSelectorOrFail(); @@ -64,9 +61,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { }); it('opens a modal when Add to existing case is clicked', async () => { - await retry.try(async () => { - await observability.alerts.common.openActionsMenuForRow(0); - }); + await observability.alerts.common.openActionsMenuForRow(0); await retry.try(async () => { await observability.alerts.addToCase.addToExistingCaseButtonClick(); @@ -91,9 +86,8 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { }); it('does not render case options in the overflow menu', async () => { - await retry.try(async () => { - await observability.alerts.common.openActionsMenuForRow(0); - }); + await observability.alerts.common.openActionsMenuForRow(0); + await retry.try(async () => { await observability.alerts.addToCase.missingAddToExistingCaseSelectorOrFail(); await observability.alerts.addToCase.missingAddToNewCaseSelectorOrFail(); From 8ad6744643adc4c8f5b0aee198afdd9ed7a84c95 Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Thu, 10 Aug 2023 10:57:32 -0400 Subject: [PATCH 31/45] chore(slo): Add response required fields (#163430) --- .../docs/openapi/slo/bundled.json | 28 +++++++++++++++++++ .../docs/openapi/slo/bundled.yaml | 25 +++++++++++++++++ .../slo/components/schemas/error_budget.yaml | 5 ++++ .../slo/components/schemas/slo_response.yaml | 16 +++++++++++ .../slo/components/schemas/summary.yaml | 4 +++ 5 files changed, 78 insertions(+) diff --git a/x-pack/plugins/observability/docs/openapi/slo/bundled.json b/x-pack/plugins/observability/docs/openapi/slo/bundled.json index efc5fd9c5b15f3..a949bc868850eb 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/bundled.json +++ b/x-pack/plugins/observability/docs/openapi/slo/bundled.json @@ -1264,6 +1264,12 @@ "error_budget": { "title": "Error budget", "type": "object", + "required": [ + "initial", + "consumed", + "remaining", + "isEstimated" + ], "properties": { "initial": { "type": "number", @@ -1291,6 +1297,11 @@ "title": "Summary", "type": "object", "description": "The SLO computed data", + "required": [ + "status", + "sliValue", + "errorBudget" + ], "properties": { "status": { "$ref": "#/components/schemas/summary_status" @@ -1307,6 +1318,23 @@ "slo_response": { "title": "SLO response", "type": "object", + "required": [ + "id", + "name", + "description", + "indicator", + "timeWindow", + "budgetingMethod", + "objective", + "settings", + "revision", + "summary", + "enabled", + "groupBy", + "instanceId", + "createdAt", + "updatedAt" + ], "properties": { "id": { "description": "The identifier of the SLO.", diff --git a/x-pack/plugins/observability/docs/openapi/slo/bundled.yaml b/x-pack/plugins/observability/docs/openapi/slo/bundled.yaml index ec2aa41bc77af4..1a134dd4d5d6b7 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/bundled.yaml +++ b/x-pack/plugins/observability/docs/openapi/slo/bundled.yaml @@ -867,6 +867,11 @@ components: error_budget: title: Error budget type: object + required: + - initial + - consumed + - remaining + - isEstimated properties: initial: type: number @@ -888,6 +893,10 @@ components: title: Summary type: object description: The SLO computed data + required: + - status + - sliValue + - errorBudget properties: status: $ref: '#/components/schemas/summary_status' @@ -899,6 +908,22 @@ components: slo_response: title: SLO response type: object + required: + - id + - name + - description + - indicator + - timeWindow + - budgetingMethod + - objective + - settings + - revision + - summary + - enabled + - groupBy + - instanceId + - createdAt + - updatedAt properties: id: description: The identifier of the SLO. diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/error_budget.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/error_budget.yaml index c344c8472821df..3fc9505989fe9f 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/error_budget.yaml +++ b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/error_budget.yaml @@ -1,5 +1,10 @@ title: Error budget type: object +required: + - initial + - consumed + - remaining + - isEstimated properties: initial: type: number diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_response.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_response.yaml index 0663c31e40a0f0..b4e5eb85f3264b 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_response.yaml +++ b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/slo_response.yaml @@ -1,5 +1,21 @@ title: SLO response type: object +required: + - id + - name + - description + - indicator + - timeWindow + - budgetingMethod + - objective + - settings + - revision + - summary + - enabled + - groupBy + - instanceId + - createdAt + - updatedAt properties: id: description: The identifier of the SLO. diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/summary.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/summary.yaml index a7b1be7d053b10..5dfb724f318347 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/summary.yaml +++ b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/summary.yaml @@ -1,6 +1,10 @@ title: Summary type: object description: The SLO computed data +required: + - status + - sliValue + - errorBudget properties: status: $ref: './summary_status.yaml' From 294ff34d041762749971ce3dd416beb9c13bed83 Mon Sep 17 00:00:00 2001 From: "Quynh Nguyen (Quinn)" <43350163+qn895@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:03:38 -0500 Subject: [PATCH 32/45] [ML] Provide hints for empty fields in dropdown options in Anomaly detection & Transform creation wizards, Change point detection view (#163371) --- .../field_stats_flyout_provider.tsx | 107 +++++++++++++++++- .../field_stats_info_button.tsx | 96 ++++++++++------ .../get_merged_populated_fields_query.test.ts | 106 +++++++++++++++++ .../get_merged_populated_fields_query.ts | 74 ++++++++++++ .../populated_fields/index.ts | 8 ++ .../populated_fields_cache_manager.ts | 45 ++++++++ .../use_field_stats_flytout_context.ts | 5 + .../use_field_stats_trigger.tsx | 12 +- .../components/agg_select/agg_select.tsx | 8 +- .../pivot_configuration.tsx | 6 +- .../translations/translations/fr-FR.json | 2 +- .../translations/translations/ja-JP.json | 2 +- .../translations/translations/zh-CN.json | 2 +- 13 files changed, 425 insertions(+), 48 deletions(-) create mode 100644 x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/get_merged_populated_fields_query.test.ts create mode 100644 x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/get_merged_populated_fields_query.ts create mode 100644 x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/index.ts create mode 100644 x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/populated_fields_cache_manager.ts diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_flyout_provider.tsx b/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_flyout_provider.tsx index b14abfe2f98954..f72fb8d00f1733 100644 --- a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_flyout_provider.tsx +++ b/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_flyout_provider.tsx @@ -10,15 +10,36 @@ import type { DataView } from '@kbn/data-plugin/common'; import type { FieldStatsServices } from '@kbn/unified-field-list/src/components/field_stats'; import type { TimeRange as TimeRangeMs } from '@kbn/ml-date-picker'; import type { FieldStatsProps } from '@kbn/unified-field-list/src/components/field_stats'; -import { MLFieldStatsFlyoutContext } from './use_field_stats_flytout_context'; +import { useEffect } from 'react'; +import { getProcessedFields } from '@kbn/ml-data-grid'; +import { stringHash } from '@kbn/ml-string-hash'; +import { lastValueFrom } from 'rxjs'; +import { useRef } from 'react'; +import { getMergedSampleDocsForPopulatedFieldsQuery } from './populated_fields/get_merged_populated_fields_query'; +import { useMlKibana } from '../../contexts/kibana'; import { FieldStatsFlyout } from './field_stats_flyout'; +import { MLFieldStatsFlyoutContext } from './use_field_stats_flytout_context'; +import { PopulatedFieldsCacheManager } from './populated_fields/populated_fields_cache_manager'; export const FieldStatsFlyoutProvider: FC<{ dataView: DataView; fieldStatsServices: FieldStatsServices; timeRangeMs?: TimeRangeMs; dslQuery?: FieldStatsProps['dslQuery']; -}> = ({ dataView, fieldStatsServices, timeRangeMs, dslQuery, children }) => { + disablePopulatedFields?: boolean; +}> = ({ + dataView, + fieldStatsServices, + timeRangeMs, + dslQuery, + disablePopulatedFields = false, + children, +}) => { + const { + services: { + data: { search }, + }, + } = useMlKibana(); const [isFieldStatsFlyoutVisible, setFieldStatsIsFlyoutVisible] = useState(false); const [fieldName, setFieldName] = useState(); const [fieldValue, setFieldValue] = useState(); @@ -27,6 +48,86 @@ export const FieldStatsFlyoutProvider: FC<{ () => setFieldStatsIsFlyoutVisible(!isFieldStatsFlyoutVisible), [isFieldStatsFlyoutVisible] ); + const [manager] = useState(new PopulatedFieldsCacheManager()); + const [populatedFields, setPopulatedFields] = useState | undefined>(); + const abortController = useRef(new AbortController()); + + useEffect( + function fetchSampleDocsEffect() { + if (disablePopulatedFields) return; + + let unmounted = false; + + if (abortController.current) { + abortController.current.abort(); + abortController.current = new AbortController(); + } + + const queryAndRunTimeMappings = getMergedSampleDocsForPopulatedFieldsQuery({ + searchQuery: dslQuery, + runtimeFields: dataView.getRuntimeMappings(), + datetimeField: dataView.getTimeField()?.name, + timeRange: timeRangeMs, + }); + const indexPattern = dataView.getIndexPattern(); + const esSearchRequestParams = { + index: indexPattern, + body: { + fields: ['*'], + _source: false, + ...queryAndRunTimeMappings, + size: 1000, + }, + }; + const cacheKey = stringHash(JSON.stringify(esSearchRequestParams)).toString(); + + const fetchSampleDocuments = async function () { + try { + const resp = await lastValueFrom( + search.search( + { + params: esSearchRequestParams, + }, + { abortSignal: abortController.current.signal } + ) + ); + + const docs = resp.rawResponse.hits.hits.map((d) => getProcessedFields(d.fields ?? {})); + + // Get all field names for each returned doc and flatten it + // to a list of unique field names used across all docs. + const fieldsWithData = new Set(docs.map(Object.keys).flat(1)); + manager.set(cacheKey, fieldsWithData); + if (!unmounted) { + setPopulatedFields(fieldsWithData); + } + } catch (e) { + if (e.name !== 'AbortError') { + // eslint-disable-next-line no-console + console.error( + `An error occurred fetching sample documents to determine populated field stats. + \nQuery:\n${JSON.stringify(esSearchRequestParams)} + \nError:${e}` + ); + } + } + }; + + const cachedResult = manager.get(cacheKey); + if (cachedResult) { + return cachedResult; + } else { + fetchSampleDocuments(); + } + + return () => { + unmounted = true; + abortController.current.abort(); + }; + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [JSON.stringify({ dslQuery, dataViewId: dataView.id, timeRangeMs })] + ); return ( ; export const FieldStatsInfoButton = ({ field, label, - searchValue = '', onButtonClick, + disabled, + isEmpty = false, + hideTrigger = false, }: { field: FieldForStats; label: string; searchValue?: string; + disabled?: boolean; + isEmpty?: boolean; onButtonClick?: (field: FieldForStats) => void; + hideTrigger?: boolean; }) => { + const themeVars = useCurrentThemeVars(); + const emptyFieldMessage = isEmpty + ? ' ' + + i18n.translate('xpack.ml.newJob.wizard.fieldContextPopover.emptyFieldInSampleDocsMsg', { + defaultMessage: '(no data found in 1000 sample records)', + }) + : ''; return ( - - ) => { - if (ev.type === 'click') { - ev.currentTarget.focus(); - } - ev.preventDefault(); - ev.stopPropagation(); + > + ) => { + if (ev.type === 'click') { + ev.currentTarget.focus(); + } + ev.preventDefault(); + ev.stopPropagation(); - if (onButtonClick) { - onButtonClick(field); - } - }} - aria-label={i18n.translate( - 'xpack.ml.newJob.wizard.fieldContextPopover.inspectFieldStatsTooltipArialabel', - { - defaultMessage: 'Inspect field statistics', + if (onButtonClick) { + onButtonClick(field); + } + }} + aria-label={ + i18n.translate( + 'xpack.ml.newJob.wizard.fieldContextPopover.inspectFieldStatsTooltipAriaLabel', + { + defaultMessage: 'Inspect field statistics', + } + ) + emptyFieldMessage } - )} - /> - + /> + + ) : null} - - + + - {label} + + {label} + ); diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/get_merged_populated_fields_query.test.ts b/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/get_merged_populated_fields_query.test.ts new file mode 100644 index 00000000000000..0ead649ab428a7 --- /dev/null +++ b/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/get_merged_populated_fields_query.test.ts @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getMergedSampleDocsForPopulatedFieldsQuery } from './get_merged_populated_fields_query'; + +describe('getMergedSampleDocsForPopulatedFieldsQuery()', () => { + it('should wrap the original query in function_score', () => { + expect( + getMergedSampleDocsForPopulatedFieldsQuery({ + searchQuery: { match_all: {} }, + runtimeFields: {}, + }) + ).toStrictEqual({ + query: { + function_score: { query: { bool: { must: [{ match_all: {} }] } }, random_score: {} }, + }, + runtime_mappings: {}, + }); + }); + + it('should append the time range to the query if timeRange and datetimeField are provided', () => { + expect( + getMergedSampleDocsForPopulatedFieldsQuery({ + searchQuery: { + bool: { + should: [{ match_phrase: { version: '1' } }], + minimum_should_match: 1, + filter: [ + { + terms: { + cluster_uuid: '', + }, + }, + ], + must_not: [], + }, + }, + runtimeFields: {}, + timeRange: { from: 1613995874349, to: 1614082617000 }, + datetimeField: '@timestamp', + }) + ).toStrictEqual({ + query: { + function_score: { + query: { + bool: { + filter: [ + { terms: { cluster_uuid: '' } }, + { + range: { + '@timestamp': { + format: 'epoch_millis', + gte: 1613995874349, + lte: 1614082617000, + }, + }, + }, + ], + minimum_should_match: 1, + must_not: [], + should: [{ match_phrase: { version: '1' } }], + }, + }, + random_score: {}, + }, + }, + runtime_mappings: {}, + }); + }); + + it('should not append the time range to the query if datetimeField is undefined', () => { + expect( + getMergedSampleDocsForPopulatedFieldsQuery({ + searchQuery: { + bool: { + should: [{ match_phrase: { airline: 'AAL' } }], + minimum_should_match: 1, + filter: [], + must_not: [], + }, + }, + runtimeFields: {}, + timeRange: { from: 1613995874349, to: 1614082617000 }, + }) + ).toStrictEqual({ + query: { + function_score: { + query: { + bool: { + filter: [], + minimum_should_match: 1, + must_not: [], + should: [{ match_phrase: { airline: 'AAL' } }], + }, + }, + random_score: {}, + }, + }, + runtime_mappings: {}, + }); + }); +}); diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/get_merged_populated_fields_query.ts b/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/get_merged_populated_fields_query.ts new file mode 100644 index 00000000000000..72873928499809 --- /dev/null +++ b/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/get_merged_populated_fields_query.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 * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { TimeRange as TimeRangeMs } from '@kbn/ml-date-picker'; +import { isPopulatedObject } from '@kbn/ml-is-populated-object'; +import { cloneDeep } from 'lodash'; +import { getDefaultDSLQuery } from '@kbn/ml-query-utils'; + +export const getMergedSampleDocsForPopulatedFieldsQuery = ({ + runtimeFields, + searchQuery, + datetimeField, + timeRange, +}: { + runtimeFields: estypes.MappingRuntimeFields; + searchQuery?: estypes.QueryDslQueryContainer; + datetimeField?: string; + timeRange?: TimeRangeMs; +}): { + query: estypes.QueryDslQueryContainer; + runtime_mappings?: estypes.MappingRuntimeFields; +} => { + let rangeFilter; + + if (timeRange && datetimeField !== undefined) { + if (isPopulatedObject(timeRange, ['from', 'to']) && timeRange.to > timeRange.from) { + rangeFilter = { + range: { + [datetimeField]: { + gte: timeRange.from, + lte: timeRange.to, + format: 'epoch_millis', + }, + }, + }; + } + } + + const query = cloneDeep( + !searchQuery || isPopulatedObject(searchQuery, ['match_all']) + ? getDefaultDSLQuery() + : searchQuery + ); + + if (rangeFilter && isPopulatedObject(query, ['bool'])) { + if (Array.isArray(query.bool.filter)) { + query.bool.filter.push(rangeFilter); + } else { + query.bool.filter = [rangeFilter]; + } + } + + const queryAndRuntimeFields: { + query: estypes.QueryDslQueryContainer; + runtime_mappings?: estypes.MappingRuntimeFields; + } = { + query: { + function_score: { + query, + // @ts-expect-error random_score is valid dsl query + random_score: {}, + }, + }, + }; + if (runtimeFields) { + queryAndRuntimeFields.runtime_mappings = runtimeFields; + } + return queryAndRuntimeFields; +}; diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/index.ts b/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/index.ts new file mode 100644 index 00000000000000..339f112beeb9f4 --- /dev/null +++ b/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { PopulatedFieldsCacheManager } from './populated_fields_cache_manager'; diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/populated_fields_cache_manager.ts b/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/populated_fields_cache_manager.ts new file mode 100644 index 00000000000000..547ad65c1179e4 --- /dev/null +++ b/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/populated_fields_cache_manager.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +type StringifiedQueryKey = string; +type UpdatedTimestamp = number; + +const DEFAULT_EXPIRATION_MS = 60000; +export class PopulatedFieldsCacheManager { + private _resultsCache = new Map(); + private readonly _lastUpdatedTimestamps = new Map(); + + constructor(private readonly _expirationDurationMs = DEFAULT_EXPIRATION_MS) {} + + private clearOldCacheIfNeeded() { + if (this._resultsCache.size > 10) { + this._resultsCache.clear(); + this._lastUpdatedTimestamps.clear(); + } + } + + private clearExpiredCache(key: StringifiedQueryKey) { + // If result is available but past the expiration duration, clear cache + const lastUpdatedTs = this._lastUpdatedTimestamps.get(key); + const now = Date.now(); + if (lastUpdatedTs !== undefined && lastUpdatedTs - now > this._expirationDurationMs) { + this._resultsCache.delete(key); + } + } + + public get(key: StringifiedQueryKey) { + return this._resultsCache.get(key); + } + + public set(key: StringifiedQueryKey, value: any) { + this.clearExpiredCache(key); + this.clearOldCacheIfNeeded(); + + this._resultsCache.set(key, Date.now()); + this._resultsCache.set(key, value); + } +} diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/use_field_stats_flytout_context.ts b/x-pack/plugins/ml/public/application/components/field_stats_flyout/use_field_stats_flytout_context.ts index 2de9fda1ded176..8aa7cfcc42de47 100644 --- a/x-pack/plugins/ml/public/application/components/field_stats_flyout/use_field_stats_flytout_context.ts +++ b/x-pack/plugins/ml/public/application/components/field_stats_flyout/use_field_stats_flytout_context.ts @@ -6,6 +6,7 @@ */ import { createContext, useContext } from 'react'; +import { TimeRange as TimeRangeMs } from '@kbn/ml-date-picker'; interface MLJobWizardFieldStatsFlyoutProps { isFlyoutVisible: boolean; setIsFlyoutVisible: (v: boolean) => void; @@ -14,6 +15,8 @@ interface MLJobWizardFieldStatsFlyoutProps { fieldName?: string; setFieldValue: (v: string) => void; fieldValue?: string | number; + timeRangeMs?: TimeRangeMs; + populatedFields?: Set; } export const MLFieldStatsFlyoutContext = createContext({ isFlyoutVisible: false, @@ -21,6 +24,8 @@ export const MLFieldStatsFlyoutContext = createContext {}, setFieldName: () => {}, setFieldValue: () => {}, + timeRangeMs: undefined, + populatedFields: undefined, }); export function useFieldStatsFlyoutContext() { diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/use_field_stats_trigger.tsx b/x-pack/plugins/ml/public/application/components/field_stats_flyout/use_field_stats_trigger.tsx index da69ad87c46bc1..52011e72a6ddc8 100644 --- a/x-pack/plugins/ml/public/application/components/field_stats_flyout/use_field_stats_trigger.tsx +++ b/x-pack/plugins/ml/public/application/components/field_stats_flyout/use_field_stats_trigger.tsx @@ -6,17 +6,17 @@ */ import React, { ReactNode, useCallback } from 'react'; -import { EuiComboBoxOptionOption } from '@elastic/eui'; +import type { EuiComboBoxOptionOption } from '@elastic/eui'; import type { Field } from '@kbn/ml-anomaly-utils'; import { optionCss } from './eui_combo_box_with_field_stats'; import { useFieldStatsFlyoutContext } from '.'; import { FieldForStats, FieldStatsInfoButton } from './field_stats_info_button'; - interface Option extends EuiComboBoxOptionOption { field: Field; } + export const useFieldStatsTrigger = () => { - const { setIsFlyoutVisible, setFieldName } = useFieldStatsFlyoutContext(); + const { setIsFlyoutVisible, setFieldName, populatedFields } = useFieldStatsFlyoutContext(); const closeFlyout = useCallback(() => setIsFlyoutVisible(false), [setIsFlyoutVisible]); @@ -29,6 +29,7 @@ export const useFieldStatsTrigger = () => { }, [setFieldName, setIsFlyoutVisible] ); + const renderOption = useCallback( (option: EuiComboBoxOptionOption, searchValue: string): ReactNode => { const field = (option as Option).field; @@ -36,13 +37,15 @@ export const useFieldStatsTrigger = () => { option.label ) : ( ); }, - [handleFieldStatsButtonClick] + // eslint-disable-next-line react-hooks/exhaustive-deps + [handleFieldStatsButtonClick, populatedFields?.size] ); return { renderOption, @@ -51,5 +54,6 @@ export const useFieldStatsTrigger = () => { handleFieldStatsButtonClick, closeFlyout, optionCss, + populatedFields, }; }; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/agg_select/agg_select.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/agg_select/agg_select.tsx index 4c8d2996a318b9..824fb52398fd47 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/agg_select/agg_select.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/agg_select/agg_select.tsx @@ -8,6 +8,7 @@ import React, { FC, useContext, useState, useEffect, useMemo } from 'react'; import { EuiComboBox, EuiComboBoxOptionOption, EuiFormRow } from '@elastic/eui'; import type { Field, Aggregation, AggFieldPair } from '@kbn/ml-anomaly-utils'; +import { EVENT_RATE_FIELD_ID } from '@kbn/ml-anomaly-utils'; import { FieldStatsInfoButton } from '../../../../../../../components/field_stats_flyout/field_stats_info_button'; import { JobCreatorContext } from '../../../job_creator_context'; import { useFieldStatsTrigger } from '../../../../../../../components/field_stats_flyout/use_field_stats_trigger'; @@ -43,7 +44,7 @@ export const AggSelect: FC = ({ fields, changeHandler, selectedOptions, r // create list of labels based on already selected detectors // so they can be removed from the dropdown list const removeLabels = removeOptions.map(createLabel); - const { handleFieldStatsButtonClick } = useFieldStatsTrigger(); + const { handleFieldStatsButtonClick, populatedFields } = useFieldStatsTrigger(); const options: EuiComboBoxOptionOption[] = useMemo( () => @@ -55,6 +56,8 @@ export const AggSelect: FC = ({ fields, changeHandler, selectedOptions, r // for more robust rendering label: ( = ({ fields, changeHandler, selectedOptions, r } return aggOption; }), - [handleFieldStatsButtonClick, fields, removeLabels] + // eslint-disable-next-line react-hooks/exhaustive-deps + [handleFieldStatsButtonClick, fields, removeLabels, populatedFields?.size] ); useEffect(() => { diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/pivot_configuration/pivot_configuration.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/pivot_configuration/pivot_configuration.tsx index 214158606d32e8..158d26f8ee9d1e 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/pivot_configuration/pivot_configuration.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/pivot_configuration/pivot_configuration.tsx @@ -28,7 +28,8 @@ export const PivotConfiguration: FC = memo( const { ml: { useFieldStatsTrigger, FieldStatsInfoButton }, } = useAppDependencies(); - const { handleFieldStatsButtonClick, closeFlyout, renderOption } = useFieldStatsTrigger(); + const { handleFieldStatsButtonClick, closeFlyout, renderOption, populatedFields } = + useFieldStatsTrigger(); const { addAggregation, @@ -52,6 +53,7 @@ export const PivotConfiguration: FC = memo( // for more robust rendering label: ( = memo( }; return aggOption; }), - [aggOptions, FieldStatsInfoButton, handleFieldStatsButtonClick] + [aggOptions, FieldStatsInfoButton, handleFieldStatsButtonClick, populatedFields] ); return ( diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 11f7f76868a517..05b6128ced4267 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -24808,7 +24808,7 @@ "xpack.ml.newJob.wizard.fieldContextFlyoutCloseButton": "Fermer", "xpack.ml.newJob.wizard.fieldContextFlyoutTitle": "Statistiques de champ", "xpack.ml.newJob.wizard.fieldContextPopover.inspectFieldStatsTooltip": "Inspecter les statistiques de champ", - "xpack.ml.newJob.wizard.fieldContextPopover.inspectFieldStatsTooltipArialabel": "Inspecter les statistiques de champ", + "xpack.ml.newJob.wizard.fieldContextPopover.inspectFieldStatsTooltipAriaLabel": "Inspecter les statistiques de champ", "xpack.ml.newJob.wizard.jobCreatorTitle.advanced": "Avancé", "xpack.ml.newJob.wizard.jobCreatorTitle.categorization": "Catégorisation", "xpack.ml.newJob.wizard.jobCreatorTitle.geo": "Données géographiques", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index db52ef8b1fae05..9a50ace7956fdc 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -24808,7 +24808,7 @@ "xpack.ml.newJob.wizard.fieldContextFlyoutCloseButton": "閉じる", "xpack.ml.newJob.wizard.fieldContextFlyoutTitle": "フィールド統計情報", "xpack.ml.newJob.wizard.fieldContextPopover.inspectFieldStatsTooltip": "検査フィールド統計情報", - "xpack.ml.newJob.wizard.fieldContextPopover.inspectFieldStatsTooltipArialabel": "検査フィールド統計情報", + "xpack.ml.newJob.wizard.fieldContextPopover.inspectFieldStatsTooltipAriaLabel": "検査フィールド統計情報", "xpack.ml.newJob.wizard.jobCreatorTitle.advanced": "高度な設定", "xpack.ml.newJob.wizard.jobCreatorTitle.categorization": "カテゴリー分け", "xpack.ml.newJob.wizard.jobCreatorTitle.geo": "地理情報", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index b15afb493e31d0..b4ba29347e08f5 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -24807,7 +24807,7 @@ "xpack.ml.newJob.wizard.fieldContextFlyoutCloseButton": "关闭", "xpack.ml.newJob.wizard.fieldContextFlyoutTitle": "字段统计信息", "xpack.ml.newJob.wizard.fieldContextPopover.inspectFieldStatsTooltip": "检查字段统计信息", - "xpack.ml.newJob.wizard.fieldContextPopover.inspectFieldStatsTooltipArialabel": "检查字段统计信息", + "xpack.ml.newJob.wizard.fieldContextPopover.inspectFieldStatsTooltipAriaLabel": "检查字段统计信息", "xpack.ml.newJob.wizard.jobCreatorTitle.advanced": "高级", "xpack.ml.newJob.wizard.jobCreatorTitle.categorization": "归类", "xpack.ml.newJob.wizard.jobCreatorTitle.geo": "地理", From 1d9f76bc562c4e586feb52cf74971394c9c3b35d Mon Sep 17 00:00:00 2001 From: Sander Philipse <94373878+sphilipse@users.noreply.github.com> Date: Thu, 10 Aug 2023 17:06:10 +0200 Subject: [PATCH 33/45] [Search] Add Slack and Gmail connectors (#163321) ## Summary This adds Slack and Gmail as Tech Preview connectors. --- .../common/connectors/connectors.ts | 22 ++++++ .../search_index/connector/constants.ts | 13 ++++ .../shared/icons/connector_icons.ts | 4 ++ .../enterprise_search/server/integrations.ts | 68 ++++++++++++------- .../translations/translations/fr-FR.json | 4 -- .../translations/translations/ja-JP.json | 4 -- .../translations/translations/zh-CN.json | 4 -- 7 files changed, 81 insertions(+), 38 deletions(-) diff --git a/x-pack/plugins/enterprise_search/common/connectors/connectors.ts b/x-pack/plugins/enterprise_search/common/connectors/connectors.ts index 1c5a3f30dcc4ab..a1d5b87d9f9657 100644 --- a/x-pack/plugins/enterprise_search/common/connectors/connectors.ts +++ b/x-pack/plugins/enterprise_search/common/connectors/connectors.ts @@ -150,6 +150,17 @@ export const CONNECTOR_DEFINITIONS: ConnectorServerSideDefinition[] = [ }), serviceType: 'dropbox', }, + { + iconPath: 'gmail.svg', + isBeta: false, + isNative: false, + isTechPreview: true, + keywords: ['google', 'gmail', 'connector', 'mail'], + name: i18n.translate('xpack.enterpriseSearch.content.nativeConnectors.gmail.name', { + defaultMessage: 'Gmail', + }), + serviceType: 'gmail', + }, { iconPath: 'oracle.svg', isBeta: true, @@ -181,6 +192,17 @@ export const CONNECTOR_DEFINITIONS: ConnectorServerSideDefinition[] = [ }), serviceType: 'servicenow', }, + { + iconPath: 'slack.svg', + isBeta: false, + isNative: false, + isTechPreview: true, + keywords: ['slack', 'connector'], + name: i18n.translate('xpack.enterpriseSearch.content.nativeConnectors.slack.name', { + defaultMessage: 'Slack', + }), + serviceType: 'slack', + }, { iconPath: 'sharepoint_server.svg', isBeta: true, diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/constants.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/constants.ts index 24b9d342f52d47..bea446bf528c00 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/constants.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/constants.ts @@ -37,6 +37,12 @@ export const CONNECTORS_DICT: Record = { externalDocsUrl: '', icon: CONNECTOR_ICONS.dropbox, }, + gmail: { + docsUrl: '', // TODO + externalAuthDocsUrl: '', + externalDocsUrl: '', + icon: CONNECTOR_ICONS.gmail, + }, google_cloud_storage: { docsUrl: docLinks.connectorsGoogleCloudStorage, externalAuthDocsUrl: 'https://cloud.google.com/storage/docs/authentication', @@ -118,6 +124,13 @@ export const CONNECTORS_DICT: Record = { icon: CONNECTOR_ICONS.sharepoint_online, platinumOnly: true, }, + slack: { + docsUrl: '', // TODO + externalAuthDocsUrl: '', + externalDocsUrl: '', + icon: CONNECTOR_ICONS.slack, + platinumOnly: true, + }, }; export const CONNECTORS = CONNECTOR_DEFINITIONS.map((connector) => ({ diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/icons/connector_icons.ts b/x-pack/plugins/enterprise_search/public/applications/shared/icons/connector_icons.ts index 5533e6e5d3d3c9..0f412540939849 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/icons/connector_icons.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/icons/connector_icons.ts @@ -10,6 +10,7 @@ import confluence_cloud from '../../../assets/source_icons/confluence_cloud.svg' import custom from '../../../assets/source_icons/custom.svg'; import dropbox from '../../../assets/source_icons/dropbox.svg'; import github from '../../../assets/source_icons/github.svg'; +import gmail from '../../../assets/source_icons/gmail.svg'; import google_cloud_storage from '../../../assets/source_icons/google_cloud_storage.svg'; import google_drive from '../../../assets/source_icons/google_drive.svg'; import jira_cloud from '../../../assets/source_icons/jira_cloud.svg'; @@ -23,6 +24,7 @@ import amazon_s3 from '../../../assets/source_icons/s3.svg'; import servicenow from '../../../assets/source_icons/servicenow.svg'; import sharepoint from '../../../assets/source_icons/sharepoint.svg'; import sharepoint_online from '../../../assets/source_icons/sharepoint_online.svg'; +import slack from '../../../assets/source_icons/slack.svg'; export const CONNECTOR_ICONS = { amazon_s3, @@ -31,6 +33,7 @@ export const CONNECTOR_ICONS = { custom, dropbox, github, + gmail, google_cloud_storage, google_drive, jira_cloud, @@ -43,4 +46,5 @@ export const CONNECTOR_ICONS = { servicenow, sharepoint, sharepoint_online, + slack, }; diff --git a/x-pack/plugins/enterprise_search/server/integrations.ts b/x-pack/plugins/enterprise_search/server/integrations.ts index 8e60b6b73ff40d..6d2e67d6025484 100644 --- a/x-pack/plugins/enterprise_search/server/integrations.ts +++ b/x-pack/plugins/enterprise_search/server/integrations.ts @@ -34,19 +34,6 @@ const workplaceSearchIntegrations: WorkplaceSearchIntegration[] = [ ), categories: ['enterprise_search', 'workplace_search_content_source'], }, - { - id: 'gmail', - title: i18n.translate('xpack.enterpriseSearch.workplaceSearch.integrations.gmailName', { - defaultMessage: 'Gmail', - }), - description: i18n.translate( - 'xpack.enterpriseSearch.workplaceSearch.integrations.gmailDescription', - { - defaultMessage: 'Search over your emails managed by Gmail with Workplace Search.', - } - ), - categories: ['enterprise_search', 'google_cloud', 'workplace_search_content_source'], - }, { id: 'onedrive', title: i18n.translate('xpack.enterpriseSearch.workplaceSearch.integrations.onedriveName', { @@ -77,19 +64,6 @@ const workplaceSearchIntegrations: WorkplaceSearchIntegration[] = [ ), categories: ['enterprise_search', 'workplace_search_content_source'], }, - { - id: 'slack', - title: i18n.translate('xpack.enterpriseSearch.workplaceSearch.integrations.slackName', { - defaultMessage: 'Slack', - }), - description: i18n.translate( - 'xpack.enterpriseSearch.workplaceSearch.integrations.slackDescription', - { - defaultMessage: 'Search over your messages on Slack with Workplace Search.', - } - ), - categories: ['enterprise_search', 'workplace_search_content_source'], - }, { id: 'zendesk', title: i18n.translate('xpack.enterpriseSearch.workplaceSearch.integrations.zendeskName', { @@ -303,6 +277,27 @@ export const registerEnterpriseSearchIntegrations = ( isBeta: false, }); + customIntegrations.registerCustomIntegration({ + id: 'gmail', + title: i18n.translate('xpack.enterpriseSearch.content.integrations.gmail', { + defaultMessage: 'Gmail', + }), + description: i18n.translate('xpack.enterpriseSearch.content.integrations.gmailDescription', { + defaultMessage: 'Search over your content on Gmail.', + }), + categories: ['enterprise_search', 'elastic_stack', 'connector', 'connector_client'], + uiInternalPath: + '/app/enterprise_search/content/search_indices/new_index/connector?service_type=gmail', + icons: [ + { + type: 'svg', + src: http.basePath.prepend('/plugins/enterpriseSearch/assets/source_icons/gmail.svg'), + }, + ], + shipper: 'enterprise_search', + isBeta: false, + }); + customIntegrations.registerCustomIntegration({ id: 'mongodb', title: i18n.translate('xpack.enterpriseSearch.workplaceSearch.integrations.mongoDBName', { @@ -547,6 +542,27 @@ export const registerEnterpriseSearchIntegrations = ( isBeta: false, }); + customIntegrations.registerCustomIntegration({ + id: 'slack', + title: i18n.translate('xpack.enterpriseSearch.content.integrations.slack', { + defaultMessage: 'Slack', + }), + description: i18n.translate('xpack.enterpriseSearch.content.integrations.slackDescription', { + defaultMessage: 'Search over your content on Slack.', + }), + categories: ['enterprise_search', 'elastic_stack', 'connector', 'connector_client'], + uiInternalPath: + '/app/enterprise_search/content/search_indices/new_index/connector?service_type=slack', + icons: [ + { + type: 'svg', + src: http.basePath.prepend('/plugins/enterpriseSearch/assets/source_icons/slack.svg'), + }, + ], + shipper: 'enterprise_search', + isBeta: false, + }); + customIntegrations.registerCustomIntegration({ id: 'oracle', title: i18n.translate('xpack.enterpriseSearch.workplaceSearch.integrations.oracleName', { diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 05b6128ced4267..dcd9d175820be4 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -14873,8 +14873,6 @@ "xpack.enterpriseSearch.workplaceSearch.integrations.azureBlobDescription": "Effectuez des recherches sur votre contenu sur Stockage Blob Azure avec Enterprise Search.", "xpack.enterpriseSearch.workplaceSearch.integrations.boxDescription": "Effectuez des recherches dans vos fichiers et dossiers stockés sur Box avec Workplace Search.", "xpack.enterpriseSearch.workplaceSearch.integrations.boxName": "Box", - "xpack.enterpriseSearch.workplaceSearch.integrations.gmailDescription": "Effectuez des recherches dans vos e-mails gérés par Gmail avec Workplace Search.", - "xpack.enterpriseSearch.workplaceSearch.integrations.gmailName": "Gmail", "xpack.enterpriseSearch.workplaceSearch.integrations.googleCloud": "Google Cloud Storage", "xpack.enterpriseSearch.workplaceSearch.integrations.googleCloudDescription": "Effectuez des recherches sur votre contenu sur Google Cloud Storage avec Enterprise Search.", "xpack.enterpriseSearch.workplaceSearch.integrations.googleDriveDescription": "Effectuez des recherches dans vos documents sur Google Drive avec Workplace Search.", @@ -14900,8 +14898,6 @@ "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointOnlineName": "SharePoint Online", "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointServerDescription": "Effectuez des recherches dans vos fichiers stockés sur le serveur Microsoft SharePoint avec Workplace Search.", "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointServerName": "Serveur SharePoint", - "xpack.enterpriseSearch.workplaceSearch.integrations.slackDescription": "Effectuez des recherches dans vos messages sur Slack avec Workplace Search.", - "xpack.enterpriseSearch.workplaceSearch.integrations.slackName": "Slack", "xpack.enterpriseSearch.workplaceSearch.integrations.zendeskDescription": "Effectuez des recherches dans vos tickets sur Zendesk avec Workplace Search.", "xpack.enterpriseSearch.workplaceSearch.integrations.zendeskName": "Zendesk", "xpack.enterpriseSearch.workplaceSearch.keepEditing.button": "Continuer la modification", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 9a50ace7956fdc..f49042924be5dd 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -14887,8 +14887,6 @@ "xpack.enterpriseSearch.workplaceSearch.integrations.azureBlobDescription": "エンタープライズ サーチでAzure Blob Storageのコンテンツを検索します。", "xpack.enterpriseSearch.workplaceSearch.integrations.boxDescription": "Workplace Searchを使用して、Boxに保存されたファイルとフォルダーを検索します。", "xpack.enterpriseSearch.workplaceSearch.integrations.boxName": "Box", - "xpack.enterpriseSearch.workplaceSearch.integrations.gmailDescription": "Workplace Searchを使用して、Gmailで管理された電子メールを検索します。", - "xpack.enterpriseSearch.workplaceSearch.integrations.gmailName": "Gmail", "xpack.enterpriseSearch.workplaceSearch.integrations.googleCloud": "Google Cloud Storage", "xpack.enterpriseSearch.workplaceSearch.integrations.googleCloudDescription": "エンタープライズ サーチでGoogle Cloud Storageのコンテンツを検索します。", "xpack.enterpriseSearch.workplaceSearch.integrations.googleDriveDescription": "Workplace Searchを使用して、Google Driveのドキュメントを検索します。", @@ -14914,8 +14912,6 @@ "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointOnlineName": "SharePoint Online", "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointServerDescription": "Workplace Searchを使用して、Microsoft SharePoint Serverに保存されたファイルを検索します。", "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointServerName": "SharePoint Server", - "xpack.enterpriseSearch.workplaceSearch.integrations.slackDescription": "Workplace Searchを使用して、Slackのメッセージを検索します。", - "xpack.enterpriseSearch.workplaceSearch.integrations.slackName": "Slack", "xpack.enterpriseSearch.workplaceSearch.integrations.zendeskDescription": "Workplace Searchを使用して、Zendeskのチケットを検索します。", "xpack.enterpriseSearch.workplaceSearch.integrations.zendeskName": "Zendesk", "xpack.enterpriseSearch.workplaceSearch.keepEditing.button": "編集を続行", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index b4ba29347e08f5..1556ea23a7cc36 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -14887,8 +14887,6 @@ "xpack.enterpriseSearch.workplaceSearch.integrations.azureBlobDescription": "使用 Enterprise Search 在 Azure Blob 存储上搜索您的内容。", "xpack.enterpriseSearch.workplaceSearch.integrations.boxDescription": "通过 Workplace Search 搜索存储在 Box 上的文件和文件夹。", "xpack.enterpriseSearch.workplaceSearch.integrations.boxName": "Box", - "xpack.enterpriseSearch.workplaceSearch.integrations.gmailDescription": "通过 Workplace Search 搜索由 Gmail 管理的电子邮件。", - "xpack.enterpriseSearch.workplaceSearch.integrations.gmailName": "Gmail", "xpack.enterpriseSearch.workplaceSearch.integrations.googleCloud": "Google Cloud Storage", "xpack.enterpriseSearch.workplaceSearch.integrations.googleCloudDescription": "使用 Enterprise Search 在 Google Cloud Storage 上搜索您的内容。", "xpack.enterpriseSearch.workplaceSearch.integrations.googleDriveDescription": "通过 Workplace Search 搜索 Google 云端硬盘上的文档。", @@ -14914,8 +14912,6 @@ "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointOnlineName": "Sharepoint", "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointServerDescription": "通过 Workplace Search 搜索存储在 Microsoft SharePoint Server 上的文件。", "xpack.enterpriseSearch.workplaceSearch.integrations.sharepointServerName": "SharePoint Server", - "xpack.enterpriseSearch.workplaceSearch.integrations.slackDescription": "通过 Workplace Search 搜索 Slack 上的消息。", - "xpack.enterpriseSearch.workplaceSearch.integrations.slackName": "Slack", "xpack.enterpriseSearch.workplaceSearch.integrations.zendeskDescription": "通过 Workplace Search 搜索 Zendesk 上的工单。", "xpack.enterpriseSearch.workplaceSearch.integrations.zendeskName": "Zendesk", "xpack.enterpriseSearch.workplaceSearch.keepEditing.button": "继续编辑", From 263c534429b1798fe456e02fac09aa2ba2df36f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Thu, 10 Aug 2023 17:27:30 +0200 Subject: [PATCH 34/45] [Telemetry Schema Validation] Allow `null` on `string` (#163499) --- .../src/schema_ftr_validations/schema_to_config_schema.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/kbn-telemetry-tools/src/schema_ftr_validations/schema_to_config_schema.ts b/packages/kbn-telemetry-tools/src/schema_ftr_validations/schema_to_config_schema.ts index b80a42e1012848..5c12c199bbe6d3 100644 --- a/packages/kbn-telemetry-tools/src/schema_ftr_validations/schema_to_config_schema.ts +++ b/packages/kbn-telemetry-tools/src/schema_ftr_validations/schema_to_config_schema.ts @@ -59,7 +59,8 @@ function valueSchemaToConfigSchema(value: TelemetrySchemaValue): Type { case 'keyword': case 'text': case 'date': - return schema.string(); + // Some plugins return `null` when there is no value to report + return schema.oneOf([schema.string(), schema.literal(null)]); case 'byte': case 'double': case 'float': From 531127c4b23c5825a3a80dc8e91a713d680a3a45 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Thu, 10 Aug 2023 08:32:28 -0700 Subject: [PATCH 35/45] [OAS] Add data views openAPI folder and first entrypoints (#163444) --- docs/api/data-views/create.asciidoc | 5 + docs/api/data-views/default-get.asciidoc | 5 + docs/api/data-views/default-set.asciidoc | 5 + docs/api/data-views/delete.asciidoc | 5 + docs/api/data-views/get-all.asciidoc | 6 + docs/api/data-views/get.asciidoc | 5 + .../data-views/runtime-fields/get.asciidoc | 5 + docs/api/data-views/update.asciidoc | 5 + src/plugins/data_views/docs/openapi/README.md | 35 + .../data_views/docs/openapi/bundled.json | 2617 +++++++++++++++++ .../data_views/docs/openapi/bundled.yaml | 1969 +++++++++++++ .../examples/create_data_view_request.yaml | 16 + .../examples/create_data_view_response.yaml | 50 + .../examples/get_data_view_response.yaml | 1156 ++++++++ .../examples/get_data_views_response.yaml | 31 + .../get_default_data_view_response.yaml | 5 + .../examples/get_runtime_field_response.yaml | 617 ++++ .../set_default_data_view_request.yaml | 6 + .../examples/update_data_view_request.yaml | 11 + .../openapi/components/headers/kbn_xsrf.yaml | 6 + .../components/parameters/field_name.yaml | 7 + .../components/parameters/view_id.yaml | 7 + .../components/schemas/400_response.yaml | 15 + .../components/schemas/404_response.yaml | 15 + .../components/schemas/allownoindex.yaml | 2 + .../create_data_view_request_object.yaml | 44 + .../schemas/data_view_response_object.yaml | 36 + .../components/schemas/fieldattrs.yaml | 2 + .../components/schemas/fieldformats.yaml | 2 + .../components/schemas/namespaces.yaml | 5 + .../components/schemas/runtimefieldmap.yaml | 2 + .../components/schemas/sourcefilters.yaml | 2 + .../components/schemas/timefieldname.yaml | 2 + .../openapi/components/schemas/title.yaml | 2 + .../docs/openapi/components/schemas/type.yaml | 2 + .../openapi/components/schemas/typemeta.yaml | 2 + .../update_data_view_request_object.yaml | 35 + .../data_views/docs/openapi/entrypoint.yaml | 59 + .../docs/openapi/paths/api@data_views.yaml | 37 + .../paths/api@data_views@data_view.yaml | 36 + .../api@data_views@data_view@{viewid}.yaml | 85 + ...ew@{viewid}@runtime_field@{fieldname}.yaml | 35 + .../openapi/paths/api@data_views@default.yaml | 67 + 43 files changed, 7061 insertions(+) create mode 100644 src/plugins/data_views/docs/openapi/README.md create mode 100644 src/plugins/data_views/docs/openapi/bundled.json create mode 100644 src/plugins/data_views/docs/openapi/bundled.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/examples/create_data_view_request.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/examples/create_data_view_response.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/examples/get_data_view_response.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/examples/get_data_views_response.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/examples/get_default_data_view_response.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/examples/get_runtime_field_response.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/examples/set_default_data_view_request.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/examples/update_data_view_request.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/headers/kbn_xsrf.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/parameters/field_name.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/parameters/view_id.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/400_response.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/404_response.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/allownoindex.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/create_data_view_request_object.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/data_view_response_object.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/fieldattrs.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/fieldformats.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/namespaces.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/runtimefieldmap.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/sourcefilters.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/timefieldname.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/title.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/type.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/typemeta.yaml create mode 100644 src/plugins/data_views/docs/openapi/components/schemas/update_data_view_request_object.yaml create mode 100644 src/plugins/data_views/docs/openapi/entrypoint.yaml create mode 100644 src/plugins/data_views/docs/openapi/paths/api@data_views.yaml create mode 100644 src/plugins/data_views/docs/openapi/paths/api@data_views@data_view.yaml create mode 100644 src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}.yaml create mode 100644 src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml create mode 100644 src/plugins/data_views/docs/openapi/paths/api@data_views@default.yaml diff --git a/docs/api/data-views/create.asciidoc b/docs/api/data-views/create.asciidoc index 6a358c09bd1625..57e526a3c97bd0 100644 --- a/docs/api/data-views/create.asciidoc +++ b/docs/api/data-views/create.asciidoc @@ -6,6 +6,11 @@ experimental[] Create data views. +[NOTE] +==== +For the most up-to-date API details, refer to the +{kib-repo}/tree/{branch}/src/plugins/data_views/docs/openapi[open API specification]. +==== [[data-views-api-create-request]] ==== Request diff --git a/docs/api/data-views/default-get.asciidoc b/docs/api/data-views/default-get.asciidoc index 51e5bf60d7097f..4a80350d5ea63d 100644 --- a/docs/api/data-views/default-get.asciidoc +++ b/docs/api/data-views/default-get.asciidoc @@ -6,6 +6,11 @@ experimental[] Retrieve a default data view ID. Kibana UI uses the default data view unless user picks a different one. +[NOTE] +==== +For the most up-to-date API details, refer to the +{kib-repo}/tree/{branch}/src/plugins/data_views/docs/openapi[open API specification]. +==== [[data-views-api-default-get-request]] ==== Request diff --git a/docs/api/data-views/default-set.asciidoc b/docs/api/data-views/default-set.asciidoc index dd62f859f7220e..e03d7f38d5199c 100644 --- a/docs/api/data-views/default-set.asciidoc +++ b/docs/api/data-views/default-set.asciidoc @@ -7,6 +7,11 @@ experimental[] Set a default data view ID. Kibana UI will use the default data view unless user picks a different one. The API doesn't validate if given `data_view_id` is a valid id. +[NOTE] +==== +For the most up-to-date API details, refer to the +{kib-repo}/tree/{branch}/src/plugins/data_views/docs/openapi[open API specification]. +==== [[data-views-api-default-set-request]] ==== Request diff --git a/docs/api/data-views/delete.asciidoc b/docs/api/data-views/delete.asciidoc index a3165c799243dc..cdd1b506421935 100644 --- a/docs/api/data-views/delete.asciidoc +++ b/docs/api/data-views/delete.asciidoc @@ -8,6 +8,11 @@ experimental[] Delete data views. WARNING: Once you delete a data view, _it cannot be recovered_. +[NOTE] +==== +For the most up-to-date API details, refer to the +{kib-repo}/tree/{branch}/src/plugins/data_views/docs/openapi[open API specification]. +==== [[data-views-api-delete-request]] ==== Request diff --git a/docs/api/data-views/get-all.asciidoc b/docs/api/data-views/get-all.asciidoc index 42727c38f6d98c..2511b084953cba 100644 --- a/docs/api/data-views/get-all.asciidoc +++ b/docs/api/data-views/get-all.asciidoc @@ -6,6 +6,12 @@ experimental[] Retrieve a list of all data views. +[NOTE] +==== +For the most up-to-date API details, refer to the +{kib-repo}/tree/{branch}/src/plugins/data_views/docs/openapi[open API specification]. +==== + [[data-views-api-get-all-request]] ==== Request diff --git a/docs/api/data-views/get.asciidoc b/docs/api/data-views/get.asciidoc index 9d6a4160aeacf9..81f0ef536e614f 100644 --- a/docs/api/data-views/get.asciidoc +++ b/docs/api/data-views/get.asciidoc @@ -6,6 +6,11 @@ experimental[] Retrieve a single data view by ID. +[NOTE] +==== +For the most up-to-date API details, refer to the +{kib-repo}/tree/{branch}/src/plugins/data_views/docs/openapi[open API specification]. +==== [[data-views-api-get-request]] ==== Request diff --git a/docs/api/data-views/runtime-fields/get.asciidoc b/docs/api/data-views/runtime-fields/get.asciidoc index 831744fdc06b5c..95e405c2d77423 100644 --- a/docs/api/data-views/runtime-fields/get.asciidoc +++ b/docs/api/data-views/runtime-fields/get.asciidoc @@ -6,6 +6,11 @@ experimental[] Get a runtime field +[NOTE] +==== +For the most up-to-date API details, refer to the +{kib-repo}/tree/{branch}/src/plugins/data_views/docs/openapi[open API specification]. +==== [[data-views-runtime-field-get-request]] ==== Request diff --git a/docs/api/data-views/update.asciidoc b/docs/api/data-views/update.asciidoc index 4c8cd9a6b9db01..8d1e6013b3c0eb 100644 --- a/docs/api/data-views/update.asciidoc +++ b/docs/api/data-views/update.asciidoc @@ -7,6 +7,11 @@ experimental[] Update part of an data view. Only the specified fields are updated in the data view. Unspecified fields stay as they are persisted. +[NOTE] +==== +For the most up-to-date API details, refer to the +{kib-repo}/tree/{branch}/src/plugins/data_views/docs/openapi[open API specification]. +==== [[data-views-api-update-request]] ==== Request diff --git a/src/plugins/data_views/docs/openapi/README.md b/src/plugins/data_views/docs/openapi/README.md new file mode 100644 index 00000000000000..1480da85377064 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/README.md @@ -0,0 +1,35 @@ +# OpenAPI (Experimental) + +The current self-contained spec file is available as `bundled.json` or `bundled.yaml` and can be used for online tools like those found at . +This spec is experimental and may be incomplete or change later. + +A guide about the openApi specification can be found at [https://swagger.io/docs/specification/about/](https://swagger.io/docs/specification/about/). + + +## The `openapi` folder + +* `entrypoint.yaml` is the overview file which pulls together all the paths and components. +* [Paths](paths/README.md): Defines each endpoint. A path can have one operation per http method. +* [Components](components/README.md): Defines reusable components. + +## Tools + +It is possible to validate the docs before bundling them with the following +command: + +```bash +npx swagger-cli validate entrypoint.yaml +``` + +Then you can generate the `bundled` files by running the following commands: + +```bash +npx @redocly/cli bundle entrypoint.yaml --output bundled.yaml --ext yaml +npx @redocly/cli bundle entrypoint.yaml --output bundled.json --ext json +``` + +After generating the json bundle ensure that it is also valid by running the following command: + +```bash +npx @redocly/cli lint bundled.json +``` diff --git a/src/plugins/data_views/docs/openapi/bundled.json b/src/plugins/data_views/docs/openapi/bundled.json new file mode 100644 index 00000000000000..a4173278937c1c --- /dev/null +++ b/src/plugins/data_views/docs/openapi/bundled.json @@ -0,0 +1,2617 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Data views", + "description": "OpenAPI schema for data view endpoints", + "version": "0.1", + "contact": { + "name": "Kibana Core Team" + }, + "license": { + "name": "Elastic License 2.0", + "url": "https://www.elastic.co/licensing/elastic-license" + } + }, + "servers": [ + { + "url": "http://localhost:5601", + "description": "local" + } + ], + "security": [ + { + "basicAuth": [] + }, + { + "apiKeyAuth": [] + } + ], + "tags": [ + { + "name": "data views", + "description": "Data view APIs enable you to manage data views, formerly known as Kibana index patterns." + } + ], + "paths": { + "/api/data_views": { + "get": { + "summary": "Retrieves a list of all data views.", + "operationId": "getAllDataViews", + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", + "tags": [ + "data views" + ], + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data_view": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + }, + "title": { + "type": "string" + }, + "typeMeta": { + "type": "object" + } + } + } + } + } + }, + "examples": { + "getAllDataViewsResponse": { + "$ref": "#/components/examples/get_data_views_response" + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "/api/data_views/data_view": { + "post": { + "summary": "Creates a data view.", + "operationId": "createDataView", + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", + "tags": [ + "data views" + ], + "parameters": [ + { + "$ref": "#/components/parameters/kbn_xsrf" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/create_data_view_request_object" + }, + "examples": { + "createDataViewRequest": { + "$ref": "#/components/examples/create_data_view_request" + } + } + } + } + }, + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/data_view_response_object" + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/400_response" + } + } + } + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "/api/data_views/data_view/{viewId}": { + "get": { + "summary": "Retrieves a single data view by identifier.", + "operationId": "getDataView", + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", + "tags": [ + "data views" + ], + "parameters": [ + { + "$ref": "#/components/parameters/view_id" + } + ], + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/data_view_response_object" + }, + "examples": { + "getDataViewResponse": { + "$ref": "#/components/examples/get_data_view_response" + } + } + } + } + }, + "404": { + "description": "Object is not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/404_response" + } + } + } + } + } + }, + "delete": { + "summary": "Deletes a data view.", + "operationId": "deleteDataView", + "description": "WARNING: When you delete a data view, it cannot be recovered. This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", + "tags": [ + "data views" + ], + "parameters": [ + { + "$ref": "#/components/parameters/view_id" + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + }, + "404": { + "description": "Object is not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/404_response" + } + } + } + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "post": { + "summary": "Updates a data view.", + "operationId": "updateDataView", + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", + "tags": [ + "data views" + ], + "parameters": [ + { + "$ref": "#/components/parameters/kbn_xsrf" + }, + { + "$ref": "#/components/parameters/view_id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/update_data_view_request_object" + }, + "examples": { + "updateDataViewRequest": { + "$ref": "#/components/examples/update_data_view_request" + } + } + } + } + }, + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/data_view_response_object" + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/400_response" + } + } + } + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "/api/data_views/data_view/{viewId}/runtime_field/{fieldName}": { + "get": { + "summary": "Retrieves a runtime field.", + "operationId": "getRuntimeField", + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", + "tags": [ + "data views" + ], + "parameters": [ + { + "$ref": "#/components/parameters/field_name" + }, + { + "$ref": "#/components/parameters/view_id" + } + ], + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data_view": { + "type": "object" + }, + "fields": { + "type": "array", + "items": { + "type": "object" + } + } + } + }, + "examples": { + "getRuntimeFieldResponse": { + "$ref": "#/components/examples/get_runtime_field_response" + } + } + } + } + }, + "404": { + "description": "Object is not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/404_response" + } + } + } + } + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "/api/data_views/default": { + "get": { + "summary": "Retrieves the default data view identifier.", + "operationId": "getDefaultDataView", + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", + "tags": [ + "data views" + ], + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data_view_id": { + "type": "string" + } + } + }, + "examples": { + "getDefaultDataViewResponse": { + "$ref": "#/components/examples/get_default_data_view_response" + } + } + } + } + } + } + }, + "post": { + "summary": "Sets the default data view identifier.", + "operationId": "setDefaultDatailView", + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", + "tags": [ + "data views" + ], + "parameters": [ + { + "$ref": "#/components/parameters/kbn_xsrf" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "data_view_id" + ], + "properties": { + "data_view_id": { + "type": [ + "string", + "null" + ], + "description": "The data view identifier. NOTE: The API does not validate whether it is a valid identifier. Use `null` to unset the default data view.\n" + }, + "force": { + "type": "boolean", + "description": "Update an existing default data view identifier.", + "default": false + } + } + }, + "examples": { + "setDefaultDataViewRequest": { + "$ref": "#/components/examples/set_default_data_view_request" + } + } + } + } + }, + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "acknowledged": { + "type": "boolean" + } + } + } + } + } + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + } + }, + "components": { + "securitySchemes": { + "basicAuth": { + "type": "http", + "scheme": "basic" + }, + "apiKeyAuth": { + "type": "apiKey", + "in": "header", + "name": "ApiKey" + } + }, + "examples": { + "get_data_views_response": { + "summary": "The get all data views API returns a list of data views.", + "value": { + "data_view": [ + { + "id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f", + "namespaces": [ + "default" + ], + "title": "kibana_sample_data_ecommerce", + "typeMeta": {}, + "name": "Kibana Sample Data eCommerce" + }, + { + "id": "d3d7af60-4c81-11e8-b3d7-01146121b73d", + "namespaces": [ + "default" + ], + "title": "kibana_sample_data_flights", + "name": "Kibana Sample Data Flights" + }, + { + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "namespaces": [ + "default" + ], + "title": "kibana_sample_data_logs", + "name": "Kibana Sample Data Logs" + } + ] + } + }, + "create_data_view_request": { + "summary": "Create a data view with runtime fields.", + "value": { + "data_view": { + "title": "logstash-*", + "name": "My Logstash data view", + "runtimeFieldMap": { + "runtime_shape_name": { + "type": "keyword", + "script": { + "source": "emit(doc['shape_name'].value)" + } + } + } + } + } + }, + "get_data_view_response": { + "summary": "The get data view API returns a JSON object that contains information about the data view.", + "value": { + "data_view": { + "id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f", + "version": "WzUsMV0=", + "title": "kibana_sample_data_ecommerce", + "timeFieldName": "order_date", + "sourceFilters": [], + "fields": { + "_id": { + "count": 0, + "name": "_id", + "type": "string", + "esTypes": [ + "_id" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_index": { + "count": 0, + "name": "_index", + "type": "string", + "esTypes": [ + "_index" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_score": { + "count": 0, + "name": "_score", + "type": "number", + "scripted": false, + "searchable": false, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_source": { + "count": 0, + "name": "_source", + "type": "_source", + "esTypes": [ + "_source" + ], + "scripted": false, + "searchable": false, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "_source" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "category": { + "count": 0, + "name": "category", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "category.keyword": { + "count": 0, + "name": "category.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "category" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "currency": { + "count": 0, + "name": "currency", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_birth_date": { + "count": 0, + "name": "customer_birth_date", + "type": "date", + "esTypes": [ + "date" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "date" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_first_name": { + "count": 0, + "name": "customer_first_name", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_first_name.keyword": { + "count": 0, + "name": "customer_first_name.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "customer_first_name" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_full_name": { + "count": 0, + "name": "customer_full_name", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_full_name.keyword": { + "count": 0, + "name": "customer_full_name.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "customer_full_name" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_gender": { + "count": 0, + "name": "customer_gender", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_id": { + "count": 0, + "name": "customer_id", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_last_name": { + "count": 0, + "name": "customer_last_name", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_last_name.keyword": { + "count": 0, + "name": "customer_last_name.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "customer_last_name" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_phone": { + "count": 0, + "name": "customer_phone", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "day_of_week": { + "count": 0, + "name": "day_of_week", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "day_of_week_i": { + "count": 0, + "name": "day_of_week_i", + "type": "number", + "esTypes": [ + "integer" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "email": { + "count": 0, + "name": "email", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "event.dataset": { + "count": 0, + "name": "event.dataset", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "geoip.city_name": { + "count": 0, + "name": "geoip.city_name", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "geoip.continent_name": { + "count": 0, + "name": "geoip.continent_name", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "geoip.country_iso_code": { + "count": 0, + "name": "geoip.country_iso_code", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "geoip.location": { + "count": 0, + "name": "geoip.location", + "type": "geo_point", + "esTypes": [ + "geo_point" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "geo_point", + "params": { + "transform": "wkt" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "geoip.region_name": { + "count": 0, + "name": "geoip.region_name", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "manufacturer": { + "count": 0, + "name": "manufacturer", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "manufacturer.keyword": { + "count": 0, + "name": "manufacturer.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "manufacturer" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "order_date": { + "count": 0, + "name": "order_date", + "type": "date", + "esTypes": [ + "date" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "date" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "order_id": { + "count": 0, + "name": "order_id", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products._id": { + "count": 0, + "name": "products._id", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products._id.keyword": { + "count": 0, + "name": "products._id.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "products._id" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.base_price": { + "count": 0, + "name": "products.base_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.base_unit_price": { + "count": 0, + "name": "products.base_unit_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.category": { + "count": 0, + "name": "products.category", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.category.keyword": { + "count": 0, + "name": "products.category.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "products.category" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.created_on": { + "count": 0, + "name": "products.created_on", + "type": "date", + "esTypes": [ + "date" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "date" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.discount_amount": { + "count": 0, + "name": "products.discount_amount", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.discount_percentage": { + "count": 0, + "name": "products.discount_percentage", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.manufacturer": { + "count": 1, + "name": "products.manufacturer", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.manufacturer.keyword": { + "count": 0, + "name": "products.manufacturer.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "products.manufacturer" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.min_price": { + "count": 0, + "name": "products.min_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.price": { + "count": 1, + "name": "products.price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.product_id": { + "count": 0, + "name": "products.product_id", + "type": "number", + "esTypes": [ + "long" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.product_name": { + "count": 1, + "name": "products.product_name", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.product_name.keyword": { + "count": 0, + "name": "products.product_name.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "products.product_name" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.quantity": { + "count": 0, + "name": "products.quantity", + "type": "number", + "esTypes": [ + "integer" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.sku": { + "count": 0, + "name": "products.sku", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.tax_amount": { + "count": 0, + "name": "products.tax_amount", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.taxful_price": { + "count": 0, + "name": "products.taxful_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.taxless_price": { + "count": 0, + "name": "products.taxless_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.unit_discount_amount": { + "count": 0, + "name": "products.unit_discount_amount", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "sku": { + "count": 0, + "name": "sku", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "taxful_total_price": { + "count": 0, + "name": "taxful_total_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.[00]" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "taxless_total_price": { + "count": 0, + "name": "taxless_total_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "total_quantity": { + "count": 1, + "name": "total_quantity", + "type": "number", + "esTypes": [ + "integer" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "total_unique_products": { + "count": 0, + "name": "total_unique_products", + "type": "number", + "esTypes": [ + "integer" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "type": { + "count": 0, + "name": "type", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "user": { + "count": 0, + "name": "user", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + } + }, + "typeMeta": {}, + "fieldFormats": { + "taxful_total_price": { + "id": "number", + "params": { + "pattern": "$0,0.[00]" + } + }, + "products.price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "taxless_total_price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "products.taxless_price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "products.taxful_price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "products.min_price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "products.base_unit_price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "products.base_price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + } + }, + "runtimeFieldMap": {}, + "fieldAttrs": { + "products.manufacturer": { + "count": 1 + }, + "products.price": { + "count": 1 + }, + "products.product_name": { + "count": 1 + }, + "total_quantity": { + "count": 1 + } + }, + "allowNoIndex": false, + "name": "Kibana Sample Data eCommerce", + "namespaces": [ + "default" + ] + } + } + }, + "update_data_view_request": { + "summary": "Update some properties for a data view.", + "value": { + "data_view": { + "title": "kibana_sample_data_ecommerce", + "timeFieldName": "order_date", + "allowNoIndex": false, + "name": "Kibana Sample Data eCommerce" + }, + "refresh_fields": true + } + }, + "get_runtime_field_response": { + "summary": "The get runtime field API returns a JSON object that contains information about the runtime field (`hour_of_day`) and the data view (`d3d7af60-4c81-11e8-b3d7-01146121b73d`).", + "value": { + "fields": [ + { + "count": 0, + "name": "hour_of_day", + "type": "number", + "esTypes": [ + "long" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": false, + "shortDotsEnable": false, + "runtimeField": { + "type": "long", + "script": { + "source": "emit(doc['timestamp'].value.getHour());" + } + } + } + ], + "data_view": { + "id": "d3d7af60-4c81-11e8-b3d7-01146121b73d", + "version": "WzM2LDJd", + "title": "kibana_sample_data_flights", + "timeFieldName": "timestamp", + "sourceFilters": [], + "fields": { + "hour_of_day": { + "count": 0, + "name": "hour_of_day", + "type": "number", + "esTypes": [ + "long" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": false, + "format": { + "id": "number", + "params": { + "pattern": "00" + } + }, + "shortDotsEnable": false, + "runtimeField": { + "type": "long", + "script": { + "source": "emit(doc['timestamp'].value.getHour());" + } + } + }, + "AvgTicketPrice": { + "count": 0, + "name": "AvgTicketPrice", + "type": "number", + "esTypes": [ + "float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.[00]" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "Cancelled": { + "count": 0, + "name": "Cancelled", + "type": "boolean", + "esTypes": [ + "boolean" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "boolean" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "Carrier": { + "count": 0, + "name": "Carrier", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "Dest": { + "count": 0, + "name": "Dest", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DestAirportID": { + "count": 0, + "name": "DestAirportID", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DestCityName": { + "count": 0, + "name": "DestCityName", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DestCountry": { + "count": 0, + "name": "DestCountry", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DestLocation": { + "count": 0, + "name": "DestLocation", + "type": "geo_point", + "esTypes": [ + "geo_point" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "geo_point", + "params": { + "transform": "wkt" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DestRegion": { + "count": 0, + "name": "DestRegion", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DestWeather": { + "count": 0, + "name": "DestWeather", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DistanceKilometers": { + "count": 0, + "name": "DistanceKilometers", + "type": "number", + "esTypes": [ + "float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DistanceMiles": { + "count": 0, + "name": "DistanceMiles", + "type": "number", + "esTypes": [ + "float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "FlightDelay": { + "count": 0, + "name": "FlightDelay", + "type": "boolean", + "esTypes": [ + "boolean" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "boolean" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "FlightDelayMin": { + "count": 0, + "name": "FlightDelayMin", + "type": "number", + "esTypes": [ + "integer" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "FlightDelayType": { + "count": 0, + "name": "FlightDelayType", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "FlightNum": { + "count": 0, + "name": "FlightNum", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "FlightTimeHour": { + "count": 0, + "name": "FlightTimeHour", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "FlightTimeMin": { + "count": 0, + "name": "FlightTimeMin", + "type": "number", + "esTypes": [ + "float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "Origin": { + "count": 0, + "name": "Origin", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "OriginAirportID": { + "count": 0, + "name": "OriginAirportID", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "OriginCityName": { + "count": 0, + "name": "OriginCityName", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "OriginCountry": { + "count": 0, + "name": "OriginCountry", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "OriginLocation": { + "count": 0, + "name": "OriginLocation", + "type": "geo_point", + "esTypes": [ + "geo_point" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "geo_point", + "params": { + "transform": "wkt" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "OriginRegion": { + "count": 0, + "name": "OriginRegion", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "OriginWeather": { + "count": 0, + "name": "OriginWeather", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_id": { + "count": 0, + "name": "_id", + "type": "string", + "esTypes": [ + "_id" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_index": { + "count": 0, + "name": "_index", + "type": "string", + "esTypes": [ + "_index" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_score": { + "count": 0, + "name": "_score", + "type": "number", + "scripted": false, + "searchable": false, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_source": { + "count": 0, + "name": "_source", + "type": "_source", + "esTypes": [ + "_source" + ], + "scripted": false, + "searchable": false, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "_source" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "dayOfWeek": { + "count": 0, + "name": "dayOfWeek", + "type": "number", + "esTypes": [ + "integer" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "timestamp": { + "count": 0, + "name": "timestamp", + "type": "date", + "esTypes": [ + "date" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "date" + }, + "shortDotsEnable": false, + "isMapped": true + } + }, + "fieldFormats": { + "hour_of_day": { + "id": "number", + "params": { + "pattern": "00" + } + }, + "AvgTicketPrice": { + "id": "number", + "params": { + "pattern": "$0,0.[00]" + } + } + }, + "runtimeFieldMap": { + "hour_of_day": { + "type": "long", + "script": { + "source": "emit(doc['timestamp'].value.getHour());" + } + } + }, + "fieldAttrs": {}, + "allowNoIndex": false, + "name": "Kibana Sample Data Flights" + } + } + }, + "get_default_data_view_response": { + "summary": "The get default data view API returns the default data view identifier.", + "value": { + "data_view_id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f" + } + }, + "set_default_data_view_request": { + "summary": "Set the default data view identifier.", + "value": { + "data_view_id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f", + "force": true + } + } + }, + "parameters": { + "kbn_xsrf": { + "schema": { + "type": "string" + }, + "in": "header", + "name": "kbn-xsrf", + "description": "Cross-site request forgery protection", + "required": true + }, + "view_id": { + "in": "path", + "name": "viewId", + "description": "An identifier for the data view.", + "required": true, + "schema": { + "type": "string", + "example": "ff959d40-b880-11e8-a6d9-e546fe2bba5f" + } + }, + "field_name": { + "in": "path", + "name": "fieldName", + "description": "The name of the runtime field.", + "required": true, + "schema": { + "type": "string", + "example": "hour_of_day" + } + } + }, + "schemas": { + "allownoindex": { + "type": "boolean", + "description": "Allows the data view saved object to exist before the data is available." + }, + "fieldattrs": { + "type": "object", + "description": "A map of field attributes by field name." + }, + "fieldformats": { + "type": "object", + "description": "A map of field formats by field name." + }, + "namespaces": { + "type": "array", + "description": "An array of space identifiers for sharing the data view between multiple spaces.", + "items": { + "type": "string", + "default": "default" + } + }, + "runtimefieldmap": { + "type": "object", + "description": "A map of runtime field definitions by field name." + }, + "sourcefilters": { + "type": "array", + "description": "The array of field names you want to filter out in Discover." + }, + "timefieldname": { + "type": "string", + "description": "The timestamp field name, which you use for time-based data views." + }, + "title": { + "type": "string", + "description": "Comma-separated list of data streams, indices, and aliases that you want to search. Supports wildcards (`*`)." + }, + "type": { + "type": "string", + "description": "When set to `rollup`, identifies the rollup data views." + }, + "typemeta": { + "type": "object", + "description": "When you use rollup indices, contains the field list for the rollup data view API endpoints." + }, + "create_data_view_request_object": { + "title": "Create data view request", + "type": "object", + "required": [ + "data_view" + ], + "properties": { + "data_view": { + "type": "object", + "required": [ + "title" + ], + "description": "The data view object.", + "properties": { + "allowNoIndex": { + "$ref": "#/components/schemas/allownoindex" + }, + "fieldAttrs": { + "$ref": "#/components/schemas/fieldattrs" + }, + "fieldFormats": { + "$ref": "#/components/schemas/fieldformats" + }, + "fields": { + "type": "object" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string", + "description": "The data view name." + }, + "namespaces": { + "$ref": "#/components/schemas/namespaces" + }, + "runtimeFieldMap": { + "$ref": "#/components/schemas/runtimefieldmap" + }, + "sourceFilters": { + "$ref": "#/components/schemas/sourcefilters" + }, + "timeFieldName": { + "$ref": "#/components/schemas/timefieldname" + }, + "title": { + "$ref": "#/components/schemas/title" + }, + "type": { + "$ref": "#/components/schemas/type" + }, + "typeMeta": { + "$ref": "#/components/schemas/typemeta" + }, + "version": { + "type": "string" + } + } + }, + "override": { + "type": "boolean", + "description": "Override an existing data view if a data view with the provided title already exists.", + "default": false + } + } + }, + "data_view_response_object": { + "title": "Data view response properties", + "type": "object", + "properties": { + "data_view": { + "type": "object", + "properties": { + "allowNoIndex": { + "$ref": "#/components/schemas/allownoindex" + }, + "fieldAttrs": { + "$ref": "#/components/schemas/fieldattrs" + }, + "fieldFormats": { + "$ref": "#/components/schemas/fieldformats" + }, + "fields": { + "type": "object" + }, + "id": { + "type": "string", + "example": "ff959d40-b880-11e8-a6d9-e546fe2bba5f" + }, + "name": { + "type": "string", + "description": "The data view name." + }, + "namespaces": { + "$ref": "#/components/schemas/namespaces" + }, + "runtimeFieldMap": { + "$ref": "#/components/schemas/runtimefieldmap" + }, + "sourceFilters": { + "$ref": "#/components/schemas/sourcefilters" + }, + "timeFieldName": { + "$ref": "#/components/schemas/timefieldname" + }, + "title": { + "$ref": "#/components/schemas/title" + }, + "typeMeta": { + "$ref": "#/components/schemas/typemeta" + }, + "version": { + "type": "string", + "example": "WzQ2LDJd" + } + } + } + } + }, + "400_response": { + "title": "Bad request", + "type": "object", + "required": [ + "statusCode", + "error", + "message" + ], + "properties": { + "statusCode": { + "type": "number", + "example": 400 + }, + "error": { + "type": "string", + "example": "Bad Request" + }, + "message": { + "type": "string" + } + } + }, + "404_response": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Not Found", + "enum": [ + "Not Found" + ] + }, + "message": { + "type": "string", + "example": "Saved object [index-pattern/caaad6d0-920c-11ed-b36a-874bd1548a00] not found" + }, + "statusCode": { + "type": "integer", + "example": 404, + "enum": [ + 404 + ] + } + } + }, + "update_data_view_request_object": { + "title": "Update data view request", + "type": "object", + "required": [ + "data_view" + ], + "properties": { + "data_view": { + "type": "object", + "description": "The data view properties you want to update. Only the specified properties are updated in the data view. Unspecified fields stay as they are persisted.\n", + "properties": { + "allowNoIndex": { + "$ref": "#/components/schemas/allownoindex" + }, + "fieldFormats": { + "$ref": "#/components/schemas/fieldformats" + }, + "fields": { + "type": "object" + }, + "name": { + "type": "string" + }, + "runtimeFieldMap": { + "$ref": "#/components/schemas/runtimefieldmap" + }, + "sourceFilters": { + "$ref": "#/components/schemas/sourcefilters" + }, + "timeFieldName": { + "$ref": "#/components/schemas/timefieldname" + }, + "title": { + "$ref": "#/components/schemas/title" + }, + "type": { + "$ref": "#/components/schemas/type" + }, + "typeMeta": { + "$ref": "#/components/schemas/typemeta" + } + } + }, + "refresh_fields": { + "type": "boolean", + "description": "Reloads the data view fields after the data view is updated.", + "default": false + } + } + } + } + } +} \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/bundled.yaml b/src/plugins/data_views/docs/openapi/bundled.yaml new file mode 100644 index 00000000000000..b1c00562cef067 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/bundled.yaml @@ -0,0 +1,1969 @@ +openapi: 3.1.0 +info: + title: Data views + description: OpenAPI schema for data view endpoints + version: '0.1' + contact: + name: Kibana Core Team + license: + name: Elastic License 2.0 + url: https://www.elastic.co/licensing/elastic-license +servers: + - url: http://localhost:5601 + description: local +security: + - basicAuth: [] + - apiKeyAuth: [] +tags: + - name: data views + description: Data view APIs enable you to manage data views, formerly known as Kibana index patterns. +paths: + /api/data_views: + get: + summary: Retrieves a list of all data views. + operationId: getAllDataViews + description: | + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + properties: + data_view: + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + namespaces: + type: array + items: + type: string + title: + type: string + typeMeta: + type: object + examples: + getAllDataViewsResponse: + $ref: '#/components/examples/get_data_views_response' + servers: + - url: https://localhost:5601 + /api/data_views/data_view: + post: + summary: Creates a data view. + operationId: createDataView + description: | + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '#/components/parameters/kbn_xsrf' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/create_data_view_request_object' + examples: + createDataViewRequest: + $ref: '#/components/examples/create_data_view_request' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + $ref: '#/components/schemas/data_view_response_object' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/400_response' + servers: + - url: https://localhost:5601 + servers: + - url: https://localhost:5601 + /api/data_views/data_view/{viewId}: + get: + summary: Retrieves a single data view by identifier. + operationId: getDataView + description: | + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '#/components/parameters/view_id' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + $ref: '#/components/schemas/data_view_response_object' + examples: + getDataViewResponse: + $ref: '#/components/examples/get_data_view_response' + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/404_response' + delete: + summary: Deletes a data view. + operationId: deleteDataView + description: | + WARNING: When you delete a data view, it cannot be recovered. This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '#/components/parameters/view_id' + responses: + '204': + description: Indicates a successful call. + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/404_response' + servers: + - url: https://localhost:5601 + post: + summary: Updates a data view. + operationId: updateDataView + description: | + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '#/components/parameters/kbn_xsrf' + - $ref: '#/components/parameters/view_id' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/update_data_view_request_object' + examples: + updateDataViewRequest: + $ref: '#/components/examples/update_data_view_request' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + $ref: '#/components/schemas/data_view_response_object' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/400_response' + servers: + - url: https://localhost:5601 + servers: + - url: https://localhost:5601 + /api/data_views/data_view/{viewId}/runtime_field/{fieldName}: + get: + summary: Retrieves a runtime field. + operationId: getRuntimeField + description: | + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '#/components/parameters/field_name' + - $ref: '#/components/parameters/view_id' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + properties: + data_view: + type: object + fields: + type: array + items: + type: object + examples: + getRuntimeFieldResponse: + $ref: '#/components/examples/get_runtime_field_response' + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/404_response' + servers: + - url: https://localhost:5601 + /api/data_views/default: + get: + summary: Retrieves the default data view identifier. + operationId: getDefaultDataView + description: | + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + properties: + data_view_id: + type: string + examples: + getDefaultDataViewResponse: + $ref: '#/components/examples/get_default_data_view_response' + post: + summary: Sets the default data view identifier. + operationId: setDefaultDatailView + description: | + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '#/components/parameters/kbn_xsrf' + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - data_view_id + properties: + data_view_id: + type: + - string + - 'null' + description: | + The data view identifier. NOTE: The API does not validate whether it is a valid identifier. Use `null` to unset the default data view. + force: + type: boolean + description: Update an existing default data view identifier. + default: false + examples: + setDefaultDataViewRequest: + $ref: '#/components/examples/set_default_data_view_request' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + properties: + acknowledged: + type: boolean + servers: + - url: https://localhost:5601 + servers: + - url: https://localhost:5601 +components: + securitySchemes: + basicAuth: + type: http + scheme: basic + apiKeyAuth: + type: apiKey + in: header + name: ApiKey + examples: + get_data_views_response: + summary: The get all data views API returns a list of data views. + value: + data_view: + - id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + namespaces: + - default + title: kibana_sample_data_ecommerce + typeMeta: {} + name: Kibana Sample Data eCommerce + - id: d3d7af60-4c81-11e8-b3d7-01146121b73d + namespaces: + - default + title: kibana_sample_data_flights + name: Kibana Sample Data Flights + - id: 90943e30-9a47-11e8-b64d-95841ca0b247 + namespaces: + - default + title: kibana_sample_data_logs + name: Kibana Sample Data Logs + create_data_view_request: + summary: Create a data view with runtime fields. + value: + data_view: + title: logstash-* + name: My Logstash data view + runtimeFieldMap: + runtime_shape_name: + type: keyword + script: + source: emit(doc['shape_name'].value) + get_data_view_response: + summary: The get data view API returns a JSON object that contains information about the data view. + value: + data_view: + id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + version: WzUsMV0= + title: kibana_sample_data_ecommerce + timeFieldName: order_date + sourceFilters: [] + fields: + _id: + count: 0 + name: _id + type: string + esTypes: + - _id + scripted: false + searchable: true + aggregatable: false + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + _index: + count: 0 + name: _index + type: string + esTypes: + - _index + scripted: false + searchable: true + aggregatable: true + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + _score: + count: 0 + name: _score + type: number + scripted: false + searchable: false + aggregatable: false + readFromDocValues: false + format: + id: number + shortDotsEnable: false + isMapped: true + _source: + count: 0 + name: _source + type: _source + esTypes: + - _source + scripted: false + searchable: false + aggregatable: false + readFromDocValues: false + format: + id: _source + shortDotsEnable: false + isMapped: true + category: + count: 0 + name: category + type: string + esTypes: + - text + scripted: false + searchable: true + aggregatable: false + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + category.keyword: + count: 0 + name: category.keyword + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + subType: + multi: + parent: category + format: + id: string + shortDotsEnable: false + isMapped: true + currency: + count: 0 + name: currency + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + customer_birth_date: + count: 0 + name: customer_birth_date + type: date + esTypes: + - date + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: date + shortDotsEnable: false + isMapped: true + customer_first_name: + count: 0 + name: customer_first_name + type: string + esTypes: + - text + scripted: false + searchable: true + aggregatable: false + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + customer_first_name.keyword: + count: 0 + name: customer_first_name.keyword + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + subType: + multi: + parent: customer_first_name + format: + id: string + shortDotsEnable: false + isMapped: true + customer_full_name: + count: 0 + name: customer_full_name + type: string + esTypes: + - text + scripted: false + searchable: true + aggregatable: false + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + customer_full_name.keyword: + count: 0 + name: customer_full_name.keyword + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + subType: + multi: + parent: customer_full_name + format: + id: string + shortDotsEnable: false + isMapped: true + customer_gender: + count: 0 + name: customer_gender + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + customer_id: + count: 0 + name: customer_id + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + customer_last_name: + count: 0 + name: customer_last_name + type: string + esTypes: + - text + scripted: false + searchable: true + aggregatable: false + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + customer_last_name.keyword: + count: 0 + name: customer_last_name.keyword + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + subType: + multi: + parent: customer_last_name + format: + id: string + shortDotsEnable: false + isMapped: true + customer_phone: + count: 0 + name: customer_phone + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + day_of_week: + count: 0 + name: day_of_week + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + day_of_week_i: + count: 0 + name: day_of_week_i + type: number + esTypes: + - integer + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + email: + count: 0 + name: email + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + event.dataset: + count: 0 + name: event.dataset + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + geoip.city_name: + count: 0 + name: geoip.city_name + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + geoip.continent_name: + count: 0 + name: geoip.continent_name + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + geoip.country_iso_code: + count: 0 + name: geoip.country_iso_code + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + geoip.location: + count: 0 + name: geoip.location + type: geo_point + esTypes: + - geo_point + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: geo_point + params: + transform: wkt + shortDotsEnable: false + isMapped: true + geoip.region_name: + count: 0 + name: geoip.region_name + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + manufacturer: + count: 0 + name: manufacturer + type: string + esTypes: + - text + scripted: false + searchable: true + aggregatable: false + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + manufacturer.keyword: + count: 0 + name: manufacturer.keyword + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + subType: + multi: + parent: manufacturer + format: + id: string + shortDotsEnable: false + isMapped: true + order_date: + count: 0 + name: order_date + type: date + esTypes: + - date + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: date + shortDotsEnable: false + isMapped: true + order_id: + count: 0 + name: order_id + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + products._id: + count: 0 + name: products._id + type: string + esTypes: + - text + scripted: false + searchable: true + aggregatable: false + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + products._id.keyword: + count: 0 + name: products._id.keyword + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + subType: + multi: + parent: products._id + format: + id: string + shortDotsEnable: false + isMapped: true + products.base_price: + count: 0 + name: products.base_price + type: number + esTypes: + - half_float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + params: + pattern: $0,0.00 + shortDotsEnable: false + isMapped: true + products.base_unit_price: + count: 0 + name: products.base_unit_price + type: number + esTypes: + - half_float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + params: + pattern: $0,0.00 + shortDotsEnable: false + isMapped: true + products.category: + count: 0 + name: products.category + type: string + esTypes: + - text + scripted: false + searchable: true + aggregatable: false + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + products.category.keyword: + count: 0 + name: products.category.keyword + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + subType: + multi: + parent: products.category + format: + id: string + shortDotsEnable: false + isMapped: true + products.created_on: + count: 0 + name: products.created_on + type: date + esTypes: + - date + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: date + shortDotsEnable: false + isMapped: true + products.discount_amount: + count: 0 + name: products.discount_amount + type: number + esTypes: + - half_float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + products.discount_percentage: + count: 0 + name: products.discount_percentage + type: number + esTypes: + - half_float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + products.manufacturer: + count: 1 + name: products.manufacturer + type: string + esTypes: + - text + scripted: false + searchable: true + aggregatable: false + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + products.manufacturer.keyword: + count: 0 + name: products.manufacturer.keyword + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + subType: + multi: + parent: products.manufacturer + format: + id: string + shortDotsEnable: false + isMapped: true + products.min_price: + count: 0 + name: products.min_price + type: number + esTypes: + - half_float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + params: + pattern: $0,0.00 + shortDotsEnable: false + isMapped: true + products.price: + count: 1 + name: products.price + type: number + esTypes: + - half_float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + params: + pattern: $0,0.00 + shortDotsEnable: false + isMapped: true + products.product_id: + count: 0 + name: products.product_id + type: number + esTypes: + - long + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + products.product_name: + count: 1 + name: products.product_name + type: string + esTypes: + - text + scripted: false + searchable: true + aggregatable: false + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + products.product_name.keyword: + count: 0 + name: products.product_name.keyword + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + subType: + multi: + parent: products.product_name + format: + id: string + shortDotsEnable: false + isMapped: true + products.quantity: + count: 0 + name: products.quantity + type: number + esTypes: + - integer + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + products.sku: + count: 0 + name: products.sku + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + products.tax_amount: + count: 0 + name: products.tax_amount + type: number + esTypes: + - half_float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + products.taxful_price: + count: 0 + name: products.taxful_price + type: number + esTypes: + - half_float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + params: + pattern: $0,0.00 + shortDotsEnable: false + isMapped: true + products.taxless_price: + count: 0 + name: products.taxless_price + type: number + esTypes: + - half_float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + params: + pattern: $0,0.00 + shortDotsEnable: false + isMapped: true + products.unit_discount_amount: + count: 0 + name: products.unit_discount_amount + type: number + esTypes: + - half_float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + sku: + count: 0 + name: sku + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + taxful_total_price: + count: 0 + name: taxful_total_price + type: number + esTypes: + - half_float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + params: + pattern: $0,0.[00] + shortDotsEnable: false + isMapped: true + taxless_total_price: + count: 0 + name: taxless_total_price + type: number + esTypes: + - half_float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + params: + pattern: $0,0.00 + shortDotsEnable: false + isMapped: true + total_quantity: + count: 1 + name: total_quantity + type: number + esTypes: + - integer + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + total_unique_products: + count: 0 + name: total_unique_products + type: number + esTypes: + - integer + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + type: + count: 0 + name: type + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + user: + count: 0 + name: user + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + typeMeta: {} + fieldFormats: + taxful_total_price: + id: number + params: + pattern: $0,0.[00] + products.price: + id: number + params: + pattern: $0,0.00 + taxless_total_price: + id: number + params: + pattern: $0,0.00 + products.taxless_price: + id: number + params: + pattern: $0,0.00 + products.taxful_price: + id: number + params: + pattern: $0,0.00 + products.min_price: + id: number + params: + pattern: $0,0.00 + products.base_unit_price: + id: number + params: + pattern: $0,0.00 + products.base_price: + id: number + params: + pattern: $0,0.00 + runtimeFieldMap: {} + fieldAttrs: + products.manufacturer: + count: 1 + products.price: + count: 1 + products.product_name: + count: 1 + total_quantity: + count: 1 + allowNoIndex: false + name: Kibana Sample Data eCommerce + namespaces: + - default + update_data_view_request: + summary: Update some properties for a data view. + value: + data_view: + title: kibana_sample_data_ecommerce + timeFieldName: order_date + allowNoIndex: false + name: Kibana Sample Data eCommerce + refresh_fields: true + get_runtime_field_response: + summary: The get runtime field API returns a JSON object that contains information about the runtime field (`hour_of_day`) and the data view (`d3d7af60-4c81-11e8-b3d7-01146121b73d`). + value: + fields: + - count: 0 + name: hour_of_day + type: number + esTypes: + - long + scripted: false + searchable: true + aggregatable: true + readFromDocValues: false + shortDotsEnable: false + runtimeField: + type: long + script: + source: emit(doc['timestamp'].value.getHour()); + data_view: + id: d3d7af60-4c81-11e8-b3d7-01146121b73d + version: WzM2LDJd + title: kibana_sample_data_flights + timeFieldName: timestamp + sourceFilters: [] + fields: + hour_of_day: + count: 0 + name: hour_of_day + type: number + esTypes: + - long + scripted: false + searchable: true + aggregatable: true + readFromDocValues: false + format: + id: number + params: + pattern: '00' + shortDotsEnable: false + runtimeField: + type: long + script: + source: emit(doc['timestamp'].value.getHour()); + AvgTicketPrice: + count: 0 + name: AvgTicketPrice + type: number + esTypes: + - float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + params: + pattern: $0,0.[00] + shortDotsEnable: false + isMapped: true + Cancelled: + count: 0 + name: Cancelled + type: boolean + esTypes: + - boolean + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: boolean + shortDotsEnable: false + isMapped: true + Carrier: + count: 0 + name: Carrier + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + Dest: + count: 0 + name: Dest + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + DestAirportID: + count: 0 + name: DestAirportID + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + DestCityName: + count: 0 + name: DestCityName + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + DestCountry: + count: 0 + name: DestCountry + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + DestLocation: + count: 0 + name: DestLocation + type: geo_point + esTypes: + - geo_point + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: geo_point + params: + transform: wkt + shortDotsEnable: false + isMapped: true + DestRegion: + count: 0 + name: DestRegion + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + DestWeather: + count: 0 + name: DestWeather + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + DistanceKilometers: + count: 0 + name: DistanceKilometers + type: number + esTypes: + - float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + DistanceMiles: + count: 0 + name: DistanceMiles + type: number + esTypes: + - float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + FlightDelay: + count: 0 + name: FlightDelay + type: boolean + esTypes: + - boolean + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: boolean + shortDotsEnable: false + isMapped: true + FlightDelayMin: + count: 0 + name: FlightDelayMin + type: number + esTypes: + - integer + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + FlightDelayType: + count: 0 + name: FlightDelayType + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + FlightNum: + count: 0 + name: FlightNum + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + FlightTimeHour: + count: 0 + name: FlightTimeHour + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + FlightTimeMin: + count: 0 + name: FlightTimeMin + type: number + esTypes: + - float + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + Origin: + count: 0 + name: Origin + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + OriginAirportID: + count: 0 + name: OriginAirportID + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + OriginCityName: + count: 0 + name: OriginCityName + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + OriginCountry: + count: 0 + name: OriginCountry + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + OriginLocation: + count: 0 + name: OriginLocation + type: geo_point + esTypes: + - geo_point + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: geo_point + params: + transform: wkt + shortDotsEnable: false + isMapped: true + OriginRegion: + count: 0 + name: OriginRegion + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + OriginWeather: + count: 0 + name: OriginWeather + type: string + esTypes: + - keyword + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: string + shortDotsEnable: false + isMapped: true + _id: + count: 0 + name: _id + type: string + esTypes: + - _id + scripted: false + searchable: true + aggregatable: false + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + _index: + count: 0 + name: _index + type: string + esTypes: + - _index + scripted: false + searchable: true + aggregatable: true + readFromDocValues: false + format: + id: string + shortDotsEnable: false + isMapped: true + _score: + count: 0 + name: _score + type: number + scripted: false + searchable: false + aggregatable: false + readFromDocValues: false + format: + id: number + shortDotsEnable: false + isMapped: true + _source: + count: 0 + name: _source + type: _source + esTypes: + - _source + scripted: false + searchable: false + aggregatable: false + readFromDocValues: false + format: + id: _source + shortDotsEnable: false + isMapped: true + dayOfWeek: + count: 0 + name: dayOfWeek + type: number + esTypes: + - integer + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: number + shortDotsEnable: false + isMapped: true + timestamp: + count: 0 + name: timestamp + type: date + esTypes: + - date + scripted: false + searchable: true + aggregatable: true + readFromDocValues: true + format: + id: date + shortDotsEnable: false + isMapped: true + fieldFormats: + hour_of_day: + id: number + params: + pattern: '00' + AvgTicketPrice: + id: number + params: + pattern: $0,0.[00] + runtimeFieldMap: + hour_of_day: + type: long + script: + source: emit(doc['timestamp'].value.getHour()); + fieldAttrs: {} + allowNoIndex: false + name: Kibana Sample Data Flights + get_default_data_view_response: + summary: The get default data view API returns the default data view identifier. + value: + data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + set_default_data_view_request: + summary: Set the default data view identifier. + value: + data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + force: true + parameters: + kbn_xsrf: + schema: + type: string + in: header + name: kbn-xsrf + description: Cross-site request forgery protection + required: true + view_id: + in: path + name: viewId + description: An identifier for the data view. + required: true + schema: + type: string + example: ff959d40-b880-11e8-a6d9-e546fe2bba5f + field_name: + in: path + name: fieldName + description: The name of the runtime field. + required: true + schema: + type: string + example: hour_of_day + schemas: + allownoindex: + type: boolean + description: Allows the data view saved object to exist before the data is available. + fieldattrs: + type: object + description: A map of field attributes by field name. + fieldformats: + type: object + description: A map of field formats by field name. + namespaces: + type: array + description: An array of space identifiers for sharing the data view between multiple spaces. + items: + type: string + default: default + runtimefieldmap: + type: object + description: A map of runtime field definitions by field name. + sourcefilters: + type: array + description: The array of field names you want to filter out in Discover. + timefieldname: + type: string + description: The timestamp field name, which you use for time-based data views. + title: + type: string + description: Comma-separated list of data streams, indices, and aliases that you want to search. Supports wildcards (`*`). + type: + type: string + description: When set to `rollup`, identifies the rollup data views. + typemeta: + type: object + description: When you use rollup indices, contains the field list for the rollup data view API endpoints. + create_data_view_request_object: + title: Create data view request + type: object + required: + - data_view + properties: + data_view: + type: object + required: + - title + description: The data view object. + properties: + allowNoIndex: + $ref: '#/components/schemas/allownoindex' + fieldAttrs: + $ref: '#/components/schemas/fieldattrs' + fieldFormats: + $ref: '#/components/schemas/fieldformats' + fields: + type: object + id: + type: string + name: + type: string + description: The data view name. + namespaces: + $ref: '#/components/schemas/namespaces' + runtimeFieldMap: + $ref: '#/components/schemas/runtimefieldmap' + sourceFilters: + $ref: '#/components/schemas/sourcefilters' + timeFieldName: + $ref: '#/components/schemas/timefieldname' + title: + $ref: '#/components/schemas/title' + type: + $ref: '#/components/schemas/type' + typeMeta: + $ref: '#/components/schemas/typemeta' + version: + type: string + override: + type: boolean + description: Override an existing data view if a data view with the provided title already exists. + default: false + data_view_response_object: + title: Data view response properties + type: object + properties: + data_view: + type: object + properties: + allowNoIndex: + $ref: '#/components/schemas/allownoindex' + fieldAttrs: + $ref: '#/components/schemas/fieldattrs' + fieldFormats: + $ref: '#/components/schemas/fieldformats' + fields: + type: object + id: + type: string + example: ff959d40-b880-11e8-a6d9-e546fe2bba5f + name: + type: string + description: The data view name. + namespaces: + $ref: '#/components/schemas/namespaces' + runtimeFieldMap: + $ref: '#/components/schemas/runtimefieldmap' + sourceFilters: + $ref: '#/components/schemas/sourcefilters' + timeFieldName: + $ref: '#/components/schemas/timefieldname' + title: + $ref: '#/components/schemas/title' + typeMeta: + $ref: '#/components/schemas/typemeta' + version: + type: string + example: WzQ2LDJd + 400_response: + title: Bad request + type: object + required: + - statusCode + - error + - message + properties: + statusCode: + type: number + example: 400 + error: + type: string + example: Bad Request + message: + type: string + 404_response: + type: object + properties: + error: + type: string + example: Not Found + enum: + - Not Found + message: + type: string + example: Saved object [index-pattern/caaad6d0-920c-11ed-b36a-874bd1548a00] not found + statusCode: + type: integer + example: 404 + enum: + - 404 + update_data_view_request_object: + title: Update data view request + type: object + required: + - data_view + properties: + data_view: + type: object + description: | + The data view properties you want to update. Only the specified properties are updated in the data view. Unspecified fields stay as they are persisted. + properties: + allowNoIndex: + $ref: '#/components/schemas/allownoindex' + fieldFormats: + $ref: '#/components/schemas/fieldformats' + fields: + type: object + name: + type: string + runtimeFieldMap: + $ref: '#/components/schemas/runtimefieldmap' + sourceFilters: + $ref: '#/components/schemas/sourcefilters' + timeFieldName: + $ref: '#/components/schemas/timefieldname' + title: + $ref: '#/components/schemas/title' + type: + $ref: '#/components/schemas/type' + typeMeta: + $ref: '#/components/schemas/typemeta' + refresh_fields: + type: boolean + description: Reloads the data view fields after the data view is updated. + default: false diff --git a/src/plugins/data_views/docs/openapi/components/examples/create_data_view_request.yaml b/src/plugins/data_views/docs/openapi/components/examples/create_data_view_request.yaml new file mode 100644 index 00000000000000..82752970acd309 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/examples/create_data_view_request.yaml @@ -0,0 +1,16 @@ +summary: Create a data view with runtime fields. +value: + { + "data_view": { + "title": "logstash-*", + "name": "My Logstash data view", + "runtimeFieldMap": { + "runtime_shape_name": { + "type": "keyword", + "script": { + "source": "emit(doc['shape_name'].value)" + } + } + } + } + } \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/examples/create_data_view_response.yaml b/src/plugins/data_views/docs/openapi/components/examples/create_data_view_response.yaml new file mode 100644 index 00000000000000..623f1855feee6f --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/examples/create_data_view_response.yaml @@ -0,0 +1,50 @@ +summary: The create data view API returns a JSON object that contains details about the new data view. +value: + { + "data_view": { + "id": "b561acfb-0181-455e-84a3-ce8980b2272f", + "version": "WzQ5LDJd", + "title": "logstash-*", + "sourceFilters": [], + "fields": { + "runtime_shape_name": { + "count": 0, + "name": "runtime_shape_name", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "runtimeField": { + "type": "keyword", + "script": { + "source": "emit(doc['shape_name'].value)" + } + } + } + }, + "typeMeta": {}, + "fieldFormats": {}, + "runtimeFieldMap": { + "runtime_shape_name": { + "type": "keyword", + "script": { + "source": "emit(doc['shape_name'].value)" + } + } + }, + "fieldAttrs": {}, + "allowNoIndex": false, + "name": "My Logstash data view", + "namespaces": [ + "default" + ] + } + } \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/examples/get_data_view_response.yaml b/src/plugins/data_views/docs/openapi/components/examples/get_data_view_response.yaml new file mode 100644 index 00000000000000..5a731f47891383 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/examples/get_data_view_response.yaml @@ -0,0 +1,1156 @@ +summary: The get data view API returns a JSON object that contains information about the data view. +value: + { + "data_view": { + "id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f", + "version": "WzUsMV0=", + "title": "kibana_sample_data_ecommerce", + "timeFieldName": "order_date", + "sourceFilters": [], + "fields": { + "_id": { + "count": 0, + "name": "_id", + "type": "string", + "esTypes": [ + "_id" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_index": { + "count": 0, + "name": "_index", + "type": "string", + "esTypes": [ + "_index" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_score": { + "count": 0, + "name": "_score", + "type": "number", + "scripted": false, + "searchable": false, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_source": { + "count": 0, + "name": "_source", + "type": "_source", + "esTypes": [ + "_source" + ], + "scripted": false, + "searchable": false, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "_source" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "category": { + "count": 0, + "name": "category", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "category.keyword": { + "count": 0, + "name": "category.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "category" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "currency": { + "count": 0, + "name": "currency", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_birth_date": { + "count": 0, + "name": "customer_birth_date", + "type": "date", + "esTypes": [ + "date" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "date" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_first_name": { + "count": 0, + "name": "customer_first_name", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_first_name.keyword": { + "count": 0, + "name": "customer_first_name.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "customer_first_name" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_full_name": { + "count": 0, + "name": "customer_full_name", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_full_name.keyword": { + "count": 0, + "name": "customer_full_name.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "customer_full_name" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_gender": { + "count": 0, + "name": "customer_gender", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_id": { + "count": 0, + "name": "customer_id", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_last_name": { + "count": 0, + "name": "customer_last_name", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_last_name.keyword": { + "count": 0, + "name": "customer_last_name.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "customer_last_name" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "customer_phone": { + "count": 0, + "name": "customer_phone", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "day_of_week": { + "count": 0, + "name": "day_of_week", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "day_of_week_i": { + "count": 0, + "name": "day_of_week_i", + "type": "number", + "esTypes": [ + "integer" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "email": { + "count": 0, + "name": "email", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "event.dataset": { + "count": 0, + "name": "event.dataset", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "geoip.city_name": { + "count": 0, + "name": "geoip.city_name", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "geoip.continent_name": { + "count": 0, + "name": "geoip.continent_name", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "geoip.country_iso_code": { + "count": 0, + "name": "geoip.country_iso_code", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "geoip.location": { + "count": 0, + "name": "geoip.location", + "type": "geo_point", + "esTypes": [ + "geo_point" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "geo_point", + "params": { + "transform": "wkt" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "geoip.region_name": { + "count": 0, + "name": "geoip.region_name", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "manufacturer": { + "count": 0, + "name": "manufacturer", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "manufacturer.keyword": { + "count": 0, + "name": "manufacturer.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "manufacturer" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "order_date": { + "count": 0, + "name": "order_date", + "type": "date", + "esTypes": [ + "date" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "date" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "order_id": { + "count": 0, + "name": "order_id", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products._id": { + "count": 0, + "name": "products._id", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products._id.keyword": { + "count": 0, + "name": "products._id.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "products._id" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.base_price": { + "count": 0, + "name": "products.base_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.base_unit_price": { + "count": 0, + "name": "products.base_unit_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.category": { + "count": 0, + "name": "products.category", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.category.keyword": { + "count": 0, + "name": "products.category.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "products.category" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.created_on": { + "count": 0, + "name": "products.created_on", + "type": "date", + "esTypes": [ + "date" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "date" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.discount_amount": { + "count": 0, + "name": "products.discount_amount", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.discount_percentage": { + "count": 0, + "name": "products.discount_percentage", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.manufacturer": { + "count": 1, + "name": "products.manufacturer", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.manufacturer.keyword": { + "count": 0, + "name": "products.manufacturer.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "products.manufacturer" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.min_price": { + "count": 0, + "name": "products.min_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.price": { + "count": 1, + "name": "products.price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.product_id": { + "count": 0, + "name": "products.product_id", + "type": "number", + "esTypes": [ + "long" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.product_name": { + "count": 1, + "name": "products.product_name", + "type": "string", + "esTypes": [ + "text" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.product_name.keyword": { + "count": 0, + "name": "products.product_name.keyword", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "subType": { + "multi": { + "parent": "products.product_name" + } + }, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.quantity": { + "count": 0, + "name": "products.quantity", + "type": "number", + "esTypes": [ + "integer" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.sku": { + "count": 0, + "name": "products.sku", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.tax_amount": { + "count": 0, + "name": "products.tax_amount", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.taxful_price": { + "count": 0, + "name": "products.taxful_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.taxless_price": { + "count": 0, + "name": "products.taxless_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "products.unit_discount_amount": { + "count": 0, + "name": "products.unit_discount_amount", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "sku": { + "count": 0, + "name": "sku", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "taxful_total_price": { + "count": 0, + "name": "taxful_total_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.[00]" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "taxless_total_price": { + "count": 0, + "name": "taxless_total_price", + "type": "number", + "esTypes": [ + "half_float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "total_quantity": { + "count": 1, + "name": "total_quantity", + "type": "number", + "esTypes": [ + "integer" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "total_unique_products": { + "count": 0, + "name": "total_unique_products", + "type": "number", + "esTypes": [ + "integer" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "type": { + "count": 0, + "name": "type", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "user": { + "count": 0, + "name": "user", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + } + }, + "typeMeta": {}, + "fieldFormats": { + "taxful_total_price": { + "id": "number", + "params": { + "pattern": "$0,0.[00]" + } + }, + "products.price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "taxless_total_price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "products.taxless_price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "products.taxful_price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "products.min_price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "products.base_unit_price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + }, + "products.base_price": { + "id": "number", + "params": { + "pattern": "$0,0.00" + } + } + }, + "runtimeFieldMap": {}, + "fieldAttrs": { + "products.manufacturer": { + "count": 1 + }, + "products.price": { + "count": 1 + }, + "products.product_name": { + "count": 1 + }, + "total_quantity": { + "count": 1 + } + }, + "allowNoIndex": false, + "name": "Kibana Sample Data eCommerce", + "namespaces": [ + "default" + ] + } + } \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/examples/get_data_views_response.yaml b/src/plugins/data_views/docs/openapi/components/examples/get_data_views_response.yaml new file mode 100644 index 00000000000000..069cdc2bf6e587 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/examples/get_data_views_response.yaml @@ -0,0 +1,31 @@ +summary: The get all data views API returns a list of data views. +value: + { + "data_view": [ + { + "id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f", + "namespaces": [ + "default" + ], + "title": "kibana_sample_data_ecommerce", + "typeMeta": {}, + "name": "Kibana Sample Data eCommerce" + }, + { + "id": "d3d7af60-4c81-11e8-b3d7-01146121b73d", + "namespaces": [ + "default" + ], + "title": "kibana_sample_data_flights", + "name": "Kibana Sample Data Flights" + }, + { + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "namespaces": [ + "default" + ], + "title": "kibana_sample_data_logs", + "name": "Kibana Sample Data Logs" + } + ] + } diff --git a/src/plugins/data_views/docs/openapi/components/examples/get_default_data_view_response.yaml b/src/plugins/data_views/docs/openapi/components/examples/get_default_data_view_response.yaml new file mode 100644 index 00000000000000..7bc346b36924e1 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/examples/get_default_data_view_response.yaml @@ -0,0 +1,5 @@ +summary: The get default data view API returns the default data view identifier. +value: + { + "data_view_id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f" + } \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/examples/get_runtime_field_response.yaml b/src/plugins/data_views/docs/openapi/components/examples/get_runtime_field_response.yaml new file mode 100644 index 00000000000000..2d743e6f2fff04 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/examples/get_runtime_field_response.yaml @@ -0,0 +1,617 @@ +summary: The get runtime field API returns a JSON object that contains information about the runtime field (`hour_of_day`) and the data view (`d3d7af60-4c81-11e8-b3d7-01146121b73d`). +value: + { + "fields": [ + { + "count": 0, + "name": "hour_of_day", + "type": "number", + "esTypes": [ + "long" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": false, + "shortDotsEnable": false, + "runtimeField": { + "type": "long", + "script": { + "source": "emit(doc['timestamp'].value.getHour());" + } + } + } + ], + "data_view": { + "id": "d3d7af60-4c81-11e8-b3d7-01146121b73d", + "version": "WzM2LDJd", + "title": "kibana_sample_data_flights", + "timeFieldName": "timestamp", + "sourceFilters": [], + "fields": { + "hour_of_day": { + "count": 0, + "name": "hour_of_day", + "type": "number", + "esTypes": [ + "long" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": false, + "format": { + "id": "number", + "params": { + "pattern": "00" + } + }, + "shortDotsEnable": false, + "runtimeField": { + "type": "long", + "script": { + "source": "emit(doc['timestamp'].value.getHour());" + } + } + }, + "AvgTicketPrice": { + "count": 0, + "name": "AvgTicketPrice", + "type": "number", + "esTypes": [ + "float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number", + "params": { + "pattern": "$0,0.[00]" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "Cancelled": { + "count": 0, + "name": "Cancelled", + "type": "boolean", + "esTypes": [ + "boolean" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "boolean" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "Carrier": { + "count": 0, + "name": "Carrier", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "Dest": { + "count": 0, + "name": "Dest", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DestAirportID": { + "count": 0, + "name": "DestAirportID", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DestCityName": { + "count": 0, + "name": "DestCityName", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DestCountry": { + "count": 0, + "name": "DestCountry", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DestLocation": { + "count": 0, + "name": "DestLocation", + "type": "geo_point", + "esTypes": [ + "geo_point" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "geo_point", + "params": { + "transform": "wkt" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DestRegion": { + "count": 0, + "name": "DestRegion", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DestWeather": { + "count": 0, + "name": "DestWeather", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DistanceKilometers": { + "count": 0, + "name": "DistanceKilometers", + "type": "number", + "esTypes": [ + "float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "DistanceMiles": { + "count": 0, + "name": "DistanceMiles", + "type": "number", + "esTypes": [ + "float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "FlightDelay": { + "count": 0, + "name": "FlightDelay", + "type": "boolean", + "esTypes": [ + "boolean" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "boolean" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "FlightDelayMin": { + "count": 0, + "name": "FlightDelayMin", + "type": "number", + "esTypes": [ + "integer" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "FlightDelayType": { + "count": 0, + "name": "FlightDelayType", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "FlightNum": { + "count": 0, + "name": "FlightNum", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "FlightTimeHour": { + "count": 0, + "name": "FlightTimeHour", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "FlightTimeMin": { + "count": 0, + "name": "FlightTimeMin", + "type": "number", + "esTypes": [ + "float" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "Origin": { + "count": 0, + "name": "Origin", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "OriginAirportID": { + "count": 0, + "name": "OriginAirportID", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "OriginCityName": { + "count": 0, + "name": "OriginCityName", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "OriginCountry": { + "count": 0, + "name": "OriginCountry", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "OriginLocation": { + "count": 0, + "name": "OriginLocation", + "type": "geo_point", + "esTypes": [ + "geo_point" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "geo_point", + "params": { + "transform": "wkt" + } + }, + "shortDotsEnable": false, + "isMapped": true + }, + "OriginRegion": { + "count": 0, + "name": "OriginRegion", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "OriginWeather": { + "count": 0, + "name": "OriginWeather", + "type": "string", + "esTypes": [ + "keyword" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_id": { + "count": 0, + "name": "_id", + "type": "string", + "esTypes": [ + "_id" + ], + "scripted": false, + "searchable": true, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_index": { + "count": 0, + "name": "_index", + "type": "string", + "esTypes": [ + "_index" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": false, + "format": { + "id": "string" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_score": { + "count": 0, + "name": "_score", + "type": "number", + "scripted": false, + "searchable": false, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "_source": { + "count": 0, + "name": "_source", + "type": "_source", + "esTypes": [ + "_source" + ], + "scripted": false, + "searchable": false, + "aggregatable": false, + "readFromDocValues": false, + "format": { + "id": "_source" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "dayOfWeek": { + "count": 0, + "name": "dayOfWeek", + "type": "number", + "esTypes": [ + "integer" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "number" + }, + "shortDotsEnable": false, + "isMapped": true + }, + "timestamp": { + "count": 0, + "name": "timestamp", + "type": "date", + "esTypes": [ + "date" + ], + "scripted": false, + "searchable": true, + "aggregatable": true, + "readFromDocValues": true, + "format": { + "id": "date" + }, + "shortDotsEnable": false, + "isMapped": true + } + }, + "fieldFormats": { + "hour_of_day": { + "id": "number", + "params": { + "pattern": "00" + } + }, + "AvgTicketPrice": { + "id": "number", + "params": { + "pattern": "$0,0.[00]" + } + } + }, + "runtimeFieldMap": { + "hour_of_day": { + "type": "long", + "script": { + "source": "emit(doc['timestamp'].value.getHour());" + } + } + }, + "fieldAttrs": {}, + "allowNoIndex": false, + "name": "Kibana Sample Data Flights" + } +} diff --git a/src/plugins/data_views/docs/openapi/components/examples/set_default_data_view_request.yaml b/src/plugins/data_views/docs/openapi/components/examples/set_default_data_view_request.yaml new file mode 100644 index 00000000000000..aaf49a4a503d36 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/examples/set_default_data_view_request.yaml @@ -0,0 +1,6 @@ +summary: Set the default data view identifier. +value: + { + "data_view_id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f", + "force": true + } \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/examples/update_data_view_request.yaml b/src/plugins/data_views/docs/openapi/components/examples/update_data_view_request.yaml new file mode 100644 index 00000000000000..c56244b66caaef --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/examples/update_data_view_request.yaml @@ -0,0 +1,11 @@ +summary: Update some properties for a data view. +value: + { + "data_view": { + "title": "kibana_sample_data_ecommerce", + "timeFieldName": "order_date", + "allowNoIndex": false, + "name": "Kibana Sample Data eCommerce" + }, + "refresh_fields": true +} \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/headers/kbn_xsrf.yaml b/src/plugins/data_views/docs/openapi/components/headers/kbn_xsrf.yaml new file mode 100644 index 00000000000000..fe0402a43aa03c --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/headers/kbn_xsrf.yaml @@ -0,0 +1,6 @@ +schema: + type: string +in: header +name: kbn-xsrf +description: Cross-site request forgery protection +required: true diff --git a/src/plugins/data_views/docs/openapi/components/parameters/field_name.yaml b/src/plugins/data_views/docs/openapi/components/parameters/field_name.yaml new file mode 100644 index 00000000000000..1e0de3ec7c56db --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/parameters/field_name.yaml @@ -0,0 +1,7 @@ +in: path +name: fieldName +description: The name of the runtime field. +required: true +schema: + type: string + example: hour_of_day \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/parameters/view_id.yaml b/src/plugins/data_views/docs/openapi/components/parameters/view_id.yaml new file mode 100644 index 00000000000000..6f75420fb618c9 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/parameters/view_id.yaml @@ -0,0 +1,7 @@ +in: path +name: viewId +description: An identifier for the data view. +required: true +schema: + type: string + example: ff959d40-b880-11e8-a6d9-e546fe2bba5f \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/400_response.yaml b/src/plugins/data_views/docs/openapi/components/schemas/400_response.yaml new file mode 100644 index 00000000000000..b2518740083265 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/400_response.yaml @@ -0,0 +1,15 @@ +title: Bad request +type: object +required: + - statusCode + - error + - message +properties: + statusCode: + type: number + example: 400 + error: + type: string + example: Bad Request + message: + type: string diff --git a/src/plugins/data_views/docs/openapi/components/schemas/404_response.yaml b/src/plugins/data_views/docs/openapi/components/schemas/404_response.yaml new file mode 100644 index 00000000000000..2cbd94660b8a78 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/404_response.yaml @@ -0,0 +1,15 @@ +type: object +properties: + error: + type: string + example: Not Found + enum: + - Not Found + message: + type: string + example: "Saved object [index-pattern/caaad6d0-920c-11ed-b36a-874bd1548a00] not found" + statusCode: + type: integer + example: 404 + enum: + - 404 \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/allownoindex.yaml b/src/plugins/data_views/docs/openapi/components/schemas/allownoindex.yaml new file mode 100644 index 00000000000000..15dacd74a4a93b --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/allownoindex.yaml @@ -0,0 +1,2 @@ +type: boolean +description: Allows the data view saved object to exist before the data is available. \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/create_data_view_request_object.yaml b/src/plugins/data_views/docs/openapi/components/schemas/create_data_view_request_object.yaml new file mode 100644 index 00000000000000..ff2c34ed6d9ad5 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/create_data_view_request_object.yaml @@ -0,0 +1,44 @@ +title: Create data view request +type: object +required: + - data_view +properties: + data_view: + type: object + required: + - title + description: The data view object. + properties: + allowNoIndex: + $ref: 'allownoindex.yaml' + fieldAttrs: + $ref: 'fieldattrs.yaml' + fieldFormats: + $ref: 'fieldformats.yaml' + fields: + type: object + id: + type: string + name: + type: string + description: The data view name. + namespaces: + $ref: 'namespaces.yaml' + runtimeFieldMap: + $ref: 'runtimefieldmap.yaml' + sourceFilters: + $ref: 'sourcefilters.yaml' + timeFieldName: + $ref: 'timefieldname.yaml' + title: + $ref: 'title.yaml' + type: + $ref: 'type.yaml' + typeMeta: + $ref: 'typemeta.yaml' + version: + type: string + override: + type: boolean + description: Override an existing data view if a data view with the provided title already exists. + default: false diff --git a/src/plugins/data_views/docs/openapi/components/schemas/data_view_response_object.yaml b/src/plugins/data_views/docs/openapi/components/schemas/data_view_response_object.yaml new file mode 100644 index 00000000000000..9d3c67201896b2 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/data_view_response_object.yaml @@ -0,0 +1,36 @@ +title: Data view response properties +type: object +properties: + data_view: + type: object + properties: + allowNoIndex: + $ref: 'allownoindex.yaml' + fieldAttrs: + $ref: 'fieldattrs.yaml' + fieldFormats: + $ref: 'fieldformats.yaml' + fields: + type: object + id: + type: string + example: ff959d40-b880-11e8-a6d9-e546fe2bba5f + name: + type: string + description: The data view name. + namespaces: + $ref: 'namespaces.yaml' + runtimeFieldMap: + $ref: 'runtimefieldmap.yaml' + sourceFilters: + $ref: 'sourcefilters.yaml' + timeFieldName: + $ref: 'timefieldname.yaml' + title: + $ref: 'title.yaml' + typeMeta: + $ref: 'typemeta.yaml' + version: + type: string + example: WzQ2LDJd + \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/fieldattrs.yaml b/src/plugins/data_views/docs/openapi/components/schemas/fieldattrs.yaml new file mode 100644 index 00000000000000..ede637d538a920 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/fieldattrs.yaml @@ -0,0 +1,2 @@ +type: object +description: A map of field attributes by field name. \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/fieldformats.yaml b/src/plugins/data_views/docs/openapi/components/schemas/fieldformats.yaml new file mode 100644 index 00000000000000..c0f4fdfa8588d2 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/fieldformats.yaml @@ -0,0 +1,2 @@ +type: object +description: A map of field formats by field name. \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/namespaces.yaml b/src/plugins/data_views/docs/openapi/components/schemas/namespaces.yaml new file mode 100644 index 00000000000000..5ed383aaa8c826 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/namespaces.yaml @@ -0,0 +1,5 @@ +type: array +description: An array of space identifiers for sharing the data view between multiple spaces. +items: + type: string + default: default \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/runtimefieldmap.yaml b/src/plugins/data_views/docs/openapi/components/schemas/runtimefieldmap.yaml new file mode 100644 index 00000000000000..96f34a08fe0566 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/runtimefieldmap.yaml @@ -0,0 +1,2 @@ +type: object +description: A map of runtime field definitions by field name. \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/sourcefilters.yaml b/src/plugins/data_views/docs/openapi/components/schemas/sourcefilters.yaml new file mode 100644 index 00000000000000..4ba0980e437304 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/sourcefilters.yaml @@ -0,0 +1,2 @@ +type: array +description: The array of field names you want to filter out in Discover. \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/timefieldname.yaml b/src/plugins/data_views/docs/openapi/components/schemas/timefieldname.yaml new file mode 100644 index 00000000000000..97aa0f5070405e --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/timefieldname.yaml @@ -0,0 +1,2 @@ +type: string +description: The timestamp field name, which you use for time-based data views. \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/title.yaml b/src/plugins/data_views/docs/openapi/components/schemas/title.yaml new file mode 100644 index 00000000000000..5cb76a853557b7 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/title.yaml @@ -0,0 +1,2 @@ +type: string +description: Comma-separated list of data streams, indices, and aliases that you want to search. Supports wildcards (`*`). \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/type.yaml b/src/plugins/data_views/docs/openapi/components/schemas/type.yaml new file mode 100644 index 00000000000000..f5e4261852e4d3 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/type.yaml @@ -0,0 +1,2 @@ +type: string +description: When set to `rollup`, identifies the rollup data views. \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/typemeta.yaml b/src/plugins/data_views/docs/openapi/components/schemas/typemeta.yaml new file mode 100644 index 00000000000000..995ee99f97eddc --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/typemeta.yaml @@ -0,0 +1,2 @@ +type: object +description: When you use rollup indices, contains the field list for the rollup data view API endpoints. \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/components/schemas/update_data_view_request_object.yaml b/src/plugins/data_views/docs/openapi/components/schemas/update_data_view_request_object.yaml new file mode 100644 index 00000000000000..777e5491e766b6 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/schemas/update_data_view_request_object.yaml @@ -0,0 +1,35 @@ +title: Update data view request +type: object +required: + - data_view +properties: + data_view: + type: object + description: > + The data view properties you want to update. + Only the specified properties are updated in the data view. Unspecified fields stay as they are persisted. + properties: + allowNoIndex: + $ref: 'allownoindex.yaml' + fieldFormats: + $ref: 'fieldformats.yaml' + fields: + type: object + name: + type: string + runtimeFieldMap: + $ref: 'runtimefieldmap.yaml' + sourceFilters: + $ref: 'sourcefilters.yaml' + timeFieldName: + $ref: 'timefieldname.yaml' + title: + $ref: 'title.yaml' + type: + $ref: 'type.yaml' + typeMeta: + $ref: 'typemeta.yaml' + refresh_fields: + type: boolean + description: Reloads the data view fields after the data view is updated. + default: false diff --git a/src/plugins/data_views/docs/openapi/entrypoint.yaml b/src/plugins/data_views/docs/openapi/entrypoint.yaml new file mode 100644 index 00000000000000..a21c0b31df5778 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/entrypoint.yaml @@ -0,0 +1,59 @@ +openapi: 3.1.0 +info: + title: Data views + description: OpenAPI schema for data view endpoints + version: '0.1' + contact: + name: Kibana Core Team + license: + name: Elastic License 2.0 + url: https://www.elastic.co/licensing/elastic-license +tags: + - name: data views + description: Data view APIs enable you to manage data views, formerly known as Kibana index patterns. +servers: + - url: 'http://localhost:5601' + description: local +paths: +# Default space + '/api/data_views': + $ref: 'paths/api@data_views.yaml' + '/api/data_views/data_view': + $ref: 'paths/api@data_views@data_view.yaml' + '/api/data_views/data_view/{viewId}': + $ref: 'paths/api@data_views@data_view@{viewid}.yaml' +# '/api/data_views/data_view/{viewId}/fields': +# $ref: 'paths/api@data_views@data_view@{viewid}@fields.yaml' +# '/api/data_views/data_view/{viewId}/runtime_field': +# $ref: 'paths/api@data_views@data_view@{viewid}@runtime_field.yaml' + '/api/data_views/data_view/{viewId}/runtime_field/{fieldName}': + $ref: 'paths/api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml' + '/api/data_views/default': + $ref: 'paths/api@data_views@default.yaml' +# Non-default space +# '/s/{spaceId}/api/data_views': +# $ref: 'paths/s@{spaceid}@api@data_views.yaml' +# '/s/{spaceId}/api/data_views/data_view': +# $ref: 'paths/s@{spaceid}@api@data_views@data_view.yaml' +# '/s/{spaceId}/api/data_views/data_view/{viewId}': +# $ref: 'paths/s@{spaceid}@api@data_views@data_view@{viewid}.yaml' +# '/s/{spaceId}/api/data_views/default': +# $ref: 'paths/s@{spaceid}@api@data_views@default.yaml' +# '/s/{spaceId}/api/data_views/data_view/{viewId}/fields': +# $ref: 'paths/s@{spaceid}@api@data_views@data_view@{viewid}@fields.yaml' +# '/s/{spaceId}/api/data_views/data_view/{viewId}/runtime_field': +# $ref: 'paths/s@{spaceid}@api@data_views@data_view@{viewid}@runtime_field.yaml' +# '/s/{spaceId}/api/data_views/data_view/{viewId}/runtime_field/{fieldName}': +# $ref: 'paths/s@{spaceid}@api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml' +components: + securitySchemes: + basicAuth: + type: http + scheme: basic + apiKeyAuth: + type: apiKey + in: header + name: ApiKey +security: + - basicAuth: [] + - apiKeyAuth: [] diff --git a/src/plugins/data_views/docs/openapi/paths/api@data_views.yaml b/src/plugins/data_views/docs/openapi/paths/api@data_views.yaml new file mode 100644 index 00000000000000..9a3278f5ecbac8 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/paths/api@data_views.yaml @@ -0,0 +1,37 @@ +get: + summary: Retrieves a list of all data views. + operationId: getAllDataViews + description: > + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + properties: + data_view: + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + namespaces: + type: array + items: + type: string + title: + type: string + typeMeta: + type: object + examples: + getAllDataViewsResponse: + $ref: '../components/examples/get_data_views_response.yaml' +servers: + - url: https://localhost:5601 diff --git a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view.yaml b/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view.yaml new file mode 100644 index 00000000000000..dd8f3cdfac2bf4 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view.yaml @@ -0,0 +1,36 @@ +post: + summary: Creates a data view. + operationId: createDataView + description: > + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '../components/headers/kbn_xsrf.yaml' + requestBody: + required: true + content: + application/json: + schema: + $ref: '../components/schemas/create_data_view_request_object.yaml' + examples: + createDataViewRequest: + $ref: '../components/examples/create_data_view_request.yaml' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + $ref: '../components/schemas/data_view_response_object.yaml' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '../components/schemas/400_response.yaml' + servers: + - url: https://localhost:5601 + +servers: + - url: https://localhost:5601 diff --git a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}.yaml b/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}.yaml new file mode 100644 index 00000000000000..41f88752430570 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}.yaml @@ -0,0 +1,85 @@ +get: + summary: Retrieves a single data view by identifier. + operationId: getDataView + description: > + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '../components/parameters/view_id.yaml' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + $ref: '../components/schemas/data_view_response_object.yaml' + examples: + getDataViewResponse: + $ref: '../components/examples/get_data_view_response.yaml' + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '../components/schemas/404_response.yaml' + +delete: + summary: Deletes a data view. + operationId: deleteDataView + description: > + WARNING: When you delete a data view, it cannot be recovered. + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '../components/parameters/view_id.yaml' + responses: + '204': + description: Indicates a successful call. + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '../components/schemas/404_response.yaml' + servers: + - url: https://localhost:5601 + +post: + summary: Updates a data view. + operationId: updateDataView + description: > + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '../components/headers/kbn_xsrf.yaml' + - $ref: '../components/parameters/view_id.yaml' + requestBody: + required: true + content: + application/json: + schema: + $ref: '../components/schemas/update_data_view_request_object.yaml' + examples: + updateDataViewRequest: + $ref: '../components/examples/update_data_view_request.yaml' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + $ref: '../components/schemas/data_view_response_object.yaml' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '../components/schemas/400_response.yaml' + servers: + - url: https://localhost:5601 + +servers: + - url: https://localhost:5601 diff --git a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml b/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml new file mode 100644 index 00000000000000..15c5659f09d4ac --- /dev/null +++ b/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml @@ -0,0 +1,35 @@ +get: + summary: Retrieves a runtime field. + operationId: getRuntimeField + description: > + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '../components/parameters/field_name.yaml' + - $ref: '../components/parameters/view_id.yaml' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + properties: + data_view: + type: object + fields: + type: array + items: + type: object + examples: + getRuntimeFieldResponse: + $ref: '../components/examples/get_runtime_field_response.yaml' + '404': + description: Object is not found. + content: + application/json: + schema: + $ref: '../components/schemas/404_response.yaml' +servers: + - url: https://localhost:5601 diff --git a/src/plugins/data_views/docs/openapi/paths/api@data_views@default.yaml b/src/plugins/data_views/docs/openapi/paths/api@data_views@default.yaml new file mode 100644 index 00000000000000..cf1b3151380a94 --- /dev/null +++ b/src/plugins/data_views/docs/openapi/paths/api@data_views@default.yaml @@ -0,0 +1,67 @@ +get: + summary: Retrieves the default data view identifier. + operationId: getDefaultDataView + description: > + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + properties: + data_view_id: + type: string + examples: + getDefaultDataViewResponse: + $ref: '../components/examples/get_default_data_view_response.yaml' + +post: + summary: Sets the default data view identifier. + operationId: setDefaultDatailView + description: > + This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '../components/headers/kbn_xsrf.yaml' + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - data_view_id + properties: + data_view_id: + type: ['string', 'null'] + description: > + The data view identifier. + NOTE: The API does not validate whether it is a valid identifier. + Use `null` to unset the default data view. + force: + type: boolean + description: Update an existing default data view identifier. + default: false + examples: + setDefaultDataViewRequest: + $ref: '../components/examples/set_default_data_view_request.yaml' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + properties: + acknowledged: + type: boolean + servers: + - url: https://localhost:5601 + +servers: + - url: https://localhost:5601 From 1801a4ebe50a5235f7772be730c68a90c7fca290 Mon Sep 17 00:00:00 2001 From: jennypavlova Date: Thu, 10 Aug 2023 17:33:30 +0200 Subject: [PATCH 36/45] [Infra UI] Add fields to metadata section in overview tab (#163573) Closes #162939 ## Summary This PR adds 2 more metadata fields (Cloud provider and Operating system) to the asset details when it's open as a page. The flyout metadata overview section remains the same. The metadata request is moved to the Asset Details State and it's now used in Overview, Metadata, and Osquery tabs. ## Testing One option is to change the render mode inside the `flyout_wrapper` and it will open full-size content instead of the flyout. Flyout: flyout_host_view_m Fullsize: fullsize_host_view_m The easiest way is to check in the storybook: - Open as flyout and check the Overview tab - inside the metadata summary we should see the metadata fields as they were before: - Host IP - Host OS version flyout_storybook - when opened as a page we should have 2 extra metadata fields: - Host IP - Host OS version - Cloud provider - Operating system fullsize_storybook - After moving the metadata request to the asset details state it's good to check if the metadata loads correctly in Overview, Metadata, and Osquery tabs, and switching between the tabs doesn't trigger the request. --- .../asset_details/__stories__/decorator.tsx | 3 ++ .../asset_details/asset_details.tsx | 9 +++++- .../hooks/use_asset_details_state.ts | 28 +++++++++++++++++-- .../asset_details/tabs/metadata/metadata.tsx | 15 ++-------- .../asset_details/tabs/osquery/osquery.tsx | 20 ++++--------- .../metadata_summary/metadata_header.tsx | 12 ++++++++ .../metadata_summary_list.tsx | 26 +++++++++++++++-- .../asset_details/tabs/overview/overview.tsx | 27 ++++++------------ 8 files changed, 88 insertions(+), 52 deletions(-) diff --git a/x-pack/plugins/infra/public/components/asset_details/__stories__/decorator.tsx b/x-pack/plugins/infra/public/components/asset_details/__stories__/decorator.tsx index 836cd86ce5d540..e0a9ca3ec86795 100644 --- a/x-pack/plugins/infra/public/components/asset_details/__stories__/decorator.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/__stories__/decorator.tsx @@ -115,6 +115,9 @@ export const DecorateWithKibanaContext: DecoratorFn = (story) => { navigateToPrefilledEditor: () => {}, stateHelperApi: () => new Promise(() => {}), }, + telemetry: { + reportAssetDetailsFlyoutViewed: () => {}, + }, }; return ( diff --git a/x-pack/plugins/infra/public/components/asset_details/asset_details.tsx b/x-pack/plugins/infra/public/components/asset_details/asset_details.tsx index 238a8c5f002509..e55a222b547195 100644 --- a/x-pack/plugins/infra/public/components/asset_details/asset_details.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/asset_details.tsx @@ -73,7 +73,14 @@ export const AssetDetails = ({ }: AssetDetailsProps) => { return ( 0 ? activeTabId ?? tabs[0].id : undefined} diff --git a/x-pack/plugins/infra/public/components/asset_details/hooks/use_asset_details_state.ts b/x-pack/plugins/infra/public/components/asset_details/hooks/use_asset_details_state.ts index 7382dab39e99ac..3ef55cc755b03b 100644 --- a/x-pack/plugins/infra/public/components/asset_details/hooks/use_asset_details_state.ts +++ b/x-pack/plugins/infra/public/components/asset_details/hooks/use_asset_details_state.ts @@ -7,6 +7,9 @@ import createContainer from 'constate'; import { useMemo } from 'react'; +import { findInventoryModel } from '../../../../common/inventory_models'; +import { useSourceContext } from '../../../containers/metrics_source'; +import { useMetadata } from './use_metadata'; import { parseDateRange } from '../../../utils/datemath'; import type { AssetDetailsProps } from '../types'; import { toTimestampRange } from '../utils'; @@ -19,12 +22,19 @@ const DEFAULT_DATE_RANGE = { export interface UseAssetDetailsStateProps { state: Pick< AssetDetailsProps, - 'asset' | 'assetType' | 'overrides' | 'dateRange' | 'onTabsStateChange' + 'asset' | 'assetType' | 'overrides' | 'dateRange' | 'onTabsStateChange' | 'renderMode' >; } export function useAssetDetailsState({ state }: UseAssetDetailsStateProps) { - const { asset, assetType, dateRange: rawDateRange, onTabsStateChange, overrides } = state; + const { + asset, + assetType, + dateRange: rawDateRange, + onTabsStateChange, + overrides, + renderMode, + } = state; const dateRange = useMemo(() => { const { from = DEFAULT_DATE_RANGE.from, to = DEFAULT_DATE_RANGE.to } = @@ -35,6 +45,14 @@ export function useAssetDetailsState({ state }: UseAssetDetailsStateProps) { const dateRangeTs = toTimestampRange(dateRange); + const inventoryModel = findInventoryModel(assetType); + const { sourceId } = useSourceContext(); + const { + loading: metadataLoading, + error: fetchMetadataError, + metadata, + } = useMetadata(asset.name, assetType, inventoryModel.requiredMetrics, sourceId, dateRangeTs); + return { asset, assetType, @@ -42,6 +60,12 @@ export function useAssetDetailsState({ state }: UseAssetDetailsStateProps) { dateRangeTs, onTabsStateChange, overrides, + renderMode, + metadataResponse: { + metadataLoading, + fetchMetadataError, + metadata, + }, }; } diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/metadata.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/metadata.tsx index 4a759e5718d133..70f1bda8c0c681 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/metadata.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/metadata/metadata.tsx @@ -11,9 +11,6 @@ import { EuiCallOut, EuiLink } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { TimeRange } from '@kbn/es-query'; import type { InventoryItemType } from '../../../../../common/inventory_models/types'; -import { findInventoryModel } from '../../../../../common/inventory_models'; -import { useMetadata } from '../../hooks/use_metadata'; -import { useSourceContext } from '../../../../containers/metrics_source'; import { Table } from './table'; import { getAllFields } from './utils'; import { useAssetDetailsStateContext } from '../../hooks/use_asset_details_state'; @@ -33,17 +30,9 @@ export interface MetadataProps { } export const Metadata = () => { - const { asset, assetType, overrides, dateRangeTs, onTabsStateChange } = - useAssetDetailsStateContext(); + const { overrides, onTabsStateChange, metadataResponse } = useAssetDetailsStateContext(); const { query, showActionsColumn = false } = overrides?.metadata ?? {}; - - const inventoryModel = findInventoryModel(assetType); - const { sourceId } = useSourceContext(); - const { - loading: metadataLoading, - error: fetchMetadataError, - metadata, - } = useMetadata(asset.name, assetType, inventoryModel.requiredMetrics, sourceId, dateRangeTs); + const { metadataLoading, fetchMetadataError, metadata } = metadataResponse; const fields = useMemo(() => getAllFields(metadata), [metadata]); diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/osquery/osquery.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/osquery/osquery.tsx index b18a2f802e085f..f2809c86ae5b97 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/osquery/osquery.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/osquery/osquery.tsx @@ -8,22 +8,12 @@ import { EuiSkeletonText } from '@elastic/eui'; import React, { useMemo } from 'react'; import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; -import { useSourceContext } from '../../../../containers/metrics_source'; -import { findInventoryModel } from '../../../../../common/inventory_models'; -import { useMetadata } from '../../hooks/use_metadata'; import { useAssetDetailsStateContext } from '../../hooks/use_asset_details_state'; export const Osquery = () => { - const { asset, assetType, dateRangeTs } = useAssetDetailsStateContext(); - const inventoryModel = findInventoryModel(assetType); - const { sourceId } = useSourceContext(); - const { loading, metadata } = useMetadata( - asset.name, - assetType, - inventoryModel.requiredMetrics, - sourceId, - dateRangeTs - ); + const { metadataResponse } = useAssetDetailsStateContext(); + + const { metadataLoading, metadata } = metadataResponse; const { services: { osquery }, } = useKibanaContextForPlugin(); @@ -34,12 +24,12 @@ export const Osquery = () => { // avoids component rerender when resizing the popover const content = useMemo(() => { // TODO: Add info when Osquery plugin is not available - if (loading || !OsqueryAction) { + if (metadataLoading || !OsqueryAction) { return ; } return ; - }, [OsqueryAction, loading, metadata]); + }, [OsqueryAction, metadataLoading, metadata]); return content; }; diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_header.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_header.tsx index 66f2c3585d62d7..b6b2d97a9bc098 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_header.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_header.tsx @@ -30,6 +30,18 @@ const columnTitles = { defaultMessage: 'Host OS version', } ), + cloudProvider: i18n.translate( + 'xpack.infra.assetDetailsEmbeddable.overview.metadataCloudProviderHeading', + { + defaultMessage: 'Cloud provider', + } + ), + operatingSystem: i18n.translate( + 'xpack.infra.assetDetailsEmbeddable.overview.metadataOperatingSystemHeading', + { + defaultMessage: 'Operating system', + } + ), }; type MetadataFields = 'hostIp' | 'hostOsVersion'; diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_summary_list.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_summary_list.tsx index ee7210dd2d8dee..bb5e0a637483dd 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_summary_list.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metadata_summary/metadata_summary_list.tsx @@ -25,6 +25,7 @@ import { MetadataHeader } from './metadata_header'; interface MetadataSummaryProps { metadata: InfraMetadata | null; metadataLoading: boolean; + isCompactView: boolean; } export interface MetadataData { @@ -34,6 +35,20 @@ export interface MetadataData { tooltipLink?: string; } +const extendedMetadata = (metadataInfo: InfraMetadata['info']): MetadataData[] => [ + { + field: 'cloudProvider', + value: metadataInfo?.cloud?.provider, + tooltipFieldLabel: 'cloud.provider', + tooltipLink: 'https://www.elastic.co/guide/en/ecs/current/ecs-cloud.html#field-cloud-provider', + }, + { + field: 'operatingSystem', + value: metadataInfo?.host?.os?.name, + tooltipFieldLabel: 'host.os.name', + }, +]; + const metadataData = (metadataInfo: InfraMetadata['info']): MetadataData[] => [ { field: 'hostIp', @@ -48,7 +63,11 @@ const metadataData = (metadataInfo: InfraMetadata['info']): MetadataData[] => [ }, ]; -export const MetadataSummaryList = ({ metadata, metadataLoading }: MetadataSummaryProps) => { +export const MetadataSummaryList = ({ + metadata, + metadataLoading, + isCompactView, +}: MetadataSummaryProps) => { const { showTab } = useTabSwitcherContext(); const onClick = () => { @@ -58,7 +77,10 @@ export const MetadataSummaryList = ({ metadata, metadataLoading }: MetadataSumma return ( - {metadataData(metadata?.info).map( + {(isCompactView + ? metadataData(metadata?.info) + : [...metadataData(metadata?.info), ...extendedMetadata(metadata?.info)] + ).map( (metadataValue) => metadataValue && ( diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/overview.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/overview.tsx index 5485a76a71dd34..9036f09ad42578 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/overview.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/overview.tsx @@ -10,33 +10,18 @@ import { i18n } from '@kbn/i18n'; import { EuiCallOut, EuiFlexGroup, EuiFlexItem, EuiHorizontalRule, EuiLink } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { css } from '@emotion/react'; -import { findInventoryModel } from '../../../../../common/inventory_models'; -import { useMetadata } from '../../hooks/use_metadata'; -import { useSourceContext } from '../../../../containers/metrics_source'; import { MetadataSummaryList } from './metadata_summary/metadata_summary_list'; import { AlertsSummaryContent } from './alerts'; import { KPIGrid } from './kpis/kpi_grid'; import { MetricsGrid } from './metrics/metrics_grid'; -import { toTimestampRange } from '../../utils'; import { useAssetDetailsStateContext } from '../../hooks/use_asset_details_state'; export const Overview = () => { - const { asset, assetType, overrides, dateRange } = useAssetDetailsStateContext(); + const { asset, assetType, overrides, dateRange, renderMode, metadataResponse } = + useAssetDetailsStateContext(); const { logsDataView, metricsDataView } = overrides?.overview ?? {}; - const inventoryModel = findInventoryModel(assetType); - const { sourceId } = useSourceContext(); - const { - loading: metadataLoading, - error: fetchMetadataError, - metadata, - } = useMetadata( - asset.name, - assetType, - inventoryModel.requiredMetrics, - sourceId, - toTimestampRange(dateRange) - ); + const { metadataLoading, fetchMetadataError, metadata } = metadataResponse; return ( @@ -71,7 +56,11 @@ export const Overview = () => { /> ) : ( - + )} From 96e9c372a1329d2e02e58739025ee0810cf80037 Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Thu, 10 Aug 2023 09:58:19 -0600 Subject: [PATCH 37/45] [SLO] Add support for group by to SLO burn rate rule (#163434) ## Summary This PR fixes #163120 by adding support for group by's to the SLO Burn Rate rule. I refactored the rule to push all the executions down to Elasticsearch, it uses the same technique as the Metric Threshold rule. I also added a callout to the rule form to let the user know when they've selected an SLO with a group by so it's clear what the behavior will be. image image --- .../generated/observability_slo_schema.ts | 1 + .../observability/common/field_names/slo.ts | 1 + .../burn_rate_rule_editor.tsx | 19 +- .../slo_selector.test.tsx | 12 +- .../burn_rate_rule_editor/slo_selector.tsx | 9 +- .../slo_active_alerts_badge.stories.tsx | 2 +- .../slo_active_alerts_badge.tsx | 5 +- .../use_fetch_active_alerts.ts | 21 +- .../public/hooks/slo/query_key_factory.ts | 3 +- .../hooks/slo/use_fetch_active_alerts.ts | 84 +- .../hooks/slo/use_fetch_slo_definitions.ts | 57 + .../components/slo_detail_alerts.tsx | 11 +- .../slo_details/components/slo_details.tsx | 6 +- .../pages/slo_details/slo_details.test.tsx | 7 +- .../slos/components/badges/slo_badges.tsx | 3 +- .../pages/slos/components/slo_list_item.tsx | 3 +- .../pages/slos/components/slo_list_items.tsx | 12 +- .../lib/rules/slo_burn_rate/executor.test.ts | 323 +++- .../lib/rules/slo_burn_rate/executor.ts | 221 ++- .../lib/rules/slo_burn_rate/field_map.ts | 11 +- .../lib/rules/slo_burn_rate/fixtures/rule.ts | 57 + .../__snapshots__/build_query.test.ts.snap | 1375 +++++++++++++++++ .../slo_burn_rate/lib/build_query.test.ts | 40 + .../rules/slo_burn_rate/lib/build_query.ts | 218 +++ .../lib/rules/slo_burn_rate/lib/evaluate.ts | 144 ++ .../lib/rules/slo_burn_rate/register.ts | 8 + x-pack/plugins/rule_registry/common/types.ts | 16 + 27 files changed, 2394 insertions(+), 275 deletions(-) create mode 100644 x-pack/plugins/observability/public/hooks/slo/use_fetch_slo_definitions.ts create mode 100644 x-pack/plugins/observability/server/lib/rules/slo_burn_rate/fixtures/rule.ts create mode 100644 x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/__snapshots__/build_query.test.ts.snap create mode 100644 x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/build_query.test.ts create mode 100644 x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/build_query.ts create mode 100644 x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/evaluate.ts diff --git a/packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_slo_schema.ts b/packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_slo_schema.ts index 0670f390587240..82ce8666315839 100644 --- a/packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_slo_schema.ts +++ b/packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_slo_schema.ts @@ -81,6 +81,7 @@ const ObservabilitySloAlertOptional = rt.partial({ }), slo: rt.partial({ id: schemaString, + instanceId: schemaString, revision: schemaStringOrNumber, }), }); diff --git a/x-pack/plugins/observability/common/field_names/slo.ts b/x-pack/plugins/observability/common/field_names/slo.ts index 24e94f5db91c86..2b93accf03d8e6 100644 --- a/x-pack/plugins/observability/common/field_names/slo.ts +++ b/x-pack/plugins/observability/common/field_names/slo.ts @@ -7,3 +7,4 @@ export const SLO_ID_FIELD = 'slo.id'; export const SLO_REVISION_FIELD = 'slo.revision'; +export const SLO_INSTANCE_ID_FIELD = 'slo.instanceId'; diff --git a/x-pack/plugins/observability/public/components/burn_rate_rule_editor/burn_rate_rule_editor.tsx b/x-pack/plugins/observability/public/components/burn_rate_rule_editor/burn_rate_rule_editor.tsx index 5f38c9509117af..7e0e88d6c148d3 100644 --- a/x-pack/plugins/observability/public/components/burn_rate_rule_editor/burn_rate_rule_editor.tsx +++ b/x-pack/plugins/observability/public/components/burn_rate_rule_editor/burn_rate_rule_editor.tsx @@ -7,9 +7,10 @@ import { RuleTypeParamsExpressionProps } from '@kbn/triggers-actions-ui-plugin/public'; import React, { useEffect, useState } from 'react'; -import { SLOResponse } from '@kbn/slo-schema'; +import { ALL_VALUE, SLOResponse } from '@kbn/slo-schema'; -import { EuiSpacer, EuiTitle } from '@elastic/eui'; +import { EuiCallOut, EuiSpacer, EuiTitle } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { useFetchSloDetails } from '../../hooks/slo/use_fetch_slo_details'; import { BurnRateRuleParams, WindowSchema } from '../../typings'; import { SloSelector } from './slo_selector'; @@ -98,6 +99,20 @@ export function BurnRateRuleEditor(props: Props) { + {selectedSlo?.groupBy && selectedSlo.groupBy !== ALL_VALUE && ( + <> + + + + )}
Define multiple burn rate windows
diff --git a/x-pack/plugins/observability/public/components/burn_rate_rule_editor/slo_selector.test.tsx b/x-pack/plugins/observability/public/components/burn_rate_rule_editor/slo_selector.test.tsx index 12d837fafaba2d..ce401e7e0f1c2c 100644 --- a/x-pack/plugins/observability/public/components/burn_rate_rule_editor/slo_selector.test.tsx +++ b/x-pack/plugins/observability/public/components/burn_rate_rule_editor/slo_selector.test.tsx @@ -11,26 +11,26 @@ import { wait } from '@testing-library/user-event/dist/utils'; import React from 'react'; import { emptySloList } from '../../data/slo/slo'; -import { useFetchSloList } from '../../hooks/slo/use_fetch_slo_list'; +import { useFetchSloDefinitions } from '../../hooks/slo/use_fetch_slo_definitions'; import { render } from '../../utils/test_helper'; import { SloSelector } from './slo_selector'; -jest.mock('../../hooks/slo/use_fetch_slo_list'); +jest.mock('../../hooks/slo/use_fetch_slo_definitions'); -const useFetchSloListMock = useFetchSloList as jest.Mock; +const useFetchSloDefinitionsMock = useFetchSloDefinitions as jest.Mock; describe('SLO Selector', () => { const onSelectedSpy = jest.fn(); beforeEach(() => { jest.clearAllMocks(); - useFetchSloListMock.mockReturnValue({ isLoading: true, sloList: emptySloList }); + useFetchSloDefinitionsMock.mockReturnValue({ isLoading: true, data: emptySloList }); }); it('fetches SLOs asynchronously', async () => { render(); expect(screen.getByTestId('sloSelector')).toBeTruthy(); - expect(useFetchSloListMock).toHaveBeenCalledWith({ kqlQuery: 'slo.name:*' }); + expect(useFetchSloDefinitionsMock).toHaveBeenCalledWith({ name: '' }); }); it('searches SLOs when typing', async () => { @@ -42,6 +42,6 @@ describe('SLO Selector', () => { await wait(310); // debounce delay }); - expect(useFetchSloListMock).toHaveBeenCalledWith({ kqlQuery: 'slo.name:latency*' }); + expect(useFetchSloDefinitionsMock).toHaveBeenCalledWith({ name: 'latency' }); }); }); diff --git a/x-pack/plugins/observability/public/components/burn_rate_rule_editor/slo_selector.tsx b/x-pack/plugins/observability/public/components/burn_rate_rule_editor/slo_selector.tsx index 4dd13c92fcfa33..5ec21da2efc1c6 100644 --- a/x-pack/plugins/observability/public/components/burn_rate_rule_editor/slo_selector.tsx +++ b/x-pack/plugins/observability/public/components/burn_rate_rule_editor/slo_selector.tsx @@ -10,8 +10,7 @@ import { i18n } from '@kbn/i18n'; import { SLOResponse } from '@kbn/slo-schema'; import { debounce } from 'lodash'; import React, { useEffect, useMemo, useState } from 'react'; - -import { useFetchSloList } from '../../hooks/slo/use_fetch_slo_list'; +import { useFetchSloDefinitions } from '../../hooks/slo/use_fetch_slo_definitions'; interface Props { initialSlo?: SLOResponse; @@ -23,7 +22,7 @@ function SloSelector({ initialSlo, onSelected, errors }: Props) { const [options, setOptions] = useState>>([]); const [selectedOptions, setSelectedOptions] = useState>>(); const [searchValue, setSearchValue] = useState(''); - const { isLoading, sloList } = useFetchSloList({ kqlQuery: `slo.name:${searchValue}*` }); + const { isLoading, data: sloList } = useFetchSloDefinitions({ name: searchValue }); const hasError = errors !== undefined && errors.length > 0; useEffect(() => { @@ -33,7 +32,7 @@ function SloSelector({ initialSlo, onSelected, errors }: Props) { useEffect(() => { const isLoadedWithData = !isLoading && sloList !== undefined; const opts: Array> = isLoadedWithData - ? sloList.results.map((slo) => ({ value: slo.id, label: slo.name })) + ? sloList.map((slo) => ({ value: slo.id, label: slo.name })) : []; setOptions(opts); }, [isLoading, sloList]); @@ -41,7 +40,7 @@ function SloSelector({ initialSlo, onSelected, errors }: Props) { const onChange = (opts: Array>) => { setSelectedOptions(opts); const selectedSlo = - opts.length === 1 ? sloList?.results.find((slo) => slo.id === opts[0].value) : undefined; + opts.length === 1 ? sloList?.find((slo) => slo.id === opts[0].value) : undefined; onSelected(selectedSlo); }; diff --git a/x-pack/plugins/observability/public/components/slo/slo_status_badge/slo_active_alerts_badge.stories.tsx b/x-pack/plugins/observability/public/components/slo/slo_status_badge/slo_active_alerts_badge.stories.tsx index 3aed4658ab7660..c9f07555897c51 100644 --- a/x-pack/plugins/observability/public/components/slo/slo_status_badge/slo_active_alerts_badge.stories.tsx +++ b/x-pack/plugins/observability/public/components/slo/slo_status_badge/slo_active_alerts_badge.stories.tsx @@ -25,4 +25,4 @@ const Template: ComponentStory = (props: Props) => ( ); export const Default = Template.bind({}); -Default.args = { activeAlerts: { count: 2 } }; +Default.args = { activeAlerts: 2 }; diff --git a/x-pack/plugins/observability/public/components/slo/slo_status_badge/slo_active_alerts_badge.tsx b/x-pack/plugins/observability/public/components/slo/slo_status_badge/slo_active_alerts_badge.tsx index a150c5aa2d88a7..485355a2787211 100644 --- a/x-pack/plugins/observability/public/components/slo/slo_status_badge/slo_active_alerts_badge.tsx +++ b/x-pack/plugins/observability/public/components/slo/slo_status_badge/slo_active_alerts_badge.tsx @@ -12,10 +12,9 @@ import { SLOWithSummaryResponse } from '@kbn/slo-schema'; import { paths } from '../../../../common/locators/paths'; import { useKibana } from '../../../utils/kibana_react'; -import { ActiveAlerts } from '../../../hooks/slo/use_fetch_active_alerts'; export interface Props { - activeAlerts?: ActiveAlerts; + activeAlerts?: number; slo: SLOWithSummaryResponse; } @@ -53,7 +52,7 @@ export function SloActiveAlertsBadge({ slo, activeAlerts }: Props) { > {i18n.translate('xpack.observability.slo.slo.activeAlertsBadge.label', { defaultMessage: '{count, plural, one {# alert} other {# alerts}}', - values: { count: activeAlerts.count }, + values: { count: activeAlerts }, })} diff --git a/x-pack/plugins/observability/public/hooks/slo/__storybook_mocks__/use_fetch_active_alerts.ts b/x-pack/plugins/observability/public/hooks/slo/__storybook_mocks__/use_fetch_active_alerts.ts index f493eadac38062..5eaee397b9ab7c 100644 --- a/x-pack/plugins/observability/public/hooks/slo/__storybook_mocks__/use_fetch_active_alerts.ts +++ b/x-pack/plugins/observability/public/hooks/slo/__storybook_mocks__/use_fetch_active_alerts.ts @@ -5,23 +5,24 @@ * 2.0. */ -import { UseFetchActiveAlerts } from '../use_fetch_active_alerts'; +import { ActiveAlerts, UseFetchActiveAlerts } from '../use_fetch_active_alerts'; export const useFetchActiveAlerts = ({ - sloIds = [], + sloIdsAndInstanceIds = [], }: { - sloIds: string[]; + sloIdsAndInstanceIds: Array<[string, string]>; }): UseFetchActiveAlerts => { + const data = sloIdsAndInstanceIds.reduce( + (acc, item, index) => ({ + ...acc, + ...(index % 2 === 0 && { [item.join('|')]: 2 }), + }), + {} + ); return { isLoading: false, isSuccess: false, isError: false, - data: sloIds.reduce( - (acc, sloId, index) => ({ - ...acc, - ...(index % 2 === 0 && { [sloId]: { count: 2, ruleIds: ['rule-1', 'rule-2'] } }), - }), - {} - ), + data: new ActiveAlerts(data), }; }; diff --git a/x-pack/plugins/observability/public/hooks/slo/query_key_factory.ts b/x-pack/plugins/observability/public/hooks/slo/query_key_factory.ts index bf4a748ddfe58b..74e2e31be4151c 100644 --- a/x-pack/plugins/observability/public/hooks/slo/query_key_factory.ts +++ b/x-pack/plugins/observability/public/hooks/slo/query_key_factory.ts @@ -29,7 +29,8 @@ export const sloKeys = { rules: () => [...sloKeys.all, 'rules'] as const, rule: (sloIds: string[]) => [...sloKeys.rules(), sloIds] as const, activeAlerts: () => [...sloKeys.all, 'activeAlerts'] as const, - activeAlert: (sloIds: string[]) => [...sloKeys.activeAlerts(), sloIds] as const, + activeAlert: (sloIdsAndInstanceIds: Array<[string, string]>) => + [...sloKeys.activeAlerts(), ...sloIdsAndInstanceIds.flat()] as const, historicalSummaries: () => [...sloKeys.all, 'historicalSummary'] as const, historicalSummary: (list: Array<{ sloId: string; instanceId: string }>) => [...sloKeys.historicalSummaries(), list] as const, diff --git a/x-pack/plugins/observability/public/hooks/slo/use_fetch_active_alerts.ts b/x-pack/plugins/observability/public/hooks/slo/use_fetch_active_alerts.ts index 580d72e550e6b9..601fc8f024a89d 100644 --- a/x-pack/plugins/observability/public/hooks/slo/use_fetch_active_alerts.ts +++ b/x-pack/plugins/observability/public/hooks/slo/use_fetch_active_alerts.ts @@ -8,23 +8,50 @@ import { useQuery } from '@tanstack/react-query'; import { BASE_RAC_ALERTS_API_PATH } from '@kbn/rule-registry-plugin/common'; +import { ALL_VALUE, SLOResponse } from '@kbn/slo-schema'; import { useKibana } from '../../utils/kibana_react'; import { sloKeys } from './query_key_factory'; -type SloId = string; +type SLO = Pick; -interface Params { - sloIds: SloId[]; -} +export class ActiveAlerts { + private data: Map = new Map(); + + constructor(initialData?: Record) { + if (initialData) { + Object.keys(initialData).forEach((key) => this.data.set(key, initialData[key])); + } + } + + set(slo: SLO, value: number) { + this.data.set(`${slo.id}|${slo.instanceId ?? ALL_VALUE}`, value); + } + + get(slo: SLO) { + return this.data.get(`${slo.id}|${slo.instanceId ?? ALL_VALUE}`); + } + + has(slo: SLO) { + return this.data.has(`${slo.id}|${slo.instanceId ?? ALL_VALUE}`); + } + + delete(slo: SLO) { + return this.data.delete(`${slo.id}|${slo.instanceId ?? ALL_VALUE}`); + } -export interface ActiveAlerts { - count: number; + clear() { + return this.data.clear(); + } } -type ActiveAlertsMap = Record; +type SloIdAndInstanceId = [string, string]; + +interface Params { + sloIdsAndInstanceIds: SloIdAndInstanceId[]; +} export interface UseFetchActiveAlerts { - data: ActiveAlertsMap; + data: ActiveAlerts; isLoading: boolean; isSuccess: boolean; isError: boolean; @@ -34,20 +61,21 @@ interface FindApiResponse { aggregations: { perSloId: { buckets: Array<{ - key: string; + key: SloIdAndInstanceId; + key_as_string: string; doc_count: number; }>; }; }; } -const EMPTY_ACTIVE_ALERTS_MAP = {}; +const EMPTY_ACTIVE_ALERTS_MAP = new ActiveAlerts(); -export function useFetchActiveAlerts({ sloIds = [] }: Params): UseFetchActiveAlerts { +export function useFetchActiveAlerts({ sloIdsAndInstanceIds = [] }: Params): UseFetchActiveAlerts { const { http } = useKibana().services; const { isInitialLoading, isLoading, isError, isSuccess, isRefetching, data } = useQuery({ - queryKey: sloKeys.activeAlert(sloIds), + queryKey: sloKeys.activeAlert(sloIdsAndInstanceIds), queryFn: async ({ signal }) => { try { const response = await http.post(`${BASE_RAC_ALERTS_API_PATH}/find`, { @@ -75,21 +103,22 @@ export function useFetchActiveAlerts({ sloIds = [] }: Params): UseFetchActiveAle }, }, ], - should: [ - { - terms: { - 'kibana.alert.rule.parameters.sloId': sloIds, - }, + should: sloIdsAndInstanceIds.map(([sloId, instanceId]) => ({ + bool: { + filter: [ + { term: { 'slo.id': sloId } }, + { term: { 'slo.instanceId': instanceId } }, + ], }, - ], + })), minimum_should_match: 1, }, }, aggs: { perSloId: { - terms: { - size: sloIds.length, - field: 'kibana.alert.rule.parameters.sloId', + multi_terms: { + size: sloIdsAndInstanceIds.length, + terms: [{ field: 'slo.id' }, { field: 'slo.instanceId' }], }, }, }, @@ -97,15 +126,10 @@ export function useFetchActiveAlerts({ sloIds = [] }: Params): UseFetchActiveAle signal, }); - return response.aggregations.perSloId.buckets.reduce( - (acc, bucket) => ({ - ...acc, - [bucket.key]: { - count: bucket.doc_count ?? 0, - } as ActiveAlerts, - }), - {} - ); + const activeAlertsData = response.aggregations.perSloId.buckets.reduce((acc, bucket) => { + return { ...acc, [bucket.key_as_string]: bucket.doc_count ?? 0 }; + }, {} as Record); + return new ActiveAlerts(activeAlertsData); } catch (error) { // ignore error } diff --git a/x-pack/plugins/observability/public/hooks/slo/use_fetch_slo_definitions.ts b/x-pack/plugins/observability/public/hooks/slo/use_fetch_slo_definitions.ts new file mode 100644 index 00000000000000..33a480254c8269 --- /dev/null +++ b/x-pack/plugins/observability/public/hooks/slo/use_fetch_slo_definitions.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 { + QueryObserverResult, + RefetchOptions, + RefetchQueryFilters, + useQuery, +} from '@tanstack/react-query'; +import { SLOResponse } from '@kbn/slo-schema'; +import { useKibana } from '../../utils/kibana_react'; + +export interface UseFetchSloDefinitionsResponse { + isLoading: boolean; + isSuccess: boolean; + isError: boolean; + data: SLOResponse[] | undefined; + refetch: ( + options?: (RefetchOptions & RefetchQueryFilters) | undefined + ) => Promise>; +} + +interface Params { + name?: string; + size?: number; +} + +export function useFetchSloDefinitions({ + name = '', + size = 10, +}: Params): UseFetchSloDefinitionsResponse { + const { savedObjects } = useKibana().services; + const search = name.endsWith('*') ? name : `${name}*`; + + const { isLoading, isError, isSuccess, data, refetch } = useQuery({ + queryKey: ['fetchSloDefinitions', search], + queryFn: async () => { + try { + const response = await savedObjects.client.find({ + type: 'slo', + search, + searchFields: ['name'], + perPage: size, + }); + return response.savedObjects.map((so) => so.attributes); + } catch (error) { + throw new Error(`Something went wrong. Error: ${error}`); + } + }, + }); + + return { isLoading, isError, isSuccess, data, refetch }; +} diff --git a/x-pack/plugins/observability/public/pages/slo_details/components/slo_detail_alerts.tsx b/x-pack/plugins/observability/public/pages/slo_details/components/slo_detail_alerts.tsx index e233e667d7615e..fe4a8c2e161367 100644 --- a/x-pack/plugins/observability/public/pages/slo_details/components/slo_detail_alerts.tsx +++ b/x-pack/plugins/observability/public/pages/slo_details/components/slo_detail_alerts.tsx @@ -8,7 +8,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; import React, { Fragment } from 'react'; import { AlertConsumers } from '@kbn/rule-data-utils'; -import { SLOWithSummaryResponse } from '@kbn/slo-schema'; +import { ALL_VALUE, SLOWithSummaryResponse } from '@kbn/slo-schema'; import { useKibana } from '../../../utils/kibana_react'; const ALERTS_TABLE_ID = 'xpack.observability.slo.sloDetails.alertTable'; @@ -34,7 +34,14 @@ export function SloDetailsAlerts({ slo }: Props) { flyoutSize="s" data-test-subj="alertTable" featureIds={[AlertConsumers.SLO]} - query={{ bool: { filter: { term: { 'slo.id': slo.id } } } }} + query={{ + bool: { + filter: [ + { term: { 'slo.id': slo.id } }, + { term: { 'slo.instanceId': slo.instanceId ?? ALL_VALUE } }, + ], + }, + }} showExpandToDetails={false} showAlertStatusWithFlapping pageSize={100} diff --git a/x-pack/plugins/observability/public/pages/slo_details/components/slo_details.tsx b/x-pack/plugins/observability/public/pages/slo_details/components/slo_details.tsx index 73bcf5e7d9b4de..f837627ed614f1 100644 --- a/x-pack/plugins/observability/public/pages/slo_details/components/slo_details.tsx +++ b/x-pack/plugins/observability/public/pages/slo_details/components/slo_details.tsx @@ -40,7 +40,9 @@ type TabId = typeof OVERVIEW_TAB_ID | typeof ALERTS_TAB_ID; export function SloDetails({ slo, isAutoRefreshing }: Props) { const { search } = useLocation(); - const { data: activeAlerts } = useFetchActiveAlerts({ sloIds: [slo.id] }); + const { data: activeAlerts } = useFetchActiveAlerts({ + sloIdsAndInstanceIds: [[slo.id, slo.instanceId ?? ALL_VALUE]], + }); const { isLoading: historicalSummaryLoading, data: historicalSummaries = [] } = useFetchHistoricalSummary({ list: [{ sloId: slo.id, instanceId: slo.instanceId ?? ALL_VALUE }], @@ -104,7 +106,7 @@ export function SloDetails({ slo, isAutoRefreshing }: Props) { 'data-test-subj': 'alertsTab', append: ( - {(activeAlerts && activeAlerts[slo.id]?.count) ?? 0} + {(activeAlerts && activeAlerts.get(slo)) ?? 0} ), content: , diff --git a/x-pack/plugins/observability/public/pages/slo_details/slo_details.test.tsx b/x-pack/plugins/observability/public/pages/slo_details/slo_details.test.tsx index d403b98d7261c9..c55e8f8fbd4a34 100644 --- a/x-pack/plugins/observability/public/pages/slo_details/slo_details.test.tsx +++ b/x-pack/plugins/observability/public/pages/slo_details/slo_details.test.tsx @@ -14,7 +14,7 @@ import { useLicense } from '../../hooks/use_license'; import { useCapabilities } from '../../hooks/slo/use_capabilities'; import { useFetchSloDetails } from '../../hooks/slo/use_fetch_slo_details'; import { useFetchHistoricalSummary } from '../../hooks/slo/use_fetch_historical_summary'; -import { useFetchActiveAlerts } from '../../hooks/slo/use_fetch_active_alerts'; +import { ActiveAlerts, useFetchActiveAlerts } from '../../hooks/slo/use_fetch_active_alerts'; import { useCloneSlo } from '../../hooks/slo/use_clone_slo'; import { useDeleteSlo } from '../../hooks/slo/use_delete_slo'; import { render } from '../../utils/test_helper'; @@ -27,6 +27,7 @@ import { } from '../../data/slo/historical_summary_data'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { buildApmAvailabilityIndicator } from '../../data/slo/indicator'; +import { ALL_VALUE } from '@kbn/slo-schema'; jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom'), @@ -109,7 +110,7 @@ describe('SLO Details Page', () => { isLoading: false, data: historicalSummaryData, }); - useFetchActiveAlertsMock.mockReturnValue({ isLoading: false, data: {} }); + useFetchActiveAlertsMock.mockReturnValue({ isLoading: false, data: new ActiveAlerts() }); useCloneSloMock.mockReturnValue({ mutate: mockClone }); useDeleteSloMock.mockReturnValue({ mutate: mockDelete }); useLocationMock.mockReturnValue({ search: '' }); @@ -299,7 +300,7 @@ describe('SLO Details Page', () => { useLicenseMock.mockReturnValue({ hasAtLeast: () => true }); useFetchActiveAlertsMock.mockReturnValue({ isLoading: false, - data: { [slo.id]: { count: 2, ruleIds: ['rule-1', 'rule-2'] } }, + data: new ActiveAlerts({ [`${slo.id}|${ALL_VALUE}`]: 2 }), }); render(); diff --git a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.tsx b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.tsx index f9c7cc3faeeb8c..deccd010205a01 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.tsx @@ -15,12 +15,11 @@ import { SloStatusBadge } from '../../../../components/slo/slo_status_badge'; import { SloActiveAlertsBadge } from '../../../../components/slo/slo_status_badge/slo_active_alerts_badge'; import { SloTimeWindowBadge } from './slo_time_window_badge'; import { SloRulesBadge } from './slo_rules_badge'; -import type { ActiveAlerts } from '../../../../hooks/slo/use_fetch_active_alerts'; import type { SloRule } from '../../../../hooks/slo/use_fetch_rules_for_slo'; import { SloGroupByBadge } from '../../../../components/slo/slo_status_badge/slo_group_by_badge'; export interface Props { - activeAlerts?: ActiveAlerts; + activeAlerts?: number; isLoading: boolean; rules: Array> | undefined; slo: SLOWithSummaryResponse; diff --git a/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.tsx b/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.tsx index 8d2e3d6f2b8f57..72656db6dcdc47 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.tsx @@ -27,7 +27,6 @@ import { sloKeys } from '../../../hooks/slo/query_key_factory'; import { useCapabilities } from '../../../hooks/slo/use_capabilities'; import { useCloneSlo } from '../../../hooks/slo/use_clone_slo'; import { useDeleteSlo } from '../../../hooks/slo/use_delete_slo'; -import type { ActiveAlerts } from '../../../hooks/slo/use_fetch_active_alerts'; import type { SloRule } from '../../../hooks/slo/use_fetch_rules_for_slo'; import { useGetFilteredRuleTypes } from '../../../hooks/use_get_filtered_rule_types'; import type { RulesParams } from '../../../locators/rules'; @@ -46,7 +45,7 @@ export interface SloListItemProps { rules: Array> | undefined; historicalSummary?: HistoricalSummaryResponse[]; historicalSummaryLoading: boolean; - activeAlerts?: ActiveAlerts; + activeAlerts?: number; } export function SloListItem({ diff --git a/x-pack/plugins/observability/public/pages/slos/components/slo_list_items.tsx b/x-pack/plugins/observability/public/pages/slos/components/slo_list_items.tsx index 2b568d0ca45a33..4f491f6b8fca2a 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/slo_list_items.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/slo_list_items.tsx @@ -21,10 +21,14 @@ export interface Props { } export function SloListItems({ sloList, loading, error }: Props) { - const sloIds = sloList.map((slo) => slo.id); + const sloIdsAndInstanceIds = sloList.map( + (slo) => [slo.id, slo.instanceId ?? ALL_VALUE] as [string, string] + ); - const { data: activeAlertsBySlo } = useFetchActiveAlerts({ sloIds }); - const { data: rulesBySlo } = useFetchRulesForSlo({ sloIds }); + const { data: activeAlertsBySlo } = useFetchActiveAlerts({ sloIdsAndInstanceIds }); + const { data: rulesBySlo } = useFetchRulesForSlo({ + sloIds: sloIdsAndInstanceIds.map((item) => item[0]), + }); const { isLoading: historicalSummaryLoading, data: historicalSummaries = [] } = useFetchHistoricalSummary({ list: sloList.map((slo) => ({ sloId: slo.id, instanceId: slo.instanceId ?? ALL_VALUE })), @@ -42,7 +46,7 @@ export function SloListItems({ sloList, loading, error }: Props) { {sloList.map((slo) => ( { it('does not schedule an alert when long windows burn rates are below the threshold', async () => { const slo = createSLO({ objective: { target: 0.9 } }); + const ruleParams = someRuleParamsWithWindows({ sloId: slo.id }); soClientMock.find.mockResolvedValueOnce(createFindResponse([slo])); - esClientMock.search.mockResolvedValueOnce(generateEsResponse(slo, 2.1, 1.9)); - esClientMock.search.mockResolvedValueOnce(generateEsResponse(slo, 1.1, 0.9)); + const buckets = [ + { + instanceId: 'foo', + windows: [ + { shortWindowBurnRate: 2.1, longWindowBurnRate: 0.9 }, + { shortWindowBurnRate: 1.2, longWindowBurnRate: 0.9 }, + ], + }, + { + instanceId: 'bar', + windows: [ + { shortWindowBurnRate: 2.1, longWindowBurnRate: 0.9 }, + { shortWindowBurnRate: 1.2, longWindowBurnRate: 0.9 }, + ], + }, + ]; + esClientMock.search.mockResolvedValueOnce( + generateEsResponse(ruleParams, buckets, { instanceId: 'bar' }) + ); + esClientMock.search.mockResolvedValueOnce( + generateEsResponse(ruleParams, [], { instanceId: 'bar' }) + ); alertFactoryMock.done.mockReturnValueOnce({ getRecoveredAlerts: () => [] }); const executor = getRuleExecutor({ basePath: basePathMock }); await executor({ - params: someRuleParamsWithWindows({ sloId: slo.id }), + params: ruleParams, startedAt: new Date(), services: servicesMock, executionId: 'irrelevant', @@ -208,14 +243,35 @@ describe('BurnRateRuleExecutor', () => { it('does not schedule an alert when the short window burn rate is below the threshold', async () => { const slo = createSLO({ objective: { target: 0.9 } }); + const ruleParams = someRuleParamsWithWindows({ sloId: slo.id }); soClientMock.find.mockResolvedValueOnce(createFindResponse([slo])); - esClientMock.search.mockResolvedValue(generateEsResponse(slo, 1.9, 2.1)); - esClientMock.search.mockResolvedValue(generateEsResponse(slo, 0.9, 1.1)); + const buckets = [ + { + instanceId: 'foo', + windows: [ + { shortWindowBurnRate: 0.9, longWindowBurnRate: 2.1 }, + { shortWindowBurnRate: 0.9, longWindowBurnRate: 1.2 }, + ], + }, + { + instanceId: 'bar', + windows: [ + { shortWindowBurnRate: 0.9, longWindowBurnRate: 2.1 }, + { shortWindowBurnRate: 0.9, longWindowBurnRate: 1.2 }, + ], + }, + ]; + esClientMock.search.mockResolvedValueOnce( + generateEsResponse(ruleParams, buckets, { instanceId: 'bar' }) + ); + esClientMock.search.mockResolvedValueOnce( + generateEsResponse(ruleParams, [], { instanceId: 'bar' }) + ); alertFactoryMock.done.mockReturnValueOnce({ getRecoveredAlerts: () => [] }); const executor = getRuleExecutor({ basePath: basePathMock }); await executor({ - params: someRuleParamsWithWindows({ sloId: slo.id }), + params: ruleParams, startedAt: new Date(), services: servicesMock, executionId: 'irrelevant', @@ -232,9 +288,30 @@ describe('BurnRateRuleExecutor', () => { it('schedules an alert when both windows of first window definition burn rate have reached the threshold', async () => { const slo = createSLO({ objective: { target: 0.9 } }); + const ruleParams = someRuleParamsWithWindows({ sloId: slo.id }); soClientMock.find.mockResolvedValueOnce(createFindResponse([slo])); - esClientMock.search.mockResolvedValue(generateEsResponse(slo, 2, 2)); - esClientMock.search.mockResolvedValue(generateEsResponse(slo, 2, 2)); + const buckets = [ + { + instanceId: 'foo', + windows: [ + { shortWindowBurnRate: 2.1, longWindowBurnRate: 2.3 }, + { shortWindowBurnRate: 0.9, longWindowBurnRate: 1.2 }, + ], + }, + { + instanceId: 'bar', + windows: [ + { shortWindowBurnRate: 2.2, longWindowBurnRate: 2.5 }, + { shortWindowBurnRate: 0.9, longWindowBurnRate: 1.2 }, + ], + }, + ]; + esClientMock.search.mockResolvedValueOnce( + generateEsResponse(ruleParams, buckets, { instanceId: 'bar' }) + ); + esClientMock.search.mockResolvedValueOnce( + generateEsResponse(ruleParams, [], { instanceId: 'bar' }) + ); const alertMock: Partial = { scheduleActions: jest.fn(), replaceState: jest.fn(), @@ -247,7 +324,7 @@ describe('BurnRateRuleExecutor', () => { alertsLocator: alertsLocatorMock, }); await executor({ - params: someRuleParamsWithWindows({ sloId: slo.id }), + params: ruleParams, startedAt: new Date(), services: servicesMock, executionId: 'irrelevant', @@ -260,24 +337,48 @@ describe('BurnRateRuleExecutor', () => { }); expect(alertWithLifecycleMock).toBeCalledWith({ - id: `alert-${slo.id}-${slo.revision}`, + id: 'foo', fields: { [ALERT_REASON]: - 'CRITICAL: The burn rate for the past 1h is 2 and for the past 5m is 2. Alert when above 2 for both windows', + 'CRITICAL: The burn rate for the past 1h is 2.3 and for the past 5m is 2.1 for foo. Alert when above 2 for both windows', [ALERT_EVALUATION_THRESHOLD]: 2, - [ALERT_EVALUATION_VALUE]: 2, + [ALERT_EVALUATION_VALUE]: 2.1, [SLO_ID_FIELD]: slo.id, [SLO_REVISION_FIELD]: slo.revision, + [SLO_INSTANCE_ID_FIELD]: 'foo', + }, + }); + expect(alertWithLifecycleMock).toBeCalledWith({ + id: 'bar', + fields: { + [ALERT_REASON]: + 'CRITICAL: The burn rate for the past 1h is 2.5 and for the past 5m is 2.2 for bar. Alert when above 2 for both windows', + [ALERT_EVALUATION_THRESHOLD]: 2, + [ALERT_EVALUATION_VALUE]: 2.2, + [SLO_ID_FIELD]: slo.id, + [SLO_REVISION_FIELD]: slo.revision, + [SLO_INSTANCE_ID_FIELD]: 'bar', }, }); expect(alertMock.scheduleActions).toBeCalledWith( ALERT_ACTION.id, expect.objectContaining({ - longWindow: { burnRate: 2, duration: '1h' }, - shortWindow: { burnRate: 2, duration: '5m' }, + longWindow: { burnRate: 2.3, duration: '1h' }, + shortWindow: { burnRate: 2.1, duration: '5m' }, burnRateThreshold: 2, reason: - 'CRITICAL: The burn rate for the past 1h is 2 and for the past 5m is 2. Alert when above 2 for both windows', + 'CRITICAL: The burn rate for the past 1h is 2.3 and for the past 5m is 2.1 for foo. Alert when above 2 for both windows', + alertDetailsUrl: 'mockedAlertsLocator > getLocation', + }) + ); + expect(alertMock.scheduleActions).toBeCalledWith( + ALERT_ACTION.id, + expect.objectContaining({ + longWindow: { burnRate: 2.5, duration: '1h' }, + shortWindow: { burnRate: 2.2, duration: '5m' }, + burnRateThreshold: 2, + reason: + 'CRITICAL: The burn rate for the past 1h is 2.5 and for the past 5m is 2.2 for bar. Alert when above 2 for both windows', alertDetailsUrl: 'mockedAlertsLocator > getLocation', }) ); @@ -292,9 +393,30 @@ describe('BurnRateRuleExecutor', () => { it('schedules an alert when both windows of second window definition burn rate have reached the threshold', async () => { const slo = createSLO({ objective: { target: 0.9 } }); + const ruleParams = someRuleParamsWithWindows({ sloId: slo.id }); soClientMock.find.mockResolvedValueOnce(createFindResponse([slo])); - esClientMock.search.mockResolvedValue(generateEsResponse(slo, 1.5, 1.5)); - esClientMock.search.mockResolvedValue(generateEsResponse(slo, 1.5, 1.5)); + const buckets = [ + { + instanceId: 'foo', + windows: [ + { shortWindowBurnRate: 1.0, longWindowBurnRate: 2.0 }, + { shortWindowBurnRate: 1.9, longWindowBurnRate: 1.2 }, + ], + }, + { + instanceId: 'bar', + windows: [ + { shortWindowBurnRate: 1.0, longWindowBurnRate: 2.0 }, + { shortWindowBurnRate: 1.5, longWindowBurnRate: 1.1 }, + ], + }, + ]; + esClientMock.search.mockResolvedValueOnce( + generateEsResponse(ruleParams, buckets, { instanceId: 'bar' }) + ); + esClientMock.search.mockResolvedValueOnce( + generateEsResponse(ruleParams, [], { instanceId: 'bar' }) + ); const alertMock: Partial = { scheduleActions: jest.fn(), replaceState: jest.fn(), @@ -304,7 +426,7 @@ describe('BurnRateRuleExecutor', () => { const executor = getRuleExecutor({ basePath: basePathMock }); await executor({ - params: someRuleParamsWithWindows({ sloId: slo.id }), + params: ruleParams, startedAt: new Date(), services: servicesMock, executionId: 'irrelevant', @@ -317,72 +439,50 @@ describe('BurnRateRuleExecutor', () => { }); expect(alertWithLifecycleMock).toBeCalledWith({ - id: `alert-${slo.id}-${slo.revision}`, + id: 'foo', fields: { [ALERT_REASON]: - 'HIGH: The burn rate for the past 6h is 1.5 and for the past 30m is 1.5. Alert when above 1 for both windows', + 'HIGH: The burn rate for the past 6h is 1.2 and for the past 30m is 1.9 for foo. Alert when above 1 for both windows', [ALERT_EVALUATION_THRESHOLD]: 1, - [ALERT_EVALUATION_VALUE]: 1.5, + [ALERT_EVALUATION_VALUE]: 1.2, [SLO_ID_FIELD]: slo.id, [SLO_REVISION_FIELD]: slo.revision, + [SLO_INSTANCE_ID_FIELD]: 'foo', + }, + }); + expect(alertWithLifecycleMock).toBeCalledWith({ + id: 'bar', + fields: { + [ALERT_REASON]: + 'HIGH: The burn rate for the past 6h is 1.1 and for the past 30m is 1.5 for bar. Alert when above 1 for both windows', + [ALERT_EVALUATION_THRESHOLD]: 1, + [ALERT_EVALUATION_VALUE]: 1.1, + [SLO_ID_FIELD]: slo.id, + [SLO_REVISION_FIELD]: slo.revision, + [SLO_INSTANCE_ID_FIELD]: 'bar', }, }); expect(alertMock.scheduleActions).toBeCalledWith( HIGH_PRIORITY_ACTION_ID, expect.objectContaining({ - longWindow: { burnRate: 1.5, duration: '6h' }, - shortWindow: { burnRate: 1.5, duration: '30m' }, + longWindow: { burnRate: 1.2, duration: '6h' }, + shortWindow: { burnRate: 1.9, duration: '30m' }, burnRateThreshold: 1, reason: - 'HIGH: The burn rate for the past 6h is 1.5 and for the past 30m is 1.5. Alert when above 1 for both windows', + 'HIGH: The burn rate for the past 6h is 1.2 and for the past 30m is 1.9 for foo. Alert when above 1 for both windows', }) ); - expect(alertMock.replaceState).toBeCalledWith({ alertState: AlertStates.ALERT }); - }); - - it('sets the context on the recovered alerts using the last window', async () => { - const slo = createSLO({ objective: { target: 0.9 } }); - soClientMock.find.mockResolvedValueOnce(createFindResponse([slo])); - esClientMock.search.mockResolvedValue(generateEsResponse(slo, 0.9, 0.9)); - esClientMock.search.mockResolvedValue(generateEsResponse(slo, 0.9, 0.9)); - const alertMock: Partial = { - setContext: jest.fn(), - }; - alertFactoryMock.done.mockReturnValueOnce({ getRecoveredAlerts: () => [alertMock] as any }); - - const executor = getRuleExecutor({ - basePath: basePathMock, - alertsLocator: alertsLocatorMock, - }); - - await executor({ - params: someRuleParamsWithWindows({ sloId: slo.id }), - startedAt: new Date(), - services: servicesMock, - executionId: 'irrelevant', - logger: loggerMock, - previousStartedAt: null, - rule: {} as SanitizedRuleConfig, - spaceId: 'irrelevant', - state: {}, - flappingSettings: DEFAULT_FLAPPING_SETTINGS, - }); - - expect(alertWithLifecycleMock).not.toBeCalled(); - expect(alertMock.setContext).toBeCalledWith( + expect(alertMock.scheduleActions).toBeCalledWith( + HIGH_PRIORITY_ACTION_ID, expect.objectContaining({ - longWindow: { burnRate: 0.9, duration: '6h' }, - shortWindow: { burnRate: 0.9, duration: '30m' }, + longWindow: { burnRate: 1.1, duration: '6h' }, + shortWindow: { burnRate: 1.5, duration: '30m' }, burnRateThreshold: 1, - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + reason: + 'HIGH: The burn rate for the past 6h is 1.1 and for the past 30m is 1.5 for bar. Alert when above 1 for both windows', }) ); - expect(alertsLocatorMock.getLocation).toBeCalledWith({ - baseUrl: 'https://kibana.dev', - kuery: 'kibana.alert.uuid: "mockedAlertUuid"', - rangeFrom: expect.stringMatching(ISO_DATE_REGEX), - spaceId: 'irrelevant', - }); + expect(alertMock.replaceState).toBeCalledWith({ alertState: AlertStates.ALERT }); }); }); }); @@ -412,18 +512,79 @@ function someRuleParamsWithWindows(params: Partial = {}): Bu }; } -function generateEsResponse(slo: SLO, shortWindowBurnRate: number, longWindowBurnRate: number) { +interface ResponseBucket { + instanceId: string; + windows: Array<{ + shortWindowBurnRate: number; + longWindowBurnRate: number; + }>; +} + +interface AfterKey { + instanceId: string; +} + +function generateEsResponse( + params: BurnRateRuleParams, + buckets: ResponseBucket[], + afterKey: AfterKey +) { return { ...commonEsResponse, aggregations: { - SHORT_WINDOW: { buckets: [generateBucketForBurnRate(slo, shortWindowBurnRate)] }, - LONG_WINDOW: { buckets: [generateBucketForBurnRate(slo, longWindowBurnRate)] }, + instances: { + after: afterKey, + doc_count: buckets.length ? 100 : 0, + buckets: buckets + .map((bucket) => { + return bucket.windows.reduce( + (acc, win, index) => ({ + ...acc, + [generateStatsKey(generateWindowId(index), SHORT_WINDOW)]: { + doc_count: 100, + good: { value: win.shortWindowBurnRate * 100 }, + total: { value: 100 }, + }, + [generateStatsKey(generateWindowId(index), LONG_WINDOW)]: { + doc_count: 100, + good: { value: win.longWindowBurnRate * 100 }, + total: { value: 100 }, + }, + [generateBurnRateKey(generateWindowId(index), SHORT_WINDOW)]: { + value: win.shortWindowBurnRate, + }, + [generateBurnRateKey(generateWindowId(index), LONG_WINDOW)]: { + value: win.longWindowBurnRate, + }, + [generateAboveThresholdKey(generateWindowId(index), SHORT_WINDOW)]: { + value: win.shortWindowBurnRate >= params.windows[index].burnRateThreshold ? 1 : 0, + }, + [generateAboveThresholdKey(generateWindowId(index), LONG_WINDOW)]: { + value: win.longWindowBurnRate >= params.windows[index].burnRateThreshold ? 1 : 0, + }, + }), + { + key: { instanceId: bucket.instanceId }, + doc_count: 100, + } as EvaluationBucket + ); + }) + .filter((bucket: any) => + params.windows.some( + (_win, index) => + get( + bucket, + [generateAboveThresholdKey(generateWindowId(index), SHORT_WINDOW), 'value'], + 0 + ) === 1 && + get( + bucket, + [generateAboveThresholdKey(generateWindowId(index), LONG_WINDOW), 'value'], + 0 + ) === 1 + ) + ), + }, }, }; } - -function generateBucketForBurnRate(slo: SLO, burnRate: number) { - const total = 100; - const good = total * (1 - burnRate + slo.objective.target * burnRate); - return { good: { value: good }, total: { value: total } }; -} diff --git a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.ts b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.ts index 42841d276c098d..22e5594f0fc199 100644 --- a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.ts +++ b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.ts @@ -17,14 +17,17 @@ import { ExecutorType } from '@kbn/alerting-plugin/server'; import { IBasePath } from '@kbn/core/server'; import { LocatorPublic } from '@kbn/share-plugin/common'; -import { memoize, last, upperCase } from 'lodash'; +import { upperCase } from 'lodash'; import { addSpaceIdToPath } from '@kbn/spaces-plugin/server'; import { ALL_VALUE } from '@kbn/slo-schema'; import { AlertsLocatorParams, getAlertUrl } from '../../../../common'; -import { SLO_ID_FIELD, SLO_REVISION_FIELD } from '../../../../common/field_names/slo'; -import { Duration, SLO, toDurationUnit } from '../../../domain/models'; -import { DefaultSLIClient, KibanaSavedObjectsSLORepository } from '../../../services/slo'; -import { computeBurnRate } from '../../../domain/services'; +import { + SLO_ID_FIELD, + SLO_INSTANCE_ID_FIELD, + SLO_REVISION_FIELD, +} from '../../../../common/field_names/slo'; +import { Duration } from '../../../domain/models'; +import { KibanaSavedObjectsSLORepository } from '../../../services/slo'; import { AlertStates, BurnRateAlertContext, @@ -40,57 +43,7 @@ import { MEDIUM_PRIORITY_ACTION, LOW_PRIORITY_ACTION, } from '../../../../common/constants'; - -const SHORT_WINDOW = 'SHORT_WINDOW'; -const LONG_WINDOW = 'LONG_WINDOW'; - -async function evaluateWindow(slo: SLO, summaryClient: DefaultSLIClient, windowDef: WindowSchema) { - const longWindowDuration = new Duration( - windowDef.longWindow.value, - toDurationUnit(windowDef.longWindow.unit) - ); - const shortWindowDuration = new Duration( - windowDef.shortWindow.value, - toDurationUnit(windowDef.shortWindow.unit) - ); - - const sliData = await summaryClient.fetchSLIDataFrom(slo, ALL_VALUE, [ - { name: LONG_WINDOW, duration: longWindowDuration.add(slo.settings.syncDelay) }, - { name: SHORT_WINDOW, duration: shortWindowDuration.add(slo.settings.syncDelay) }, - ]); - - const longWindowBurnRate = computeBurnRate(slo, sliData[LONG_WINDOW]); - const shortWindowBurnRate = computeBurnRate(slo, sliData[SHORT_WINDOW]); - - const shouldAlert = - longWindowBurnRate >= windowDef.burnRateThreshold && - shortWindowBurnRate >= windowDef.burnRateThreshold; - - return { - shouldAlert, - longWindowBurnRate, - shortWindowBurnRate, - longWindowDuration, - shortWindowDuration, - window: windowDef, - }; -} - -async function evaluate(slo: SLO, summaryClient: DefaultSLIClient, params: BurnRateRuleParams) { - const evalWindow = memoize(async (windowDef: WindowSchema) => - evaluateWindow(slo, summaryClient, windowDef) - ); - for (const windowDef of params.windows) { - const result = await evalWindow(windowDef); - if (result.shouldAlert) { - return result; - } - } - // If none of the previous windows match, we need to return the last window - // for the recovery context. Since evalWindow is memoized, it shouldn't make - // and additional call to evaulateWindow. - return await evalWindow(last(params.windows) as WindowSchema); -} +import { evaluate } from './lib/evaluate'; export const getRuleExecutor = ({ basePath, @@ -129,85 +82,91 @@ export const getRuleExecutor = ({ } = services; const sloRepository = new KibanaSavedObjectsSLORepository(soClient); - const summaryClient = new DefaultSLIClient(esClient.asCurrentUser); const slo = await sloRepository.findById(params.sloId); if (!slo.enabled) { return { state: {} }; } - const result = await evaluate(slo, summaryClient, params); - - if (result) { - const { - shouldAlert, - longWindowDuration, - longWindowBurnRate, - shortWindowDuration, - shortWindowBurnRate, - window: windowDef, - } = result; - - const viewInAppUrl = addSpaceIdToPath( - basePath.publicBaseUrl, - spaceId, - `/app/observability/slos/${slo.id}` - ); + const results = await evaluate(esClient.asCurrentUser, slo, params, startedAt); - if (shouldAlert) { - const reason = buildReason( - windowDef.actionGroup, + if (results.length > 0) { + for (const result of results) { + const { + instanceId, + shouldAlert, longWindowDuration, longWindowBurnRate, shortWindowDuration, shortWindowBurnRate, - windowDef - ); + window: windowDef, + } = result; - const alertId = `alert-${slo.id}-${slo.revision}`; - const indexedStartedAt = getAlertStartedDate(alertId) ?? startedAt.toISOString(); - const alertUuid = getAlertUuid(alertId); - const alertDetailsUrl = await getAlertUrl( - alertUuid, + const urlQuery = instanceId === ALL_VALUE ? '' : `?instanceId=${instanceId}`; + const viewInAppUrl = addSpaceIdToPath( + basePath.publicBaseUrl, spaceId, - indexedStartedAt, - alertsLocator, - basePath.publicBaseUrl + `/app/observability/slos/${slo.id}${urlQuery}` ); - - const context = { - alertDetailsUrl, - reason, - longWindow: { burnRate: longWindowBurnRate, duration: longWindowDuration.format() }, - shortWindow: { burnRate: shortWindowBurnRate, duration: shortWindowDuration.format() }, - burnRateThreshold: windowDef.burnRateThreshold, - timestamp: startedAt.toISOString(), - viewInAppUrl, - sloId: slo.id, - sloName: slo.name, - }; - - const alert = alertWithLifecycle({ - id: alertId, - fields: { - [ALERT_REASON]: reason, - [ALERT_EVALUATION_THRESHOLD]: windowDef.burnRateThreshold, - [ALERT_EVALUATION_VALUE]: Math.min(longWindowBurnRate, shortWindowBurnRate), - [SLO_ID_FIELD]: slo.id, - [SLO_REVISION_FIELD]: slo.revision, - }, - }); - - alert.scheduleActions(windowDef.actionGroup, context); - alert.replaceState({ alertState: AlertStates.ALERT }); + if (shouldAlert) { + const reason = buildReason( + instanceId, + windowDef.actionGroup, + longWindowDuration, + longWindowBurnRate, + shortWindowDuration, + shortWindowBurnRate, + windowDef + ); + + const alertId = instanceId; + const indexedStartedAt = getAlertStartedDate(alertId) ?? startedAt.toISOString(); + const alertUuid = getAlertUuid(alertId); + const alertDetailsUrl = await getAlertUrl( + alertUuid, + spaceId, + indexedStartedAt, + alertsLocator, + basePath.publicBaseUrl + ); + + const context = { + alertDetailsUrl, + reason, + longWindow: { burnRate: longWindowBurnRate, duration: longWindowDuration.format() }, + shortWindow: { burnRate: shortWindowBurnRate, duration: shortWindowDuration.format() }, + burnRateThreshold: windowDef.burnRateThreshold, + timestamp: startedAt.toISOString(), + viewInAppUrl, + sloId: slo.id, + sloName: slo.name, + sloInstanceId: instanceId, + }; + + const alert = alertWithLifecycle({ + id: alertId, + + fields: { + [ALERT_REASON]: reason, + [ALERT_EVALUATION_THRESHOLD]: windowDef.burnRateThreshold, + [ALERT_EVALUATION_VALUE]: Math.min(longWindowBurnRate, shortWindowBurnRate), + [SLO_ID_FIELD]: slo.id, + [SLO_REVISION_FIELD]: slo.revision, + [SLO_INSTANCE_ID_FIELD]: instanceId, + }, + }); + + alert.scheduleActions(windowDef.actionGroup, context); + alert.replaceState({ alertState: AlertStates.ALERT }); + } } const { getRecoveredAlerts } = alertFactory.done(); const recoveredAlerts = getRecoveredAlerts(); for (const recoveredAlert of recoveredAlerts) { - const alertId = `alert-${slo.id}-${slo.revision}`; + const alertId = recoveredAlert.getId(); const indexedStartedAt = getAlertStartedDate(alertId) ?? startedAt.toISOString(); - const alertUuid = getAlertUuid(alertId); + const alertUuid = recoveredAlert.getUuid(); const alertDetailsUrl = await getAlertUrl( alertUuid, spaceId, @@ -215,15 +174,21 @@ export const getRuleExecutor = ({ alertsLocator, basePath.publicBaseUrl ); + + const urlQuery = alertId === ALL_VALUE ? '' : `?instanceId=${alertId}`; + const viewInAppUrl = addSpaceIdToPath( + basePath.publicBaseUrl, + spaceId, + `/app/observability/slos/${slo.id}${urlQuery}` + ); + const context = { - longWindow: { burnRate: longWindowBurnRate, duration: longWindowDuration.format() }, - shortWindow: { burnRate: shortWindowBurnRate, duration: shortWindowDuration.format() }, - burnRateThreshold: windowDef.burnRateThreshold, timestamp: startedAt.toISOString(), viewInAppUrl, alertDetailsUrl, sloId: slo.id, sloName: slo.name, + sloInstanceId: alertId, }; recoveredAlert.setContext(context); @@ -247,6 +212,7 @@ function getActionGroupName(id: string) { } function buildReason( + instanceId: string, actionGroup: string, longWindowDuration: Duration, longWindowBurnRate: number, @@ -254,9 +220,23 @@ function buildReason( shortWindowBurnRate: number, windowDef: WindowSchema ) { - return i18n.translate('xpack.observability.slo.alerting.burnRate.reason', { + if (instanceId === ALL_VALUE) { + return i18n.translate('xpack.observability.slo.alerting.burnRate.reason', { + defaultMessage: + '{actionGroupName}: The burn rate for the past {longWindowDuration} is {longWindowBurnRate} and for the past {shortWindowDuration} is {shortWindowBurnRate}. Alert when above {burnRateThreshold} for both windows', + values: { + actionGroupName: upperCase(getActionGroupName(actionGroup)), + longWindowDuration: longWindowDuration.format(), + longWindowBurnRate: numeral(longWindowBurnRate).format('0.[00]'), + shortWindowDuration: shortWindowDuration.format(), + shortWindowBurnRate: numeral(shortWindowBurnRate).format('0.[00]'), + burnRateThreshold: windowDef.burnRateThreshold, + }, + }); + } + return i18n.translate('xpack.observability.slo.alerting.burnRate.reasonForInstanceId', { defaultMessage: - '{actionGroupName}: The burn rate for the past {longWindowDuration} is {longWindowBurnRate} and for the past {shortWindowDuration} is {shortWindowBurnRate}. Alert when above {burnRateThreshold} for both windows', + '{actionGroupName}: The burn rate for the past {longWindowDuration} is {longWindowBurnRate} and for the past {shortWindowDuration} is {shortWindowBurnRate} for {instanceId}. Alert when above {burnRateThreshold} for both windows', values: { actionGroupName: upperCase(getActionGroupName(actionGroup)), longWindowDuration: longWindowDuration.format(), @@ -264,6 +244,7 @@ function buildReason( shortWindowDuration: shortWindowDuration.format(), shortWindowBurnRate: numeral(shortWindowBurnRate).format('0.[00]'), burnRateThreshold: windowDef.burnRateThreshold, + instanceId, }, }); } diff --git a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/field_map.ts b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/field_map.ts index d62cf74c0a3561..d9aa34a0e9e8c6 100644 --- a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/field_map.ts +++ b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/field_map.ts @@ -5,7 +5,11 @@ * 2.0. */ -import { SLO_ID_FIELD, SLO_REVISION_FIELD } from '../../../../common/field_names/slo'; +import { + SLO_ID_FIELD, + SLO_INSTANCE_ID_FIELD, + SLO_REVISION_FIELD, +} from '../../../../common/field_names/slo'; export const sloRuleFieldMap = { [SLO_ID_FIELD]: { @@ -18,6 +22,11 @@ export const sloRuleFieldMap = { array: false, required: false, }, + [SLO_INSTANCE_ID_FIELD]: { + type: 'keyword', + array: false, + required: false, + }, }; export type SLORuleFieldMap = typeof sloRuleFieldMap; diff --git a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/fixtures/rule.ts b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/fixtures/rule.ts new file mode 100644 index 00000000000000..f31a8ea948b800 --- /dev/null +++ b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/fixtures/rule.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 { v4 } from 'uuid'; +import { + ALERT_ACTION, + HIGH_PRIORITY_ACTION, + LOW_PRIORITY_ACTION, + MEDIUM_PRIORITY_ACTION, +} from '../../../../../common/constants'; +import { SLO } from '../../../../domain/models'; +import { BurnRateRuleParams } from '../types'; + +export function createBurnRateRule(slo: SLO, params: Partial = {}) { + return { + sloId: slo.id, + windows: [ + { + id: v4(), + burnRateThreshold: 14.4, + maxBurnRateThreshold: null, + longWindow: { value: 1, unit: 'h' }, + shortWindow: { value: 5, unit: 'm' }, + actionGroup: ALERT_ACTION.id, + }, + { + id: v4(), + burnRateThreshold: 6, + maxBurnRateThreshold: null, + longWindow: { value: 6, unit: 'h' }, + shortWindow: { value: 30, unit: 'm' }, + actionGroup: HIGH_PRIORITY_ACTION.id, + }, + { + id: v4(), + burnRateThreshold: 3, + maxBurnRateThreshold: null, + longWindow: { value: 24, unit: 'h' }, + shortWindow: { value: 120, unit: 'm' }, + actionGroup: MEDIUM_PRIORITY_ACTION.id, + }, + { + id: v4(), + burnRateThreshold: 1, + maxBurnRateThreshold: null, + longWindow: { value: 72, unit: 'h' }, + shortWindow: { value: 360, unit: 'm' }, + actionGroup: LOW_PRIORITY_ACTION.id, + }, + ], + ...params, + }; +} diff --git a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/__snapshots__/build_query.test.ts.snap b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/__snapshots__/build_query.test.ts.snap new file mode 100644 index 00000000000000..8699b28ab5a5ea --- /dev/null +++ b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/__snapshots__/build_query.test.ts.snap @@ -0,0 +1,1375 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`buildQuery() should return a valid query for occurrences 1`] = ` +Object { + "aggs": Object { + "instances": Object { + "aggs": Object { + "WINDOW_0_LONG": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T23:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_0_LONG_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_0_LONG_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 14.4, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_0_LONG_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_0_LONG>good", + "total": "WINDOW_0_LONG>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_0_SHORT": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T23:55:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_0_SHORT_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_0_SHORT_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 14.4, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_0_SHORT_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_0_SHORT>good", + "total": "WINDOW_0_SHORT>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_1_LONG": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T18:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_1_LONG_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_1_LONG_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 6, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_1_LONG_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_1_LONG>good", + "total": "WINDOW_1_LONG>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_1_SHORT": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T23:30:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_1_SHORT_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_1_SHORT_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 6, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_1_SHORT_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_1_SHORT>good", + "total": "WINDOW_1_SHORT>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_2_LONG": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T00:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_2_LONG_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_2_LONG_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 3, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_2_LONG_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_2_LONG>good", + "total": "WINDOW_2_LONG>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_2_SHORT": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T22:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_2_SHORT_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_2_SHORT_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 3, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_2_SHORT_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_2_SHORT>good", + "total": "WINDOW_2_SHORT>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_3_LONG": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-29T00:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_3_LONG_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_3_LONG_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 1, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_3_LONG_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_3_LONG>good", + "total": "WINDOW_3_LONG>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_3_SHORT": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T18:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_3_SHORT_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_3_SHORT_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 1, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_3_SHORT_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_3_SHORT>good", + "total": "WINDOW_3_SHORT>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "evaluation": Object { + "bucket_selector": Object { + "buckets_path": Object { + "WINDOW_0_LONG_ABOVE_THRESHOLD": "WINDOW_0_LONG_ABOVE_THRESHOLD", + "WINDOW_0_SHORT_ABOVE_THRESHOLD": "WINDOW_0_SHORT_ABOVE_THRESHOLD", + "WINDOW_1_LONG_ABOVE_THRESHOLD": "WINDOW_1_LONG_ABOVE_THRESHOLD", + "WINDOW_1_SHORT_ABOVE_THRESHOLD": "WINDOW_1_SHORT_ABOVE_THRESHOLD", + "WINDOW_2_LONG_ABOVE_THRESHOLD": "WINDOW_2_LONG_ABOVE_THRESHOLD", + "WINDOW_2_SHORT_ABOVE_THRESHOLD": "WINDOW_2_SHORT_ABOVE_THRESHOLD", + "WINDOW_3_LONG_ABOVE_THRESHOLD": "WINDOW_3_LONG_ABOVE_THRESHOLD", + "WINDOW_3_SHORT_ABOVE_THRESHOLD": "WINDOW_3_SHORT_ABOVE_THRESHOLD", + }, + "script": Object { + "source": "(params.WINDOW_0_SHORT_ABOVE_THRESHOLD == 1 && params.WINDOW_0_LONG_ABOVE_THRESHOLD == 1) || (params.WINDOW_1_SHORT_ABOVE_THRESHOLD == 1 && params.WINDOW_1_LONG_ABOVE_THRESHOLD == 1) || (params.WINDOW_2_SHORT_ABOVE_THRESHOLD == 1 && params.WINDOW_2_LONG_ABOVE_THRESHOLD == 1) || (params.WINDOW_3_SHORT_ABOVE_THRESHOLD == 1 && params.WINDOW_3_LONG_ABOVE_THRESHOLD == 1)", + }, + }, + }, + }, + "composite": Object { + "size": 1000, + "sources": Array [ + Object { + "instanceId": Object { + "terms": Object { + "field": "slo.instanceId", + }, + }, + }, + ], + }, + }, + }, + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "term": Object { + "slo.id": "test-slo", + }, + }, + Object { + "term": Object { + "slo.revision": 1, + }, + }, + Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-29T00:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + ], + }, + }, + "size": 0, +} +`; + +exports[`buildQuery() should return a valid query for timeslices 1`] = ` +Object { + "aggs": Object { + "instances": Object { + "aggs": Object { + "WINDOW_0_LONG": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.isGoodSlice", + }, + }, + "total": Object { + "value_count": Object { + "field": "slo.isGoodSlice", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T23:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_0_LONG_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_0_LONG_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 14.4, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_0_LONG_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_0_LONG>good", + "total": "WINDOW_0_LONG>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_0_SHORT": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.isGoodSlice", + }, + }, + "total": Object { + "value_count": Object { + "field": "slo.isGoodSlice", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T23:55:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_0_SHORT_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_0_SHORT_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 14.4, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_0_SHORT_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_0_SHORT>good", + "total": "WINDOW_0_SHORT>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_1_LONG": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.isGoodSlice", + }, + }, + "total": Object { + "value_count": Object { + "field": "slo.isGoodSlice", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T18:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_1_LONG_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_1_LONG_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 6, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_1_LONG_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_1_LONG>good", + "total": "WINDOW_1_LONG>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_1_SHORT": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.isGoodSlice", + }, + }, + "total": Object { + "value_count": Object { + "field": "slo.isGoodSlice", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T23:30:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_1_SHORT_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_1_SHORT_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 6, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_1_SHORT_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_1_SHORT>good", + "total": "WINDOW_1_SHORT>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_2_LONG": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.isGoodSlice", + }, + }, + "total": Object { + "value_count": Object { + "field": "slo.isGoodSlice", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T00:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_2_LONG_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_2_LONG_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 3, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_2_LONG_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_2_LONG>good", + "total": "WINDOW_2_LONG>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_2_SHORT": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.isGoodSlice", + }, + }, + "total": Object { + "value_count": Object { + "field": "slo.isGoodSlice", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T22:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_2_SHORT_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_2_SHORT_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 3, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_2_SHORT_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_2_SHORT>good", + "total": "WINDOW_2_SHORT>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_3_LONG": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.isGoodSlice", + }, + }, + "total": Object { + "value_count": Object { + "field": "slo.isGoodSlice", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-29T00:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_3_LONG_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_3_LONG_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 1, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_3_LONG_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_3_LONG>good", + "total": "WINDOW_3_LONG>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_3_SHORT": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.isGoodSlice", + }, + }, + "total": Object { + "value_count": Object { + "field": "slo.isGoodSlice", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T18:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_3_SHORT_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_3_SHORT_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 1, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_3_SHORT_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_3_SHORT>good", + "total": "WINDOW_3_SHORT>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "evaluation": Object { + "bucket_selector": Object { + "buckets_path": Object { + "WINDOW_0_LONG_ABOVE_THRESHOLD": "WINDOW_0_LONG_ABOVE_THRESHOLD", + "WINDOW_0_SHORT_ABOVE_THRESHOLD": "WINDOW_0_SHORT_ABOVE_THRESHOLD", + "WINDOW_1_LONG_ABOVE_THRESHOLD": "WINDOW_1_LONG_ABOVE_THRESHOLD", + "WINDOW_1_SHORT_ABOVE_THRESHOLD": "WINDOW_1_SHORT_ABOVE_THRESHOLD", + "WINDOW_2_LONG_ABOVE_THRESHOLD": "WINDOW_2_LONG_ABOVE_THRESHOLD", + "WINDOW_2_SHORT_ABOVE_THRESHOLD": "WINDOW_2_SHORT_ABOVE_THRESHOLD", + "WINDOW_3_LONG_ABOVE_THRESHOLD": "WINDOW_3_LONG_ABOVE_THRESHOLD", + "WINDOW_3_SHORT_ABOVE_THRESHOLD": "WINDOW_3_SHORT_ABOVE_THRESHOLD", + }, + "script": Object { + "source": "(params.WINDOW_0_SHORT_ABOVE_THRESHOLD == 1 && params.WINDOW_0_LONG_ABOVE_THRESHOLD == 1) || (params.WINDOW_1_SHORT_ABOVE_THRESHOLD == 1 && params.WINDOW_1_LONG_ABOVE_THRESHOLD == 1) || (params.WINDOW_2_SHORT_ABOVE_THRESHOLD == 1 && params.WINDOW_2_LONG_ABOVE_THRESHOLD == 1) || (params.WINDOW_3_SHORT_ABOVE_THRESHOLD == 1 && params.WINDOW_3_LONG_ABOVE_THRESHOLD == 1)", + }, + }, + }, + }, + "composite": Object { + "size": 1000, + "sources": Array [ + Object { + "instanceId": Object { + "terms": Object { + "field": "slo.instanceId", + }, + }, + }, + ], + }, + }, + }, + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "term": Object { + "slo.id": "test-slo", + }, + }, + Object { + "term": Object { + "slo.revision": 1, + }, + }, + Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-29T00:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + ], + }, + }, + "size": 0, +} +`; + +exports[`buildQuery() should return a valid query with afterKey 1`] = ` +Object { + "aggs": Object { + "instances": Object { + "aggs": Object { + "WINDOW_0_LONG": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T23:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_0_LONG_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_0_LONG_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 14.4, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_0_LONG_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_0_LONG>good", + "total": "WINDOW_0_LONG>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_0_SHORT": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T23:55:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_0_SHORT_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_0_SHORT_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 14.4, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_0_SHORT_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_0_SHORT>good", + "total": "WINDOW_0_SHORT>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_1_LONG": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T18:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_1_LONG_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_1_LONG_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 6, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_1_LONG_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_1_LONG>good", + "total": "WINDOW_1_LONG>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_1_SHORT": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T23:30:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_1_SHORT_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_1_SHORT_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 6, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_1_SHORT_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_1_SHORT>good", + "total": "WINDOW_1_SHORT>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_2_LONG": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T00:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_2_LONG_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_2_LONG_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 3, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_2_LONG_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_2_LONG>good", + "total": "WINDOW_2_LONG>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_2_SHORT": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T22:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_2_SHORT_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_2_SHORT_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 3, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_2_SHORT_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_2_SHORT>good", + "total": "WINDOW_2_SHORT>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_3_LONG": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-29T00:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_3_LONG_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_3_LONG_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 1, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_3_LONG_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_3_LONG>good", + "total": "WINDOW_3_LONG>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "WINDOW_3_SHORT": Object { + "aggs": Object { + "good": Object { + "sum": Object { + "field": "slo.numerator", + }, + }, + "total": Object { + "sum": Object { + "field": "slo.denominator", + }, + }, + }, + "filter": Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-31T18:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + }, + "WINDOW_3_SHORT_ABOVE_THRESHOLD": Object { + "bucket_script": Object { + "buckets_path": Object { + "burnRate": "WINDOW_3_SHORT_BURN_RATE", + }, + "script": Object { + "params": Object { + "threshold": 1, + }, + "source": "params.burnRate >= params.threshold ? 1 : 0", + }, + }, + }, + "WINDOW_3_SHORT_BURN_RATE": Object { + "bucket_script": Object { + "buckets_path": Object { + "good": "WINDOW_3_SHORT>good", + "total": "WINDOW_3_SHORT>total", + }, + "script": Object { + "params": Object { + "target": 0.999, + }, + "source": "params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0", + }, + }, + }, + "evaluation": Object { + "bucket_selector": Object { + "buckets_path": Object { + "WINDOW_0_LONG_ABOVE_THRESHOLD": "WINDOW_0_LONG_ABOVE_THRESHOLD", + "WINDOW_0_SHORT_ABOVE_THRESHOLD": "WINDOW_0_SHORT_ABOVE_THRESHOLD", + "WINDOW_1_LONG_ABOVE_THRESHOLD": "WINDOW_1_LONG_ABOVE_THRESHOLD", + "WINDOW_1_SHORT_ABOVE_THRESHOLD": "WINDOW_1_SHORT_ABOVE_THRESHOLD", + "WINDOW_2_LONG_ABOVE_THRESHOLD": "WINDOW_2_LONG_ABOVE_THRESHOLD", + "WINDOW_2_SHORT_ABOVE_THRESHOLD": "WINDOW_2_SHORT_ABOVE_THRESHOLD", + "WINDOW_3_LONG_ABOVE_THRESHOLD": "WINDOW_3_LONG_ABOVE_THRESHOLD", + "WINDOW_3_SHORT_ABOVE_THRESHOLD": "WINDOW_3_SHORT_ABOVE_THRESHOLD", + }, + "script": Object { + "source": "(params.WINDOW_0_SHORT_ABOVE_THRESHOLD == 1 && params.WINDOW_0_LONG_ABOVE_THRESHOLD == 1) || (params.WINDOW_1_SHORT_ABOVE_THRESHOLD == 1 && params.WINDOW_1_LONG_ABOVE_THRESHOLD == 1) || (params.WINDOW_2_SHORT_ABOVE_THRESHOLD == 1 && params.WINDOW_2_LONG_ABOVE_THRESHOLD == 1) || (params.WINDOW_3_SHORT_ABOVE_THRESHOLD == 1 && params.WINDOW_3_LONG_ABOVE_THRESHOLD == 1)", + }, + }, + }, + }, + "composite": Object { + "after": Object { + "instanceId": "example", + }, + "size": 1000, + "sources": Array [ + Object { + "instanceId": Object { + "terms": Object { + "field": "slo.instanceId", + }, + }, + }, + ], + }, + }, + }, + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "term": Object { + "slo.id": "test-slo", + }, + }, + Object { + "term": Object { + "slo.revision": 1, + }, + }, + Object { + "range": Object { + "@timestamp": Object { + "gte": "2022-12-29T00:00:00.000Z", + "lt": "2023-01-01T00:00:00.000Z", + }, + }, + }, + ], + }, + }, + "size": 0, +} +`; diff --git a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/build_query.test.ts b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/build_query.test.ts new file mode 100644 index 00000000000000..730fe8ae66e46f --- /dev/null +++ b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/build_query.test.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createBurnRateRule } from '../fixtures/rule'; +import { buildQuery } from './build_query'; +import { createKQLCustomIndicator, createSLO } from '../../../../services/slo/fixtures/slo'; + +const STARTED_AT = new Date('2023-01-01T00:00:00.000Z'); + +describe('buildQuery()', () => { + it('should return a valid query for occurrences', () => { + const slo = createSLO({ + id: 'test-slo', + indicator: createKQLCustomIndicator(), + }); + const rule = createBurnRateRule(slo); + expect(buildQuery(STARTED_AT, slo, rule)).toMatchSnapshot(); + }); + it('should return a valid query with afterKey', () => { + const slo = createSLO({ + id: 'test-slo', + indicator: createKQLCustomIndicator(), + }); + const rule = createBurnRateRule(slo); + expect(buildQuery(STARTED_AT, slo, rule, { instanceId: 'example' })).toMatchSnapshot(); + }); + it('should return a valid query for timeslices', () => { + const slo = createSLO({ + id: 'test-slo', + indicator: createKQLCustomIndicator(), + budgetingMethod: 'timeslices', + }); + const rule = createBurnRateRule(slo); + expect(buildQuery(STARTED_AT, slo, rule)).toMatchSnapshot(); + }); +}); diff --git a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/build_query.ts b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/build_query.ts new file mode 100644 index 00000000000000..8d5bfe795aa089 --- /dev/null +++ b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/build_query.ts @@ -0,0 +1,218 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import moment from 'moment'; +import { timeslicesBudgetingMethodSchema } from '@kbn/slo-schema'; +import { Duration, SLO, toDurationUnit, toMomentUnitOfTime } from '../../../../domain/models'; +import { BurnRateRuleParams, WindowSchema } from '../types'; + +type BurnRateWindowWithDuration = WindowSchema & { + longDuration: Duration; + shortDuration: Duration; +}; + +export interface EvaluationAfterKey { + instanceId: string; +} + +export const LONG_WINDOW = 'LONG'; +export const SHORT_WINDOW = 'SHORT'; +const BURN_RATE = 'BURN_RATE'; +const WINDOW = 'WINDOW'; +const ABOVE_THRESHOLD = 'ABOVE_THRESHOLD'; +type WindowType = typeof LONG_WINDOW | typeof SHORT_WINDOW; + +export function generateWindowId(index: string | number) { + return `${WINDOW}_${index}`; +} + +export function generateStatsKey(id: string, type: WindowType) { + return `${id}_${type}`; +} + +export function generateBurnRateKey(id: string, type: WindowType) { + return `${generateStatsKey(id, type)}_${BURN_RATE}`; +} + +export function generateAboveThresholdKey(id: string, type: WindowType) { + return `${generateStatsKey(id, type)}_${ABOVE_THRESHOLD}`; +} + +const TIMESLICE_AGGS = { + good: { sum: { field: 'slo.isGoodSlice' } }, + total: { value_count: { field: 'slo.isGoodSlice' } }, +}; +const OCCURRENCE_AGGS = { + good: { sum: { field: 'slo.numerator' } }, + total: { sum: { field: 'slo.denominator' } }, +}; + +function buildWindowAgg( + id: string, + type: WindowType, + threshold: number, + slo: SLO, + dateRange: { from: Date; to: Date } +) { + const aggs = timeslicesBudgetingMethodSchema.is(slo.budgetingMethod) + ? TIMESLICE_AGGS + : OCCURRENCE_AGGS; + + return { + [`${id}_${type}`]: { + filter: { + range: { + '@timestamp': { + gte: dateRange.from.toISOString(), + lt: dateRange.to.toISOString(), + }, + }, + }, + aggs, + }, + [generateBurnRateKey(id, type)]: { + bucket_script: { + buckets_path: { + good: `${id}_${type}>good`, + total: `${id}_${type}>total`, + }, + script: { + source: + 'params.total != null && params.total > 0 ? (1 - (params.good / params.total)) / (1 - params.target) : 0', + params: { target: slo.objective.target }, + }, + }, + }, + [generateAboveThresholdKey(id, type)]: { + bucket_script: { + buckets_path: { burnRate: generateBurnRateKey(id, type) }, + script: { + source: 'params.burnRate >= params.threshold ? 1 : 0', + params: { threshold }, + }, + }, + }, + }; +} + +function buildWindowAggs(startedAt: Date, slo: SLO, burnRateWindows: BurnRateWindowWithDuration[]) { + return burnRateWindows.reduce((acc, winDef, index) => { + const shortDateRange = getLookbackDateRange(startedAt, winDef.shortDuration); + const longDateRange = getLookbackDateRange(startedAt, winDef.longDuration); + const windowId = generateWindowId(index); + return { + ...acc, + ...buildWindowAgg(windowId, SHORT_WINDOW, winDef.burnRateThreshold, slo, shortDateRange), + ...buildWindowAgg(windowId, LONG_WINDOW, winDef.burnRateThreshold, slo, longDateRange), + }; + }, {}); +} + +function buildEvaluation(burnRateWindows: BurnRateWindowWithDuration[]) { + const bucketsPath = burnRateWindows.reduce((acc, _winDef, index) => { + const windowId = `${WINDOW}_${index}`; + return { + ...acc, + [generateAboveThresholdKey(windowId, SHORT_WINDOW)]: generateAboveThresholdKey( + windowId, + SHORT_WINDOW + ), + [generateAboveThresholdKey(windowId, LONG_WINDOW)]: generateAboveThresholdKey( + windowId, + LONG_WINDOW + ), + }; + }, {}); + + const source = burnRateWindows.reduce((acc, _windDef, index) => { + const windowId = `${WINDOW}_${index}`; + const OP = acc ? ' || ' : ''; + return `${acc}${OP}(params.${generateAboveThresholdKey( + windowId, + SHORT_WINDOW + )} == 1 && params.${generateAboveThresholdKey(windowId, LONG_WINDOW)} == 1)`; + }, ''); + + return { + evaluation: { + bucket_selector: { + buckets_path: bucketsPath, + script: { + source, + }, + }, + }, + }; +} + +export function buildQuery( + startedAt: Date, + slo: SLO, + params: BurnRateRuleParams, + afterKey?: EvaluationAfterKey +) { + const burnRateWindows = params.windows.map((winDef) => { + return { + ...winDef, + longDuration: new Duration(winDef.longWindow.value, toDurationUnit(winDef.longWindow.unit)), + shortDuration: new Duration( + winDef.shortWindow.value, + toDurationUnit(winDef.shortWindow.unit) + ), + }; + }); + + const longestLookbackWindow = burnRateWindows.reduce((acc, winDef) => { + return winDef.longDuration.isShorterThan(acc.longDuration) ? acc : winDef; + }, burnRateWindows[0]); + const longestDateRange = getLookbackDateRange(startedAt, longestLookbackWindow.longDuration); + + return { + size: 0, + query: { + bool: { + filter: [ + { term: { 'slo.id': slo.id } }, + { term: { 'slo.revision': slo.revision } }, + { + range: { + '@timestamp': { + gte: longestDateRange.from.toISOString(), + lt: longestDateRange.to.toISOString(), + }, + }, + }, + ], + }, + }, + aggs: { + instances: { + composite: { + ...(afterKey ? { after: afterKey } : {}), + size: 1000, + sources: [{ instanceId: { terms: { field: 'slo.instanceId' } } }], + }, + aggs: { + ...buildWindowAggs(startedAt, slo, burnRateWindows), + ...buildEvaluation(burnRateWindows), + }, + }, + }, + }; +} + +function getLookbackDateRange(startedAt: Date, duration: Duration): { from: Date; to: Date } { + const unit = toMomentUnitOfTime(duration.unit); + const now = moment(startedAt).startOf('minute'); + const from = now.clone().subtract(duration.value, unit); + const to = now.clone(); + + return { + from: from.toDate(), + to: to.toDate(), + }; +} diff --git a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/evaluate.ts b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/evaluate.ts new file mode 100644 index 00000000000000..8461382fc1564d --- /dev/null +++ b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/lib/evaluate.ts @@ -0,0 +1,144 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ElasticsearchClient } from '@kbn/core/server'; +import { get } from 'lodash'; +import { Duration, SLO, toDurationUnit } from '../../../../domain/models'; +import { BurnRateRuleParams } from '../types'; +import { SLO_DESTINATION_INDEX_PATTERN } from '../../../../assets/constants'; +import { + buildQuery, + EvaluationAfterKey, + generateAboveThresholdKey, + generateBurnRateKey, + generateWindowId, + LONG_WINDOW, + SHORT_WINDOW, +} from './build_query'; + +export interface EvaluationWindowStats { + doc_count: number; + good: { value: number }; + total: { value: number }; +} + +export interface EvaluationBucket { + key: EvaluationAfterKey; + doc_count: number; + WINDOW_0_SHORT?: EvaluationWindowStats; + WINDOW_1_SHORT?: EvaluationWindowStats; + WINDOW_2_SHORT?: EvaluationWindowStats; + WINDOW_3_SHORT?: EvaluationWindowStats; + WINDOW_0_LONG?: EvaluationWindowStats; + WINDOW_1_LONG?: EvaluationWindowStats; + WINDOW_2_LONG?: EvaluationWindowStats; + WINDOW_3_LONG?: EvaluationWindowStats; + WINDOW_0_SHORT_BURN_RATE?: { value: number }; + WINDOW_1_SHORT_BURN_RATE?: { value: number }; + WINDOW_2_SHORT_BURN_RATE?: { value: number }; + WINDOW_3_SHORT_BURN_RATE?: { value: number }; + WINDOW_0_LONG_BURN_RATE?: { value: number }; + WINDOW_1_LONG_BURN_RATE?: { value: number }; + WINDOW_2_LONG_BURN_RATE?: { value: number }; + WINDOW_3_LONG_BURN_RATE?: { value: number }; + WINDOW_0_SHORT_ABOVE_THRESHOLD?: { value: number }; + WINDOW_1_SHORT_ABOVE_THRESHOLD?: { value: number }; + WINDOW_2_SHORT_ABOVE_THRESHOLD?: { value: number }; + WINDOW_3_SHORT_ABOVE_THRESHOLD?: { value: number }; + WINDOW_0_LONG_ABOVE_THRESHOLD?: { value: number }; + WINDOW_1_LONG_ABOVE_THRESHOLD?: { value: number }; + WINDOW_2_LONG_ABOVE_THRESHOLD?: { value: number }; + WINDOW_3_LONG_ABOVE_THRESHOLD?: { value: number }; +} + +export interface EvalutionAggResults { + instances: { + after_key?: EvaluationAfterKey; + buckets: EvaluationBucket[]; + }; +} + +async function queryAllResults( + esClient: ElasticsearchClient, + slo: SLO, + params: BurnRateRuleParams, + startedAt: Date, + buckets: EvaluationBucket[] = [], + lastAfterKey?: { instanceId: string } +): Promise { + const queryAndAggs = buildQuery(startedAt, slo, params, lastAfterKey); + const results = await esClient.search({ + index: SLO_DESTINATION_INDEX_PATTERN, + ...queryAndAggs, + }); + if (!results.aggregations) { + throw new Error('Elasticsearch query failed to return a valid aggregation'); + } + if (results.aggregations.instances.buckets.length === 0) { + return buckets; + } + return queryAllResults( + esClient, + slo, + params, + startedAt, + [...buckets, ...results.aggregations.instances.buckets], + results.aggregations.instances.after_key + ); +} + +export async function evaluate( + esClient: ElasticsearchClient, + slo: SLO, + params: BurnRateRuleParams, + startedAt: Date +) { + const buckets = await queryAllResults(esClient, slo, params, startedAt); + return transformBucketToResults(buckets, params); +} + +function transformBucketToResults(buckets: EvaluationBucket[], params: BurnRateRuleParams) { + return buckets.map((bucket) => { + for (const index in params.windows) { + if (params.windows[index]) { + const winDef = params.windows[index]; + const windowId = generateWindowId(index); + const shortWindowThresholdKey = generateAboveThresholdKey(windowId, SHORT_WINDOW); + const longWindowThresholdKey = generateAboveThresholdKey(windowId, LONG_WINDOW); + const isShortWindowTriggering = get(bucket, [shortWindowThresholdKey, 'value'], 0); + const isLongWindowTriggering = get(bucket, [longWindowThresholdKey, 'value'], 0); + + if (isShortWindowTriggering && isLongWindowTriggering) { + return { + instanceId: bucket.key.instanceId, + shouldAlert: true, + longWindowBurnRate: get( + bucket, + [generateBurnRateKey(windowId, LONG_WINDOW), 'value'], + 0 + ) as number, + shortWindowBurnRate: get( + bucket, + [generateBurnRateKey(windowId, SHORT_WINDOW), 'value'], + 0 + ) as number, + shortWindowDuration: new Duration( + winDef.shortWindow.value, + toDurationUnit(winDef.shortWindow.unit) + ), + longWindowDuration: new Duration( + winDef.longWindow.value, + toDurationUnit(winDef.longWindow.unit) + ), + window: winDef, + }; + } + } + } + throw new Error(`Evaluation query for ${bucket.key.instanceId} failed.`); + }); +} diff --git a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/register.ts b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/register.ts index 146e4682c105dd..8bff7173764dfb 100644 --- a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/register.ts +++ b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/register.ts @@ -76,6 +76,7 @@ export function sloBurnRateRuleType( { name: 'alertDetailsUrl', description: alertDetailsUrlActionVariableDescription }, { name: 'sloId', description: sloIdActionVariableDescription }, { name: 'sloName', description: sloNameActionVariableDescription }, + { name: 'sloInstanceId', description: sloInstanceIdActionVariableDescription }, ], }, alerts: { @@ -142,3 +143,10 @@ export const sloNameActionVariableDescription = i18n.translate( defaultMessage: 'The SLO name.', } ); + +export const sloInstanceIdActionVariableDescription = i18n.translate( + 'xpack.observability.slo.alerting.sloInstanceIdDescription', + { + defaultMessage: 'The SLO instance id.', + } +); diff --git a/x-pack/plugins/rule_registry/common/types.ts b/x-pack/plugins/rule_registry/common/types.ts index 3c0816763e2200..da14078b72a3bb 100644 --- a/x-pack/plugins/rule_registry/common/types.ts +++ b/x-pack/plugins/rule_registry/common/types.ts @@ -164,6 +164,22 @@ const bucketAggsTempsSchemas: t.Type = t.exact( nested: t.type({ path: t.string, }), + multi_terms: t.exact( + t.partial({ + terms: t.array(t.type({ field: t.string })), + collect_mode: t.string, + min_doc_count: t.number, + shard_min_doc_count: t.number, + size: t.number, + shard_size: t.number, + show_term_doc_count_error: t.boolean, + order: t.union([ + sortOrderSchema, + t.record(t.string, sortOrderSchema), + t.array(t.record(t.string, sortOrderSchema)), + ]), + }) + ), terms: t.exact( t.partial({ field: t.string, From 4dc780253e47a9d59d98a8499e9a0deb07b9ad5b Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Thu, 10 Aug 2023 12:02:20 -0400 Subject: [PATCH 38/45] [ML] Data Frame Analytics creation wizard: ensure validation works correctly (#163446) ## Summary Fixes https://github.com/elastic/kibana/issues/161653 https://github.com/elastic/kibana/assets/6446462/a89461eb-5da7-48fa-a401-7dcb2e5d3004 ### Checklist Delete any items that are not applicable to this PR. - [ ] 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/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [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 - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] 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) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../hooks/use_create_analytics_form/reducer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/reducer.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/reducer.ts index 447d8fbd45aba8..5a3f26a63975e5 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/reducer.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/reducer.ts @@ -376,7 +376,7 @@ export const validateAdvancedEditor = (state: State): State => { !resultsFieldEmptyString && !dependentVariableEmpty && !modelMemoryLimitEmpty && - numTopFeatureImportanceValuesValid && + (numTopFeatureImportanceValuesValid || jobType === ANALYSIS_CONFIG_TYPE.OUTLIER_DETECTION) && (!destinationIndexPatternTitleExists || !createIndexPattern); return state; @@ -457,7 +457,7 @@ const validateForm = (state: State): State => { !destinationIndexNameEmpty && destinationIndexNameValid && !dependentVariableEmpty && - numTopFeatureImportanceValuesValid && + (numTopFeatureImportanceValuesValid || jobType === ANALYSIS_CONFIG_TYPE.OUTLIER_DETECTION) && (!destinationIndexPatternTitleExists || !createIndexPattern); return state; From b59c2756b77522d87d6223e4628743d12b038dad Mon Sep 17 00:00:00 2001 From: Jon Date: Thu, 10 Aug 2023 11:27:48 -0500 Subject: [PATCH 39/45] [ci] Support ARM artifacts when using label `ci:build-serverless-image` (#163355) Previously the `ci:build-serverless-image` label was hooked into the default `Build distribution` step, which only builds the x64 linux distribution. This limited build is in support of starting functional tests as quickly as possible. In order to support ARM artifacts, this starts a non-blocking parallel build that cross compiles. There's tradeoffs to this approach. CI time will be kept near our hour target, at the cost of building x64 artifacts twice. Adding cross compilation to the primary build step will extend CI time by ~30 minutes. --- .../pipelines/artifacts_container_image.yml | 2 +- .buildkite/scripts/build_kibana.sh | 26 ------------------- .../pipelines/pull_request/pipeline.ts | 4 +++ .../scripts/steps/artifacts/docker_image.sh | 20 +++++++++++--- 4 files changed, 21 insertions(+), 31 deletions(-) diff --git a/.buildkite/pipelines/artifacts_container_image.yml b/.buildkite/pipelines/artifacts_container_image.yml index a1d44ca3ce612d..972fada9ddde2d 100644 --- a/.buildkite/pipelines/artifacts_container_image.yml +++ b/.buildkite/pipelines/artifacts_container_image.yml @@ -1,6 +1,6 @@ steps: - command: .buildkite/scripts/steps/artifacts/docker_image.sh - label: Build default container images + label: Build serverless container images agents: queue: n2-16-spot timeout_in_minutes: 60 diff --git a/.buildkite/scripts/build_kibana.sh b/.buildkite/scripts/build_kibana.sh index 252daa79e0ea81..01810d26758c22 100755 --- a/.buildkite/scripts/build_kibana.sh +++ b/.buildkite/scripts/build_kibana.sh @@ -41,32 +41,6 @@ if is_pr_with_label "ci:build-cloud-image"; then EOF fi -if is_pr_with_label "ci:build-serverless-image"; then - echo "$KIBANA_DOCKER_PASSWORD" | docker login -u "$KIBANA_DOCKER_USERNAME" --password-stdin docker.elastic.co - GIT_ABBREV_COMMIT=${BUILDKITE_COMMIT:0:12} - node scripts/build \ - --skip-initialize \ - --skip-generic-folders \ - --skip-platform-folders \ - --skip-archives \ - --docker-images \ - --docker-namespace="kibana-ci" \ - --docker-tag="pr-$BUILDKITE_PULL_REQUEST-$GIT_ABBREV_COMMIT" \ - --docker-push \ - --skip-docker-ubi \ - --skip-docker-ubuntu \ - --skip-docker-cloud \ - --skip-docker-contexts - docker logout docker.elastic.co - - SERVERLESS_IMAGE=$(docker images --format "{{.Repository}}:{{.Tag}}" docker.elastic.co/kibana-ci/kibana-serverless) - buildkite-agent meta-data set pr_comment:deploy_cloud:head "* Kibana Serverless Image: \`$SERVERLESS_IMAGE\`" - cat << EOF | buildkite-agent annotate --style "info" --context kibana-serverless-image - - Kibana Serverless Image: \`$SERVERLESS_IMAGE\` -EOF -fi - echo "--- Archive Kibana Distribution" linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-*-linux-x86_64.tar.gz')" installDir="$KIBANA_DIR/install/kibana" diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index 8ee5588b643307..3190f5650b2e06 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -170,6 +170,10 @@ const uploadPipeline = (pipelineContent: string | object) => { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/deploy_cloud.yml')); } + if (GITHUB_PR_LABELS.includes('ci:build-serverless-image')) { + pipeline.push(getPipeline('.buildkite/pipelines/artifacts_container_image.yml')); + } + if ( (await doAnyChangesMatch([/.*stor(ies|y).*/])) || GITHUB_PR_LABELS.includes('ci:build-storybooks') diff --git a/.buildkite/scripts/steps/artifacts/docker_image.sh b/.buildkite/scripts/steps/artifacts/docker_image.sh index 6c68f616c23c6a..3743aedfdc6558 100755 --- a/.buildkite/scripts/steps/artifacts/docker_image.sh +++ b/.buildkite/scripts/steps/artifacts/docker_image.sh @@ -7,12 +7,19 @@ set -euo pipefail source .buildkite/scripts/steps/artifacts/env.sh GIT_ABBREV_COMMIT=${BUILDKITE_COMMIT:0:12} -KIBANA_IMAGE="docker.elastic.co/kibana-ci/kibana-serverless:git-$GIT_ABBREV_COMMIT" +if [[ "${BUILDKITE_PULL_REQUEST:-false}" == "false" ]]; then + KIBANA_IMAGE_TAG="git-$GIT_ABBREV_COMMIT" +else + KIBANA_IMAGE_TAG="pr-$BUILDKITE_PULL_REQUEST-$GIT_ABBREV_COMMIT" +fi + +KIBANA_IMAGE="docker.elastic.co/kibana-ci/kibana-serverless:$KIBANA_IMAGE_TAG" echo "--- Verify manifest does not already exist" echo "$KIBANA_DOCKER_PASSWORD" | docker login -u "$KIBANA_DOCKER_USERNAME" --password-stdin docker.elastic.co trap 'docker logout docker.elastic.co' EXIT +echo "Checking manifest for $KIBANA_IMAGE" if docker manifest inspect $KIBANA_IMAGE &> /dev/null; then echo "Manifest already exists, exiting" exit 1 @@ -25,7 +32,7 @@ node scripts/build \ --docker-cross-compile \ --docker-images \ --docker-namespace="kibana-ci" \ - --docker-tag="git-$GIT_ABBREV_COMMIT" \ + --docker-tag="$KIBANA_IMAGE_TAG" \ --skip-docker-ubuntu \ --skip-docker-ubi \ --skip-docker-cloud \ @@ -55,7 +62,7 @@ docker manifest push "$KIBANA_IMAGE" docker logout docker.elastic.co cat << EOF | buildkite-agent annotate --style "info" --context image - ### Container Images + ### Serverless Images Manifest: \`$KIBANA_IMAGE\` @@ -64,6 +71,11 @@ cat << EOF | buildkite-agent annotate --style "info" --context image ARM64: \`$KIBANA_IMAGE-arm64\` EOF +if [[ "${BUILDKITE_PULL_REQUEST:-false}" != "false" ]]; then + buildkite-agent meta-data set pr_comment:build_serverless:head "* Kibana Serverless Image: \`$KIBANA_IMAGE\`" + buildkite-agent meta-data set pr_comment:early_comment_job_id "$BUILDKITE_JOB_ID" +fi + echo "--- Build dependencies report" node scripts/licenses_csv_report "--csv=target/dependencies-$GIT_ABBREV_COMMIT.csv" @@ -80,7 +92,7 @@ cd - # so that new stack instances contain the latest and greatest image of kibana, # and the respective stack components of course. echo "--- Trigger image tag update" -if [[ "$BUILDKITE_BRANCH" == "$KIBANA_BASE_BRANCH" ]]; then +if [[ "$BUILDKITE_BRANCH" == "$KIBANA_BASE_BRANCH" ]] && [[ "${BUILDKITE_PULL_REQUEST:-false}" == "false" ]]; then cat << EOF | buildkite-agent pipeline upload steps: - label: ":argo: Update kibana image tag for kibana-controller using gpctl" From 0bbc3e591af2d6f409eb5d854d23a5ad0adb6788 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Thu, 10 Aug 2023 18:38:43 +0200 Subject: [PATCH 40/45] Expose `projectsUrl` and `baseUrl` on the Cloud's plugin setup and start server-side contracts (#163380) Close https://github.com/elastic/kibana/issues/163379 --- x-pack/plugins/cloud/README.md | 64 +------------------ .../plugins/cloud/{public => common}/utils.ts | 0 x-pack/plugins/cloud/public/plugin.tsx | 2 +- x-pack/plugins/cloud/public/types.ts | 23 +++++-- .../server/__snapshots__/plugin.test.ts.snap | 34 ++++++++++ x-pack/plugins/cloud/server/mocks.ts | 13 +++- x-pack/plugins/cloud/server/plugin.test.ts | 9 +++ x-pack/plugins/cloud/server/plugin.ts | 58 +++++++++++++++-- 8 files changed, 127 insertions(+), 76 deletions(-) rename x-pack/plugins/cloud/{public => common}/utils.ts (100%) create mode 100644 x-pack/plugins/cloud/server/__snapshots__/plugin.test.ts.snap diff --git a/x-pack/plugins/cloud/README.md b/x-pack/plugins/cloud/README.md index 0b9a75de7e0303..00aa160fb3600c 100644 --- a/x-pack/plugins/cloud/README.md +++ b/x-pack/plugins/cloud/README.md @@ -1,65 +1,3 @@ # `cloud` plugin -The `cloud` plugin adds Cloud-specific features to Kibana. - -## Client-side API - -The client-side plugin provides the following interface. - -### `isCloudEnabled` - -This is set to `true` for both ESS and ECE deployments. - -### `cloudId` - -This is the ID of the Cloud deployment to which the Kibana instance belongs. - -**Example:** `eastus2.azure.elastic-cloud.com:9243$59ef636c6917463db140321484d63cfa$a8b109c08adc43279ef48f29af1a3911` - -**NOTE:** The `cloudId` is a concatenation of the deployment name and a hash. Users can update the deployment name, changing the `cloudId`. However, the changed `cloudId` will not be re-injected into `kibana.yml`. If you need the current `cloudId` the best approach is to split the injected `cloudId` on the semi-colon, and replace the first element with the `persistent.cluster.metadata.display_name` value as provided by a call to `GET _cluster/settings`. - -### `baseUrl` - -This is the URL of the Cloud interface. - -**Example:** `https://cloud.elastic.co` (on the ESS production environment) - -### `deploymentUrl` - -This is the path to the Cloud deployment management page for the deployment to which the Kibana instance belongs. The value is already prepended with `baseUrl`. - -**Example:** `{baseUrl}/deployments/bfdad4ef99a24212a06d387593686d63` - -### `snapshotsUrl` - -This is the path to the Snapshots page for the deployment to which the Kibana instance belongs. The value is already prepended with `deploymentUrl`. - -**Example:** `{deploymentUrl}/elasticsearch/snapshots` - -### `profileUrl` - -This is the path to the Cloud User Profile page. The value is already prepended with `baseUrl`. - -**Example:** `{baseUrl}/user/settings/` - -### `organizationUrl` - -This is the path to the Cloud Account and Billing page. The value is already prepended with `baseUrl`. - -**Example:** `{baseUrl}/account/` - -### `cname` - -This value is the same as `baseUrl` on ESS but can be customized on ECE. - -**Example:** `cloud.elastic.co` (on ESS) - -### `trial_end_date` - -The end date for the Elastic Cloud trial. Only available on Elastic Cloud. - -**Example:** `2020-10-14T10:40:22Z` - -### `is_elastic_staff_owned` - -`true` if the deployment is owned by an Elastician. Only available on Elastic Cloud. \ No newline at end of file +The `cloud` plugin adds Cloud-specific features to Kibana. \ No newline at end of file diff --git a/x-pack/plugins/cloud/public/utils.ts b/x-pack/plugins/cloud/common/utils.ts similarity index 100% rename from x-pack/plugins/cloud/public/utils.ts rename to x-pack/plugins/cloud/common/utils.ts diff --git a/x-pack/plugins/cloud/public/plugin.tsx b/x-pack/plugins/cloud/public/plugin.tsx index 60e6d7a1af08fe..f0fad877a1bd58 100644 --- a/x-pack/plugins/cloud/public/plugin.tsx +++ b/x-pack/plugins/cloud/public/plugin.tsx @@ -14,7 +14,7 @@ import { parseDeploymentIdFromDeploymentUrl } from '../common/parse_deployment_i import { ELASTIC_SUPPORT_LINK, CLOUD_SNAPSHOTS_PATH } from '../common/constants'; import { decodeCloudId, type DecodedCloudId } from '../common/decode_cloud_id'; import type { CloudSetup, CloudStart } from './types'; -import { getFullCloudUrl } from './utils'; +import { getFullCloudUrl } from '../common/utils'; export interface CloudConfigType { id?: string; diff --git a/x-pack/plugins/cloud/public/types.ts b/x-pack/plugins/cloud/public/types.ts index f6dfc71c6dfb20..a42730905c9c72 100644 --- a/x-pack/plugins/cloud/public/types.ts +++ b/x-pack/plugins/cloud/public/types.ts @@ -21,7 +21,9 @@ export interface CloudStart { */ cloudId?: string; /** - * The full URL to the deployment management page on Elastic Cloud. Undefined if not running on Cloud. + * This is the path to the Cloud deployment management page for the deployment to which the Kibana instance belongs. The value is already prepended with `baseUrl`. + * + * @example `{baseUrl}/deployments/bfdad4ef99a24212a06d387593686d63` */ deploymentUrl?: string; /** @@ -84,6 +86,8 @@ export interface CloudSetup { deploymentId?: string; /** * This value is the same as `baseUrl` on ESS but can be customized on ECE. + * + * @example `cloud.elastic.co` */ cname?: string; /** @@ -92,6 +96,8 @@ export interface CloudSetup { baseUrl?: string; /** * The full URL to the deployment management page on Elastic Cloud. Undefined if not running on Cloud. + * + * @example `{baseUrl}/deployments/bfdad4ef99a24212a06d387593686d63` */ deploymentUrl?: string; /** @@ -99,15 +105,21 @@ export interface CloudSetup { */ projectsUrl?: string; /** - * The full URL to the user profile page on Elastic Cloud. Undefined if not running on Cloud. + * This is the path to the Cloud User Profile page. The value is already prepended with `baseUrl`. + * + * @example `{baseUrl}/user/settings/` */ profileUrl?: string; /** - * The full URL to the organization management page on Elastic Cloud. Undefined if not running on Cloud. + * This is the path to the Cloud Account and Billing page. The value is already prepended with `baseUrl`. + * + * @example `{baseUrl}/account/` */ organizationUrl?: string; /** * This is the path to the Snapshots page for the deployment to which the Kibana instance belongs. The value is already prepended with `deploymentUrl`. + * + * @example `{deploymentUrl}/elasticsearch/snapshots` */ snapshotsUrl?: string; /** @@ -131,7 +143,9 @@ export interface CloudSetup { */ isCloudEnabled: boolean; /** - * When the Cloud Trial ends/ended for the organization that owns this deployment. Only available when running on Elastic Cloud. + * The end date for the Elastic Cloud trial. Only available on Elastic Cloud. + * + * @example `2020-10-14T10:40:22Z` */ trialEndDate?: Date; /** @@ -140,6 +154,7 @@ export interface CloudSetup { isElasticStaffOwned?: boolean; /** * Registers CloudServiceProviders so start's `CloudContextProvider` hooks them. + * * @param contextProvider The React component from the Service Provider. */ registerCloudService: (contextProvider: FC) => void; diff --git a/x-pack/plugins/cloud/server/__snapshots__/plugin.test.ts.snap b/x-pack/plugins/cloud/server/__snapshots__/plugin.test.ts.snap new file mode 100644 index 00000000000000..505c66345d77bb --- /dev/null +++ b/x-pack/plugins/cloud/server/__snapshots__/plugin.test.ts.snap @@ -0,0 +1,34 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Cloud Plugin #setup interface snapshot 1`] = ` +Object { + "apm": Object { + "secretToken": undefined, + "url": undefined, + }, + "baseUrl": "https://cloud.elastic.co", + "cloudDefaultPort": undefined, + "cloudHost": undefined, + "cloudId": "cloudId", + "deploymentId": "deployment-id", + "elasticsearchUrl": undefined, + "instanceSizeMb": undefined, + "isCloudEnabled": true, + "isElasticStaffOwned": undefined, + "isServerlessEnabled": false, + "kibanaUrl": undefined, + "projectsUrl": "https://cloud.elastic.co/projects/", + "serverless": Object { + "projectId": undefined, + }, + "trialEndDate": undefined, +} +`; + +exports[`Cloud Plugin #start interface snapshot 1`] = ` +Object { + "baseUrl": "https://cloud.elastic.co", + "isCloudEnabled": true, + "projectsUrl": "https://cloud.elastic.co/projects/", +} +`; diff --git a/x-pack/plugins/cloud/server/mocks.ts b/x-pack/plugins/cloud/server/mocks.ts index dcb04f089a266e..6f06b9639d960f 100644 --- a/x-pack/plugins/cloud/server/mocks.ts +++ b/x-pack/plugins/cloud/server/mocks.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { CloudSetup } from './plugin'; +import type { CloudSetup, CloudStart } from './plugin'; function createSetupMock(): jest.Mocked { return { @@ -19,6 +19,8 @@ function createSetupMock(): jest.Mocked { isCloudEnabled: true, isElasticStaffOwned: true, trialEndDate: new Date('2020-10-01T14:13:12Z'), + projectsUrl: 'projects-url', + baseUrl: 'base-url', apm: { url: undefined, secretToken: undefined, @@ -30,6 +32,15 @@ function createSetupMock(): jest.Mocked { }; } +function createStartMock(): jest.Mocked { + return { + isCloudEnabled: true, + projectsUrl: 'projects-url', + baseUrl: 'base-url', + }; +} + export const cloudMock = { createSetup: createSetupMock, + createStart: createStartMock, }; diff --git a/x-pack/plugins/cloud/server/plugin.test.ts b/x-pack/plugins/cloud/server/plugin.test.ts index 76264cb248c179..0309271a8ea631 100644 --- a/x-pack/plugins/cloud/server/plugin.test.ts +++ b/x-pack/plugins/cloud/server/plugin.test.ts @@ -15,6 +15,7 @@ const baseConfig = { base_url: 'https://cloud.elastic.co', deployment_url: '/abc123', profile_url: '/user/settings/', + projects_url: '/projects/', organization_url: '/account/', }; @@ -42,6 +43,10 @@ describe('Cloud Plugin', () => { describe('#setup', () => { describe('interface', () => { + it('snapshot', () => { + const { setup } = setupPlugin(); + expect(setup).toMatchSnapshot(); + }); it('exposes isCloudEnabled', () => { const { setup } = setupPlugin(); expect(setup.isCloudEnabled).toBe(true); @@ -124,6 +129,10 @@ describe('Cloud Plugin', () => { describe('#start', () => { describe('interface', () => { + it('snapshot', () => { + const { start } = setupPlugin(); + expect(start).toMatchSnapshot(); + }); it('exposes isCloudEnabled', () => { const { start } = setupPlugin(); expect(start.isCloudEnabled).toBe(true); diff --git a/x-pack/plugins/cloud/server/plugin.ts b/x-pack/plugins/cloud/server/plugin.ts index ee769cf0b14c33..5838f5086fa534 100644 --- a/x-pack/plugins/cloud/server/plugin.ts +++ b/x-pack/plugins/cloud/server/plugin.ts @@ -14,6 +14,7 @@ import { registerCloudUsageCollector } from './collectors'; import { getIsCloudEnabled } from '../common/is_cloud_enabled'; import { parseDeploymentIdFromDeploymentUrl } from '../common/parse_deployment_id_from_deployment_url'; import { decodeCloudId, DecodedCloudId } from '../common/decode_cloud_id'; +import { getFullCloudUrl } from '../common/utils'; import { readInstanceSizeMb } from './env'; interface PluginsSetup { @@ -25,7 +26,11 @@ interface PluginsSetup { */ export interface CloudSetup { /** - * The deployment's Cloud ID. Only available when running on Elastic Cloud. + * This is the ID of the Cloud deployment to which the Kibana instance belongs. + * + * @example `eastus2.azure.elastic-cloud.com:9243$59ef636c6917463db140321484d63cfa$a8b109c08adc43279ef48f29af1a3911` + * + * @note The `cloudId` is a concatenation of the deployment name and a hash. Users can update the deployment name, changing the `cloudId`. However, the changed `cloudId` will not be re-injected into `kibana.yml`. If you need the current `cloudId` the best approach is to split the injected `cloudId` on the semi-colon, and replace the first element with the `persistent.cluster.metadata.display_name` value as provided by a call to `GET _cluster/settings`. */ cloudId?: string; /** @@ -41,15 +46,27 @@ export interface CloudSetup { */ kibanaUrl?: string; /** - * {host} from the deployment url https://.. + * This is the URL to the "projects" interface on cloud. + * + * @example `https://cloud.elastic.co/projects` + */ + projectsUrl?: string; + /** + * This is the URL of the Cloud interface. + * + * @example `https://cloud.elastic.co` (on the ESS production environment) + */ + baseUrl?: string; + /** + * {host} of the deployment url https://.. */ cloudHost?: string; /** - * {port} from the deployment url https://.. + * {port} of the deployment url https://.. */ cloudDefaultPort?: string; /** - * `true` when running on Elastic Cloud. + * This is set to `true` for both ESS and ECE deployments. */ isCloudEnabled: boolean; /** @@ -77,7 +94,11 @@ export interface CloudSetup { */ isServerlessEnabled: boolean; /** - * Serverless configuration + * Serverless configuration. + * + * @note We decided to place any cloud URL values at the top level of this object + * even if they contain serverless specific values. All other serverless + * config should live in this object. */ serverless: { /** @@ -93,9 +114,21 @@ export interface CloudSetup { */ export interface CloudStart { /** - * `true` when running on Elastic Cloud. + * This is set to `true` for both ESS and ECE deployments. */ isCloudEnabled: boolean; + /** + * This is the URL to the "projects" interface on cloud. + * + * @example `https://cloud.elastic.co/projects` + */ + projectsUrl?: string; + /** + * This is the URL of the Cloud interface. + * + * @example `https://cloud.elastic.co` (on the ESS production environment) + */ + baseUrl?: string; } export class CloudPlugin implements Plugin { @@ -124,6 +157,7 @@ export class CloudPlugin implements Plugin { } return { + ...this.getCloudUrls(), cloudId: this.config.id, instanceSizeMb: readInstanceSizeMb(), deploymentId: parseDeploymentIdFromDeploymentUrl(this.config.deployment_url), @@ -145,9 +179,19 @@ export class CloudPlugin implements Plugin { }; } - public start() { + public start(): CloudStart { return { + ...this.getCloudUrls(), isCloudEnabled: getIsCloudEnabled(this.config.id), }; } + + private getCloudUrls() { + const { base_url: baseUrl } = this.config; + const projectsUrl = getFullCloudUrl(baseUrl, this.config.projects_url); + return { + baseUrl, + projectsUrl, + }; + } } From f61bb80ed640bb392136755875fa2ce33a0c4a06 Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Thu, 10 Aug 2023 13:17:59 -0400 Subject: [PATCH 41/45] =?UTF-8?q?Revert=20"[Response=20Ops][Task=20Manager?= =?UTF-8?q?]=20Expose=20SLI=20metrics=20in=20HTTP=20API=20(=E2=80=A6=20(#1?= =?UTF-8?q?63639)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …#162178)" This reverts commit 582d97ddb20e594de5300524e6c3b7851ed81f9a. ## Summary Summarize your PR. If it involves visual changes include a screenshot or gif. ### Checklist Delete any items that are not applicable to this PR. - [ ] 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/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [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 - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] 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) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../task_manager/server/config.test.ts | 3 - x-pack/plugins/task_manager/server/config.ts | 107 +- .../server/ephemeral_task_lifecycle.test.ts | 1 - .../managed_configuration.test.ts | 1 - .../server/metrics/create_aggregator.test.ts | 1070 ----------------- .../server/metrics/create_aggregator.ts | 57 - .../task_manager/server/metrics/index.ts | 26 - .../server/metrics/metrics_aggregator.mock.ts | 21 - .../server/metrics/metrics_stream.test.ts | 89 -- .../server/metrics/metrics_stream.ts | 89 -- .../metrics/success_rate_counter.test.ts | 49 - .../server/metrics/success_rate_counter.ts | 44 - .../task_claim_metrics_aggregator.test.ts | 102 -- .../metrics/task_claim_metrics_aggregator.ts | 71 -- .../task_run_metrics_aggregator.test.ts | 208 ---- .../metrics/task_run_metrics_aggregator.ts | 85 -- .../task_manager/server/metrics/types.ts | 15 - ...ground_task_utilization_statistics.test.ts | 2 +- .../background_task_utilization_statistics.ts | 2 +- .../configuration_statistics.test.ts | 1 - .../monitoring/configuration_statistics.ts | 2 +- .../ephemeral_task_statistics.test.ts | 2 +- .../monitoring/ephemeral_task_statistics.ts | 2 +- .../monitoring_stats_stream.test.ts | 4 +- .../monitoring/monitoring_stats_stream.ts | 4 +- .../runtime_statistics_aggregator.ts | 0 .../monitoring/task_run_statistics.test.ts | 2 +- .../server/monitoring/task_run_statistics.ts | 2 +- .../server/monitoring/workload_statistics.ts | 2 +- .../task_manager/server/plugin.test.ts | 1 - x-pack/plugins/task_manager/server/plugin.ts | 15 +- .../server/polling_lifecycle.test.ts | 1 - .../task_manager/server/routes/index.ts | 1 - .../server/routes/metrics.test.ts | 82 -- .../task_manager/server/routes/metrics.ts | 71 -- .../server/task_running/task_runner.test.ts | 39 - .../server/task_running/task_runner.ts | 54 +- .../test_suites/task_manager/index.ts | 1 - .../test_suites/task_manager/metrics_route.ts | 227 ---- 39 files changed, 86 insertions(+), 2469 deletions(-) delete mode 100644 x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts delete mode 100644 x-pack/plugins/task_manager/server/metrics/create_aggregator.ts delete mode 100644 x-pack/plugins/task_manager/server/metrics/index.ts delete mode 100644 x-pack/plugins/task_manager/server/metrics/metrics_aggregator.mock.ts delete mode 100644 x-pack/plugins/task_manager/server/metrics/metrics_stream.test.ts delete mode 100644 x-pack/plugins/task_manager/server/metrics/metrics_stream.ts delete mode 100644 x-pack/plugins/task_manager/server/metrics/success_rate_counter.test.ts delete mode 100644 x-pack/plugins/task_manager/server/metrics/success_rate_counter.ts delete mode 100644 x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.test.ts delete mode 100644 x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts delete mode 100644 x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts delete mode 100644 x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts delete mode 100644 x-pack/plugins/task_manager/server/metrics/types.ts rename x-pack/plugins/task_manager/server/{lib => monitoring}/runtime_statistics_aggregator.ts (100%) delete mode 100644 x-pack/plugins/task_manager/server/routes/metrics.test.ts delete mode 100644 x-pack/plugins/task_manager/server/routes/metrics.ts delete mode 100644 x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts diff --git a/x-pack/plugins/task_manager/server/config.test.ts b/x-pack/plugins/task_manager/server/config.test.ts index c196a334931ba0..9782d6ae08dbfb 100644 --- a/x-pack/plugins/task_manager/server/config.test.ts +++ b/x-pack/plugins/task_manager/server/config.test.ts @@ -23,7 +23,6 @@ describe('config validation', () => { }, "max_attempts": 3, "max_workers": 10, - "metrics_reset_interval": 30000, "monitored_aggregated_stats_refresh_rate": 60000, "monitored_stats_health_verbose_log": Object { "enabled": false, @@ -82,7 +81,6 @@ describe('config validation', () => { }, "max_attempts": 3, "max_workers": 10, - "metrics_reset_interval": 30000, "monitored_aggregated_stats_refresh_rate": 60000, "monitored_stats_health_verbose_log": Object { "enabled": false, @@ -139,7 +137,6 @@ describe('config validation', () => { }, "max_attempts": 3, "max_workers": 10, - "metrics_reset_interval": 30000, "monitored_aggregated_stats_refresh_rate": 60000, "monitored_stats_health_verbose_log": Object { "enabled": false, diff --git a/x-pack/plugins/task_manager/server/config.ts b/x-pack/plugins/task_manager/server/config.ts index 490d25a7bdfb0e..c2d4940d36450c 100644 --- a/x-pack/plugins/task_manager/server/config.ts +++ b/x-pack/plugins/task_manager/server/config.ts @@ -20,8 +20,6 @@ export const DEFAULT_MONITORING_REFRESH_RATE = 60 * 1000; export const DEFAULT_MONITORING_STATS_RUNNING_AVERAGE_WINDOW = 50; export const DEFAULT_MONITORING_STATS_WARN_DELAYED_TASK_START_IN_SECONDS = 60; -export const DEFAULT_METRICS_RESET_INTERVAL = 30 * 1000; // 30 seconds - // At the default poll interval of 3sec, this averages over the last 15sec. export const DEFAULT_WORKER_UTILIZATION_RUNNING_AVERAGE_WINDOW = 5; @@ -54,56 +52,40 @@ const eventLoopDelaySchema = schema.object({ }); const requeueInvalidTasksConfig = schema.object({ - delay: schema.number({ defaultValue: 3000, min: 0 }), enabled: schema.boolean({ defaultValue: false }), + delay: schema.number({ defaultValue: 3000, min: 0 }), max_attempts: schema.number({ defaultValue: 100, min: 1, max: 500 }), }); export const configSchema = schema.object( { - allow_reading_invalid_state: schema.boolean({ defaultValue: true }), - ephemeral_tasks: schema.object({ - enabled: schema.boolean({ defaultValue: false }), - /* How many requests can Task Manager buffer before it rejects new requests. */ - request_capacity: schema.number({ - // a nice round contrived number, feel free to change as we learn how it behaves - defaultValue: 10, - min: 1, - max: DEFAULT_MAX_EPHEMERAL_REQUEST_CAPACITY, - }), - }), - event_loop_delay: eventLoopDelaySchema, /* The maximum number of times a task will be attempted before being abandoned as failed */ max_attempts: schema.number({ defaultValue: 3, min: 1, }), + /* How often, in milliseconds, the task manager will look for more work. */ + poll_interval: schema.number({ + defaultValue: DEFAULT_POLL_INTERVAL, + min: 100, + }), + /* How many requests can Task Manager buffer before it rejects new requests. */ + request_capacity: schema.number({ + // a nice round contrived number, feel free to change as we learn how it behaves + defaultValue: 1000, + min: 1, + }), /* The maximum number of tasks that this Kibana instance will run simultaneously. */ max_workers: schema.number({ defaultValue: DEFAULT_MAX_WORKERS, // disable the task manager rather than trying to specify it with 0 workers min: 1, }), - /* The interval at which monotonically increasing metrics counters will reset */ - metrics_reset_interval: schema.number({ - defaultValue: DEFAULT_METRICS_RESET_INTERVAL, - min: 10 * 1000, // minimum 10 seconds - }), - /* The rate at which we refresh monitored stats that require aggregation queries against ES. */ - monitored_aggregated_stats_refresh_rate: schema.number({ - defaultValue: DEFAULT_MONITORING_REFRESH_RATE, - /* don't run monitored stat aggregations any faster than once every 5 seconds */ - min: 5000, - }), - monitored_stats_health_verbose_log: schema.object({ - enabled: schema.boolean({ defaultValue: false }), - level: schema.oneOf([schema.literal('debug'), schema.literal('info')], { - defaultValue: 'debug', - }), - /* The amount of seconds we allow a task to delay before printing a warning server log */ - warn_delayed_task_start_in_seconds: schema.number({ - defaultValue: DEFAULT_MONITORING_STATS_WARN_DELAYED_TASK_START_IN_SECONDS, - }), + /* The threshold percenatge for workers experiencing version conflicts for shifting the polling interval. */ + version_conflict_threshold: schema.number({ + defaultValue: DEFAULT_VERSION_CONFLICT_THRESHOLD, + min: 50, + max: 100, }), /* The rate at which we emit fresh monitored stats. By default we'll use the poll_interval (+ a slight buffer) */ monitored_stats_required_freshness: schema.number({ @@ -111,6 +93,12 @@ export const configSchema = schema.object( ((config as { poll_interval: number })?.poll_interval ?? DEFAULT_POLL_INTERVAL) + 1000, min: 100, }), + /* The rate at which we refresh monitored stats that require aggregation queries against ES. */ + monitored_aggregated_stats_refresh_rate: schema.number({ + defaultValue: DEFAULT_MONITORING_REFRESH_RATE, + /* don't run monitored stat aggregations any faster than once every 5 seconds */ + min: 5000, + }), /* The size of the running average window for monitored stats. */ monitored_stats_running_average_window: schema.number({ defaultValue: DEFAULT_MONITORING_STATS_RUNNING_AVERAGE_WINDOW, @@ -119,39 +107,44 @@ export const configSchema = schema.object( }), /* Task Execution result warn & error thresholds. */ monitored_task_execution_thresholds: schema.object({ + default: taskExecutionFailureThresholdSchema, custom: schema.recordOf(schema.string(), taskExecutionFailureThresholdSchema, { defaultValue: {}, }), - default: taskExecutionFailureThresholdSchema, - }), - /* How often, in milliseconds, the task manager will look for more work. */ - poll_interval: schema.number({ - defaultValue: DEFAULT_POLL_INTERVAL, - min: 100, - }), - /* How many requests can Task Manager buffer before it rejects new requests. */ - request_capacity: schema.number({ - // a nice round contrived number, feel free to change as we learn how it behaves - defaultValue: 1000, - min: 1, }), - requeue_invalid_tasks: requeueInvalidTasksConfig, - /* These are not designed to be used by most users. Please use caution when changing these */ - unsafe: schema.object({ - authenticate_background_task_utilization: schema.boolean({ defaultValue: true }), - exclude_task_types: schema.arrayOf(schema.string(), { defaultValue: [] }), + monitored_stats_health_verbose_log: schema.object({ + enabled: schema.boolean({ defaultValue: false }), + level: schema.oneOf([schema.literal('debug'), schema.literal('info')], { + defaultValue: 'debug', + }), + /* The amount of seconds we allow a task to delay before printing a warning server log */ + warn_delayed_task_start_in_seconds: schema.number({ + defaultValue: DEFAULT_MONITORING_STATS_WARN_DELAYED_TASK_START_IN_SECONDS, + }), }), - /* The threshold percenatge for workers experiencing version conflicts for shifting the polling interval. */ - version_conflict_threshold: schema.number({ - defaultValue: DEFAULT_VERSION_CONFLICT_THRESHOLD, - min: 50, - max: 100, + ephemeral_tasks: schema.object({ + enabled: schema.boolean({ defaultValue: false }), + /* How many requests can Task Manager buffer before it rejects new requests. */ + request_capacity: schema.number({ + // a nice round contrived number, feel free to change as we learn how it behaves + defaultValue: 10, + min: 1, + max: DEFAULT_MAX_EPHEMERAL_REQUEST_CAPACITY, + }), }), + event_loop_delay: eventLoopDelaySchema, worker_utilization_running_average_window: schema.number({ defaultValue: DEFAULT_WORKER_UTILIZATION_RUNNING_AVERAGE_WINDOW, max: 100, min: 1, }), + /* These are not designed to be used by most users. Please use caution when changing these */ + unsafe: schema.object({ + exclude_task_types: schema.arrayOf(schema.string(), { defaultValue: [] }), + authenticate_background_task_utilization: schema.boolean({ defaultValue: true }), + }), + requeue_invalid_tasks: requeueInvalidTasksConfig, + allow_reading_invalid_state: schema.boolean({ defaultValue: true }), }, { validate: (config) => { diff --git a/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts b/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts index 6a06ea93f3dcb4..863b5d986d3da2 100644 --- a/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts +++ b/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts @@ -84,7 +84,6 @@ describe('EphemeralTaskLifecycle', () => { delay: 3000, max_attempts: 20, }, - metrics_reset_interval: 3000, ...config, }, elasticsearchAndSOAvailability$, diff --git a/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts b/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts index f034feb1544625..e2d290d256ec25 100644 --- a/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts +++ b/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts @@ -79,7 +79,6 @@ describe('managed configuration', () => { delay: 3000, max_attempts: 20, }, - metrics_reset_interval: 3000, }); logger = context.logger.get('taskManager'); diff --git a/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts deleted file mode 100644 index 96716983294473..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts +++ /dev/null @@ -1,1070 +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 sinon from 'sinon'; -import { Subject, Observable } from 'rxjs'; -import { take, bufferCount, skip } from 'rxjs/operators'; -import { isTaskPollingCycleEvent, isTaskRunEvent } from '../task_events'; -import { TaskLifecycleEvent } from '../polling_lifecycle'; -import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; -import { taskPollingLifecycleMock } from '../polling_lifecycle.mock'; -import { TaskManagerConfig } from '../config'; -import { createAggregator } from './create_aggregator'; -import { TaskClaimMetric, TaskClaimMetricsAggregator } from './task_claim_metrics_aggregator'; -import { taskClaimFailureEvent, taskClaimSuccessEvent } from './task_claim_metrics_aggregator.test'; -import { getTaskRunFailedEvent, getTaskRunSuccessEvent } from './task_run_metrics_aggregator.test'; -import { TaskRunMetric, TaskRunMetricsAggregator } from './task_run_metrics_aggregator'; -import * as TaskClaimMetricsAggregatorModule from './task_claim_metrics_aggregator'; -import { metricsAggregatorMock } from './metrics_aggregator.mock'; - -const mockMetricsAggregator = metricsAggregatorMock.create(); -const config: TaskManagerConfig = { - allow_reading_invalid_state: false, - ephemeral_tasks: { - enabled: true, - request_capacity: 10, - }, - event_loop_delay: { - monitor: true, - warn_threshold: 5000, - }, - max_attempts: 9, - max_workers: 10, - metrics_reset_interval: 30000, - monitored_aggregated_stats_refresh_rate: 5000, - monitored_stats_health_verbose_log: { - enabled: false, - level: 'debug' as const, - warn_delayed_task_start_in_seconds: 60, - }, - monitored_stats_required_freshness: 6000000, - monitored_stats_running_average_window: 50, - monitored_task_execution_thresholds: { - custom: {}, - default: { - error_threshold: 90, - warn_threshold: 80, - }, - }, - poll_interval: 6000000, - request_capacity: 1000, - requeue_invalid_tasks: { - enabled: false, - delay: 3000, - max_attempts: 20, - }, - unsafe: { - authenticate_background_task_utilization: true, - exclude_task_types: [], - }, - version_conflict_threshold: 80, - worker_utilization_running_average_window: 5, -}; - -describe('createAggregator', () => { - beforeEach(() => { - jest.resetAllMocks(); - }); - - describe('with TaskClaimMetricsAggregator', () => { - test('returns a cumulative count of successful polling cycles and total polling cycles', async () => { - const pollingCycleEvents = [ - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimFailureEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimFailureEvent, - taskClaimSuccessEvent, - ]; - const events$ = new Subject(); - const taskPollingLifecycle = taskPollingLifecycleMock.create({ - events$: events$ as Observable, - }); - - const taskClaimAggregator = createAggregator({ - key: 'task_claim', - taskPollingLifecycle, - config, - resetMetrics$: new Subject(), - taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskPollingCycleEvent(taskEvent), - metricsAggregator: new TaskClaimMetricsAggregator(), - }); - - return new Promise((resolve) => { - taskClaimAggregator - .pipe( - // skip initial metric which is just initialized data which - // ensures we don't stall on combineLatest - skip(1), - take(pollingCycleEvents.length), - bufferCount(pollingCycleEvents.length) - ) - .subscribe((metrics: Array>) => { - expect(metrics[0]).toEqual({ - key: 'task_claim', - value: { success: 1, total: 1, duration: { counts: [1], values: [100] } }, - }); - expect(metrics[1]).toEqual({ - key: 'task_claim', - value: { success: 2, total: 2, duration: { counts: [2], values: [100] } }, - }); - expect(metrics[2]).toEqual({ - key: 'task_claim', - value: { success: 3, total: 3, duration: { counts: [3], values: [100] } }, - }); - expect(metrics[3]).toEqual({ - key: 'task_claim', - value: { success: 4, total: 4, duration: { counts: [4], values: [100] } }, - }); - expect(metrics[4]).toEqual({ - key: 'task_claim', - value: { success: 4, total: 5, duration: { counts: [4], values: [100] } }, - }); - expect(metrics[5]).toEqual({ - key: 'task_claim', - value: { success: 5, total: 6, duration: { counts: [5], values: [100] } }, - }); - expect(metrics[6]).toEqual({ - key: 'task_claim', - value: { success: 6, total: 7, duration: { counts: [6], values: [100] } }, - }); - expect(metrics[7]).toEqual({ - key: 'task_claim', - value: { success: 7, total: 8, duration: { counts: [7], values: [100] } }, - }); - expect(metrics[8]).toEqual({ - key: 'task_claim', - value: { success: 8, total: 9, duration: { counts: [8], values: [100] } }, - }); - expect(metrics[9]).toEqual({ - key: 'task_claim', - value: { success: 8, total: 10, duration: { counts: [8], values: [100] } }, - }); - expect(metrics[10]).toEqual({ - key: 'task_claim', - value: { success: 9, total: 11, duration: { counts: [9], values: [100] } }, - }); - resolve(); - }); - - for (const event of pollingCycleEvents) { - events$.next(event); - } - }); - }); - - test('resets count when resetMetric$ event is received', async () => { - const resetMetrics$ = new Subject(); - const pollingCycleEvents1 = [ - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimFailureEvent, - taskClaimSuccessEvent, - ]; - - const pollingCycleEvents2 = [ - taskClaimSuccessEvent, - taskClaimFailureEvent, - taskClaimFailureEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - ]; - const events$ = new Subject(); - const taskPollingLifecycle = taskPollingLifecycleMock.create({ - events$: events$ as Observable, - }); - - const taskClaimAggregator = createAggregator({ - key: 'task_claim', - taskPollingLifecycle, - config, - resetMetrics$, - taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskPollingCycleEvent(taskEvent), - metricsAggregator: new TaskClaimMetricsAggregator(), - }); - - return new Promise((resolve) => { - taskClaimAggregator - .pipe( - // skip initial metric which is just initialized data which - // ensures we don't stall on combineLatest - skip(1), - take(pollingCycleEvents1.length + pollingCycleEvents2.length), - bufferCount(pollingCycleEvents1.length + pollingCycleEvents2.length) - ) - .subscribe((metrics: Array>) => { - expect(metrics[0]).toEqual({ - key: 'task_claim', - value: { success: 1, total: 1, duration: { counts: [1], values: [100] } }, - }); - expect(metrics[1]).toEqual({ - key: 'task_claim', - value: { success: 2, total: 2, duration: { counts: [2], values: [100] } }, - }); - expect(metrics[2]).toEqual({ - key: 'task_claim', - value: { success: 3, total: 3, duration: { counts: [3], values: [100] } }, - }); - expect(metrics[3]).toEqual({ - key: 'task_claim', - value: { success: 4, total: 4, duration: { counts: [4], values: [100] } }, - }); - expect(metrics[4]).toEqual({ - key: 'task_claim', - value: { success: 4, total: 5, duration: { counts: [4], values: [100] } }, - }); - expect(metrics[5]).toEqual({ - key: 'task_claim', - value: { success: 5, total: 6, duration: { counts: [5], values: [100] } }, - }); - // reset event should have been received here - expect(metrics[6]).toEqual({ - key: 'task_claim', - value: { success: 1, total: 1, duration: { counts: [1], values: [100] } }, - }); - expect(metrics[7]).toEqual({ - key: 'task_claim', - value: { success: 1, total: 2, duration: { counts: [1], values: [100] } }, - }); - expect(metrics[8]).toEqual({ - key: 'task_claim', - value: { success: 1, total: 3, duration: { counts: [1], values: [100] } }, - }); - expect(metrics[9]).toEqual({ - key: 'task_claim', - value: { success: 2, total: 4, duration: { counts: [2], values: [100] } }, - }); - expect(metrics[10]).toEqual({ - key: 'task_claim', - value: { success: 3, total: 5, duration: { counts: [3], values: [100] } }, - }); - resolve(); - }); - - for (const event of pollingCycleEvents1) { - events$.next(event); - } - resetMetrics$.next(true); - for (const event of pollingCycleEvents2) { - events$.next(event); - } - }); - }); - - test('resets count when configured metrics reset interval expires', async () => { - const clock = sinon.useFakeTimers(); - clock.tick(0); - const pollingCycleEvents1 = [ - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimFailureEvent, - taskClaimSuccessEvent, - ]; - - const pollingCycleEvents2 = [ - taskClaimSuccessEvent, - taskClaimFailureEvent, - taskClaimFailureEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - ]; - const events$ = new Subject(); - const taskPollingLifecycle = taskPollingLifecycleMock.create({ - events$: events$ as Observable, - }); - - const taskClaimAggregator = createAggregator({ - key: 'task_claim', - taskPollingLifecycle, - config: { - ...config, - metrics_reset_interval: 10, - }, - resetMetrics$: new Subject(), - taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskPollingCycleEvent(taskEvent), - metricsAggregator: new TaskClaimMetricsAggregator(), - }); - - return new Promise((resolve) => { - taskClaimAggregator - .pipe( - // skip initial metric which is just initialized data which - // ensures we don't stall on combineLatest - skip(1), - take(pollingCycleEvents1.length + pollingCycleEvents2.length), - bufferCount(pollingCycleEvents1.length + pollingCycleEvents2.length) - ) - .subscribe((metrics: Array>) => { - expect(metrics[0]).toEqual({ - key: 'task_claim', - value: { success: 1, total: 1, duration: { counts: [1], values: [100] } }, - }); - expect(metrics[1]).toEqual({ - key: 'task_claim', - value: { success: 2, total: 2, duration: { counts: [2], values: [100] } }, - }); - expect(metrics[2]).toEqual({ - key: 'task_claim', - value: { success: 3, total: 3, duration: { counts: [3], values: [100] } }, - }); - expect(metrics[3]).toEqual({ - key: 'task_claim', - value: { success: 4, total: 4, duration: { counts: [4], values: [100] } }, - }); - expect(metrics[4]).toEqual({ - key: 'task_claim', - value: { success: 4, total: 5, duration: { counts: [4], values: [100] } }, - }); - expect(metrics[5]).toEqual({ - key: 'task_claim', - value: { success: 5, total: 6, duration: { counts: [5], values: [100] } }, - }); - // reset interval should have fired here - expect(metrics[6]).toEqual({ - key: 'task_claim', - value: { success: 1, total: 1, duration: { counts: [1], values: [100] } }, - }); - expect(metrics[7]).toEqual({ - key: 'task_claim', - value: { success: 1, total: 2, duration: { counts: [1], values: [100] } }, - }); - expect(metrics[8]).toEqual({ - key: 'task_claim', - value: { success: 1, total: 3, duration: { counts: [1], values: [100] } }, - }); - expect(metrics[9]).toEqual({ - key: 'task_claim', - value: { success: 2, total: 4, duration: { counts: [2], values: [100] } }, - }); - expect(metrics[10]).toEqual({ - key: 'task_claim', - value: { success: 3, total: 5, duration: { counts: [3], values: [100] } }, - }); - resolve(); - }); - - for (const event of pollingCycleEvents1) { - events$.next(event); - } - clock.tick(20); - for (const event of pollingCycleEvents2) { - events$.next(event); - } - - clock.restore(); - }); - }); - }); - - describe('with TaskRunMetricsAggregator', () => { - test('returns a cumulative count of successful task runs and total task runs, broken down by type', async () => { - const taskRunEvents = [ - getTaskRunSuccessEvent('alerting:example'), - getTaskRunSuccessEvent('telemetry'), - getTaskRunSuccessEvent('alerting:example'), - getTaskRunSuccessEvent('report'), - getTaskRunFailedEvent('alerting:example'), - getTaskRunSuccessEvent('alerting:.index-threshold'), - getTaskRunSuccessEvent('alerting:example'), - getTaskRunFailedEvent('alerting:example'), - getTaskRunSuccessEvent('alerting:example'), - getTaskRunFailedEvent('actions:webhook'), - ]; - const events$ = new Subject(); - const taskPollingLifecycle = taskPollingLifecycleMock.create({ - events$: events$ as Observable, - }); - - const taskRunAggregator = createAggregator({ - key: 'task_run', - taskPollingLifecycle, - config, - resetMetrics$: new Subject(), - taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent), - metricsAggregator: new TaskRunMetricsAggregator(), - }); - - return new Promise((resolve) => { - taskRunAggregator - .pipe( - // skip initial metric which is just initialized data which - // ensures we don't stall on combineLatest - skip(1), - take(taskRunEvents.length), - bufferCount(taskRunEvents.length) - ) - .subscribe((metrics: Array>) => { - expect(metrics[0]).toEqual({ - key: 'task_run', - value: { - overall: { success: 1, total: 1 }, - by_type: { - alerting: { success: 1, total: 1 }, - 'alerting:example': { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[1]).toEqual({ - key: 'task_run', - value: { - overall: { success: 2, total: 2 }, - by_type: { - alerting: { success: 1, total: 1 }, - 'alerting:example': { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[2]).toEqual({ - key: 'task_run', - value: { - overall: { success: 3, total: 3 }, - by_type: { - alerting: { success: 2, total: 2 }, - 'alerting:example': { success: 2, total: 2 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[3]).toEqual({ - key: 'task_run', - value: { - overall: { success: 4, total: 4 }, - by_type: { - alerting: { success: 2, total: 2 }, - 'alerting:example': { success: 2, total: 2 }, - report: { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[4]).toEqual({ - key: 'task_run', - value: { - overall: { success: 4, total: 5 }, - by_type: { - alerting: { success: 2, total: 3 }, - 'alerting:example': { success: 2, total: 3 }, - report: { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[5]).toEqual({ - key: 'task_run', - value: { - overall: { success: 5, total: 6 }, - by_type: { - alerting: { success: 3, total: 4 }, - 'alerting:.index-threshold': { success: 1, total: 1 }, - 'alerting:example': { success: 2, total: 3 }, - report: { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[6]).toEqual({ - key: 'task_run', - value: { - overall: { success: 6, total: 7 }, - by_type: { - alerting: { success: 4, total: 5 }, - 'alerting:.index-threshold': { success: 1, total: 1 }, - 'alerting:example': { success: 3, total: 4 }, - report: { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[7]).toEqual({ - key: 'task_run', - value: { - overall: { success: 6, total: 8 }, - by_type: { - alerting: { success: 4, total: 6 }, - 'alerting:.index-threshold': { success: 1, total: 1 }, - 'alerting:example': { success: 3, total: 5 }, - report: { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[8]).toEqual({ - key: 'task_run', - value: { - overall: { success: 7, total: 9 }, - by_type: { - alerting: { success: 5, total: 7 }, - 'alerting:.index-threshold': { success: 1, total: 1 }, - 'alerting:example': { success: 4, total: 6 }, - report: { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[9]).toEqual({ - key: 'task_run', - value: { - overall: { success: 7, total: 10 }, - by_type: { - actions: { success: 0, total: 1 }, - alerting: { success: 5, total: 7 }, - 'actions:webhook': { success: 0, total: 1 }, - 'alerting:.index-threshold': { success: 1, total: 1 }, - 'alerting:example': { success: 4, total: 6 }, - report: { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - resolve(); - }); - - for (const event of taskRunEvents) { - events$.next(event); - } - }); - }); - - test('resets count when resetMetric$ event is received', async () => { - const resetMetrics$ = new Subject(); - const taskRunEvents1 = [ - getTaskRunSuccessEvent('alerting:example'), - getTaskRunSuccessEvent('telemetry'), - getTaskRunSuccessEvent('alerting:example'), - getTaskRunSuccessEvent('report'), - getTaskRunFailedEvent('alerting:example'), - ]; - - const taskRunEvents2 = [ - getTaskRunSuccessEvent('alerting:example'), - getTaskRunSuccessEvent('alerting:example'), - getTaskRunFailedEvent('alerting:example'), - getTaskRunSuccessEvent('alerting:example'), - getTaskRunFailedEvent('actions:webhook'), - ]; - const events$ = new Subject(); - const taskPollingLifecycle = taskPollingLifecycleMock.create({ - events$: events$ as Observable, - }); - - const taskRunAggregator = createAggregator({ - key: 'task_run', - taskPollingLifecycle, - config, - resetMetrics$, - taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent), - metricsAggregator: new TaskRunMetricsAggregator(), - }); - - return new Promise((resolve) => { - taskRunAggregator - .pipe( - // skip initial metric which is just initialized data which - // ensures we don't stall on combineLatest - skip(1), - take(taskRunEvents1.length + taskRunEvents2.length), - bufferCount(taskRunEvents1.length + taskRunEvents2.length) - ) - .subscribe((metrics: Array>) => { - expect(metrics[0]).toEqual({ - key: 'task_run', - value: { - overall: { success: 1, total: 1 }, - by_type: { - alerting: { success: 1, total: 1 }, - 'alerting:example': { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[1]).toEqual({ - key: 'task_run', - value: { - overall: { success: 2, total: 2 }, - by_type: { - alerting: { success: 1, total: 1 }, - 'alerting:example': { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[2]).toEqual({ - key: 'task_run', - value: { - overall: { success: 3, total: 3 }, - by_type: { - alerting: { success: 2, total: 2 }, - 'alerting:example': { success: 2, total: 2 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[3]).toEqual({ - key: 'task_run', - value: { - overall: { success: 4, total: 4 }, - by_type: { - alerting: { success: 2, total: 2 }, - 'alerting:example': { success: 2, total: 2 }, - report: { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[4]).toEqual({ - key: 'task_run', - value: { - overall: { success: 4, total: 5 }, - by_type: { - alerting: { success: 2, total: 3 }, - 'alerting:example': { success: 2, total: 3 }, - report: { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - // reset event should have been received here - expect(metrics[5]).toEqual({ - key: 'task_run', - value: { - overall: { success: 1, total: 1 }, - by_type: { - alerting: { success: 1, total: 1 }, - 'alerting:example': { success: 1, total: 1 }, - report: { success: 0, total: 0 }, - telemetry: { success: 0, total: 0 }, - }, - }, - }); - expect(metrics[6]).toEqual({ - key: 'task_run', - value: { - overall: { success: 2, total: 2 }, - by_type: { - alerting: { success: 2, total: 2 }, - 'alerting:example': { success: 2, total: 2 }, - report: { success: 0, total: 0 }, - telemetry: { success: 0, total: 0 }, - }, - }, - }); - expect(metrics[7]).toEqual({ - key: 'task_run', - value: { - overall: { success: 2, total: 3 }, - by_type: { - alerting: { success: 2, total: 3 }, - 'alerting:example': { success: 2, total: 3 }, - report: { success: 0, total: 0 }, - telemetry: { success: 0, total: 0 }, - }, - }, - }); - expect(metrics[8]).toEqual({ - key: 'task_run', - value: { - overall: { success: 3, total: 4 }, - by_type: { - alerting: { success: 3, total: 4 }, - 'alerting:example': { success: 3, total: 4 }, - report: { success: 0, total: 0 }, - telemetry: { success: 0, total: 0 }, - }, - }, - }); - expect(metrics[9]).toEqual({ - key: 'task_run', - value: { - overall: { success: 3, total: 5 }, - by_type: { - actions: { success: 0, total: 1 }, - alerting: { success: 3, total: 4 }, - 'actions:webhook': { success: 0, total: 1 }, - 'alerting:example': { success: 3, total: 4 }, - report: { success: 0, total: 0 }, - telemetry: { success: 0, total: 0 }, - }, - }, - }); - resolve(); - }); - - for (const event of taskRunEvents1) { - events$.next(event); - } - resetMetrics$.next(true); - for (const event of taskRunEvents2) { - events$.next(event); - } - }); - }); - - test('resets count when configured metrics reset interval expires', async () => { - const clock = sinon.useFakeTimers(); - clock.tick(0); - const taskRunEvents1 = [ - getTaskRunSuccessEvent('alerting:example'), - getTaskRunSuccessEvent('telemetry'), - getTaskRunSuccessEvent('alerting:example'), - getTaskRunSuccessEvent('report'), - getTaskRunFailedEvent('alerting:example'), - ]; - - const taskRunEvents2 = [ - getTaskRunSuccessEvent('alerting:example'), - getTaskRunSuccessEvent('alerting:example'), - getTaskRunFailedEvent('alerting:example'), - getTaskRunSuccessEvent('alerting:example'), - getTaskRunFailedEvent('actions:webhook'), - ]; - const events$ = new Subject(); - const taskPollingLifecycle = taskPollingLifecycleMock.create({ - events$: events$ as Observable, - }); - - const taskRunAggregator = createAggregator({ - key: 'task_run', - taskPollingLifecycle, - config: { - ...config, - metrics_reset_interval: 10, - }, - resetMetrics$: new Subject(), - taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent), - metricsAggregator: new TaskRunMetricsAggregator(), - }); - - return new Promise((resolve) => { - taskRunAggregator - .pipe( - // skip initial metric which is just initialized data which - // ensures we don't stall on combineLatest - skip(1), - take(taskRunEvents1.length + taskRunEvents2.length), - bufferCount(taskRunEvents1.length + taskRunEvents2.length) - ) - .subscribe((metrics: Array>) => { - expect(metrics[0]).toEqual({ - key: 'task_run', - value: { - overall: { success: 1, total: 1 }, - by_type: { - alerting: { success: 1, total: 1 }, - 'alerting:example': { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[1]).toEqual({ - key: 'task_run', - value: { - overall: { success: 2, total: 2 }, - by_type: { - alerting: { success: 1, total: 1 }, - 'alerting:example': { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[2]).toEqual({ - key: 'task_run', - value: { - overall: { success: 3, total: 3 }, - by_type: { - alerting: { success: 2, total: 2 }, - 'alerting:example': { success: 2, total: 2 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[3]).toEqual({ - key: 'task_run', - value: { - overall: { success: 4, total: 4 }, - by_type: { - alerting: { success: 2, total: 2 }, - 'alerting:example': { success: 2, total: 2 }, - report: { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - expect(metrics[4]).toEqual({ - key: 'task_run', - value: { - overall: { success: 4, total: 5 }, - by_type: { - alerting: { success: 2, total: 3 }, - 'alerting:example': { success: 2, total: 3 }, - report: { success: 1, total: 1 }, - telemetry: { success: 1, total: 1 }, - }, - }, - }); - // reset event should have been received here - expect(metrics[5]).toEqual({ - key: 'task_run', - value: { - overall: { success: 1, total: 1 }, - by_type: { - alerting: { success: 1, total: 1 }, - 'alerting:example': { success: 1, total: 1 }, - report: { success: 0, total: 0 }, - telemetry: { success: 0, total: 0 }, - }, - }, - }); - expect(metrics[6]).toEqual({ - key: 'task_run', - value: { - overall: { success: 2, total: 2 }, - by_type: { - alerting: { success: 2, total: 2 }, - 'alerting:example': { success: 2, total: 2 }, - report: { success: 0, total: 0 }, - telemetry: { success: 0, total: 0 }, - }, - }, - }); - expect(metrics[7]).toEqual({ - key: 'task_run', - value: { - overall: { success: 2, total: 3 }, - by_type: { - alerting: { success: 2, total: 3 }, - 'alerting:example': { success: 2, total: 3 }, - report: { success: 0, total: 0 }, - telemetry: { success: 0, total: 0 }, - }, - }, - }); - expect(metrics[8]).toEqual({ - key: 'task_run', - value: { - overall: { success: 3, total: 4 }, - by_type: { - alerting: { success: 3, total: 4 }, - 'alerting:example': { success: 3, total: 4 }, - report: { success: 0, total: 0 }, - telemetry: { success: 0, total: 0 }, - }, - }, - }); - expect(metrics[9]).toEqual({ - key: 'task_run', - value: { - overall: { success: 3, total: 5 }, - by_type: { - actions: { success: 0, total: 1 }, - alerting: { success: 3, total: 4 }, - 'actions:webhook': { success: 0, total: 1 }, - 'alerting:example': { success: 3, total: 4 }, - report: { success: 0, total: 0 }, - telemetry: { success: 0, total: 0 }, - }, - }, - }); - resolve(); - }); - - for (const event of taskRunEvents1) { - events$.next(event); - } - clock.tick(20); - for (const event of taskRunEvents2) { - events$.next(event); - } - - clock.restore(); - }); - }); - }); - - test('should filter task lifecycle events using specified taskEventFilter', () => { - const pollingCycleEvents = [ - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimFailureEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimFailureEvent, - taskClaimSuccessEvent, - ]; - const taskEventFilter = jest.fn().mockReturnValue(true); - const events$ = new Subject(); - const taskPollingLifecycle = taskPollingLifecycleMock.create({ - events$: events$ as Observable, - }); - const aggregator = createAggregator({ - key: 'test', - taskPollingLifecycle, - config, - resetMetrics$: new Subject(), - taskEventFilter, - metricsAggregator: new TaskClaimMetricsAggregator(), - }); - - return new Promise((resolve) => { - aggregator - .pipe( - // skip initial metric which is just initialized data which - // ensures we don't stall on combineLatest - skip(1), - take(pollingCycleEvents.length), - bufferCount(pollingCycleEvents.length) - ) - .subscribe(() => { - resolve(); - }); - - for (const event of pollingCycleEvents) { - events$.next(event); - } - - expect(taskEventFilter).toHaveBeenCalledTimes(pollingCycleEvents.length); - }); - }); - - test('should call metricAggregator to process task lifecycle events', () => { - const spy = jest - .spyOn(TaskClaimMetricsAggregatorModule, 'TaskClaimMetricsAggregator') - .mockImplementation(() => mockMetricsAggregator); - - const pollingCycleEvents = [ - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimFailureEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimFailureEvent, - taskClaimSuccessEvent, - ]; - const taskEventFilter = jest.fn().mockReturnValue(true); - const events$ = new Subject(); - const taskPollingLifecycle = taskPollingLifecycleMock.create({ - events$: events$ as Observable, - }); - const aggregator = createAggregator({ - key: 'test', - taskPollingLifecycle, - config, - resetMetrics$: new Subject(), - taskEventFilter, - metricsAggregator: mockMetricsAggregator, - }); - - return new Promise((resolve) => { - aggregator - .pipe( - // skip initial metric which is just initialized data which - // ensures we don't stall on combineLatest - skip(1), - take(pollingCycleEvents.length), - bufferCount(pollingCycleEvents.length) - ) - .subscribe(() => { - resolve(); - }); - - for (const event of pollingCycleEvents) { - events$.next(event); - } - - expect(mockMetricsAggregator.initialMetric).toHaveBeenCalledTimes(1); - expect(mockMetricsAggregator.processTaskLifecycleEvent).toHaveBeenCalledTimes( - pollingCycleEvents.length - ); - expect(mockMetricsAggregator.collect).toHaveBeenCalledTimes(pollingCycleEvents.length); - expect(mockMetricsAggregator.reset).not.toHaveBeenCalled(); - spy.mockRestore(); - }); - }); - - test('should call metricAggregator reset when resetMetric$ event is received', () => { - const spy = jest - .spyOn(TaskClaimMetricsAggregatorModule, 'TaskClaimMetricsAggregator') - .mockImplementation(() => mockMetricsAggregator); - - const resetMetrics$ = new Subject(); - const pollingCycleEvents = [ - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimFailureEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimSuccessEvent, - taskClaimFailureEvent, - taskClaimSuccessEvent, - ]; - const taskEventFilter = jest.fn().mockReturnValue(true); - const events$ = new Subject(); - const taskPollingLifecycle = taskPollingLifecycleMock.create({ - events$: events$ as Observable, - }); - const aggregator = createAggregator({ - key: 'test', - taskPollingLifecycle, - config, - resetMetrics$, - taskEventFilter, - metricsAggregator: mockMetricsAggregator, - }); - - return new Promise((resolve) => { - aggregator - .pipe( - // skip initial metric which is just initialized data which - // ensures we don't stall on combineLatest - skip(1), - take(pollingCycleEvents.length), - bufferCount(pollingCycleEvents.length) - ) - .subscribe(() => { - resolve(); - }); - - for (const event of pollingCycleEvents) { - events$.next(event); - } - - for (let i = 0; i < 5; i++) { - events$.next(pollingCycleEvents[i]); - } - resetMetrics$.next(true); - for (let i = 0; i < pollingCycleEvents.length; i++) { - events$.next(pollingCycleEvents[i]); - } - - expect(mockMetricsAggregator.initialMetric).toHaveBeenCalledTimes(1); - expect(mockMetricsAggregator.processTaskLifecycleEvent).toHaveBeenCalledTimes( - pollingCycleEvents.length - ); - expect(mockMetricsAggregator.collect).toHaveBeenCalledTimes(pollingCycleEvents.length); - expect(mockMetricsAggregator.reset).toHaveBeenCalledTimes(1); - spy.mockRestore(); - }); - }); -}); diff --git a/x-pack/plugins/task_manager/server/metrics/create_aggregator.ts b/x-pack/plugins/task_manager/server/metrics/create_aggregator.ts deleted file mode 100644 index cece8c0f70b23f..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/create_aggregator.ts +++ /dev/null @@ -1,57 +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 { combineLatest, filter, interval, map, merge, Observable, startWith } from 'rxjs'; -import { JsonValue } from '@kbn/utility-types'; -import { TaskLifecycleEvent, TaskPollingLifecycle } from '../polling_lifecycle'; -import { AggregatedStat, AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; -import { TaskManagerConfig } from '../config'; -import { ITaskMetricsAggregator } from './types'; - -export interface CreateMetricsAggregatorOpts { - key: string; - config: TaskManagerConfig; - resetMetrics$: Observable; - taskPollingLifecycle: TaskPollingLifecycle; - taskEventFilter: (taskEvent: TaskLifecycleEvent) => boolean; - metricsAggregator: ITaskMetricsAggregator; -} - -export function createAggregator({ - key, - taskPollingLifecycle, - config, - resetMetrics$, - taskEventFilter, - metricsAggregator, -}: CreateMetricsAggregatorOpts): AggregatedStatProvider { - // Resets the aggregators either when the reset interval has passed or - // a resetMetrics$ event is received - merge( - interval(config.metrics_reset_interval).pipe(map(() => true)), - resetMetrics$.pipe(map(() => true)) - ).subscribe(() => { - metricsAggregator.reset(); - }); - - const taskEvents$: Observable = taskPollingLifecycle.events.pipe( - filter((taskEvent: TaskLifecycleEvent) => taskEventFilter(taskEvent)), - map((taskEvent: TaskLifecycleEvent) => { - metricsAggregator.processTaskLifecycleEvent(taskEvent); - return metricsAggregator.collect(); - }) - ); - - return combineLatest([taskEvents$.pipe(startWith(metricsAggregator.initialMetric()))]).pipe( - map(([value]: [T]) => { - return { - key, - value, - } as AggregatedStat; - }) - ); -} diff --git a/x-pack/plugins/task_manager/server/metrics/index.ts b/x-pack/plugins/task_manager/server/metrics/index.ts deleted file mode 100644 index 5e2a73f91dd73e..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { Observable } from 'rxjs'; -import { TaskManagerConfig } from '../config'; -import { Metrics, createMetricsAggregators, createMetricsStream } from './metrics_stream'; -import { TaskPollingLifecycle } from '../polling_lifecycle'; -export type { Metrics } from './metrics_stream'; - -export function metricsStream( - config: TaskManagerConfig, - resetMetrics$: Observable, - taskPollingLifecycle?: TaskPollingLifecycle -): Observable { - return createMetricsStream( - createMetricsAggregators({ - config, - resetMetrics$, - taskPollingLifecycle, - }) - ); -} diff --git a/x-pack/plugins/task_manager/server/metrics/metrics_aggregator.mock.ts b/x-pack/plugins/task_manager/server/metrics/metrics_aggregator.mock.ts deleted file mode 100644 index 691ba9d0290d21..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/metrics_aggregator.mock.ts +++ /dev/null @@ -1,21 +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. - */ - -export const createIMetricsAggregatorMock = () => { - return jest.fn().mockImplementation(() => { - return { - initialMetric: jest.fn().mockReturnValue({ count: 0 }), - reset: jest.fn(), - collect: jest.fn(), - processTaskLifecycleEvent: jest.fn(), - }; - }); -}; - -export const metricsAggregatorMock = { - create: createIMetricsAggregatorMock(), -}; diff --git a/x-pack/plugins/task_manager/server/metrics/metrics_stream.test.ts b/x-pack/plugins/task_manager/server/metrics/metrics_stream.test.ts deleted file mode 100644 index 5aec856a7a4f05..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/metrics_stream.test.ts +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { Subject } from 'rxjs'; -import { take, bufferCount } from 'rxjs/operators'; -import { createMetricsStream } from './metrics_stream'; -import { JsonValue } from '@kbn/utility-types'; -import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; - -beforeEach(() => { - jest.resetAllMocks(); -}); - -describe('createMetricsStream', () => { - it('incrementally updates the metrics returned by the endpoint', async () => { - const aggregatedStats$ = new Subject(); - - return new Promise((resolve) => { - createMetricsStream(aggregatedStats$) - .pipe(take(3), bufferCount(3)) - .subscribe(([initialValue, secondValue, thirdValue]) => { - expect(initialValue.metrics).toMatchObject({ - lastUpdate: expect.any(String), - metrics: {}, - }); - - expect(secondValue).toMatchObject({ - lastUpdate: expect.any(String), - metrics: { - newAggregatedStat: { - timestamp: expect.any(String), - value: { - some: { - complex: { - value: 123, - }, - }, - }, - }, - }, - }); - - expect(thirdValue).toMatchObject({ - lastUpdate: expect.any(String), - metrics: { - newAggregatedStat: { - timestamp: expect.any(String), - value: { - some: { - updated: { - value: 456, - }, - }, - }, - }, - }, - }); - }); - - aggregatedStats$.next({ - key: 'newAggregatedStat', - value: { - some: { - complex: { - value: 123, - }, - }, - } as JsonValue, - }); - - aggregatedStats$.next({ - key: 'newAggregatedStat', - value: { - some: { - updated: { - value: 456, - }, - }, - } as JsonValue, - }); - - resolve(); - }); - }); -}); diff --git a/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts b/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts deleted file mode 100644 index 29558308c51963..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { merge, of, Observable } from 'rxjs'; -import { map, scan } from 'rxjs/operators'; -import { set } from '@kbn/safer-lodash-set'; -import { TaskLifecycleEvent, TaskPollingLifecycle } from '../polling_lifecycle'; -import { TaskManagerConfig } from '../config'; -import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; -import { isTaskPollingCycleEvent, isTaskRunEvent } from '../task_events'; -import { TaskClaimMetric, TaskClaimMetricsAggregator } from './task_claim_metrics_aggregator'; -import { createAggregator } from './create_aggregator'; -import { TaskRunMetric, TaskRunMetricsAggregator } from './task_run_metrics_aggregator'; -export interface Metrics { - last_update: string; - metrics: { - task_claim?: Metric; - task_run?: Metric; - }; -} - -export interface Metric { - timestamp: string; - value: T; -} - -interface CreateMetricsAggregatorsOpts { - config: TaskManagerConfig; - resetMetrics$: Observable; - taskPollingLifecycle?: TaskPollingLifecycle; -} -export function createMetricsAggregators({ - config, - resetMetrics$, - taskPollingLifecycle, -}: CreateMetricsAggregatorsOpts): AggregatedStatProvider { - const aggregators: AggregatedStatProvider[] = []; - if (taskPollingLifecycle) { - aggregators.push( - createAggregator({ - key: 'task_claim', - taskPollingLifecycle, - config, - resetMetrics$, - taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskPollingCycleEvent(taskEvent), - metricsAggregator: new TaskClaimMetricsAggregator(), - }), - createAggregator({ - key: 'task_run', - taskPollingLifecycle, - config, - resetMetrics$, - taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent), - metricsAggregator: new TaskRunMetricsAggregator(), - }) - ); - } - return merge(...aggregators); -} - -export function createMetricsStream(provider$: AggregatedStatProvider): Observable { - const initialMetrics = { - last_update: new Date().toISOString(), - metrics: {}, - }; - return merge( - // emit the initial metrics - of(initialMetrics), - // emit updated metrics whenever a provider updates a specific key on the stats - provider$.pipe( - map(({ key, value }) => { - return { - value: { timestamp: new Date().toISOString(), value }, - key, - }; - }), - scan((metrics: Metrics, { key, value }) => { - // incrementally merge stats as they come in - set(metrics.metrics, key, value); - metrics.last_update = new Date().toISOString(); - return metrics; - }, initialMetrics) - ) - ); -} diff --git a/x-pack/plugins/task_manager/server/metrics/success_rate_counter.test.ts b/x-pack/plugins/task_manager/server/metrics/success_rate_counter.test.ts deleted file mode 100644 index eb34f3a34c005f..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/success_rate_counter.test.ts +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { SuccessRateCounter } from './success_rate_counter'; - -describe('SuccessRateCounter', () => { - let successRateCounter: SuccessRateCounter; - beforeEach(() => { - successRateCounter = new SuccessRateCounter(); - }); - - test('should correctly initialize', () => { - expect(successRateCounter.get()).toEqual({ success: 0, total: 0 }); - }); - - test('should correctly return initialMetrics', () => { - expect(successRateCounter.initialMetric()).toEqual({ success: 0, total: 0 }); - }); - - test('should correctly increment counter when success is true', () => { - successRateCounter.increment(true); - successRateCounter.increment(true); - expect(successRateCounter.get()).toEqual({ success: 2, total: 2 }); - }); - - test('should correctly increment counter when success is false', () => { - successRateCounter.increment(false); - successRateCounter.increment(false); - expect(successRateCounter.get()).toEqual({ success: 0, total: 2 }); - }); - - test('should correctly reset counter', () => { - successRateCounter.increment(true); - successRateCounter.increment(true); - successRateCounter.increment(false); - successRateCounter.increment(false); - successRateCounter.increment(true); - successRateCounter.increment(true); - successRateCounter.increment(false); - expect(successRateCounter.get()).toEqual({ success: 4, total: 7 }); - - successRateCounter.reset(); - expect(successRateCounter.get()).toEqual({ success: 0, total: 0 }); - }); -}); diff --git a/x-pack/plugins/task_manager/server/metrics/success_rate_counter.ts b/x-pack/plugins/task_manager/server/metrics/success_rate_counter.ts deleted file mode 100644 index d9c61575a2698b..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/success_rate_counter.ts +++ /dev/null @@ -1,44 +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 { JsonObject } from '@kbn/utility-types'; - -export interface SuccessRate extends JsonObject { - success: number; - total: number; -} - -export class SuccessRateCounter { - private success = 0; - private total = 0; - - public initialMetric(): SuccessRate { - return { - success: 0, - total: 0, - }; - } - - public get(): SuccessRate { - return { - success: this.success, - total: this.total, - }; - } - - public increment(success: boolean) { - if (success) { - this.success++; - } - this.total++; - } - - public reset() { - this.success = 0; - this.total = 0; - } -} diff --git a/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.test.ts deleted file mode 100644 index cfcf4bfdf8d0b6..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.test.ts +++ /dev/null @@ -1,102 +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 { none } from 'fp-ts/lib/Option'; -import { FillPoolResult } from '../lib/fill_pool'; -import { asOk, asErr } from '../lib/result_type'; -import { PollingError, PollingErrorType } from '../polling'; -import { asTaskPollingCycleEvent } from '../task_events'; -import { TaskClaimMetricsAggregator } from './task_claim_metrics_aggregator'; - -export const taskClaimSuccessEvent = asTaskPollingCycleEvent( - asOk({ - result: FillPoolResult.PoolFilled, - stats: { - tasksUpdated: 0, - tasksConflicted: 0, - tasksClaimed: 0, - }, - }), - { - start: 1689698780490, - stop: 1689698780500, - } -); -export const taskClaimFailureEvent = asTaskPollingCycleEvent( - asErr( - new PollingError( - 'Failed to poll for work: Error: failed to work', - PollingErrorType.WorkError, - none - ) - ) -); - -describe('TaskClaimMetricsAggregator', () => { - let taskClaimMetricsAggregator: TaskClaimMetricsAggregator; - beforeEach(() => { - taskClaimMetricsAggregator = new TaskClaimMetricsAggregator(); - }); - - test('should correctly initialize', () => { - expect(taskClaimMetricsAggregator.collect()).toEqual({ - success: 0, - total: 0, - duration: { counts: [], values: [] }, - }); - }); - - test('should correctly return initialMetrics', () => { - expect(taskClaimMetricsAggregator.initialMetric()).toEqual({ - success: 0, - total: 0, - duration: { counts: [], values: [] }, - }); - }); - - test('should correctly process task lifecycle success event', () => { - taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent); - taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent); - expect(taskClaimMetricsAggregator.collect()).toEqual({ - success: 2, - total: 2, - duration: { counts: [2], values: [100] }, - }); - }); - - test('should correctly process task lifecycle failure event', () => { - taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent); - taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent); - expect(taskClaimMetricsAggregator.collect()).toEqual({ - success: 0, - total: 2, - duration: { counts: [], values: [] }, - }); - }); - - test('should correctly reset counter', () => { - taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent); - taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent); - taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent); - taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent); - taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent); - taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimSuccessEvent); - taskClaimMetricsAggregator.processTaskLifecycleEvent(taskClaimFailureEvent); - expect(taskClaimMetricsAggregator.collect()).toEqual({ - success: 4, - total: 7, - duration: { counts: [4], values: [100] }, - }); - - taskClaimMetricsAggregator.reset(); - expect(taskClaimMetricsAggregator.collect()).toEqual({ - success: 0, - total: 0, - duration: { counts: [], values: [] }, - }); - }); -}); diff --git a/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts b/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts deleted file mode 100644 index 75c03105287fa0..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts +++ /dev/null @@ -1,71 +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. - */ - -// @ts-expect-error -// eslint-disable-next-line import/no-extraneous-dependencies -import Histogram from 'native-hdr-histogram'; -import { isOk } from '../lib/result_type'; -import { TaskLifecycleEvent } from '../polling_lifecycle'; -import { TaskRun } from '../task_events'; -import { SuccessRate, SuccessRateCounter } from './success_rate_counter'; -import { ITaskMetricsAggregator } from './types'; - -const HDR_HISTOGRAM_MIN = 1; // 1 millis -const HDR_HISTOGRAM_MAX = 30000; // 30 seconds -const HDR_HISTOGRAM_BUCKET_SIZE = 100; // 100 millis - -export type TaskClaimMetric = SuccessRate & { - duration: { - counts: number[]; - values: number[]; - }; -}; - -export class TaskClaimMetricsAggregator implements ITaskMetricsAggregator { - private claimSuccessRate = new SuccessRateCounter(); - private durationHistogram = new Histogram(HDR_HISTOGRAM_MIN, HDR_HISTOGRAM_MAX); - - public initialMetric(): TaskClaimMetric { - return { - ...this.claimSuccessRate.initialMetric(), - duration: { counts: [], values: [] }, - }; - } - public collect(): TaskClaimMetric { - return { - ...this.claimSuccessRate.get(), - duration: this.serializeHistogram(), - }; - } - - public reset() { - this.claimSuccessRate.reset(); - this.durationHistogram.reset(); - } - - public processTaskLifecycleEvent(taskEvent: TaskLifecycleEvent) { - const success = isOk((taskEvent as TaskRun).event); - this.claimSuccessRate.increment(success); - - if (taskEvent.timing) { - const durationInMs = taskEvent.timing.stop - taskEvent.timing.start; - this.durationHistogram.record(durationInMs); - } - } - - private serializeHistogram() { - const counts: number[] = []; - const values: number[] = []; - - for (const { count, value } of this.durationHistogram.linearcounts(HDR_HISTOGRAM_BUCKET_SIZE)) { - counts.push(count); - values.push(value); - } - - return { counts, values }; - } -} diff --git a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts deleted file mode 100644 index e3654fd9a21d53..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.test.ts +++ /dev/null @@ -1,208 +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 * as uuid from 'uuid'; -import { asOk, asErr } from '../lib/result_type'; -import { TaskStatus } from '../task'; -import { asTaskRunEvent, TaskPersistence } from '../task_events'; -import { TaskRunResult } from '../task_running'; -import { TaskRunMetricsAggregator } from './task_run_metrics_aggregator'; - -export const getTaskRunSuccessEvent = (type: string) => { - const id = uuid.v4(); - return asTaskRunEvent( - id, - asOk({ - task: { - id, - attempts: 0, - status: TaskStatus.Running, - version: '123', - runAt: new Date(), - scheduledAt: new Date(), - startedAt: new Date(), - retryAt: new Date(Date.now() + 5 * 60 * 1000), - state: {}, - taskType: type, - params: {}, - ownerId: null, - }, - persistence: TaskPersistence.Recurring, - result: TaskRunResult.Success, - }), - { - start: 1689698780490, - stop: 1689698780500, - } - ); -}; - -export const getTaskRunFailedEvent = (type: string) => { - const id = uuid.v4(); - return asTaskRunEvent( - id, - asErr({ - error: new Error('task failed to run'), - task: { - id, - attempts: 0, - status: TaskStatus.Running, - version: '123', - runAt: new Date(), - scheduledAt: new Date(), - startedAt: new Date(), - retryAt: new Date(Date.now() + 5 * 60 * 1000), - state: {}, - taskType: type, - params: {}, - ownerId: null, - }, - persistence: TaskPersistence.Recurring, - result: TaskRunResult.Failed, - }) - ); -}; - -describe('TaskRunMetricsAggregator', () => { - let taskRunMetricsAggregator: TaskRunMetricsAggregator; - beforeEach(() => { - taskRunMetricsAggregator = new TaskRunMetricsAggregator(); - }); - - test('should correctly initialize', () => { - expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, total: 0 }, - by_type: {}, - }); - }); - - test('should correctly return initialMetrics', () => { - expect(taskRunMetricsAggregator.initialMetric()).toEqual({ - overall: { success: 0, total: 0 }, - by_type: {}, - }); - }); - - test('should correctly process task run success event', () => { - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); - expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 2, total: 2 }, - by_type: { - telemetry: { success: 2, total: 2 }, - }, - }); - }); - - test('should correctly process task run failure event', () => { - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); - expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, total: 2 }, - by_type: { - telemetry: { success: 0, total: 2 }, - }, - }); - }); - - test('should correctly process different task types', () => { - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); - expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 3, total: 4 }, - by_type: { - report: { success: 2, total: 2 }, - telemetry: { success: 1, total: 2 }, - }, - }); - }); - - test('should correctly group alerting and action task types', () => { - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example')); - taskRunMetricsAggregator.processTaskLifecycleEvent( - getTaskRunSuccessEvent('alerting:.index-threshold') - ); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:webhook')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('alerting:example')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:webhook')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('alerting:example')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:.email')); - taskRunMetricsAggregator.processTaskLifecycleEvent( - getTaskRunSuccessEvent('alerting:.index-threshold') - ); - expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 11, total: 14 }, - by_type: { - actions: { success: 3, total: 3 }, - 'actions:.email': { success: 1, total: 1 }, - 'actions:webhook': { success: 2, total: 2 }, - alerting: { success: 5, total: 7 }, - 'alerting:example': { success: 3, total: 5 }, - 'alerting:.index-threshold': { success: 2, total: 2 }, - report: { success: 2, total: 2 }, - telemetry: { success: 1, total: 2 }, - }, - }); - }); - - test('should correctly reset counter', () => { - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example')); - taskRunMetricsAggregator.processTaskLifecycleEvent( - getTaskRunSuccessEvent('alerting:.index-threshold') - ); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:webhook')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('alerting:example')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:webhook')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('alerting:example')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('alerting:example')); - taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('actions:.email')); - taskRunMetricsAggregator.processTaskLifecycleEvent( - getTaskRunSuccessEvent('alerting:.index-threshold') - ); - expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 11, total: 14 }, - by_type: { - actions: { success: 3, total: 3 }, - 'actions:.email': { success: 1, total: 1 }, - 'actions:webhook': { success: 2, total: 2 }, - alerting: { success: 5, total: 7 }, - 'alerting:example': { success: 3, total: 5 }, - 'alerting:.index-threshold': { success: 2, total: 2 }, - report: { success: 2, total: 2 }, - telemetry: { success: 1, total: 2 }, - }, - }); - - taskRunMetricsAggregator.reset(); - expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, total: 0 }, - by_type: { - actions: { success: 0, total: 0 }, - 'actions:.email': { success: 0, total: 0 }, - 'actions:webhook': { success: 0, total: 0 }, - alerting: { success: 0, total: 0 }, - 'alerting:example': { success: 0, total: 0 }, - 'alerting:.index-threshold': { success: 0, total: 0 }, - report: { success: 0, total: 0 }, - telemetry: { success: 0, total: 0 }, - }, - }); - }); -}); diff --git a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts deleted file mode 100644 index c25d80f112df1d..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts +++ /dev/null @@ -1,85 +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 { JsonObject } from '@kbn/utility-types'; -import { isOk, unwrap } from '../lib/result_type'; -import { TaskLifecycleEvent } from '../polling_lifecycle'; -import { ErroredTask, RanTask, TaskRun } from '../task_events'; -import { SuccessRate, SuccessRateCounter } from './success_rate_counter'; -import { ITaskMetricsAggregator } from './types'; - -const taskTypeGrouping = new Set(['alerting:', 'actions:']); - -export interface TaskRunMetric extends JsonObject { - overall: SuccessRate; - by_type: { - [key: string]: SuccessRate; - }; -} - -export class TaskRunMetricsAggregator implements ITaskMetricsAggregator { - private taskRunSuccessRate = new SuccessRateCounter(); - private taskRunCounter: Map = new Map(); - - public initialMetric(): TaskRunMetric { - return { - overall: this.taskRunSuccessRate.initialMetric(), - by_type: {}, - }; - } - - public collect(): TaskRunMetric { - return { - overall: this.taskRunSuccessRate.get(), - by_type: this.collectTaskTypeEntries(), - }; - } - - public reset() { - this.taskRunSuccessRate.reset(); - for (const taskType of this.taskRunCounter.keys()) { - this.taskRunCounter.get(taskType)!.reset(); - } - } - - public processTaskLifecycleEvent(taskEvent: TaskLifecycleEvent) { - const { task }: RanTask | ErroredTask = unwrap((taskEvent as TaskRun).event); - const taskType = task.taskType; - - const taskTypeSuccessRate: SuccessRateCounter = - this.taskRunCounter.get(taskType) ?? new SuccessRateCounter(); - - const success = isOk((taskEvent as TaskRun).event); - this.taskRunSuccessRate.increment(success); - taskTypeSuccessRate.increment(success); - this.taskRunCounter.set(taskType, taskTypeSuccessRate); - - const taskTypeGroup = this.getTaskTypeGroup(taskType); - if (taskTypeGroup) { - const taskTypeGroupSuccessRate: SuccessRateCounter = - this.taskRunCounter.get(taskTypeGroup) ?? new SuccessRateCounter(); - taskTypeGroupSuccessRate.increment(success); - this.taskRunCounter.set(taskTypeGroup, taskTypeGroupSuccessRate); - } - } - - private collectTaskTypeEntries() { - const collected: Record = {}; - for (const [key, value] of this.taskRunCounter) { - collected[key] = value.get(); - } - return collected; - } - - private getTaskTypeGroup(taskType: string): string | undefined { - for (const group of taskTypeGrouping) { - if (taskType.startsWith(group)) { - return group.replaceAll(':', ''); - } - } - } -} diff --git a/x-pack/plugins/task_manager/server/metrics/types.ts b/x-pack/plugins/task_manager/server/metrics/types.ts deleted file mode 100644 index 7fbee1fe8abdd9..00000000000000 --- a/x-pack/plugins/task_manager/server/metrics/types.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 { TaskLifecycleEvent } from '../polling_lifecycle'; - -export interface ITaskMetricsAggregator { - initialMetric: () => T; - collect: () => T; - reset: () => void; - processTaskLifecycleEvent: (taskEvent: TaskLifecycleEvent) => void; -} diff --git a/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.test.ts index 9507b3ab0e4cd3..cdd67a07ff9e71 100644 --- a/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.test.ts @@ -19,7 +19,7 @@ import { import { asOk } from '../lib/result_type'; import { TaskLifecycleEvent } from '../polling_lifecycle'; import { TaskRunResult } from '../task_running'; -import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; +import { AggregatedStat } from './runtime_statistics_aggregator'; import { taskPollingLifecycleMock } from '../polling_lifecycle.mock'; import { BackgroundTaskUtilizationStat, diff --git a/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.ts index 837f29c83f108b..fd116cbdd71d82 100644 --- a/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/background_task_utilization_statistics.ts @@ -20,7 +20,7 @@ import { TaskTiming, } from '../task_events'; import { MonitoredStat } from './monitoring_stats_stream'; -import { AggregatedStat, AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; +import { AggregatedStat, AggregatedStatProvider } from './runtime_statistics_aggregator'; import { createRunningAveragedStat } from './task_run_calcultors'; import { DEFAULT_WORKER_UTILIZATION_RUNNING_AVERAGE_WINDOW } from '../config'; diff --git a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts index 689c9c882bee32..98493ae89b6838 100644 --- a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts @@ -52,7 +52,6 @@ describe('Configuration Statistics Aggregator', () => { delay: 3000, max_attempts: 20, }, - metrics_reset_interval: 3000, }; const managedConfig = { diff --git a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.ts index 2212affcc8db3a..6414c9e80ce06a 100644 --- a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.ts @@ -8,7 +8,7 @@ import { combineLatest, of } from 'rxjs'; import { pick, merge } from 'lodash'; import { map, startWith } from 'rxjs/operators'; -import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; +import { AggregatedStatProvider } from './runtime_statistics_aggregator'; import { TaskManagerConfig } from '../config'; import { ManagedConfiguration } from '../lib/create_managed_configuration'; diff --git a/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.test.ts index 8d4ef4fab2ebad..8a2305c3076a50 100644 --- a/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.test.ts @@ -26,7 +26,7 @@ import { SummarizedEphemeralTaskStat, EphemeralTaskStat, } from './ephemeral_task_statistics'; -import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; +import { AggregatedStat } from './runtime_statistics_aggregator'; import { ephemeralTaskLifecycleMock } from '../ephemeral_task_lifecycle.mock'; import { times, takeRight, take as takeLeft } from 'lodash'; diff --git a/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.ts index 8a6ade503b041d..52aa2b1eead251 100644 --- a/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/ephemeral_task_statistics.ts @@ -9,7 +9,7 @@ import { map, filter, startWith, buffer, share } from 'rxjs/operators'; import { JsonObject } from '@kbn/utility-types'; import { combineLatest, Observable, zip } from 'rxjs'; import { isOk, Ok } from '../lib/result_type'; -import { AggregatedStat, AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; +import { AggregatedStat, AggregatedStatProvider } from './runtime_statistics_aggregator'; import { EphemeralTaskLifecycle } from '../ephemeral_task_lifecycle'; import { TaskLifecycleEvent } from '../polling_lifecycle'; import { isTaskRunEvent, isTaskManagerStatEvent } from '../task_events'; diff --git a/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.test.ts b/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.test.ts index daf3f2baf085df..995db14fa09eaa 100644 --- a/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.test.ts @@ -8,9 +8,8 @@ import { TaskManagerConfig } from '../config'; import { of, Subject } from 'rxjs'; import { take, bufferCount } from 'rxjs/operators'; -import { createMonitoringStatsStream } from './monitoring_stats_stream'; +import { createMonitoringStatsStream, AggregatedStat } from './monitoring_stats_stream'; import { JsonValue } from '@kbn/utility-types'; -import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; beforeEach(() => { jest.resetAllMocks(); @@ -57,7 +56,6 @@ describe('createMonitoringStatsStream', () => { delay: 3000, max_attempts: 20, }, - metrics_reset_interval: 3000, }; it('returns the initial config used to configure Task Manager', async () => { diff --git a/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.ts b/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.ts index 62505a34d7f89a..e1ff38d1c96078 100644 --- a/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.ts +++ b/x-pack/plugins/task_manager/server/monitoring/monitoring_stats_stream.ts @@ -37,11 +37,13 @@ import { import { ConfigStat, createConfigurationAggregator } from './configuration_statistics'; import { TaskManagerConfig } from '../config'; +import { AggregatedStatProvider } from './runtime_statistics_aggregator'; import { ManagedConfiguration } from '../lib/create_managed_configuration'; import { EphemeralTaskLifecycle } from '../ephemeral_task_lifecycle'; import { CapacityEstimationStat, withCapacityEstimate } from './capacity_estimation'; import { AdHocTaskCounter } from '../lib/adhoc_task_counter'; -import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; + +export type { AggregatedStatProvider, AggregatedStat } from './runtime_statistics_aggregator'; export interface MonitoringStats { last_update: string; diff --git a/x-pack/plugins/task_manager/server/lib/runtime_statistics_aggregator.ts b/x-pack/plugins/task_manager/server/monitoring/runtime_statistics_aggregator.ts similarity index 100% rename from x-pack/plugins/task_manager/server/lib/runtime_statistics_aggregator.ts rename to x-pack/plugins/task_manager/server/monitoring/runtime_statistics_aggregator.ts diff --git a/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.test.ts index 91e81013b726f7..4d69b23b699b79 100644 --- a/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.test.ts @@ -30,7 +30,7 @@ import { TaskRunStat, SummarizedTaskRunStat, } from './task_run_statistics'; -import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; +import { AggregatedStat } from './runtime_statistics_aggregator'; import { FillPoolResult } from '../lib/fill_pool'; import { taskPollingLifecycleMock } from '../polling_lifecycle.mock'; import { configSchema } from '../config'; diff --git a/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.ts index 7b7db8cb25eed5..0c6063af19286c 100644 --- a/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/task_run_statistics.ts @@ -10,7 +10,7 @@ import { filter, startWith, map } from 'rxjs/operators'; import { JsonObject, JsonValue } from '@kbn/utility-types'; import { isNumber, mapValues } from 'lodash'; import { Logger } from '@kbn/core/server'; -import { AggregatedStatProvider, AggregatedStat } from '../lib/runtime_statistics_aggregator'; +import { AggregatedStatProvider, AggregatedStat } from './runtime_statistics_aggregator'; import { TaskLifecycleEvent } from '../polling_lifecycle'; import { isTaskRunEvent, diff --git a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts index b4d5db14a12e4d..bacd05dcb6a06a 100644 --- a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts @@ -12,7 +12,7 @@ import { JsonObject } from '@kbn/utility-types'; import { keyBy, mapValues } from 'lodash'; 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 { AggregatedStatProvider } from './runtime_statistics_aggregator'; import { parseIntervalAsSecond, asInterval, parseIntervalAsMillisecond } from '../lib/intervals'; import { HealthStatus } from './monitoring_stats_stream'; import { TaskStore } from '../task_store'; diff --git a/x-pack/plugins/task_manager/server/plugin.test.ts b/x-pack/plugins/task_manager/server/plugin.test.ts index 1e7215d6d7a1b1..4c0c96c7f76a65 100644 --- a/x-pack/plugins/task_manager/server/plugin.test.ts +++ b/x-pack/plugins/task_manager/server/plugin.test.ts @@ -77,7 +77,6 @@ const pluginInitializerContextParams = { delay: 3000, max_attempts: 20, }, - metrics_reset_interval: 3000, }; describe('TaskManagerPlugin', () => { diff --git a/x-pack/plugins/task_manager/server/plugin.ts b/x-pack/plugins/task_manager/server/plugin.ts index 3b8ab4a54be1fb..e65574cef779a8 100644 --- a/x-pack/plugins/task_manager/server/plugin.ts +++ b/x-pack/plugins/task_manager/server/plugin.ts @@ -27,7 +27,7 @@ import { TaskDefinitionRegistry, TaskTypeDictionary, REMOVED_TYPES } from './tas import { AggregationOpts, FetchResult, SearchOpts, TaskStore } from './task_store'; import { createManagedConfiguration } from './lib/create_managed_configuration'; import { TaskScheduling } from './task_scheduling'; -import { backgroundTaskUtilizationRoute, healthRoute, metricsRoute } from './routes'; +import { backgroundTaskUtilizationRoute, healthRoute } from './routes'; import { createMonitoringStats, MonitoringStats } from './monitoring'; import { EphemeralTaskLifecycle } from './ephemeral_task_lifecycle'; import { EphemeralTask, ConcreteTaskInstance } from './task'; @@ -35,7 +35,6 @@ import { registerTaskManagerUsageCollector } from './usage'; import { TASK_MANAGER_INDEX } from './constants'; import { AdHocTaskCounter } from './lib/adhoc_task_counter'; import { setupIntervalLogging } from './lib/log_health_metrics'; -import { metricsStream, Metrics } from './metrics'; export interface TaskManagerSetupContract { /** @@ -83,8 +82,6 @@ export class TaskManagerPlugin private middleware: Middleware = createInitialMiddleware(); private elasticsearchAndSOAvailability$?: Observable; private monitoringStats$ = new Subject(); - private metrics$ = new Subject(); - private resetMetrics$ = new Subject(); private shouldRunBackgroundTasks: boolean; private readonly kibanaVersion: PluginInitializerContext['env']['packageInfo']['version']; private adHocTaskCounter: AdHocTaskCounter; @@ -158,12 +155,6 @@ export class TaskManagerPlugin getClusterClient: () => startServicesPromise.then(({ elasticsearch }) => elasticsearch.client), }); - metricsRoute({ - router, - metrics$: this.metrics$, - resetMetrics$: this.resetMetrics$, - taskManagerId: this.taskManagerId, - }); core.status.derivedStatus$.subscribe((status) => this.logger.debug(`status core.status.derivedStatus now set to ${status.level}`) @@ -285,10 +276,6 @@ export class TaskManagerPlugin this.ephemeralTaskLifecycle ).subscribe((stat) => this.monitoringStats$.next(stat)); - metricsStream(this.config!, this.resetMetrics$, this.taskPollingLifecycle).subscribe((metric) => - this.metrics$.next(metric) - ); - const taskScheduling = new TaskScheduling({ logger: this.logger, taskStore, diff --git a/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts b/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts index 79b153f42a88d6..62e6be589b4cfc 100644 --- a/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts +++ b/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts @@ -82,7 +82,6 @@ describe('TaskPollingLifecycle', () => { delay: 3000, max_attempts: 20, }, - metrics_reset_interval: 3000, }, taskStore: mockTaskStore, logger: taskManagerLogger, diff --git a/x-pack/plugins/task_manager/server/routes/index.ts b/x-pack/plugins/task_manager/server/routes/index.ts index 372996f7cea3df..f3ba539323f8e9 100644 --- a/x-pack/plugins/task_manager/server/routes/index.ts +++ b/x-pack/plugins/task_manager/server/routes/index.ts @@ -7,4 +7,3 @@ export { healthRoute } from './health'; export { backgroundTaskUtilizationRoute } from './background_task_utilization'; -export { metricsRoute } from './metrics'; diff --git a/x-pack/plugins/task_manager/server/routes/metrics.test.ts b/x-pack/plugins/task_manager/server/routes/metrics.test.ts deleted file mode 100644 index a9703aa7548dd1..00000000000000 --- a/x-pack/plugins/task_manager/server/routes/metrics.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { of, Subject } from 'rxjs'; -import { v4 as uuidv4 } from 'uuid'; -import { httpServiceMock } from '@kbn/core/server/mocks'; -import { metricsRoute } from './metrics'; -import { mockHandlerArguments } from './_mock_handler_arguments'; - -describe('metricsRoute', () => { - beforeEach(() => { - jest.resetAllMocks(); - }); - - it('registers route', async () => { - const router = httpServiceMock.createRouter(); - metricsRoute({ - router, - metrics$: of(), - resetMetrics$: new Subject(), - taskManagerId: uuidv4(), - }); - - const [config] = router.get.mock.calls[0]; - - expect(config.path).toMatchInlineSnapshot(`"/api/task_manager/metrics"`); - }); - - it('emits resetMetric$ event when route is accessed and reset query param is true', async () => { - let resetCalledTimes = 0; - const resetMetrics$ = new Subject(); - - resetMetrics$.subscribe(() => { - resetCalledTimes++; - }); - const router = httpServiceMock.createRouter(); - metricsRoute({ - router, - metrics$: of(), - resetMetrics$, - taskManagerId: uuidv4(), - }); - - const [config, handler] = router.get.mock.calls[0]; - const [context, req, res] = mockHandlerArguments({}, { query: { reset: true } }, ['ok']); - - expect(config.path).toMatchInlineSnapshot(`"/api/task_manager/metrics"`); - - await handler(context, req, res); - - expect(resetCalledTimes).toEqual(1); - }); - - it('does not emit resetMetric$ event when route is accessed and reset query param is false', async () => { - let resetCalledTimes = 0; - const resetMetrics$ = new Subject(); - - resetMetrics$.subscribe(() => { - resetCalledTimes++; - }); - const router = httpServiceMock.createRouter(); - metricsRoute({ - router, - metrics$: of(), - resetMetrics$, - taskManagerId: uuidv4(), - }); - - const [config, handler] = router.get.mock.calls[0]; - const [context, req, res] = mockHandlerArguments({}, { query: { reset: false } }, ['ok']); - - expect(config.path).toMatchInlineSnapshot(`"/api/task_manager/metrics"`); - - await handler(context, req, res); - - expect(resetCalledTimes).toEqual(0); - }); -}); diff --git a/x-pack/plugins/task_manager/server/routes/metrics.ts b/x-pack/plugins/task_manager/server/routes/metrics.ts deleted file mode 100644 index f9dcf447fa101b..00000000000000 --- a/x-pack/plugins/task_manager/server/routes/metrics.ts +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { - IRouter, - RequestHandlerContext, - KibanaRequest, - IKibanaResponse, - KibanaResponseFactory, -} from '@kbn/core/server'; -import { schema, TypeOf } from '@kbn/config-schema'; -import { Observable, Subject } from 'rxjs'; -import { Metrics } from '../metrics'; - -export interface NodeMetrics { - process_uuid: string; - timestamp: string; - last_update: string; - metrics: Metrics['metrics'] | null; -} - -export interface MetricsRouteParams { - router: IRouter; - metrics$: Observable; - resetMetrics$: Subject; - taskManagerId: string; -} - -const QuerySchema = schema.object({ - reset: schema.boolean({ defaultValue: true }), -}); - -export function metricsRoute(params: MetricsRouteParams) { - const { router, metrics$, resetMetrics$, taskManagerId } = params; - - let lastMetrics: NodeMetrics | null = null; - - metrics$.subscribe((metrics) => { - lastMetrics = { process_uuid: taskManagerId, timestamp: new Date().toISOString(), ...metrics }; - }); - - router.get( - { - path: `/api/task_manager/metrics`, - // Uncomment when we determine that we can restrict API usage to Global admins based on telemetry - // options: { tags: ['access:taskManager'] }, - validate: { - query: QuerySchema, - }, - }, - async function ( - _: RequestHandlerContext, - req: KibanaRequest, unknown>, - res: KibanaResponseFactory - ): Promise { - if (req.query.reset) { - resetMetrics$.next(true); - } - - return res.ok({ - body: lastMetrics - ? lastMetrics - : { process_uuid: taskManagerId, timestamp: new Date().toISOString(), metrics: {} }, - }); - } - ); -} diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts index 7e897840f72c7b..97eeb17f0cd4e0 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts @@ -1298,45 +1298,6 @@ describe('TaskManagerRunner', () => { ); }); - test('emits TaskEvent when a recurring task returns a success result with hasError=true', async () => { - const id = _.random(1, 20).toString(); - const runAt = minutesFromNow(_.random(5)); - const onTaskEvent = jest.fn(); - const { runner, instance } = await readyToRunStageSetup({ - onTaskEvent, - instance: { - id, - schedule: { interval: '1m' }, - }, - definitions: { - bar: { - title: 'Bar!', - createTaskRunner: () => ({ - async run() { - return { runAt, state: {}, hasError: true }; - }, - }), - }, - }, - }); - - await runner.run(); - - expect(onTaskEvent).toHaveBeenCalledWith( - withAnyTiming( - asTaskRunEvent( - id, - asErr({ - task: instance, - persistence: TaskPersistence.Recurring, - result: TaskRunResult.Success, - error: new Error(`Alerting task failed to run.`), - }) - ) - ) - ); - }); - test('emits TaskEvent when a task run throws an error', async () => { const id = _.random(1, 20).toString(); const error = new Error('Dangit!'); diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.ts index e8ec5cb0f2d917..8ad020684e2696 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.ts @@ -47,7 +47,6 @@ import { FailedRunResult, FailedTaskResult, isFailedRunResult, - RunContext, SuccessfulRunResult, TaskDefinition, TaskStatus, @@ -322,9 +321,9 @@ export class TaskManagerRunner implements TaskRunner { let taskParamsValidation; if (this.requeueInvalidTasksConfig.enabled) { - taskParamsValidation = this.validateTaskParams(modifiedContext); + taskParamsValidation = this.validateTaskParams(); if (!taskParamsValidation.error) { - taskParamsValidation = await this.validateIndirectTaskParams(modifiedContext); + taskParamsValidation = await this.validateIndirectTaskParams(); } } @@ -360,9 +359,9 @@ export class TaskManagerRunner implements TaskRunner { } } - private validateTaskParams({ taskInstance }: RunContext) { + private validateTaskParams() { let error; - const { state, taskType, params, id, numSkippedRuns = 0 } = taskInstance; + const { state, taskType, params, id, numSkippedRuns = 0 } = this.instance.task; const { max_attempts: maxAttempts } = this.requeueInvalidTasksConfig; try { @@ -384,9 +383,9 @@ export class TaskManagerRunner implements TaskRunner { return { ...(error ? { error } : {}), state }; } - private async validateIndirectTaskParams({ taskInstance }: RunContext) { + private async validateIndirectTaskParams() { let error; - const { state, taskType, id, numSkippedRuns = 0 } = taskInstance; + const { state, taskType, id, numSkippedRuns = 0 } = this.instance.task; const { max_attempts: maxAttempts } = this.requeueInvalidTasksConfig; const indirectParamsSchema = this.definition.indirectParamsSchema; @@ -736,30 +735,23 @@ export class TaskManagerRunner implements TaskRunner { await eitherAsync( result, - async ({ runAt, schedule, hasError }: SuccessfulRunResult) => { - const processedResult = { - task, - persistence: - schedule || task.schedule ? TaskPersistence.Recurring : TaskPersistence.NonRecurring, - result: await (runAt || schedule || task.schedule - ? this.processResultForRecurringTask(result) - : this.processResultWhenDone()), - }; - - // Alerting task runner returns SuccessfulRunResult with hasError=true - // when the alerting task fails, so we check for this condition in order - // to emit the correct task run event for metrics collection - const taskRunEvent = hasError - ? asTaskRunEvent( - this.id, - asErr({ - ...processedResult, - error: new Error(`Alerting task failed to run.`), - }), - taskTiming - ) - : asTaskRunEvent(this.id, asOk(processedResult), taskTiming); - this.onTaskEvent(taskRunEvent); + async ({ runAt, schedule }: SuccessfulRunResult) => { + this.onTaskEvent( + asTaskRunEvent( + this.id, + asOk({ + task, + persistence: + schedule || task.schedule + ? TaskPersistence.Recurring + : TaskPersistence.NonRecurring, + result: await (runAt || schedule || task.schedule + ? this.processResultForRecurringTask(result) + : this.processResultWhenDone()), + }), + taskTiming + ) + ); }, async ({ error }: FailedRunResult) => { this.onTaskEvent( diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts index 420dfe795f322f..af17d1b76ed993 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/index.ts @@ -10,7 +10,6 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('task_manager', function taskManagerSuite() { loadTestFile(require.resolve('./background_task_utilization_route')); - loadTestFile(require.resolve('./metrics_route')); loadTestFile(require.resolve('./health_route')); loadTestFile(require.resolve('./task_management')); loadTestFile(require.resolve('./task_management_scheduled_at')); diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts deleted file mode 100644 index 4da679b6839aca..00000000000000 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts +++ /dev/null @@ -1,227 +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 expect from '@kbn/expect'; -import url from 'url'; -import supertest from 'supertest'; -import { NodeMetrics } from '@kbn/task-manager-plugin/server/routes/metrics'; -import { FtrProviderContext } from '../../ftr_provider_context'; - -export default function ({ getService }: FtrProviderContext) { - const config = getService('config'); - const retry = getService('retry'); - const request = supertest(url.format(config.get('servers.kibana'))); - - const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); - - function getMetricsRequest(reset: boolean = false) { - return request - .get(`/api/task_manager/metrics${reset ? '' : '?reset=false'}`) - .set('kbn-xsrf', 'foo') - .expect(200) - .then((response) => response.body); - } - - function getMetrics( - reset: boolean = false, - callback: (metrics: NodeMetrics) => boolean - ): Promise { - return retry.try(async () => { - const metrics = await getMetricsRequest(reset); - - if (metrics.metrics && callback(metrics)) { - return metrics; - } - - await delay(500); - throw new Error('Expected metrics not received'); - }); - } - - describe('task manager metrics', () => { - describe('task claim', () => { - it('should increment task claim success/total counters', async () => { - // counters are reset every 30 seconds, so wait until the start of a - // fresh counter cycle to make sure values are incrementing - const initialMetrics = ( - await getMetrics(false, (metrics) => metrics?.metrics?.task_claim?.value.total === 1) - ).metrics; - expect(initialMetrics).not.to.be(null); - expect(initialMetrics?.task_claim).not.to.be(null); - expect(initialMetrics?.task_claim?.value).not.to.be(null); - - let previousTaskClaimSuccess = initialMetrics?.task_claim?.value.total!; - let previousTaskClaimTotal = initialMetrics?.task_claim?.value.success!; - let previousTaskClaimTimestamp: string = initialMetrics?.task_claim?.timestamp!; - - for (let i = 0; i < 5; ++i) { - const metrics = ( - await getMetrics( - false, - (m: NodeMetrics) => m.metrics?.task_claim?.timestamp !== previousTaskClaimTimestamp - ) - ).metrics; - expect(metrics).not.to.be(null); - expect(metrics?.task_claim).not.to.be(null); - expect(metrics?.task_claim?.value).not.to.be(null); - - expect(metrics?.task_claim?.value.success).to.be.greaterThan(previousTaskClaimSuccess); - expect(metrics?.task_claim?.value.total).to.be.greaterThan(previousTaskClaimTotal); - - previousTaskClaimTimestamp = metrics?.task_claim?.timestamp!; - previousTaskClaimSuccess = metrics?.task_claim?.value.success!; - previousTaskClaimTotal = metrics?.task_claim?.value.total!; - - // check that duration histogram exists - expect(metrics?.task_claim?.value.duration).not.to.be(null); - expect(Array.isArray(metrics?.task_claim?.value.duration.counts)).to.be(true); - expect(Array.isArray(metrics?.task_claim?.value.duration.values)).to.be(true); - } - }); - - it('should reset task claim success/total counters at an interval', async () => { - const initialCounterValue = 7; - const initialMetrics = ( - await getMetrics( - false, - (metrics) => metrics?.metrics?.task_claim?.value.total === initialCounterValue - ) - ).metrics; - expect(initialMetrics).not.to.be(null); - expect(initialMetrics?.task_claim).not.to.be(null); - expect(initialMetrics?.task_claim?.value).not.to.be(null); - - // retry until counter value resets - const resetMetrics = ( - await getMetrics(false, (m: NodeMetrics) => m?.metrics?.task_claim?.value.total === 1) - ).metrics; - expect(resetMetrics).not.to.be(null); - expect(resetMetrics?.task_claim).not.to.be(null); - expect(resetMetrics?.task_claim?.value).not.to.be(null); - }); - - it('should reset task claim success/total counters on request', async () => { - const initialCounterValue = 1; - const initialMetrics = ( - await getMetrics( - false, - (metrics) => metrics?.metrics?.task_claim?.value.total === initialCounterValue - ) - ).metrics; - expect(initialMetrics).not.to.be(null); - expect(initialMetrics?.task_claim).not.to.be(null); - expect(initialMetrics?.task_claim?.value).not.to.be(null); - - let previousTaskClaimTimestamp: string = initialMetrics?.task_claim?.timestamp!; - - for (let i = 0; i < 5; ++i) { - const metrics = ( - await getMetrics( - true, - (m: NodeMetrics) => m.metrics?.task_claim?.timestamp !== previousTaskClaimTimestamp - ) - ).metrics; - expect(metrics).not.to.be(null); - expect(metrics?.task_claim).not.to.be(null); - expect(metrics?.task_claim?.value).not.to.be(null); - - expect(metrics?.task_claim?.value.success).to.equal(1); - expect(metrics?.task_claim?.value.total).to.equal(1); - - previousTaskClaimTimestamp = metrics?.task_claim?.timestamp!; - - // check that duration histogram exists - expect(metrics?.task_claim?.value.duration).not.to.be(null); - expect(Array.isArray(metrics?.task_claim?.value.duration.counts)).to.be(true); - expect(Array.isArray(metrics?.task_claim?.value.duration.values)).to.be(true); - } - }); - }); - - describe('task run test', () => { - let ruleId: string | null = null; - before(async () => { - // create a rule that fires actions - const rule = await request - .post(`/api/alerting/rule`) - .set('kbn-xsrf', 'foo') - .send({ - enabled: true, - name: 'test rule', - tags: [], - rule_type_id: '.es-query', - consumer: 'alerts', - // set schedule long so we can control when it runs - schedule: { interval: '1d' }, - actions: [], - params: { - aggType: 'count', - esQuery: '{\n "query":{\n "match_all" : {}\n }\n}', - excludeHitsFromPreviousRun: false, - groupBy: 'all', - index: ['.kibana-event-log*'], - searchType: 'esQuery', - size: 100, - termSize: 5, - threshold: [0], - thresholdComparator: '>', - timeField: '@timestamp', - timeWindowSize: 5, - timeWindowUnit: 'm', - }, - }) - .expect(200) - .then((response) => response.body); - - ruleId = rule.id; - }); - - after(async () => { - // delete rule - await request.delete(`/api/alerting/rule/${ruleId}`).set('kbn-xsrf', 'foo').expect(204); - }); - - it('should increment task run success/total counters', async () => { - const initialMetrics = ( - await getMetrics( - false, - (metrics) => - metrics?.metrics?.task_run?.value.by_type.alerting?.total === 1 && - metrics?.metrics?.task_run?.value.by_type.alerting?.success === 1 - ) - ).metrics; - expect(initialMetrics).not.to.be(null); - expect(initialMetrics?.task_claim).not.to.be(null); - expect(initialMetrics?.task_claim?.value).not.to.be(null); - - for (let i = 0; i < 1; ++i) { - // run the rule and expect counters to increment - await request - .post('/api/sample_tasks/run_soon') - .set('kbn-xsrf', 'xxx') - .send({ task: { id: ruleId } }) - .expect(200); - - await getMetrics( - false, - (metrics) => - metrics?.metrics?.task_run?.value.by_type.alerting?.total === i + 2 && - metrics?.metrics?.task_run?.value.by_type.alerting?.success === i + 2 - ); - } - - // counter should reset on its own - await getMetrics( - false, - (metrics) => - metrics?.metrics?.task_run?.value.by_type.alerting?.total === 0 && - metrics?.metrics?.task_run?.value.by_type.alerting?.success === 0 - ); - }); - }); - }); -} From 1ed94dae775ede95131da2e6aa56e37abaeaed0b Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Thu, 10 Aug 2023 13:24:37 -0400 Subject: [PATCH 42/45] [Response Ops][Alerting] Revert `ignore_malformed` changes (#163610) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverting https://github.com/elastic/kibana/pull/163414 and https://github.com/elastic/kibana/pull/163487 ## Summary @pmuellr uncovered a bug in ES with `ignore_malformed` and datastreams while working on https://github.com/elastic/kibana/issues/154266 > Found what I hope is an ES bug yesterday w/data streams (DS). It doesn’t like ignore_malformed on the @timestamp field :slightly_smiling_face:. I think this is a bug since [the doc says (https://www.elastic.co/guide/en/elasticsearch/reference/current/ignore-malformed.html#ignore-malformed-setting) Mapping types that don’t support the setting will ignore it if set on the index level. I think it’s understandable - the @timestamp field is a key field for DS (can be overridden) - so you’d not be surprised it’s treated specially. But … why not just ignore it in that case, like the other mapping types that are ignored. I tried overriding ignore_malformed for just that field, and it complained that I couldn’t use that option on that field! hahahahah So, we’d be left having to add ignore_malformed to every mapped field in our mappings, except for @timestamp. For the time being, I’ve removed all the ignore_malformed stuff in my AaD DS PR, when using DS, but left it when using alias/index. Unless someone knows more about this special ignored_malformed / @timestamp field / data-stream relationship, I’ll boil down a simple test case and open an issue for ES. In order to avoid having even more divergent code between serverless & serverful, we will revert this change until we can confirm a bug with ES and hopefully get a fix in. --- .../server/alerts_service/alerts_service.test.ts | 2 -- .../lib/create_or_update_index_template.test.ts | 1 - .../lib/create_or_update_index_template.ts | 1 - .../group4/alerts_as_data/install_resources.ts | 2 -- .../rule_execution_logic/non_ecs_fields.ts | 13 +++++++------ 5 files changed, 7 insertions(+), 12 deletions(-) diff --git a/x-pack/plugins/alerting/server/alerts_service/alerts_service.test.ts b/x-pack/plugins/alerting/server/alerts_service/alerts_service.test.ts index 5c4acce28b108a..e3942b26ee6fa7 100644 --- a/x-pack/plugins/alerting/server/alerts_service/alerts_service.test.ts +++ b/x-pack/plugins/alerting/server/alerts_service/alerts_service.test.ts @@ -114,7 +114,6 @@ const getIndexTemplatePutBody = (opts?: GetIndexTemplatePutBodyOpts) => { name: '.alerts-ilm-policy', rollover_alias: `.alerts-${context ? context : 'test'}.alerts-${namespace}`, }, - 'index.mapping.ignore_malformed': true, 'index.mapping.total_fields.limit': 2500, }, mappings: { @@ -641,7 +640,6 @@ describe('Alerts Service', () => { name: '.alerts-ilm-policy', rollover_alias: `.alerts-empty.alerts-default`, }, - 'index.mapping.ignore_malformed': true, 'index.mapping.total_fields.limit': 2500, }, mappings: { diff --git a/x-pack/plugins/alerting/server/alerts_service/lib/create_or_update_index_template.test.ts b/x-pack/plugins/alerting/server/alerts_service/lib/create_or_update_index_template.test.ts index 38c2207e5f4109..d4ce203a0d0e34 100644 --- a/x-pack/plugins/alerting/server/alerts_service/lib/create_or_update_index_template.test.ts +++ b/x-pack/plugins/alerting/server/alerts_service/lib/create_or_update_index_template.test.ts @@ -42,7 +42,6 @@ const IndexTemplate = (namespace: string = 'default') => ({ name: 'test-ilm-policy', rollover_alias: `.alerts-test.alerts-${namespace}`, }, - 'index.mapping.ignore_malformed': true, 'index.mapping.total_fields.limit': 2500, }, }, diff --git a/x-pack/plugins/alerting/server/alerts_service/lib/create_or_update_index_template.ts b/x-pack/plugins/alerting/server/alerts_service/lib/create_or_update_index_template.ts index 388fe6344a51f9..a17fad2d875ed0 100644 --- a/x-pack/plugins/alerting/server/alerts_service/lib/create_or_update_index_template.ts +++ b/x-pack/plugins/alerting/server/alerts_service/lib/create_or_update_index_template.ts @@ -54,7 +54,6 @@ export const getIndexTemplate = ({ rollover_alias: indexPatterns.alias, }, 'index.mapping.total_fields.limit': totalFieldsLimit, - 'index.mapping.ignore_malformed': true, }, mappings: { dynamic: false, diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/install_resources.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/install_resources.ts index e80a8f94d93b61..b6c86b49c7fbaa 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/install_resources.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/install_resources.ts @@ -163,7 +163,6 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F rollover_alias: '.alerts-test.patternfiring.alerts-default', }, mapping: { - ignore_malformed: 'true', total_fields: { limit: '2500', }, @@ -197,7 +196,6 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F }); expect(contextIndex[indexName].settings?.index?.mapping).to.eql({ - ignore_malformed: 'true', total_fields: { limit: '2500', }, diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/non_ecs_fields.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/non_ecs_fields.ts index 2f2115333d5c20..32ae758b208079 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/non_ecs_fields.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/non_ecs_fields.ts @@ -56,6 +56,7 @@ export default ({ getService }: FtrProviderContext) => { }; }; + // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/154277 describe('Non ECS fields in alert document source', () => { before(async () => { await esArchiver.load( @@ -258,8 +259,7 @@ export default ({ getService }: FtrProviderContext) => { // we don't validate it because geo_point is very complex type with many various representations: array, different object, string with few valid patterns // more on geo_point type https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html - // since .alerts-* indices allow _ignore_malformed option, alert will be created for this document - it('should not fail creating alert when ECS field mapping is geo_point', async () => { + it('should fail creating alert when ECS field mapping is geo_point', async () => { const document = { client: { geo: { @@ -269,11 +269,12 @@ export default ({ getService }: FtrProviderContext) => { }, }; - const { errors, alertSource } = await indexAndCreatePreviewAlert(document); - - expect(errors).toEqual([]); + const { errors } = await indexAndCreatePreviewAlert(document); - expect(alertSource).toHaveProperty('client.geo.location', 'test test'); + expect(errors[0]).toContain('Bulk Indexing of signals failed'); + expect(errors[0]).toContain( + 'failed to parse field [client.geo.location] of type [geo_point]' + ); }); it('should strip invalid boolean values and left valid ones', async () => { From e5a591c36982ceb5bfb77bbf8c821edd28b7af1c Mon Sep 17 00:00:00 2001 From: Konrad Szwarc Date: Thu, 10 Aug 2023 19:34:09 +0200 Subject: [PATCH 43/45] [Fleet] Kafka preconfiguration (#163601) This PR addresses comment https://github.com/elastic/kibana/pull/162875#issuecomment-1671463939 I believe schema is already covered here - https://github.com/elastic/kibana/pull/159110/files#diff-2a6e1a6445463ee01c508ec3b6a7441635045a203dc94e58784fcba721747914R85-R89 --------- Co-authored-by: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> --- .../services/preconfiguration/outputs.test.ts | 69 +++++++++++++++++++ .../services/preconfiguration/outputs.ts | 31 ++++++++- 2 files changed, 99 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/server/services/preconfiguration/outputs.test.ts b/x-pack/plugins/fleet/server/services/preconfiguration/outputs.test.ts index 8f62d3d7e22807..fda7789356956b 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration/outputs.test.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration/outputs.test.ts @@ -64,6 +64,16 @@ describe('output preconfiguration', () => { hosts: ['http://es.co:80'], is_preconfigured: true, }, + { + id: 'existing-kafka-output-1', + is_default: false, + is_default_monitoring: false, + name: 'Kafka Output 1', + // @ts-ignore + type: 'kafka', + hosts: ['kafka.co:80'], + is_preconfigured: true, + }, ]; }); }); @@ -112,6 +122,25 @@ describe('output preconfiguration', () => { expect(spyAgentPolicyServicBumpAllAgentPoliciesForOutput).not.toBeCalled(); }); + it('should create preconfigured kafka output that does not exists', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + await createOrUpdatePreconfiguredOutputs(soClient, esClient, [ + { + id: 'non-existing-kafka-output-1', + name: 'Output 1', + type: 'kafka', + is_default: false, + is_default_monitoring: false, + hosts: ['test.fr:2000'], + }, + ]); + + expect(mockedOutputService.create).toBeCalled(); + expect(mockedOutputService.update).not.toBeCalled(); + expect(spyAgentPolicyServicBumpAllAgentPoliciesForOutput).not.toBeCalled(); + }); + it('should create a preconfigured output with ca_trusted_fingerprint that does not exists', async () => { const soClient = savedObjectsClientMock.create(); const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; @@ -238,6 +267,26 @@ describe('output preconfiguration', () => { expect(spyAgentPolicyServicBumpAllAgentPoliciesForOutput).toBeCalled(); }); + it('should update output if preconfigured kafka output exists and changed', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + soClient.find.mockResolvedValue({ saved_objects: [], page: 0, per_page: 0, total: 0 }); + await createOrUpdatePreconfiguredOutputs(soClient, esClient, [ + { + id: 'existing-kafka-output-1', + is_default: false, + is_default_monitoring: false, + name: 'Kafka Output 1', + type: 'kafka', + hosts: ['kafka.co:8080'], + }, + ]); + + expect(mockedOutputService.create).not.toBeCalled(); + expect(mockedOutputService.update).toBeCalled(); + expect(spyAgentPolicyServicBumpAllAgentPoliciesForOutput).toBeCalled(); + }); + it('should not update output if preconfigured output exists and did not changed', async () => { const soClient = savedObjectsClientMock.create(); const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; @@ -258,6 +307,26 @@ describe('output preconfiguration', () => { expect(spyAgentPolicyServicBumpAllAgentPoliciesForOutput).toBeCalled(); }); + it('should not update output if preconfigured kafka output exists and did not change', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + soClient.find.mockResolvedValue({ saved_objects: [], page: 0, per_page: 0, total: 0 }); + await createOrUpdatePreconfiguredOutputs(soClient, esClient, [ + { + id: 'existing-kafka-output-1', + is_default: false, + is_default_monitoring: false, + name: 'Kafka Output 1', + type: 'kafka', + hosts: ['kafka.co:8080'], + }, + ]); + + expect(mockedOutputService.create).not.toBeCalled(); + expect(mockedOutputService.update).toBeCalled(); + expect(spyAgentPolicyServicBumpAllAgentPoliciesForOutput).toBeCalled(); + }); + const SCENARIOS: Array<{ name: string; data: PreconfiguredOutput }> = [ { name: 'no changes', diff --git a/x-pack/plugins/fleet/server/services/preconfiguration/outputs.ts b/x-pack/plugins/fleet/server/services/preconfiguration/outputs.ts index 511e90d1e19a5a..5f8f1a13feda99 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration/outputs.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration/outputs.ts @@ -168,6 +168,34 @@ function isPreconfiguredOutputDifferentFromCurrent( existingOutput: Output, preconfiguredOutput: Partial ): boolean { + const kafkaFieldsAreDifferent = (): boolean => { + if (existingOutput.type !== 'kafka' || preconfiguredOutput.type !== 'kafka') { + return false; + } + + return ( + isDifferent(existingOutput.client_id, preconfiguredOutput.client_id) || + isDifferent(existingOutput.version, preconfiguredOutput.version) || + isDifferent(existingOutput.key, preconfiguredOutput.key) || + isDifferent(existingOutput.compression, preconfiguredOutput.compression) || + isDifferent(existingOutput.compression_level, preconfiguredOutput.compression_level) || + isDifferent(existingOutput.auth_type, preconfiguredOutput.auth_type) || + isDifferent(existingOutput.connection_type, preconfiguredOutput.connection_type) || + isDifferent(existingOutput.username, preconfiguredOutput.username) || + isDifferent(existingOutput.password, preconfiguredOutput.password) || + isDifferent(existingOutput.sasl, preconfiguredOutput.sasl) || + isDifferent(existingOutput.partition, preconfiguredOutput.partition) || + isDifferent(existingOutput.random, preconfiguredOutput.random) || + isDifferent(existingOutput.round_robin, preconfiguredOutput.round_robin) || + isDifferent(existingOutput.hash, preconfiguredOutput.hash) || + isDifferent(existingOutput.topics, preconfiguredOutput.topics) || + isDifferent(existingOutput.headers, preconfiguredOutput.headers) || + isDifferent(existingOutput.timeout, preconfiguredOutput.timeout) || + isDifferent(existingOutput.broker_timeout, preconfiguredOutput.broker_timeout) || + isDifferent(existingOutput.required_acks, preconfiguredOutput.required_acks) + ); + }; + return ( !existingOutput.is_preconfigured || isDifferent(existingOutput.is_default, preconfiguredOutput.is_default) || @@ -191,6 +219,7 @@ function isPreconfiguredOutputDifferentFromCurrent( ) || isDifferent(existingOutput.config_yaml, preconfiguredOutput.config_yaml) || isDifferent(existingOutput.proxy_id, preconfiguredOutput.proxy_id) || - isDifferent(existingOutput.allow_edit ?? [], preconfiguredOutput.allow_edit ?? []) + isDifferent(existingOutput.allow_edit ?? [], preconfiguredOutput.allow_edit ?? []) || + kafkaFieldsAreDifferent() ); } From a8f3a5ac8ceb557619b2c9db489a0f588a6b7f1e Mon Sep 17 00:00:00 2001 From: Rickyanto Ang Date: Thu, 10 Aug 2023 10:37:26 -0700 Subject: [PATCH 44/45] [Cloud Security] [CIS GCP] Google Cloud Shell Onboarding steps (#163030) Added Google Cloud Shell onboarding option - User now are able to choose Google Cloud Shell Option - Upon Saving integration with Google Cloud Shell Setup access option, Google Cloud Shell deployment post installation modal will pop up. Clicking on the Launch Cloud Shell button will redirect user to Google Cloud Shell page - User could also click on the Launch Cloud Shell button from Agent installation flyout modal and get redirected to Google Cloud Shell page NOTE: - The cloud shell Url are not fully functioning right now as we don't have 8.10 branch yet, as such when we want to test this for now, user could just change the cloudshell_git_branch value on the url to main from 8.10 manually Screenshot 2023-08-05 at 10 48 02 AM Screenshot 2023-08-05 at 10 46 45 AM Screenshot 2023-08-05 at 10 44 28 AM https://github.com/elastic/kibana/assets/8703149/fc0f5825-882b-4091-8a62-2917d108abb6 https://github.com/elastic/kibana/assets/8703149/e8ea0ca8-997e-452d-8280-5180db34aaa9 --- .../common/constants.ts | 4 + .../public/common/constants.ts | 2 +- .../components/accounts_evaluated_widget.tsx | 73 +++-- .../aws_credentials_form.tsx | 2 +- .../fleet_extensions/gcp_credential_form.tsx | 255 ++++++++++++++---- .../policy_template_form.test.tsx | 93 ++++--- .../fleet_extensions/policy_template_form.tsx | 80 ++++++ .../components/fleet_extensions/utils.ts | 19 ++ .../utils/install_command_utils.ts | 4 + .../post_install_google_cloud_shell_modal.tsx | 111 ++++++++ .../single_page_layout/hooks/form.tsx | 17 +- .../single_page_layout/index.tsx | 9 + .../create_package_policy_page/types.ts | 3 +- .../google_cloud_shell_instructions.tsx | 43 +++ .../agent_enrollment_flyout/hooks.tsx | 3 + .../agent_enrollment_flyout/instructions.tsx | 7 +- .../agent_enrollment_flyout/types.ts | 1 + .../install_section.tsx | 1 + .../enrollment_instructions/manual/index.tsx | 5 + .../standalone/index.tsx | 1 + .../components/google_cloud_shell_guide.tsx | 78 ++++++ .../plugins/fleet/public/components/index.ts | 1 + .../public/components/platform_selector.tsx | 63 +++-- x-pack/plugins/fleet/public/hooks/index.ts | 1 + .../hooks/use_create_cloud_shell_url.ts | 52 ++++ .../fleet/public/hooks/use_platform.tsx | 20 +- ..._cloud_shell_url_from_agent_policy.test.ts | 68 +++++ .../get_cloud_shell_url_from_agent_policy.ts | 32 +++ ...loud_shell_url_from_package_policy.test.ts | 61 +++++ ...et_cloud_shell_url_from_package_policy.tsx | 27 ++ x-pack/plugins/fleet/public/services/index.ts | 2 + 31 files changed, 1009 insertions(+), 129 deletions(-) create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/post_install_google_cloud_shell_modal.tsx create mode 100644 x-pack/plugins/fleet/public/components/agent_enrollment_flyout/google_cloud_shell_instructions.tsx create mode 100644 x-pack/plugins/fleet/public/components/google_cloud_shell_guide.tsx create mode 100644 x-pack/plugins/fleet/public/hooks/use_create_cloud_shell_url.ts create mode 100644 x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_agent_policy.test.ts create mode 100644 x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_agent_policy.ts create mode 100644 x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_package_policy.test.ts create mode 100644 x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_package_policy.tsx diff --git a/x-pack/plugins/cloud_security_posture/common/constants.ts b/x-pack/plugins/cloud_security_posture/common/constants.ts index 058b23e3477a53..2d8b8157ee758d 100644 --- a/x-pack/plugins/cloud_security_posture/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/common/constants.ts @@ -123,3 +123,7 @@ export const VULNERABILITIES_SEVERITY: Record = { CRITICAL: 'CRITICAL', UNKNOWN: 'UNKNOWN', }; + +export const VULNERABILITIES_ENUMERATION = 'CVE'; +export const SETUP_ACCESS_CLOUD_SHELL = 'google_cloud_shell'; +export const SETUP_ACCESS_MANUAL = 'manual'; diff --git a/x-pack/plugins/cloud_security_posture/public/common/constants.ts b/x-pack/plugins/cloud_security_posture/public/common/constants.ts index 3ef666a1c110ff..a08ebb48fdd019 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/constants.ts @@ -75,7 +75,7 @@ export const cloudPostureIntegrations: CloudPostureIntegrations = { { type: CLOUDBEAT_AWS, name: i18n.translate('xpack.csp.cspmIntegration.awsOption.nameTitle', { - defaultMessage: 'Amazon Web Services', + defaultMessage: 'AWS', }), benchmark: i18n.translate('xpack.csp.cspmIntegration.awsOption.benchmarkTitle', { defaultMessage: 'CIS AWS', diff --git a/x-pack/plugins/cloud_security_posture/public/components/accounts_evaluated_widget.tsx b/x-pack/plugins/cloud_security_posture/public/components/accounts_evaluated_widget.tsx index 2709163c22a84c..c912a61224757c 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/accounts_evaluated_widget.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/accounts_evaluated_widget.tsx @@ -10,6 +10,7 @@ import { CIS_AWS, CIS_GCP } from '../../common/constants'; import { Cluster } from '../../common/types'; import { CISBenchmarkIcon } from './cis_benchmark_icon'; import { CompactFormattedNumber } from './compact_formatted_number'; +import { useNavigateFindings } from '../common/hooks/use_navigate_findings'; export const AccountsEvaluatedWidget = ({ clusters, @@ -23,6 +24,12 @@ export const AccountsEvaluatedWidget = ({ return clusters?.filter((obj) => obj?.meta.benchmark.id === benchmarkId) || []; }; + const navToFindings = useNavigateFindings(); + + const navToFindingsByCloudProvider = (provider: string) => { + navToFindings({ 'cloud.provider': provider }); + }; + const cisAwsClusterAmount = filterClustersById(CIS_AWS).length; const cisGcpClusterAmount = filterClustersById(CIS_GCP).length; @@ -32,32 +39,46 @@ export const AccountsEvaluatedWidget = ({ return ( <> - - - - - - - - - - - - - - - - - - - - + {cisAwsClusterAmount > 0 && ( + + + + + + { + navToFindingsByCloudProvider('aws'); + }} + > + + + + + )} + {cisGcpClusterAmount > 0 && ( + + + + + + { + navToFindingsByCloudProvider('gcp'); + }} + > + + + + + )} ); diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form.tsx index 6dd52f259066e2..4b50ccbd73c8aa 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form.tsx @@ -167,7 +167,7 @@ const Link = ({ children, url }: { children: React.ReactNode; url: string }) => ); -const ReadDocumentation = ({ url }: { url: string }) => { +export const ReadDocumentation = ({ url }: { url: string }) => { return ( ( <> - + +

( ); -/* NEED TO FIND THE REAL URL HERE LATER */ -const DocsLink = ( - - - documentation - - ), - }} - /> - -); +const GoogleCloudShellSetup = () => { + return ( + <> + +
    +
  1. + +
  2. +
  3. + +
  4. +
  5. + +
  6. +
+
+ + + ); +}; -type GcpCredentialsType = 'credentials_file' | 'credentials_json'; type GcpFields = Record; interface GcpInputFields { fields: GcpFields; } -const gcpField: GcpInputFields = { +export const gcpField: GcpInputFields = { fields: { project_id: { label: i18n.translate('xpack.csp.gcpIntegration.projectidFieldLabel', { @@ -132,14 +166,14 @@ const getSetupFormatOptions = (): Array<{ disabled: boolean; }> => [ { - id: 'google_cloud_shell', + id: SETUP_ACCESS_CLOUD_SHELL, label: i18n.translate('xpack.csp.gcpIntegration.setupFormatOptions.googleCloudShell', { defaultMessage: 'Google Cloud Shell', }), - disabled: true, + disabled: false, }, { - id: 'manual', + id: SETUP_ACCESS_MANUAL, label: i18n.translate('xpack.csp.gcpIntegration.setupFormatOptions.manual', { defaultMessage: 'Manual', }), @@ -175,6 +209,83 @@ const getInputVarsFields = ( } as const; }); +const getSetupFormatFromInput = ( + input: Extract< + NewPackagePolicyPostureInput, + { type: 'cloudbeat/cis_aws' | 'cloudbeat/cis_eks' | 'cloudbeat/cis_gcp' } + > +): SetupFormatGCP => { + const credentialsType = input.streams[0].vars?.setup_access?.value; + // Google Cloud shell is the default value + if (!credentialsType) { + return SETUP_ACCESS_CLOUD_SHELL; + } + if (credentialsType !== SETUP_ACCESS_CLOUD_SHELL) { + return SETUP_ACCESS_MANUAL; + } + + return SETUP_ACCESS_CLOUD_SHELL; +}; + +const getGoogleCloudShellUrl = (newPolicy: NewPackagePolicy) => { + const template: string | undefined = newPolicy?.inputs?.find((i) => i.type === CLOUDBEAT_GCP) + ?.config?.cloud_shell_url?.value; + + return template || undefined; +}; + +const updateCloudShellUrl = ( + newPolicy: NewPackagePolicy, + updatePolicy: (policy: NewPackagePolicy) => void, + templateUrl: string | undefined +) => { + updatePolicy?.({ + ...newPolicy, + inputs: newPolicy.inputs.map((input) => { + if (input.type === CLOUDBEAT_GCP) { + return { + ...input, + config: { cloud_shell_url: { value: templateUrl } }, + }; + } + return input; + }), + }); +}; + +const useCloudShellUrl = ({ + packageInfo, + newPolicy, + updatePolicy, + setupFormat, +}: { + packageInfo: PackageInfo; + newPolicy: NewPackagePolicy; + updatePolicy: (policy: NewPackagePolicy) => void; + setupFormat: SetupFormatGCP; +}) => { + useEffect(() => { + const policyInputCloudShellUrl = getGoogleCloudShellUrl(newPolicy); + + if (setupFormat === SETUP_ACCESS_MANUAL) { + if (!!policyInputCloudShellUrl) { + updateCloudShellUrl(newPolicy, updatePolicy, undefined); + } + return; + } + const templateUrl = getCspmCloudShellDefaultValue(packageInfo); + + // If the template is not available, do not update the policy + if (templateUrl === '') return; + + // If the template is already set, do not update the policy + if (policyInputCloudShellUrl === templateUrl) return; + + updateCloudShellUrl(newPolicy, updatePolicy, templateUrl); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [newPolicy?.vars?.cloud_shell_url, newPolicy, packageInfo, setupFormat]); +}; + export const GcpCredentialsForm = ({ input, newPolicy, @@ -187,15 +298,67 @@ export const GcpCredentialsForm = ({ const validSemantic = semverValid(packageInfo.version); const integrationVersionNumberOnly = semverCoerce(validSemantic) || ''; const isInvalid = semverLt(integrationVersionNumberOnly, MIN_VERSION_GCP_CIS); + const fieldsSnapshot = useRef({}); + const lastSetupAccessType = useRef(undefined); + const setupFormat = getSetupFormatFromInput(input); + const getFieldById = (id: keyof GcpInputFields['fields']) => { + return fields.find((element) => element.id === id); + }; + + useCloudShellUrl({ + packageInfo, + newPolicy, + updatePolicy, + setupFormat, + }); + const onSetupFormatChange = (newSetupFormat: SetupFormatGCP) => { + if (newSetupFormat === SETUP_ACCESS_CLOUD_SHELL) { + // We need to store the current manual fields to restore them later + fieldsSnapshot.current = Object.fromEntries( + fields.map((field) => [field.id, { value: field.value }]) + ); + // We need to store the last manual credentials type to restore it later + lastSetupAccessType.current = input.streams[0].vars?.setup_access?.value; + + updatePolicy( + getPosturePolicy(newPolicy, input.type, { + setup_access: { + value: SETUP_ACCESS_CLOUD_SHELL, + type: 'text', + }, + // Clearing fields from previous setup format to prevent exposing credentials + // when switching from manual to cloud formation + ...Object.fromEntries(fields.map((field) => [field.id, { value: undefined }])), + }) + ); + } else { + updatePolicy( + getPosturePolicy(newPolicy, input.type, { + setup_access: { + // Restoring last manual credentials type or defaulting to the first option + value: lastSetupAccessType.current || SETUP_ACCESS_MANUAL, + type: 'text', + }, + // Restoring fields from manual setup format if any + ...fieldsSnapshot.current, + }) + ); + } + }; + // Integration is Invalid IF Version is not at least 1.5.0 OR Setup Access is manual but Project ID is empty useEffect(() => { - setIsValid(!isInvalid); + const isProjectIdEmpty = + setupFormat === SETUP_ACCESS_MANUAL && !getFieldById('project_id')?.value; + const isInvalidPolicy = isInvalid || isProjectIdEmpty; + + setIsValid(!isInvalidPolicy); onChange({ - isValid: !isInvalid, + isValid: !isInvalidPolicy, updatedPolicy: newPolicy, }); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [input, packageInfo]); + }, [input, packageInfo, setupFormat]); if (isInvalid) { return ( @@ -214,32 +377,30 @@ export const GcpCredentialsForm = ({ <> - updatePolicy(getPosturePolicy(newPolicy, input.type))} + - - updatePolicy(getPosturePolicy(newPolicy, input.type, { [key]: { value } })) - } - /> + {setupFormat === SETUP_ACCESS_MANUAL ? ( + + updatePolicy(getPosturePolicy(newPolicy, input.type, { [key]: { value } })) + } + /> + ) : ( + + )} - {DocsLink} + ); }; -const GcpSetupAccessSelector = ({ onChange }: { onChange(type: GcpCredentialsType): void }) => ( - onChange(id)} - /> -); - const GcpInputVarFields = ({ fields, onChange, @@ -278,7 +439,7 @@ const GcpInputVarFields = ({ data-test-subj={CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_TYPE} fullWidth options={credentialOptionsList} - value={credentialsTypeFields?.value} + value={credentialsTypeFields?.value || credentialOptionsList[0].value} onChange={(optionElem) => { onChange('credentials_type', optionElem.target.value); }} diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx index 808a3164fb41cc..213d03b95266f2 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx @@ -196,7 +196,7 @@ describe('', () => { it('renders CSPM input selector', () => { const { getByLabelText } = render(); - const option1 = getByLabelText('Amazon Web Services'); + const option1 = getByLabelText('AWS'); const option2 = getByLabelText('GCP'); const option3 = getByLabelText('Azure'); @@ -229,7 +229,7 @@ describe('', () => { ); - const option1 = getByLabelText('Amazon Web Services'); + const option1 = getByLabelText('AWS'); const option2 = getByLabelText('GCP'); const option3 = getByLabelText('Azure'); @@ -983,12 +983,12 @@ describe('', () => { let policy = getMockPolicyGCP(); policy = getPosturePolicy(policy, CLOUDBEAT_GCP, { credentials_type: { value: 'credentials-file' }, + setup_access: { value: 'manual' }, }); const { getByText } = render( ); - expect(onChange).toHaveBeenCalledWith({ isValid: false, updatedPolicy: policy, @@ -1001,45 +1001,80 @@ describe('', () => { ).toBeInTheDocument(); }); - it(`renders ${CLOUDBEAT_GCP} Credentials File fields`, () => { + it(`renders Google Cloud Shell forms when Setup Access is set to Google Cloud Shell`, () => { let policy = getMockPolicyGCP(); policy = getPosturePolicy(policy, CLOUDBEAT_GCP, { credentials_type: { value: 'credentials-file' }, + setup_access: { value: 'google_cloud_shell' }, }); - const { getByLabelText, getByRole } = render( + const { getByTestId } = render( ); - - expect(getByRole('option', { name: 'Credentials File', selected: true })).toBeInTheDocument(); + expect(onChange).toHaveBeenCalledWith({ + isValid: true, + updatedPolicy: policy, + }); expect( - getByLabelText('Path to JSON file containing the credentials and key used to subscribe') + getByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.GOOGLE_CLOUD_SHELL_SETUP) ).toBeInTheDocument(); }); - it(`updates ${CLOUDBEAT_GCP} Credentials File fields`, () => { + it(`project ID is required for Manual users`, () => { + let policy = getMockPolicyGCP(); + policy = getPosturePolicy(policy, CLOUDBEAT_GCP, { + project_id: { value: undefined }, + setup_access: { value: 'manual' }, + }); + + const { rerender } = render( + + ); + expect(onChange).toHaveBeenCalledWith({ + isValid: false, + updatedPolicy: policy, + }); + policy = getPosturePolicy(policy, CLOUDBEAT_GCP, { + project_id: { value: '' }, + setup_access: { value: 'manual' }, + }); + rerender(); + expect(onChange).toHaveBeenCalledWith({ + isValid: false, + updatedPolicy: policy, + }); + }); + + it(`renders ${CLOUDBEAT_GCP} Credentials File fields`, () => { let policy = getMockPolicyGCP(); policy = getPosturePolicy(policy, CLOUDBEAT_GCP, { credentials_type: { value: 'credentials-file' }, + setup_access: { value: 'manual' }, }); - const { rerender, getByTestId } = render( + const { getByLabelText, getByRole } = render( ); - userEvent.type(getByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.PROJECT_ID), 'a'); + expect(getByRole('option', { name: 'Credentials File', selected: true })).toBeInTheDocument(); + expect( + getByLabelText('Path to JSON file containing the credentials and key used to subscribe') + ).toBeInTheDocument(); + }); + + it(`updates ${CLOUDBEAT_GCP} Credentials File fields`, () => { + let policy = getMockPolicyGCP(); policy = getPosturePolicy(policy, CLOUDBEAT_GCP, { project_id: { value: 'a' }, + credentials_type: { value: 'credentials-file' }, + setup_access: { value: 'manual' }, }); - expect(onChange).toHaveBeenCalledWith({ - isValid: true, - updatedPolicy: policy, - }); - - rerender(); + const { getByTestId } = render( + + ); userEvent.type(getByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_FILE), 'b'); @@ -1047,7 +1082,7 @@ describe('', () => { credentials_file: { value: 'b' }, }); - expect(onChange).toHaveBeenNthCalledWith(5, { + expect(onChange).toHaveBeenCalledWith({ isValid: true, updatedPolicy: policy, }); @@ -1056,10 +1091,11 @@ describe('', () => { it(`renders ${CLOUDBEAT_GCP} Credentials JSON fields`, () => { let policy = getMockPolicyGCP(); policy = getPosturePolicy(policy, CLOUDBEAT_GCP, { + setup_access: { value: 'manual' }, credentials_type: { value: 'credentials-json' }, }); - const { getByLabelText, getByRole } = render( + const { getByRole, getByLabelText } = render( ); @@ -1073,33 +1109,22 @@ describe('', () => { it(`updates ${CLOUDBEAT_GCP} Credentials JSON fields`, () => { let policy = getMockPolicyGCP(); policy = getPosturePolicy(policy, CLOUDBEAT_GCP, { + project_id: { value: 'a' }, credentials_type: { value: 'credentials-json' }, + setup_access: { value: 'manual' }, }); - const { rerender, getByTestId } = render( + const { getByTestId } = render( ); - userEvent.type(getByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.PROJECT_ID), 'a'); - - policy = getPosturePolicy(policy, CLOUDBEAT_GCP, { - project_id: { value: 'a' }, - }); - - expect(onChange).toHaveBeenCalledWith({ - isValid: true, - updatedPolicy: policy, - }); - - rerender(); - userEvent.type(getByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_JSON), 'b'); policy = getPosturePolicy(policy, CLOUDBEAT_GCP, { credentials_json: { value: 'b' }, }); - expect(onChange).toHaveBeenNthCalledWith(5, { + expect(onChange).toHaveBeenCalledWith({ isValid: true, updatedPolicy: policy, }); diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx index 5242de03a00584..e70e16f82762fb 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx @@ -81,6 +81,8 @@ interface IntegrationInfoFieldsProps { export const AWS_SINGLE_ACCOUNT = 'single-account'; export const AWS_ORGANIZATION_ACCOUNT = 'organization-account'; +export const GCP_SINGLE_ACCOUNT = 'single-account-gcp'; +export const GCP_ORGANIZATION_ACCOUNT = 'organization-account-gcp'; type AwsAccountType = typeof AWS_SINGLE_ACCOUNT | typeof AWS_ORGANIZATION_ACCOUNT; const getAwsAccountTypeOptions = (isAwsOrgDisabled: boolean): CspRadioGroupProps['options'] => [ @@ -104,6 +106,28 @@ const getAwsAccountTypeOptions = (isAwsOrgDisabled: boolean): CspRadioGroupProps }, ]; +const getGcpAccountTypeOptions = (): CspRadioGroupProps['options'] => [ + { + id: GCP_ORGANIZATION_ACCOUNT, + label: i18n.translate('xpack.csp.fleetIntegration.gcpAccountType.gcpOrganizationLabel', { + defaultMessage: 'GCP Organization', + }), + disabled: true, + tooltip: i18n.translate( + 'xpack.csp.fleetIntegration.gcpAccountType.gcpOrganizationDisabledTooltip', + { + defaultMessage: 'Coming Soon', + } + ), + }, + { + id: GCP_SINGLE_ACCOUNT, + label: i18n.translate('xpack.csp.fleetIntegration.gcpAccountType.gcpSingleAccountLabel', { + defaultMessage: 'Single Account', + }), + }, +]; + const getAwsAccountType = ( input: Extract ): AwsAccountType | undefined => input.streams[0].vars?.['aws.account_type']?.value; @@ -208,6 +232,53 @@ const AwsAccountTypeSelect = ({ ); }; +const GcpAccountTypeSelect = ({ + input, + newPolicy, + updatePolicy, + packageInfo, +}: { + input: Extract; + newPolicy: NewPackagePolicy; + updatePolicy: (updatedPolicy: NewPackagePolicy) => void; + packageInfo: PackageInfo; +}) => { + return ( + <> + + + + + { + updatePolicy( + getPosturePolicy(newPolicy, input.type, { + gcp_account_type: { + value: accountType, + type: 'text', + }, + }) + ); + }} + size="m" + /> + + + + + + + ); +}; + const IntegrationSettings = ({ onChange, fields }: IntegrationInfoFieldsProps) => (
{fields.map(({ value, id, label, error }) => ( @@ -375,6 +446,15 @@ export const CspPolicyTemplateForm = memo )} + {input.type === 'cloudbeat/cis_gcp' && ( + + )} + {/* Defines the name/description */} { + if (!packageInfo.policy_templates) return ''; + + const policyTemplate = packageInfo.policy_templates.find((p) => p.name === CSPM_POLICY_TEMPLATE); + if (!policyTemplate) return ''; + + const policyTemplateInputs = hasPolicyTemplateInputs(policyTemplate) && policyTemplate.inputs; + + if (!policyTemplateInputs) return ''; + + const cloudShellUrl = policyTemplateInputs.reduce((acc, input): string => { + if (!input.vars) return acc; + const template = input.vars.find((v) => v.name === 'cloud_shell_url')?.default; + return template ? String(template) : acc; + }, ''); + + return cloudShellUrl; +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/components/fleet_server_instructions/utils/install_command_utils.ts b/x-pack/plugins/fleet/public/applications/fleet/components/fleet_server_instructions/utils/install_command_utils.ts index 0221d332692b9c..b528c5092ea149 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/components/fleet_server_instructions/utils/install_command_utils.ts +++ b/x-pack/plugins/fleet/public/applications/fleet/components/fleet_server_instructions/utils/install_command_utils.ts @@ -52,6 +52,9 @@ function getArtifact(platform: PLATFORM_TYPE, kibanaVersion: string) { kubernetes: { downloadCommand: '', }, + googleCloudShell: { + downloadCommand: '', + }, }; return artifactMap[platform]; @@ -116,6 +119,7 @@ export function getInstallCommandForPlatform( rpm: `${artifact.downloadCommand}\nsudo elastic-agent enroll ${commandArgumentsStr}\nsudo systemctl enable elastic-agent\nsudo systemctl start elastic-agent`, kubernetes: '', cloudFormation: '', + googleCloudShell: '', }; return commands[platform]; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/post_install_google_cloud_shell_modal.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/post_install_google_cloud_shell_modal.tsx new file mode 100644 index 00000000000000..3879f44d5fbe0c --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/post_install_google_cloud_shell_modal.tsx @@ -0,0 +1,111 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { + EuiButton, + EuiButtonEmpty, + EuiCallOut, + EuiModal, + EuiModalBody, + EuiModalFooter, + EuiModalHeader, + EuiModalHeaderTitle, + EuiSpacer, +} from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { useQuery } from '@tanstack/react-query'; + +import type { AgentPolicy, PackagePolicy } from '../../../../../types'; +import { + sendGetEnrollmentAPIKeys, + useCreateCloudShellUrl, + useFleetServerHostsForPolicy, + useKibanaVersion, +} from '../../../../../hooks'; +import { GoogleCloudShellGuide } from '../../../../../components'; +import { ManualInstructions } from '../../../../../../../components/enrollment_instructions'; + +export const PostInstallGoogleCloudShellModal: React.FunctionComponent<{ + onConfirm: () => void; + onCancel: () => void; + agentPolicy: AgentPolicy; + packagePolicy: PackagePolicy; +}> = ({ onConfirm, onCancel, agentPolicy, packagePolicy }) => { + const { data: apyKeysData } = useQuery(['googleCloudShellApiKeys'], () => + sendGetEnrollmentAPIKeys({ + page: 1, + perPage: 1, + kuery: `policy_id:${agentPolicy.id}`, + }) + ); + const { fleetServerHosts, fleetProxy } = useFleetServerHostsForPolicy(agentPolicy); + const kibanaVersion = useKibanaVersion(); + + const installManagedCommands = ManualInstructions({ + apiKey: apyKeysData?.data?.items[0]?.api_key || 'no_key', + fleetServerHosts, + fleetProxy, + kibanaVersion, + }); + + const { cloudShellUrl, error, isError, isLoading } = useCreateCloudShellUrl({ + enrollmentAPIKey: apyKeysData?.data?.items[0]?.api_key, + packagePolicy, + }); + + return ( + + + + + + + + + + {error && isError && ( + <> + + + + )} + + + + + + + { + window.open(cloudShellUrl); + onConfirm(); + }} + fill + color="primary" + isLoading={isLoading} + isDisabled={isError} + > + + + + + ); +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx index dbb901316cece8..da4ecfbe3569aa 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx @@ -24,7 +24,11 @@ import { sendBulkInstallPackages, sendGetPackagePolicies, } from '../../../../../hooks'; -import { isVerificationError, packageToPackagePolicy } from '../../../../../services'; +import { + getCloudShellUrlFromPackagePolicy, + isVerificationError, + packageToPackagePolicy, +} from '../../../../../services'; import { FLEET_ELASTIC_AGENT_PACKAGE, FLEET_SYSTEM_PACKAGE, @@ -304,11 +308,18 @@ export function useOnSubmit({ ? getCloudFormationPropsFromPackagePolicy(data.item).templateUrl : false; + const hasGoogleCloudShell = data?.item ? getCloudShellUrlFromPackagePolicy(data.item) : false; + if (hasCloudFormation) { setFormState(agentCount ? 'SUBMITTED' : 'SUBMITTED_CLOUD_FORMATION'); } else { setFormState(agentCount ? 'SUBMITTED' : 'SUBMITTED_NO_AGENTS'); } + if (hasGoogleCloudShell) { + setFormState(agentCount ? 'SUBMITTED' : 'SUBMITTED_GOOGLE_CLOUD_SHELL'); + } else { + setFormState(agentCount ? 'SUBMITTED' : 'SUBMITTED_NO_AGENTS'); + } if (!error) { setSavedPackagePolicy(data!.item); @@ -317,6 +328,10 @@ export function useOnSubmit({ setFormState('SUBMITTED_CLOUD_FORMATION'); return; } + if (!hasAgentsAssigned && hasGoogleCloudShell) { + setFormState('SUBMITTED_GOOGLE_CLOUD_SHELL'); + return; + } if (!hasAgentsAssigned) { setFormState('SUBMITTED_NO_AGENTS'); return; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx index 9b26311699ea74..e7a35ae48dbda6 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx @@ -60,6 +60,7 @@ import { generateNewAgentPolicyWithDefaults } from '../../../../../../../common/ import { CreatePackagePolicySinglePageLayout, PostInstallAddAgentModal } from './components'; import { useDevToolsRequest, useOnSubmit } from './hooks'; import { PostInstallCloudFormationModal } from './components/post_install_cloud_formation_modal'; +import { PostInstallGoogleCloudShellModal } from './components/post_install_google_cloud_shell_modal'; const StepsWithLessPadding = styled(EuiSteps)` .euiStep__content { @@ -422,6 +423,14 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ onCancel={() => navigateAddAgentHelp(savedPackagePolicy)} /> )} + {formState === 'SUBMITTED_GOOGLE_CLOUD_SHELL' && agentPolicy && savedPackagePolicy && ( + navigateAddAgent(savedPackagePolicy)} + onCancel={() => navigateAddAgentHelp(savedPackagePolicy)} + /> + )} {packageInfo && ( = ({ + cloudShellUrl, + cloudShellCommand, +}) => { + return ( + <> + + + + + + + ); +}; diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/hooks.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/hooks.tsx index f738d99533cf07..9345e4e3a66635 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/hooks.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/hooks.tsx @@ -14,6 +14,7 @@ import { FLEET_CLOUD_SECURITY_POSTURE_PACKAGE, FLEET_CLOUD_DEFEND_PACKAGE, } from '../../../common'; +import { getCloudShellUrlFromAgentPolicy } from '../../services'; import { getCloudFormationTemplateUrlFromPackageInfo, @@ -127,6 +128,7 @@ export function useCloudSecurityIntegration(agentPolicy?: AgentPolicy) { AWS_ACCOUNT_TYPE ]?.value; + const cloudShellUrl = getCloudShellUrlFromAgentPolicy(agentPolicy); return { isLoading, integrationType, @@ -135,6 +137,7 @@ export function useCloudSecurityIntegration(agentPolicy?: AgentPolicy) { awsAccountType: cloudFormationAwsAccountType, templateUrl: cloudFormationTemplateUrl, }, + cloudShellUrl, }; }, [agentPolicy, packageInfoData?.item, isLoading, cloudSecurityPackagePolicy]); diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/instructions.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/instructions.tsx index d88c9cedb4bcdd..0a413856e4f34e 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/instructions.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/instructions.tsx @@ -81,7 +81,10 @@ export const Instructions = (props: InstructionProps) => { useEffect(() => { // If we detect a CloudFormation integration, we want to hide the selection type - if (props.cloudSecurityIntegration?.isCloudFormation) { + if ( + props.cloudSecurityIntegration?.isCloudFormation || + props.cloudSecurityIntegration?.cloudShellUrl + ) { setSelectionType(undefined); } else if (!isIntegrationFlow && showAgentEnrollment) { setSelectionType('radio'); @@ -103,7 +106,7 @@ export const Instructions = (props: InstructionProps) => { } else if (showAgentEnrollment) { return ( <> - {selectionType === 'tabs' && ( + {selectionType === 'tabs' && !props.cloudSecurityIntegration?.cloudShellUrl && ( <> = ({ windowsCommand={installCommand.windows} linuxDebCommand={installCommand.deb} linuxRpmCommand={installCommand.rpm} + googleCloudShellCommand={installCommand.googleCloudShell} k8sCommand={installCommand.kubernetes} hasK8sIntegration={isK8s === 'IS_KUBERNETES' || isK8s === 'IS_KUBERNETES_MULTIPAGE'} cloudSecurityIntegration={cloudSecurityIntegration} diff --git a/x-pack/plugins/fleet/public/components/enrollment_instructions/manual/index.tsx b/x-pack/plugins/fleet/public/components/enrollment_instructions/manual/index.tsx index ff94307792f758..ce3015dd2ccbd3 100644 --- a/x-pack/plugins/fleet/public/components/enrollment_instructions/manual/index.tsx +++ b/x-pack/plugins/fleet/public/components/enrollment_instructions/manual/index.tsx @@ -35,6 +35,8 @@ export const ManualInstructions = ({ kibanaVersion: string; }) => { const enrollArgs = getfleetServerHostsEnrollArgs(apiKey, fleetServerHosts, fleetProxy); + const fleetServerUrl = enrollArgs?.split('--url=')?.pop()?.split('--enrollment')[0]; + const enrollmentToken = enrollArgs?.split('--enrollment-token=')[1]; const k8sCommand = 'kubectl apply -f elastic-agent-managed-kubernetes.yml'; @@ -62,6 +64,8 @@ sudo elastic-agent enroll ${enrollArgs} \nsudo systemctl enable elastic-agent \n sudo rpm -vi elastic-agent-${kibanaVersion}-x86_64.rpm sudo elastic-agent enroll ${enrollArgs} \nsudo systemctl enable elastic-agent \nsudo systemctl start elastic-agent`; + const googleCloudShellCommand = `FLEET_URL=${fleetServerUrl} ENROLLMENT_TOKEN=${enrollmentToken} STACK_VERSION=${kibanaVersion} ./deploy.sh`; + return { linux: linuxCommand, mac: macCommand, @@ -70,5 +74,6 @@ sudo elastic-agent enroll ${enrollArgs} \nsudo systemctl enable elastic-agent \n rpm: linuxRpmCommand, kubernetes: k8sCommand, cloudFormation: '', + googleCloudShell: googleCloudShellCommand, }; }; diff --git a/x-pack/plugins/fleet/public/components/enrollment_instructions/standalone/index.tsx b/x-pack/plugins/fleet/public/components/enrollment_instructions/standalone/index.tsx index 6994cf2a7ebc2c..ca2754daf1b711 100644 --- a/x-pack/plugins/fleet/public/components/enrollment_instructions/standalone/index.tsx +++ b/x-pack/plugins/fleet/public/components/enrollment_instructions/standalone/index.tsx @@ -38,5 +38,6 @@ cd elastic-agent-${kibanaVersion}-windows-x86_64 deb: linuxDebCommand, rpm: linuxRpmCommand, kubernetes: k8sCommand, + googleCloudShell: '', }; }; diff --git a/x-pack/plugins/fleet/public/components/google_cloud_shell_guide.tsx b/x-pack/plugins/fleet/public/components/google_cloud_shell_guide.tsx new file mode 100644 index 00000000000000..0efe5719e3166f --- /dev/null +++ b/x-pack/plugins/fleet/public/components/google_cloud_shell_guide.tsx @@ -0,0 +1,78 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiCodeBlock, EuiLink, EuiText, EuiSpacer } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; + +/* Need to change to the real URL */ +const GOOGLE_CLOUD_SHELL_EXTERNAL_DOC_URL = 'https://cloud.google.com/shell/docs'; + +const Link = ({ children, url }: { children: React.ReactNode; url: string }) => ( + + {children} + +); + +export const GoogleCloudShellGuide = (props: { commandText: string }) => { + return ( + <> + + +

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

+ +
    +
  1. + +
  2. +
  3. + <> + + + + {props.commandText} + + +
  4. +
  5. + +
  6. +
+
+
+ + ); +}; diff --git a/x-pack/plugins/fleet/public/components/index.ts b/x-pack/plugins/fleet/public/components/index.ts index 8335f9fcfc61f9..f578a11ab7c5a3 100644 --- a/x-pack/plugins/fleet/public/components/index.ts +++ b/x-pack/plugins/fleet/public/components/index.ts @@ -30,3 +30,4 @@ export { HeaderReleaseBadge, InlineReleaseBadge } from './release_badge'; export { WithGuidedOnboardingTour } from './with_guided_onboarding_tour'; export { UninstallCommandFlyout } from './uninstall_command_flyout'; export { CloudFormationGuide } from './cloud_formation_guide'; +export { GoogleCloudShellGuide } from './google_cloud_shell_guide'; diff --git a/x-pack/plugins/fleet/public/components/platform_selector.tsx b/x-pack/plugins/fleet/public/components/platform_selector.tsx index eb8b9d898855e3..a4f08c265a5655 100644 --- a/x-pack/plugins/fleet/public/components/platform_selector.tsx +++ b/x-pack/plugins/fleet/public/components/platform_selector.tsx @@ -24,9 +24,15 @@ import { FLEET_CLOUD_SECURITY_POSTURE_CSPM_POLICY_TEMPLATE, } from '../../common/constants/epm'; import { type PLATFORM_TYPE } from '../hooks'; -import { REDUCED_PLATFORM_OPTIONS, PLATFORM_OPTIONS, usePlatform } from '../hooks'; +import { + REDUCED_PLATFORM_OPTIONS, + PLATFORM_OPTIONS, + PLATFORM_OPTIONS_CLOUD_SHELL, + usePlatform, +} from '../hooks'; import { KubernetesInstructions } from './agent_enrollment_flyout/kubernetes_instructions'; +import { GoogleCloudShellInstructions } from './agent_enrollment_flyout/google_cloud_shell_instructions'; import type { CloudSecurityIntegration } from './agent_enrollment_flyout/types'; interface Props { @@ -36,6 +42,7 @@ interface Props { linuxDebCommand: string; linuxRpmCommand: string; k8sCommand: string; + googleCloudShellCommand?: string | undefined; hasK8sIntegration: boolean; cloudSecurityIntegration?: CloudSecurityIntegration | undefined; hasK8sIntegrationMultiPage: boolean; @@ -58,6 +65,7 @@ export const PlatformSelector: React.FunctionComponent = ({ linuxDebCommand, linuxRpmCommand, k8sCommand, + googleCloudShellCommand, hasK8sIntegration, cloudSecurityIntegration, hasK8sIntegrationMultiPage, @@ -68,6 +76,9 @@ export const PlatformSelector: React.FunctionComponent = ({ onCopy, }) => { const getInitialPlatform = useCallback(() => { + if (cloudSecurityIntegration?.cloudShellUrl) { + return 'googleCloudShell'; + } if ( hasK8sIntegration || (cloudSecurityIntegration?.integrationType === @@ -77,19 +88,28 @@ export const PlatformSelector: React.FunctionComponent = ({ return 'kubernetes'; return 'linux'; - }, [hasK8sIntegration, cloudSecurityIntegration?.integrationType, isManaged]); + }, [ + hasK8sIntegration, + cloudSecurityIntegration?.integrationType, + isManaged, + cloudSecurityIntegration?.cloudShellUrl, + ]); const { platform, setPlatform } = usePlatform(getInitialPlatform()); // In case of fleet server installation or standalone agent without // Kubernetes integration in the policy use reduced platform options + // If it has Cloud Shell URL, then it should show platform options with Cloudshell in it const isReduced = hasFleetServer || (!isManaged && !hasK8sIntegration); const getPlatformOptions = useCallback(() => { const platformOptions = isReduced ? REDUCED_PLATFORM_OPTIONS : PLATFORM_OPTIONS; + const platformOptionsWithCloudShell = cloudSecurityIntegration?.cloudShellUrl + ? PLATFORM_OPTIONS_CLOUD_SHELL + : platformOptions; - return platformOptions; - }, [isReduced]); + return platformOptionsWithCloudShell; + }, [isReduced, cloudSecurityIntegration?.cloudShellUrl]); const [copyButtonClicked, setCopyButtonClicked] = useState(false); @@ -144,6 +164,7 @@ export const PlatformSelector: React.FunctionComponent = ({ deb: linuxDebCommand, rpm: linuxRpmCommand, kubernetes: k8sCommand, + googleCloudShell: k8sCommand, }; const onTextAreaClick = () => { if (onCopy) onCopy(); @@ -208,6 +229,15 @@ export const PlatformSelector: React.FunctionComponent = ({ )} + {platform === 'googleCloudShell' && isManaged && ( + <> + + + + )} {!hasK8sIntegrationMultiPage && ( <> {platform === 'kubernetes' && ( @@ -220,17 +250,20 @@ export const PlatformSelector: React.FunctionComponent = ({
)} - - {commandsByPlatform[platform]} - + {platform !== 'googleCloudShell' && ( + + {commandsByPlatform[platform]} + + )} + {fullCopyButton && ( diff --git a/x-pack/plugins/fleet/public/hooks/index.ts b/x-pack/plugins/fleet/public/hooks/index.ts index 0692ce961379ea..eaddfbaa08009f 100644 --- a/x-pack/plugins/fleet/public/hooks/index.ts +++ b/x-pack/plugins/fleet/public/hooks/index.ts @@ -33,3 +33,4 @@ export * from './use_fleet_server_hosts_for_policy'; export * from './use_fleet_server_standalone'; export * from './use_locator'; export * from './use_create_cloud_formation_url'; +export * from './use_create_cloud_shell_url'; diff --git a/x-pack/plugins/fleet/public/hooks/use_create_cloud_shell_url.ts b/x-pack/plugins/fleet/public/hooks/use_create_cloud_shell_url.ts new file mode 100644 index 00000000000000..d8d26d45846b04 --- /dev/null +++ b/x-pack/plugins/fleet/public/hooks/use_create_cloud_shell_url.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 { i18n } from '@kbn/i18n'; + +import type { PackagePolicy } from '../../common'; +import { getCloudShellUrlFromPackagePolicy } from '../services'; + +import { useGetSettings } from './use_request'; + +export const useCreateCloudShellUrl = ({ + enrollmentAPIKey, + packagePolicy, +}: { + enrollmentAPIKey: string | undefined; + packagePolicy?: PackagePolicy; +}) => { + const { data, isLoading } = useGetSettings(); + + let isError = false; + let error: string | undefined; + + // Default fleet server host + const fleetServerHost = data?.item.fleet_server_hosts?.[0]; + + if (!fleetServerHost && !isLoading) { + isError = true; + error = i18n.translate('xpack.fleet.agentEnrollment.cloudShell.noFleetServerHost', { + defaultMessage: 'No Fleet Server host found', + }); + } + + if (!enrollmentAPIKey && !isLoading) { + isError = true; + error = i18n.translate('xpack.fleet.agentEnrollment.cloudShell.noApiKey', { + defaultMessage: 'No enrollment token found', + }); + } + + const cloudShellUrl = getCloudShellUrlFromPackagePolicy(packagePolicy) || ''; + + return { + isLoading, + cloudShellUrl, + isError, + error, + }; +}; diff --git a/x-pack/plugins/fleet/public/hooks/use_platform.tsx b/x-pack/plugins/fleet/public/hooks/use_platform.tsx index cc35477fbef127..7a5a4aae323b3d 100644 --- a/x-pack/plugins/fleet/public/hooks/use_platform.tsx +++ b/x-pack/plugins/fleet/public/hooks/use_platform.tsx @@ -8,7 +8,14 @@ import { useState } from 'react'; import { i18n } from '@kbn/i18n'; -export type PLATFORM_TYPE = 'linux' | 'mac' | 'windows' | 'rpm' | 'deb' | 'kubernetes'; +export type PLATFORM_TYPE = + | 'linux' + | 'mac' + | 'windows' + | 'rpm' + | 'deb' + | 'kubernetes' + | 'googleCloudShell'; export const REDUCED_PLATFORM_OPTIONS: Array<{ label: string; @@ -63,6 +70,17 @@ export const PLATFORM_OPTIONS = [ }, ]; +export const PLATFORM_OPTIONS_CLOUD_SHELL = [ + ...PLATFORM_OPTIONS, + { + id: 'googleCloudShell', + label: i18n.translate('xpack.fleet.enrollmentInstructions.platformButtons.googleCloudShell', { + defaultMessage: 'Google Cloud Shell Script', + }), + 'data-test-subj': 'platformTypeGoogleCloudShellScript', + }, +]; + export function usePlatform(initialPlatform: PLATFORM_TYPE = 'linux') { const [platform, setPlatform] = useState(initialPlatform); diff --git a/x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_agent_policy.test.ts b/x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_agent_policy.test.ts new file mode 100644 index 00000000000000..ad7711917bd4ab --- /dev/null +++ b/x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_agent_policy.test.ts @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { getCloudShellUrlFromAgentPolicy } from './get_cloud_shell_url_from_agent_policy'; + +describe('getCloudShellUrlFromAgentPolicy', () => { + it('should return undefined when selectedPolicy is undefined', () => { + const result = getCloudShellUrlFromAgentPolicy(); + expect(result).toBeUndefined(); + }); + + it('should return undefined when selectedPolicy has no package_policies', () => { + const selectedPolicy = {}; + // @ts-expect-error + const result = getCloudShellUrlFromAgentPolicy(selectedPolicy); + expect(result).toBeUndefined(); + }); + + it('should return undefined when no input has enabled and config.cloud_shell_url', () => { + const selectedPolicy = { + package_policies: [ + { + inputs: [ + { enabled: false, config: {} }, + { enabled: true, config: {} }, + { enabled: true, config: { other_property: 'value' } }, + ], + }, + { + inputs: [ + { enabled: false, config: {} }, + { enabled: false, config: {} }, + ], + }, + ], + }; + // @ts-expect-error + const result = getCloudShellUrlFromAgentPolicy(selectedPolicy); + expect(result).toBeUndefined(); + }); + + it('should return the first config.cloud_shell_url when available', () => { + const selectedPolicy = { + package_policies: [ + { + inputs: [ + { enabled: false, config: { cloud_shell_url: { value: 'url1' } } }, + { enabled: false, config: { cloud_shell_url: { value: 'url2' } } }, + { enabled: false, config: { other_property: 'value' } }, + ], + }, + { + inputs: [ + { enabled: false, config: {} }, + { enabled: true, config: { cloud_shell_url: { value: 'url3' } } }, + { enabled: true, config: { cloud_shell_url: { value: 'url4' } } }, + ], + }, + ], + }; + // @ts-expect-error + const result = getCloudShellUrlFromAgentPolicy(selectedPolicy); + expect(result).toBe('url3'); + }); +}); diff --git a/x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_agent_policy.ts b/x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_agent_policy.ts new file mode 100644 index 00000000000000..b41bfa99818599 --- /dev/null +++ b/x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_agent_policy.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { AgentPolicy } from '../types'; + +/** + * Get the cloud shell url from a agent policy + * It looks for a config with a cloud_shell_url object present in + * the enabled package_policies inputs of the agent policy + */ +export const getCloudShellUrlFromAgentPolicy = (selectedPolicy?: AgentPolicy) => { + const cloudShellUrl = selectedPolicy?.package_policies?.reduce((acc, packagePolicy) => { + const findCloudShellUrlConfig = packagePolicy.inputs?.reduce((accInput, input) => { + if (accInput !== '') { + return accInput; + } + if (input?.enabled && input?.config?.cloud_shell_url) { + return input.config.cloud_shell_url.value; + } + return accInput; + }, ''); + if (findCloudShellUrlConfig) { + return findCloudShellUrlConfig; + } + return acc; + }, ''); + return cloudShellUrl !== '' ? cloudShellUrl : undefined; +}; diff --git a/x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_package_policy.test.ts b/x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_package_policy.test.ts new file mode 100644 index 00000000000000..389a481e98f8a2 --- /dev/null +++ b/x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_package_policy.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 { getCloudShellUrlFromPackagePolicy } from './get_cloud_shell_url_from_package_policy'; + +describe('getCloudShellUrlFromPackagePolicyy', () => { + test('returns undefined when packagePolicy is undefined', () => { + const result = getCloudShellUrlFromPackagePolicy(undefined); + expect(result).toBeUndefined(); + }); + + test('returns undefined when packagePolicy is defined but inputs are empty', () => { + const packagePolicy = { inputs: [] }; + // @ts-expect-error + const result = getCloudShellUrlFromPackagePolicy(packagePolicy); + expect(result).toBeUndefined(); + }); + + test('returns undefined when no enabled input has a CloudShellUrl', () => { + const packagePolicy = { + inputs: [ + { enabled: false, config: { cloud_shell_url: { value: 'url1' } } }, + { enabled: false, config: { cloud_shell_url: { value: 'url2' } } }, + ], + }; + // @ts-expect-error + const result = getCloudShellUrlFromPackagePolicy(packagePolicy); + expect(result).toBeUndefined(); + }); + + test('returns the CloudShellUrl of the first enabled input', () => { + const packagePolicy = { + inputs: [ + { enabled: false, config: { cloud_shell_url: { value: 'url1' } } }, + { enabled: true, config: { cloud_shell_url: { value: 'url2' } } }, + { enabled: true, config: { cloud_shell_url: { value: 'url3' } } }, + ], + }; + // @ts-expect-error + const result = getCloudShellUrlFromPackagePolicy(packagePolicy); + expect(result).toBe('url2'); + }); + + test('returns the CloudShellUrl of the first enabled input and ignores subsequent inputs', () => { + const packagePolicy = { + inputs: [ + { enabled: true, config: { cloud_shell_url: { value: 'url1' } } }, + { enabled: true, config: { cloud_shell_url: { value: 'url2' } } }, + { enabled: true, config: { cloud_shell_url: { value: 'url3' } } }, + ], + }; + // @ts-expect-error + const result = getCloudShellUrlFromPackagePolicy(packagePolicy); + expect(result).toBe('url1'); + }); + + // Add more test cases as needed +}); diff --git a/x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_package_policy.tsx b/x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_package_policy.tsx new file mode 100644 index 00000000000000..158ead0b39ce3f --- /dev/null +++ b/x-pack/plugins/fleet/public/services/get_cloud_shell_url_from_package_policy.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 type { PackagePolicy } from '../types'; + +/** + * Get the cloud shell url from a package policy + * It looks for a config with a cloud_shell_url object present in + * the enabled inputs of the package policy + */ +export const getCloudShellUrlFromPackagePolicy = (packagePolicy?: PackagePolicy) => { + const cloudShellUrl = packagePolicy?.inputs?.reduce((accInput, input) => { + if (accInput !== '') { + return accInput; + } + if (input?.enabled && input?.config?.cloud_shell_url) { + return input.config.cloud_shell_url.value; + } + return accInput; + }, ''); + + return cloudShellUrl !== '' ? cloudShellUrl : undefined; +}; diff --git a/x-pack/plugins/fleet/public/services/index.ts b/x-pack/plugins/fleet/public/services/index.ts index 44bf6b965742c1..a98d4126d52f3e 100644 --- a/x-pack/plugins/fleet/public/services/index.ts +++ b/x-pack/plugins/fleet/public/services/index.ts @@ -51,3 +51,5 @@ export { incrementPolicyName } from './increment_policy_name'; export { getCloudFormationPropsFromPackagePolicy } from './get_cloud_formation_props_from_package_policy'; export { getCloudFormationTemplateUrlFromAgentPolicy } from './get_cloud_formation_template_url_from_agent_policy'; export { getCloudFormationTemplateUrlFromPackageInfo } from './get_cloud_formation_template_url_from_package_info'; +export { getCloudShellUrlFromPackagePolicy } from './get_cloud_shell_url_from_package_policy'; +export { getCloudShellUrlFromAgentPolicy } from './get_cloud_shell_url_from_agent_policy'; From 37a53b69cfbce11344103199bb4b751d2313dde8 Mon Sep 17 00:00:00 2001 From: James Rodewig Date: Thu, 10 Aug 2023 14:32:55 -0400 Subject: [PATCH 45/45] [DOCS] Fix `event.values` URL template var desc (#163507) --- docs/user/dashboard/make-dashboards-interactive.asciidoc | 2 +- docs/user/dashboard/url-drilldown.asciidoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/user/dashboard/make-dashboards-interactive.asciidoc b/docs/user/dashboard/make-dashboards-interactive.asciidoc index aee1d37507f19f..03d48e308f5423 100644 --- a/docs/user/dashboard/make-dashboards-interactive.asciidoc +++ b/docs/user/dashboard/make-dashboards-interactive.asciidoc @@ -659,7 +659,7 @@ Note: | | event.values -| An array of all cell values for the raw on which the action will execute. +| An array of all cell values for the row on which the action will execute. To access a column value, use `{{event.values.[x]}}`, where `x` represents the column number. | | event.keys diff --git a/docs/user/dashboard/url-drilldown.asciidoc b/docs/user/dashboard/url-drilldown.asciidoc index d5e0ea6e397f76..4cfad959e25124 100644 --- a/docs/user/dashboard/url-drilldown.asciidoc +++ b/docs/user/dashboard/url-drilldown.asciidoc @@ -244,7 +244,7 @@ Note: | | event.values -| An array of all cell values for the raw on which the action will execute. +| An array of all cell values for the row on which the action will execute. To access a column value, use `{{event.values.[x]}}`, where `x` represents the column number. | | event.keys