diff --git a/packages/core/saved-objects/core-saved-objects-base-server-internal/index.ts b/packages/core/saved-objects/core-saved-objects-base-server-internal/index.ts index 23f1fdc6cecf2..5d14a4f9e4cbb 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-internal/index.ts +++ b/packages/core/saved-objects/core-saved-objects-base-server-internal/index.ts @@ -44,6 +44,7 @@ export type { export { parseObjectKey, getObjectKey, getIndexForType } from './src/utils'; export { modelVersionVirtualMajor, + globalSwitchToModelVersionAt, assertValidModelVersion, isVirtualModelVersion, virtualVersionToModelVersion, diff --git a/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/constants.ts b/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/constants.ts index f3f8ace3a142b..8a749f6dc1399 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/constants.ts +++ b/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/constants.ts @@ -10,3 +10,8 @@ * The major version that is used to represent model versions. */ export const modelVersionVirtualMajor = 10; + +/** + * The stack version where all types will be forced to switch to using the model version system. + */ +export const globalSwitchToModelVersionAt = '8.10.0'; diff --git a/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/index.ts b/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/index.ts index 2e485195000f5..350ab86ca2980 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/index.ts +++ b/packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/index.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -export { modelVersionVirtualMajor } from './constants'; +export { modelVersionVirtualMajor, globalSwitchToModelVersionAt } from './constants'; export { assertValidModelVersion, isVirtualModelVersion, diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/apply_type_defaults.test.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/apply_type_defaults.test.ts new file mode 100644 index 0000000000000..37d61fa37d67c --- /dev/null +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/apply_type_defaults.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 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 { SavedObjectsType } from '@kbn/core-saved-objects-server'; +import { globalSwitchToModelVersionAt } from '@kbn/core-saved-objects-base-server-internal'; +import { applyTypeDefaults } from './apply_type_defaults'; + +const createType = (parts: Partial = {}): SavedObjectsType => ({ + name: 'test', + namespaceType: 'single', + hidden: false, + mappings: { properties: {} }, + ...parts, +}); + +describe('applyTypeDefaults', () => { + describe('switchToModelVersionAt', () => { + it(`keeps the type's switchToModelVersionAt if lesser than the global version`, () => { + const type = createType({ + switchToModelVersionAt: '8.4.0', + }); + + const result = applyTypeDefaults(type); + expect(result.switchToModelVersionAt).toEqual('8.4.0'); + }); + + it(`sets switchToModelVersionAt to the global version if unspecified`, () => { + const type = createType({ + switchToModelVersionAt: undefined, + }); + + const result = applyTypeDefaults(type); + expect(result.switchToModelVersionAt).toEqual(globalSwitchToModelVersionAt); + }); + + it(`throws if switchToModelVersionAt is invalid`, () => { + const type = createType({ + switchToModelVersionAt: 'foobar', + }); + + expect(() => applyTypeDefaults(type)).toThrowErrorMatchingInlineSnapshot( + `"Type test: invalid switchToModelVersionAt provided: foobar"` + ); + }); + + it(`throws if type version is greater than the global version`, () => { + const type = createType({ + switchToModelVersionAt: '9.2.0', + }); + + expect(() => applyTypeDefaults(type)).toThrowErrorMatchingInlineSnapshot( + `"Type test: provided switchToModelVersionAt (9.2.0) is higher than maximum (8.10.0)"` + ); + }); + }); +}); diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/apply_type_defaults.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/apply_type_defaults.ts new file mode 100644 index 0000000000000..7585fe4ccbd7d --- /dev/null +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/apply_type_defaults.ts @@ -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. + */ + +import Semver from 'semver'; +import type { SavedObjectsType } from '@kbn/core-saved-objects-server'; +import { globalSwitchToModelVersionAt } from '@kbn/core-saved-objects-base-server-internal'; + +/** + * Apply global defaults to the provided SO type. + */ +export const applyTypeDefaults = (type: SavedObjectsType): SavedObjectsType => { + let switchToModelVersionAt = type.switchToModelVersionAt; + if (switchToModelVersionAt) { + if (!Semver.valid(switchToModelVersionAt)) { + throw new Error( + `Type ${type.name}: invalid switchToModelVersionAt provided: ${switchToModelVersionAt}` + ); + } + if (Semver.gt(switchToModelVersionAt, globalSwitchToModelVersionAt)) { + throw new Error( + `Type ${type.name}: provided switchToModelVersionAt (${switchToModelVersionAt}) is higher than maximum (${globalSwitchToModelVersionAt})` + ); + } + } else { + switchToModelVersionAt = globalSwitchToModelVersionAt; + } + + return { + ...type, + switchToModelVersionAt, + }; +}; diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.test.mocks.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.test.mocks.ts index 54090e9fb1b18..f1c3fbe9e5f49 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.test.mocks.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.test.mocks.ts @@ -50,3 +50,12 @@ export const registerRoutesMock = jest.fn(); jest.doMock('./routes', () => ({ registerRoutes: registerRoutesMock, })); + +export const applyTypeDefaultsMock = jest.fn(); +jest.doMock('./apply_type_defaults', () => { + const actual = jest.requireActual('./apply_type_defaults'); + return { + ...actual, + applyTypeDefaults: applyTypeDefaultsMock, + }; +}); diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.test.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.test.ts index 72e36826bb89e..4369a85184262 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.test.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.test.ts @@ -16,6 +16,7 @@ import { migratorInstanceMock, registerRoutesMock, typeRegistryInstanceMock, + applyTypeDefaultsMock, } from './saved_objects_service.test.mocks'; import { BehaviorSubject, firstValueFrom } from 'rxjs'; import { skip } from 'rxjs/operators'; @@ -69,6 +70,7 @@ describe('SavedObjectsService', () => { beforeEach(() => { deprecationsSetup = createDeprecationRegistryProviderMock(); + applyTypeDefaultsMock.mockReset().mockImplementation((type: unknown) => type); }); const createCoreContext = ({ @@ -330,22 +332,50 @@ describe('SavedObjectsService', () => { }); describe('#registerType', () => { - it('registers the type to the internal typeRegistry', async () => { + it('calls `applyTypeDefaults` with the correct parameters', async () => { // we mocked registerCoreObjectTypes above, so this test case only reflects direct calls to the registerType method const coreContext = createCoreContext(); const soService = new SavedObjectsService(coreContext); const setup = await soService.setup(createSetupDeps()); - const type = { + const inputType = { name: 'someType', hidden: false, namespaceType: 'single' as 'single', mappings: { properties: {} }, }; - setup.registerType(type); + + applyTypeDefaultsMock.mockReturnValue(inputType); + + setup.registerType(inputType); + + expect(applyTypeDefaultsMock).toHaveBeenCalledTimes(1); + expect(applyTypeDefaultsMock).toHaveBeenCalledWith(inputType); + }); + + it('registers the type returned by `applyTypeDefaults` to the internal typeRegistry', async () => { + // we mocked registerCoreObjectTypes above, so this test case only reflects direct calls to the registerType method + const coreContext = createCoreContext(); + const soService = new SavedObjectsService(coreContext); + const setup = await soService.setup(createSetupDeps()); + + const inputType = { + name: 'someType', + hidden: false, + namespaceType: 'single' as 'single', + mappings: { properties: {} }, + }; + const returnedType = { + ...inputType, + switchToModelVersionAt: '9.9.9', + }; + + applyTypeDefaultsMock.mockReturnValue(returnedType); + + setup.registerType(inputType); expect(typeRegistryInstanceMock.registerType).toHaveBeenCalledTimes(1); - expect(typeRegistryInstanceMock.registerType).toHaveBeenCalledWith(type); + expect(typeRegistryInstanceMock.registerType).toHaveBeenCalledWith(returnedType); }); }); diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.ts index 1ea6f6b038463..d73073d131084 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/saved_objects_service.ts @@ -57,6 +57,7 @@ import { registerRoutes } from './routes'; import { calculateStatus$ } from './status'; import { registerCoreObjectTypes } from './object_types'; import { getSavedObjectsDeprecationsProvider } from './deprecations'; +import { applyTypeDefaults } from './apply_type_defaults'; /** * @internal @@ -194,7 +195,7 @@ export class SavedObjectsService if (this.started) { throw new Error('cannot call `registerType` after service startup.'); } - this.typeRegistry.registerType(type); + this.typeRegistry.registerType(applyTypeDefaults(type)); }, getTypeRegistry: () => this.typeRegistry, getDefaultIndex: () => MAIN_SAVED_OBJECT_INDEX, diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts index 90874fcc1699e..8d2184c8ed2a0 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts @@ -55,104 +55,104 @@ describe('checking migration metadata changes on all registered SO types', () => expect(hashMap).toMatchInlineSnapshot(` Object { - "action": "12c6b25ef1fffb36d8de893318f8a2bc5d6a46a6", - "action_task_params": "c725c37de66135934150465f9b1e76fe349e8a23", - "alert": "0cd1f1921014004a9ff5c0a9333ca9bde14bf748", - "api_key_pending_invalidation": "16e7bcf8e78764102d7f525542d5b616809a21ee", - "apm-indices": "d19dd7fb51f2d2cbc1f8769481721e0953f9a6d2", - "apm-server-schema": "1d42f17eff9ec6c16d3a9324d9539e2d123d0a9a", - "apm-service-group": "2801c50332e3bf5726c923966c1f19f886e7d389", - "apm-telemetry": "712138c3d5e36d865e67c7fc0171c8a779446e58", - "app_search_telemetry": "9269643c9a5894998b44883f7f7d07a453fd6a95", - "application_usage_daily": "9867f6e1355124f822beab051e0fbac4cc117eac", - "application_usage_totals": "9469a48ab887761a73ee3719b8d401ac627f1eb1", - "canvas-element": "ec334dd45d14291db4d74197e0e42dfe06526868", - "canvas-workpad": "ab0525bd5aa4dbad2d6fdb30e6a51bb475254751", - "canvas-workpad-template": "c54f2a188a1d0bf18a6cebd9d6f28a7337d41bbf", - "cases": "1e86563e8364c69f86b77cb6f2933408dd5b827a", - "cases-comments": "69257ec55e8380fdb2ecbddc83e7c26d2ce2a351", - "cases-configure": "66d4c64d83b464f5166005b8ffa03b721fcaaf8b", - "cases-connector-mappings": "877bb4d52e9821e330622bd75fba799490ec6952", - "cases-telemetry": "fdeddcef28c75d8c66422475a829e75d37f0b668", - "cases-user-actions": "8ad74294b71edffa58fad7a40eea2388209477c9", - "config": "f553a2951fcc93ae94148691abc01f764ce29ec9", - "config-global": "d9791e8f73edee884630e1cb6e4954ae513ce75e", - "connector_token": "aff1aa0ebc0a6b44b570057972af25178b0bca42", + "action": "cc93fe2c0c76e57c2568c63170e05daea897c136", + "action_task_params": "96e27e7f4e8273ffcd87060221e2b75e81912dd5", + "alert": "dc710bc17dfc98a9a703d388569abccce5f8bf07", + "api_key_pending_invalidation": "1399e87ca37b3d3a65d269c924eda70726cfe886", + "apm-indices": "9b550bac232e057ec25585e5cb0b5fa08b88f7dc", + "apm-server-schema": "0012e7afc8dcaf7e0180443a3f105ed461c610a2", + "apm-service-group": "ef3128df3fc95612f141198ae9ef922b5cb6cd04", + "apm-telemetry": "ff679c0ecceff161fd16189150dca256d0904055", + "app_search_telemetry": "36234f19573ad397ac30197c45ac219921cc3106", + "application_usage_daily": "20142d23fe5d05ba22b4bc46614d99883bc488f0", + "application_usage_totals": "a29ab014edc20382b9ce22ede221b18cee5d93a6", + "canvas-element": "b39dfe54b9ff3ecc4c6bc5bed6a14b0a0fe83644", + "canvas-workpad": "4df66cf25eba8e7e25c061a1b2a5aadbb1f436e9", + "canvas-workpad-template": "52a35f737b579a570510fca361fddd158d2a92ad", + "cases": "3d968144040b829dddb8826bad90f9f0ab57a403", + "cases-comments": "ded400d82c5ea26959c2ee8e54896981d499a226", + "cases-configure": "44ed7b8e0f44df39516b8870589b89e32224d2bf", + "cases-connector-mappings": "f9d1ac57e484e69506c36a8051e4d61f4a8cfd25", + "cases-telemetry": "f219eb7e26772884342487fc9602cfea07b3cedc", + "cases-user-actions": "483f10db9b3bd1617948d7032a98b7791bf87414", + "config": "179b3e2bc672626aafce3cf92093a113f456af38", + "config-global": "8e8a134a2952df700d7d4ec51abb794bbd4cf6da", + "connector_token": "5a9ac29fe9c740eb114e9c40517245c71706b005", "core-usage-stats": "b3c04da317c957741ebcdedfea4524049fdc79ff", - "csp-rule-template": "099c229bf97578d9ca72b3a672d397559b84ee0b", - "dashboard": "71e3f8dfcffeb5fbd410dec81ce46f5691763c43", - "endpoint:user-artifact-manifest": "8ad9bd235dcfdc18b567aef0dc36ac686193dc89", - "enterprise_search_telemetry": "4b41830e3b28a16eb92dee0736b44ae6276ced9b", - "epm-packages": "8755f947a00613f994b1bc5d5580e104043e27f6", - "epm-packages-assets": "00c8b5e5bf059627ffc9fbde920e1ac75926c5f6", - "event_loop_delays_daily": "ef49e7f15649b551b458c7ea170f3ed17f89abd0", - "exception-list": "38181294f64fc406c15f20d85ca306c8a4feb3c0", - "exception-list-agnostic": "d527ce9d12b134cb163150057b87529043a8ec77", - "file": "487a562dd895407307980cc4404ca08e87e8999d", - "file-upload-usage-collection-telemetry": "c6fcb9a7efcf19b2bb66ca6e005bfee8961f6073", - "fileShare": "f07d346acbb724eacf139a0fb781c38dc5280115", - "fleet-fleet-server-host": "67180a54a689111fb46403c3603c9b3a329c698d", - "fleet-message-signing-keys": "0c6da6a680807e568540b2aa263ae52331ba66db", - "fleet-preconfiguration-deletion-record": "3afad160748b430427086985a3445fd8697566d5", - "fleet-proxy": "94d0a902a0fd22578d7d3a20873b95d902e25245", - "fleet-uninstall-tokens": "404109e8624f6585e4837a2d01f6e405e0c36d9d", - "graph-workspace": "565642a208fe7413b487aea979b5b153e4e74abe", - "guided-onboarding-guide-state": "3257825ae840309cb676d64b347107db7b76f30a", - "guided-onboarding-plugin-state": "2d3ef3069ca8e981cafe8647c0c4a4c20739db10", - "index-pattern": "cd51191712081278c2af83d16552c3438ef83353", - "infrastructure-monitoring-log-view": "8040108f02ef27419cff79077384379709d44bbc", - "infrastructure-ui-source": "2311f7d0abe2a713aa71e30ee24f78828d4acfc1", - "ingest-agent-policies": "d9906923f595f6f3163672351ed3a46472eb280e", - "ingest-download-sources": "95a15b6589ef46e75aca8f7e534c493f99cc3ccd", - "ingest-outputs": "3025d8c0cc110748bd8012b9bf49af2d7e6a7bf5", - "ingest-package-policies": "b0b652adb1b26d056d8ed3c0303d0ad85c2c1ae9", - "ingest_manager_settings": "fb75bff08a8de3435b23664b1191f9244a255701", - "inventory-view": "6d47ef0b38166ecbd1c2fc7394599a4500db1ae4", - "kql-telemetry": "92d6357aa3ce28727492f86a54783f802dc38893", + "csp-rule-template": "2a9d5f6481d8ca81d6e5ab0a7cc4ba0b59a93420", + "dashboard": "cf7c9c2334decab716fe519780cb4dc52967a91d", + "endpoint:user-artifact-manifest": "1c3533161811a58772e30cdc77bac4631da3ef2b", + "enterprise_search_telemetry": "9ac912e1417fc8681e0cd383775382117c9e3d3d", + "epm-packages": "2449bb565f987eff70b1b39578bb17e90c404c6e", + "epm-packages-assets": "7a3e58efd9a14191d0d1a00b8aaed30a145fd0b1", + "event_loop_delays_daily": "01b967e8e043801357503de09199dfa3853bab88", + "exception-list": "4aebc4e61fb5d608cae48eaeb0977e8db21c61a4", + "exception-list-agnostic": "6d3262d58eee28ac381ec9654f93126a58be6f5d", + "file": "6b65ae5899b60ebe08656fd163ea532e557d3c98", + "file-upload-usage-collection-telemetry": "06e0a8c04f991e744e09d03ab2bd7f86b2088200", + "fileShare": "5be52de1747d249a221b5241af2838264e19aaa1", + "fleet-fleet-server-host": "b04898fcde07f4ce86e844c8fe2f4b23b77ef60a", + "fleet-message-signing-keys": "93421f43fed2526b59092a4e3c65d64bc2266c0f", + "fleet-preconfiguration-deletion-record": "c52ea1e13c919afe8a5e8e3adbb7080980ecc08e", + "fleet-proxy": "6cb688f0d2dd856400c1dbc998b28704ff70363d", + "fleet-uninstall-tokens": "d25a8aedb522d2b839ab0950160777528122070f", + "graph-workspace": "5cc6bb1455b078fd848c37324672163f09b5e376", + "guided-onboarding-guide-state": "d338972ed887ac480c09a1a7fbf582d6a3827c91", + "guided-onboarding-plugin-state": "bc109e5ef46ca594fdc179eda15f3095ca0a37a4", + "index-pattern": "997108a9ea1e8076e22231e1c95517cdb192b9c5", + "infrastructure-monitoring-log-view": "5f86709d3c27aed7a8379153b08ee5d3d90d77f5", + "infrastructure-ui-source": "113182d6895764378dfe7fa9fa027244f3a457c4", + "ingest-agent-policies": "8a91f7b9507605222901543167f48c313591daec", + "ingest-download-sources": "d7edc5e588d9afa61c4b831604582891c54ef1c7", + "ingest-outputs": "3f1e998887d48a706333b67885d1ad8f3217cd90", + "ingest-package-policies": "7d0e8d288e193e0a8a153bb420c6056bc862c4c3", + "ingest_manager_settings": "418311b03c8eda53f5d2ea6f54c1356afaa65511", + "inventory-view": "b8683c8e352a286b4aca1ab21003115a4800af83", + "kql-telemetry": "93c1d16c1a0dfca9c8842062cf5ef8f62ae401ad", "legacy-url-alias": "9b8cca3fbb2da46fd12823d3cd38fdf1c9f24bc8", - "lens": "2f6a8231591e3d62a83506b19e165774d74588ea", - "lens-ui-telemetry": "d6c4e330d170eefc6214dbf77a53de913fa3eebc", - "maintenance-window": "a9777f4e71381c56b4422bf8d30f626bde301c79", - "map": "7902b2e2a550e0b73fd5aa6c4e2ba3a4e6558877", - "metrics-explorer-view": "713dbf1ab5e067791d19170f715eb82cf07ebbcc", - "ml-job": "12e21f1b1adfcc1052dc0b10c7459de875653b94", - "ml-module": "c88b6a012cfb7b7adb7629b1edeab6b83f1fd048", - "ml-trained-model": "49a1685d79990ad05ea1d1d30e28456fe002f3b9", - "monitoring-telemetry": "24f7393dfacb6c7b0f7ad7d242171a1c29feaa48", - "osquery-manager-usage-metric": "23a8f08a98dd0f58ab4e559daa35b06edc40ed4f", - "osquery-pack": "edd84b2c59ef36214ece0676706da8f22175c660", - "osquery-pack-asset": "18e08979d46ee7e5538f54c080aec4d8c58516ca", - "osquery-saved-query": "f5e4e303f65c7607248ea8b2672f1ee30e4fb15e", - "query": "cfc049e1f0574fb4fdb2d653d7c10bdc970a2610", - "rules-settings": "eb8d40b7d60aeffe66831f7d5d83de28d85776d8", - "sample-data-telemetry": "c38daf1a49ed24f2a4fb091e6e1e833fccf19935", - "search": "ed3a9b1681b57d69560909d51933fdf17576ea68", - "search-session": "fae0dfc63274d6a3b90ca583802c48cab8760637", - "search-telemetry": "1bbaf2db531b97fa04399440fa52d46e86d54dd8", - "security-rule": "151108f4906744a137ddc89f5988310c5b9ba8b6", - "security-solution-signals-migration": "0be3bed0f2ff4fe460493751b8be610a785c5c98", - "siem-detection-engine-rule-actions": "123c130dc38120a470d8db9fed9a4cebd2046445", - "siem-ui-timeline": "e9d6b3a9fd7af6dc502293c21cbdb309409f3996", - "siem-ui-timeline-note": "13c9d4c142f96624a93a623c6d7cba7e1ae9b5a6", - "siem-ui-timeline-pinned-event": "96a43d59b9e2fc11f12255a0cb47ef0a3d83af4c", - "slo": "aefffabdb35d15a6c388634af2cee1fa59ede83c", - "space": "168a35eab6fc40eceacc4731c8b8d8af114e27c4", - "spaces-usage-stats": "084bd0f080f94fb5735d7f3cf12f13ec92f36bad", - "synthetics-monitor": "fa988678e5d6791c75515fa1acdbbb3b2d1f916d", - "synthetics-param": "9776c9b571d35f0d0397e8915e035ea1dc026db7", - "synthetics-privates-locations": "7d032fc788905e32152029ae7ab3d6038c48ae44", - "tag": "87f21f07df9cc37001b15a26e413c18f50d1fbfe", - "task": "533ee80c50c47f0505846bfac73fc10962c5bc45", - "telemetry": "3b3b89cf411a2a2e60487cef6ccdbc5df691aeb9", - "ui-metric": "410a8ad28e0f44b161c960ff0ce950c712b17c52", - "upgrade-assistant-ml-upgrade-operation": "d8816e5ce32649e7a3a43e2c406c632319ff84bb", - "upgrade-assistant-reindex-operation": "09ac8ed9c9acf7e8ece8eafe47d7019ea1472144", - "uptime-dynamic-settings": "9a63ce80904a04be114749e426882dc3ff011137", - "uptime-synthetics-api-key": "599319bedbfa287e8761e1ba49d536417a33fa13", - "url": "816fa15bfe460ce39108ed8095e60fdbfcc40f11", - "usage-counters": "f478b2668be350f5bdc08d9e1cf6fbce0e079f61", - "visualization": "cee4d02c56af349054642c6744bf9c471c1ad941", - "workplace_search_telemetry": "10e278fe9ae1396bfc36ae574bc387d7e696d43f", + "lens": "fd6a7938f41888e5ee499fcc5e749489981393aa", + "lens-ui-telemetry": "8c47a9e393861f76e268345ecbadfc8a5fb1e0bd", + "maintenance-window": "d893544460abad56ff7a0e25b78f78776dfe10d1", + "map": "76c71023bd198fb6b1163b31bafd926fe2ceb9da", + "metrics-explorer-view": "98cf395d0e87b89ab63f173eae16735584a8ff42", + "ml-job": "150e1ab260e87f9963cc99e013304b9c54703dab", + "ml-module": "2225cbb4bd508ea5f69db4b848be9d8a74b60198", + "ml-trained-model": "482195cefd6b04920e539d34d7356d22cb68e4f3", + "monitoring-telemetry": "5d91bf75787d9d4dd2fae954d0b3f76d33d2e559", + "osquery-manager-usage-metric": "983bcbc3b7dda0aad29b20907db233abba709bcc", + "osquery-pack": "6ab4358ca4304a12dcfc1777c8135b75cffb4397", + "osquery-pack-asset": "b14101d3172c4b60eb5404696881ce5275c84152", + "osquery-saved-query": "44f1161e165defe3f9b6ad643c68c542a765fcdb", + "query": "8db5d48c62d75681d80d82a42b5642f60d068202", + "rules-settings": "892a2918ebaeba809a612b8d97cec0b07c800b5f", + "sample-data-telemetry": "37441b12f5b0159c2d6d5138a494c9f440e950b5", + "search": "8d5184dd5b986d57250b6ffd9ae48a1925e4c7a3", + "search-session": "b2fcd840e12a45039ada50b1355faeafa39876d1", + "search-telemetry": "b568601618744720b5662946d3103e3fb75fe8ee", + "security-rule": "07abb4d7e707d91675ec0495c73816394c7b521f", + "security-solution-signals-migration": "9d99715fe5246f19de2273ba77debd2446c36bb1", + "siem-detection-engine-rule-actions": "54f08e23887b20da7c805fab7c60bc67c428aff9", + "siem-ui-timeline": "670a02b3c2a399bca781ff1e4781793b208b471a", + "siem-ui-timeline-note": "0a32fb776907f596bedca292b8c646496ae9c57b", + "siem-ui-timeline-pinned-event": "082daa3ce647b33873f6abccf340bdfa32057c8d", + "slo": "4415e0ae7af10b79a207843acee454a931a01386", + "space": "8de4ec513e9bbc6b2f1d635161d850be7747d38e", + "spaces-usage-stats": "3abca98713c52af8b30300e386c7779b3025a20e", + "synthetics-monitor": "ca7c0710c0607e44b2c52e5a41086b8b4a214f63", + "synthetics-param": "3ebb744e5571de678b1312d5c418c8188002cf5e", + "synthetics-privates-locations": "9cfbd6d1d2e2c559bf96dd6fbc27ff0c47719dd3", + "tag": "e2544392fe6563e215bb677abc8b01c2601ef2dc", + "task": "04f30bd7bae923f3a53c31ab3b9745a93872fc02", + "telemetry": "7b00bcf1c7b4f6db1192bb7405a6a63e78b699fd", + "ui-metric": "d227284528fd19904e9d972aea0a13716fc5fe24", + "upgrade-assistant-ml-upgrade-operation": "421f52731cb24e242d70672ba4725e169277efb3", + "upgrade-assistant-reindex-operation": "01f3c3e051659ace56492a73928987e717537a93", + "uptime-dynamic-settings": "a9e9c42d8c1b6643946f32558478b274de0f89e0", + "uptime-synthetics-api-key": "7ae976a461248f9dbd8442af14a179bdbc229eca", + "url": "c923a4a5002a09c0080c9095e958f07d518e6704", + "usage-counters": "48782b3bcb6b5a23ba6f2bfe3a380d835e68890a", + "visualization": "93a3e73994ad836fe2b1dccbe208238f41f63da0", + "workplace_search_telemetry": "52b32b47ee576f554ac77cb1d5896dfbcfe9a1fb", } `); });