Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Synthetics] Add push monitor api #131270

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
6645147
adjust monitor schema
dominiqueclarke Apr 29, 2022
0609acb
adjust secrets formatting and normalizing
dominiqueclarke Apr 29, 2022
98ef413
adjust telemetry
dominiqueclarke Apr 29, 2022
8bf704e
adjust monitor validation tests
dominiqueclarke Apr 29, 2022
dead4ff
adjust imports
dominiqueclarke Apr 29, 2022
b5403b4
adjust telemetry types
dominiqueclarke Apr 29, 2022
a826d30
add push browser monitor types
dominiqueclarke Apr 29, 2022
96f87b5
export add and edit monitor helpers
dominiqueclarke Apr 29, 2022
9071b40
add push monitor api
dominiqueclarke May 2, 2022
7673e57
adjust formatters and normalizers
dominiqueclarke May 2, 2022
b183ba3
Merge branch 'main' of github.com:elastic/kibana into feature/synthet…
dominiqueclarke May 2, 2022
e4dbe4f
remove unused import
dominiqueclarke May 2, 2022
8d6e8b0
remove log statement
dominiqueclarke May 2, 2022
dab30a3
add push monitors route
dominiqueclarke May 6, 2022
bb85e7a
Merge branch 'main' of github.com:elastic/kibana into feature/synthet…
dominiqueclarke May 9, 2022
ba5d12c
update tests
dominiqueclarke May 9, 2022
f6e3921
add playwright options, filter match, and params
dominiqueclarke May 9, 2022
a4d311d
adjust tests
dominiqueclarke May 9, 2022
2deb0d6
adjust tests
dominiqueclarke May 9, 2022
5c21e23
adjust monitor type
dominiqueclarke May 9, 2022
92b0746
adjust types
dominiqueclarke May 9, 2022
14e4c44
Merge branch 'main' of github.com:elastic/kibana into feature/synthet…
dominiqueclarke May 9, 2022
4b3e7ca
add validation and error message shape
dominiqueclarke May 10, 2022
502649b
update fixture
dominiqueclarke May 10, 2022
0f3573d
adjust types
dominiqueclarke May 10, 2022
4a49b2c
adjust normalizers
dominiqueclarke May 10, 2022
04081f5
Update x-pack/plugins/synthetics/server/rest_api/synthetics_service/a…
dominiqueclarke May 10, 2022
7653ae0
Update x-pack/plugins/synthetics/common/constants/rest_api.ts
dominiqueclarke May 10, 2022
38e82aa
quote queries
dominiqueclarke May 10, 2022
e52700b
Merge branch 'feature/synthetics-push-monitors' of https://github.com…
dominiqueclarke May 10, 2022
c13d5c0
adjust source.pushed.content
dominiqueclarke May 12, 2022
8e66ba9
merge upstream
dominiqueclarke May 15, 2022
b984a29
adjust test fixtures
dominiqueclarke May 15, 2022
9c94dec
add journey and project id validation
dominiqueclarke May 16, 2022
9812133
Update x-pack/plugins/synthetics/server/rest_api/synthetics_service/a…
dominiqueclarke May 16, 2022
25e55d9
Update x-pack/plugins/synthetics/server/rest_api/synthetics_service/a…
dominiqueclarke May 16, 2022
0b89a0b
merge upstream
dominiqueclarke May 16, 2022
519f98b
Merge branch 'feature/synthetics-push-monitors' of https://github.com…
dominiqueclarke May 16, 2022
1a50b86
adjust test fixture
dominiqueclarke May 16, 2022
8a80e65
adjust import
dominiqueclarke May 17, 2022
4db8490
Merge branch 'main' of github.com:elastic/kibana into feature/synthet…
dominiqueclarke May 17, 2022
373ff73
update push monitor api to use a class
dominiqueclarke May 17, 2022
f7775ae
add namespace
dominiqueclarke May 17, 2022
ce0dab8
Merge branch 'main' of github.com:elastic/kibana into feature/synthet…
dominiqueclarke May 17, 2022
eafcbab
adjust types and tests
dominiqueclarke May 18, 2022
a9cbdf4
update test now
dominiqueclarke May 18, 2022
74ff776
adjust id
dominiqueclarke May 18, 2022
d2ce516
adjust browser timeout
dominiqueclarke May 18, 2022
c9fa14b
adjust test now
dominiqueclarke May 18, 2022
493ed2f
adjust types
dominiqueclarke May 18, 2022
b82e50f
adjust id logic
dominiqueclarke May 18, 2022
2c9093c
add enabled key
dominiqueclarke May 18, 2022
b0712e3
rename variables
dominiqueclarke May 19, 2022
bbe93f3
adjust tests
dominiqueclarke May 19, 2022
f6c5378
rename is_push_monitor to source_type
dominiqueclarke May 19, 2022
ecd04e1
adjust tests
dominiqueclarke May 19, 2022
4f02c18
adjust test
dominiqueclarke May 19, 2022
8eb5bce
Merge branch 'main' into feature/synthetics-push-monitors
kibanamachine May 19, 2022
ff282fa
update project monitor source
dominiqueclarke May 20, 2022
7f48719
add monitor.source
dominiqueclarke May 20, 2022
8f89640
Merge branch 'feature/synthetics-push-monitors' of https://github.com…
dominiqueclarke May 20, 2022
463de3f
adjust tests
dominiqueclarke May 20, 2022
32e9cac
adjust validation logic
dominiqueclarke May 20, 2022
2823548
rename config key
dominiqueclarke May 20, 2022
f570715
rename monitor source type
dominiqueclarke May 20, 2022
76a3269
add read only view
dominiqueclarke May 22, 2022
913f44d
update throttling config
dominiqueclarke May 22, 2022
9502b2a
Merge branch 'main' into feature/synthetics-push-monitors
kibanamachine May 22, 2022
8a8723f
disable enabled toggle
dominiqueclarke May 23, 2022
b28eae6
Merge branch 'feature/synthetics-push-monitors' of https://github.com…
dominiqueclarke May 23, 2022
72f2a92
adjust read only state
dominiqueclarke May 23, 2022
9af59f2
fix screenshots
dominiqueclarke May 23, 2022
017747a
remove unused fields from readonly
dominiqueclarke May 23, 2022
378dc42
adjust types
dominiqueclarke May 23, 2022
7477fe6
[CI] Auto-commit changed files from 'node scripts/precommit_hook.js -…
kibanamachine May 23, 2022
5da7b2d
merge main
dominiqueclarke May 24, 2022
b026d9e
adjust monitor details logic for falling back to saved objects
dominiqueclarke May 24, 2022
0205cb6
Merge branch 'feature/synthetics-push-monitors' of https://github.com…
dominiqueclarke May 24, 2022
e832b56
remove journey id and project id validation
dominiqueclarke May 24, 2022
5cf6ffc
adjust tests
dominiqueclarke May 24, 2022
deed911
lint fix
shahzad31 May 24, 2022
a6b7bd4
Merge branch 'main' into feature/synthetics-push-monitors
kibanamachine May 24, 2022
0b34ad2
update test
dominiqueclarke May 24, 2022
368273f
Merge branch 'feature/synthetics-push-monitors' of https://github.com…
dominiqueclarke May 24, 2022
143bb63
adjust types
dominiqueclarke May 24, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions x-pack/plugins/synthetics/common/constants/monitor_defaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {
ResponseBodyIndexPolicy,
ScheduleUnit,
ScreenshotOption,
SourceType,
TCPAdvancedFields,
TCPSimpleFields,
TLSFields,
Expand All @@ -41,6 +42,7 @@ export const DEFAULT_COMMON_FIELDS: CommonFields = {
[ConfigKey.NAME]: '',
[ConfigKey.LOCATIONS]: [],
[ConfigKey.NAMESPACE]: DEFAULT_NAMESPACE_STRING,
[ConfigKey.MONITOR_SOURCE_TYPE]: SourceType.UI,
};

export const DEFAULT_BROWSER_ADVANCED_FIELDS: BrowserAdvancedFields = {
Expand All @@ -58,10 +60,9 @@ export const DEFAULT_BROWSER_ADVANCED_FIELDS: BrowserAdvancedFields = {

export const DEFAULT_BROWSER_SIMPLE_FIELDS: BrowserSimpleFields = {
...DEFAULT_COMMON_FIELDS,
[ConfigKey.SCHEDULE]: {
unit: ScheduleUnit.MINUTES,
number: '10',
},
[ConfigKey.JOURNEY_ID]: '',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what's JOURNEY_ID here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Journey ID is the the user-provided id for the journey.

[ConfigKey.PROJECT_ID]: '',
[ConfigKey.PLAYWRIGHT_OPTIONS]: '',
[ConfigKey.METADATA]: {
script_source: {
is_generated_script: false,
Expand All @@ -70,21 +71,26 @@ export const DEFAULT_BROWSER_SIMPLE_FIELDS: BrowserSimpleFields = {
is_zip_url_tls_enabled: false,
},
[ConfigKey.MONITOR_TYPE]: DataStream.BROWSER,
[ConfigKey.PARAMS]: '',
[ConfigKey.PORT]: undefined,
[ConfigKey.SCHEDULE]: {
unit: ScheduleUnit.MINUTES,
number: '10',
},
[ConfigKey.SOURCE_INLINE]: '',
[ConfigKey.SOURCE_PROJECT_CONTENT]: '',
[ConfigKey.SOURCE_ZIP_URL]: '',
[ConfigKey.SOURCE_ZIP_USERNAME]: '',
[ConfigKey.SOURCE_ZIP_PASSWORD]: '',
[ConfigKey.SOURCE_ZIP_FOLDER]: '',
[ConfigKey.SOURCE_ZIP_PROXY_URL]: '',
[ConfigKey.PARAMS]: '',
[ConfigKey.ZIP_URL_TLS_CERTIFICATE_AUTHORITIES]: undefined,
[ConfigKey.ZIP_URL_TLS_CERTIFICATE]: undefined,
[ConfigKey.ZIP_URL_TLS_KEY]: undefined,
[ConfigKey.ZIP_URL_TLS_KEY_PASSPHRASE]: undefined,
[ConfigKey.ZIP_URL_TLS_VERIFICATION_MODE]: undefined,
[ConfigKey.ZIP_URL_TLS_VERSION]: undefined,
[ConfigKey.URLS]: undefined,
[ConfigKey.PORT]: undefined,
[ConfigKey.URLS]: '',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just for the sanity purpose, we should probably sort these keys in alphabetical order

};

export const DEFAULT_HTTP_SIMPLE_FIELDS: HTTPSimpleFields = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@
// values must match keys in the integration package
export enum ConfigKey {
APM_SERVICE_NAME = 'service.name',
CUSTOM_HEARTBEAT_ID = 'custom_heartbeat_id',
ENABLED = 'enabled',
HOSTS = 'hosts',
IGNORE_HTTPS_ERRORS = 'ignore_https_errors',
MONITOR_SOURCE_TYPE = 'monitor.origin',
JOURNEY_FILTERS_MATCH = 'filter_journeys.match',
JOURNEY_FILTERS_TAGS = 'filter_journeys.tags',
JOURNEY_ID = 'journey_id',
MAX_REDIRECTS = 'max_redirects',
METADATA = '__ui',
MONITOR_TYPE = 'type',
Expand All @@ -21,6 +24,9 @@ export enum ConfigKey {
LOCATIONS = 'locations',
PARAMS = 'params',
PASSWORD = 'password',
PLAYWRIGHT_OPTIONS = 'playwright_options',
ORIGINAL_SPACE = 'original_space', // the original space the montior was saved in. Used by push monitors to ensure uniqueness of monitor id sent to heartbeat and prevent data collisions
PORT = 'url.port',
PROXY_URL = 'proxy_url',
PROXY_USE_LOCAL_RESOLVER = 'proxy_use_local_resolver',
RESPONSE_BODY_CHECK_NEGATIVE = 'check.response.body.negative',
Expand All @@ -37,12 +43,14 @@ export enum ConfigKey {
REVISION = 'revision',
SCHEDULE = 'schedule',
SCREENSHOTS = 'screenshots',
SOURCE_PROJECT_CONTENT = 'source.project.content',
SOURCE_INLINE = 'source.inline.script',
SOURCE_ZIP_URL = 'source.zip_url.url',
SOURCE_ZIP_USERNAME = 'source.zip_url.username',
SOURCE_ZIP_PASSWORD = 'source.zip_url.password',
SOURCE_ZIP_FOLDER = 'source.zip_url.folder',
SOURCE_ZIP_PROXY_URL = 'source.zip_url.proxy_url',
PROJECT_ID = 'project_id',
SYNTHETICS_ARGS = 'synthetics_args',
TLS_CERTIFICATE_AUTHORITIES = 'ssl.certificate_authorities',
TLS_CERTIFICATE = 'ssl.certificate',
Expand All @@ -58,7 +66,6 @@ export enum ConfigKey {
UPLOAD_SPEED = 'throttling.upload_speed',
LATENCY = 'throttling.latency',
URLS = 'urls',
PORT = 'url.port',
USERNAME = 'username',
WAIT = 'wait',
ZIP_URL_TLS_CERTIFICATE_AUTHORITIES = 'source.zip_url.ssl.certificate_authorities',
Expand All @@ -80,6 +87,7 @@ export const secretKeys = [
ConfigKey.RESPONSE_HEADERS_CHECK,
ConfigKey.RESPONSE_RECEIVE_CHECK,
ConfigKey.SOURCE_INLINE,
ConfigKey.SOURCE_PROJECT_CONTENT,
ConfigKey.SOURCE_ZIP_USERNAME,
ConfigKey.SOURCE_ZIP_PASSWORD,
ConfigKey.SYNTHETICS_ARGS,
Expand Down
3 changes: 3 additions & 0 deletions x-pack/plugins/synthetics/common/constants/rest_api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,7 @@ export enum API_URLS {
RUN_ONCE_MONITOR = '/internal/uptime/service/monitors/run_once',
TRIGGER_MONITOR = '/internal/uptime/service/monitors/trigger',
SERVICE_ALLOWED = '/internal/uptime/service/allowed',

// Project monitor public endpoint
SYNTHETICS_MONITORS_PROJECT = '/api/synthetics/service/project/monitors',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
SYNTHETICS_MONITORS_PROJECT = '/api/synthetics/service/project/monitors',
SYNTHETICS_MONITORS_PROJECT = '/api/synthetics/project/monitors',

i am 50/50 on this

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ export * from './config_key';
export * from './monitor_configs';
export * from './monitor_meta_data';
export * from './monitor_types';
export * from './monitor_types_project';
export * from './locations';
Original file line number Diff line number Diff line change
Expand Up @@ -119,3 +119,10 @@ export enum ThrottlingSuffix {

export const ThrottlingSuffixCodec = tEnum<ThrottlingSuffix>('ThrottlingSuffix', ThrottlingSuffix);
export type ThrottlingSuffixType = t.TypeOf<typeof ThrottlingSuffixCodec>;

export enum SourceType {
UI = 'ui',
PROJECT = 'project',
}

export const SourceTypeCodec = tEnum<SourceType>('SourceType', SourceType);
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
ModeCodec,
ResponseBodyIndexPolicyCodec,
ScheduleUnitCodec,
SourceTypeCodec,
TLSVersionCodec,
VerificationModeCodec,
} from './monitor_configs';
Expand Down Expand Up @@ -76,6 +77,7 @@ export const CommonFieldsCodec = t.intersection([
t.partial({
[ConfigKey.TIMEOUT]: t.union([t.string, t.null]),
[ConfigKey.REVISION]: t.number,
[ConfigKey.MONITOR_SOURCE_TYPE]: SourceTypeCodec,
}),
]);

Expand Down Expand Up @@ -200,12 +202,21 @@ export const ThrottlingConfigKeyCodec = t.union([
export type ThrottlingConfigKey = t.TypeOf<typeof ThrottlingConfigKeyCodec>;

export const EncryptedBrowserSimpleFieldsCodec = t.intersection([
t.interface({
[ConfigKey.METADATA]: MetadataCodec,
[ConfigKey.SOURCE_ZIP_URL]: t.string,
[ConfigKey.SOURCE_ZIP_FOLDER]: t.string,
[ConfigKey.SOURCE_ZIP_PROXY_URL]: t.string,
}),
t.intersection([
t.interface({
[ConfigKey.METADATA]: MetadataCodec,
[ConfigKey.SOURCE_ZIP_URL]: t.string,
[ConfigKey.SOURCE_ZIP_FOLDER]: t.string,
[ConfigKey.SOURCE_ZIP_PROXY_URL]: t.string,
}),
t.partial({
[ConfigKey.PLAYWRIGHT_OPTIONS]: t.string,
[ConfigKey.JOURNEY_ID]: t.string,
[ConfigKey.PROJECT_ID]: t.string,
[ConfigKey.ORIGINAL_SPACE]: t.string,
[ConfigKey.CUSTOM_HEARTBEAT_ID]: t.string,
}),
]),
ZipUrlTLSFieldsCodec,
ZipUrlTLSSensitiveFieldsCodec,
CommonFieldsCodec,
Expand All @@ -214,6 +225,7 @@ export const EncryptedBrowserSimpleFieldsCodec = t.intersection([
export const BrowserSensitiveSimpleFieldsCodec = t.intersection([
t.interface({
[ConfigKey.SOURCE_INLINE]: t.string,
[ConfigKey.SOURCE_PROJECT_CONTENT]: t.string,
[ConfigKey.SOURCE_ZIP_USERNAME]: t.string,
[ConfigKey.SOURCE_ZIP_PASSWORD]: t.string,
[ConfigKey.PARAMS]: t.string,
Expand Down
Original file line number Diff line number Diff line change
@@ -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; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import * as t from 'io-ts';
import { ScreenshotOptionCodec } from './monitor_configs';

export const ProjectMonitorThrottlingConfigCodec = t.interface({
download: t.number,
upload: t.number,
latency: t.number,
});

export const ProjectBrowserMonitorCodec = t.intersection([
t.interface({
id: t.string,
name: t.string,
schedule: t.number,
content: t.string,
locations: t.array(t.string),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what happens when user doesn't provide these?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adjusted the logic to make it required. Now if the user doesn't pass it, it'll end up in the failedMonitors list.

}),
t.partial({
throttling: ProjectMonitorThrottlingConfigCodec,
screenshot: ScreenshotOptionCodec,
tags: t.array(t.string),
ignoreHTTPSErrors: t.boolean,
apmServiceName: t.string,
playwrightOptions: t.record(t.string, t.unknown),
filter: t.interface({
match: t.string,
}),
params: t.record(t.string, t.unknown),
enabled: t.boolean,
}),
]);

export const ProjectMonitorsRequestCodec = t.interface({
project: t.string,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
project: t.string,
projectId: t.string,

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's project from the synthetics agent side. I could ask @vigneshshanmugam to change it. I prefer using the Id postfix for things, but I didn't want to enforce that on the synthetics agent and Vignesh.

keep_stale: t.boolean,
monitors: t.array(ProjectBrowserMonitorCodec),
});

export type ProjectMonitorThrottlingConfig = t.TypeOf<typeof ProjectMonitorThrottlingConfigCodec>;

export type ProjectBrowserMonitor = t.TypeOf<typeof ProjectBrowserMonitorCodec>;

export type ProjectMonitorsRequest = t.TypeOf<typeof ProjectMonitorsRequestCodec>;
3 changes: 2 additions & 1 deletion x-pack/plugins/synthetics/kibana.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
"taskManager",
"triggersActionsUi",
"usageCollection",
"unifiedSearch"
"unifiedSearch",
"spaces"
],
"server": true,
"ui": true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ export const browserFormatters: BrowserFormatMap = {
[ConfigKey.SOURCE_ZIP_PASSWORD]: null,
[ConfigKey.SOURCE_ZIP_FOLDER]: null,
[ConfigKey.SOURCE_ZIP_PROXY_URL]: null,
[ConfigKey.SOURCE_PROJECT_CONTENT]: null,
[ConfigKey.SOURCE_INLINE]: (fields) => stringToJsonFormatter(fields[ConfigKey.SOURCE_INLINE]),
[ConfigKey.PARAMS]: null,
[ConfigKey.SCREENSHOTS]: null,
Expand All @@ -71,5 +72,10 @@ export const browserFormatters: BrowserFormatMap = {
arrayToJsonFormatter(fields[ConfigKey.JOURNEY_FILTERS_TAGS]),
[ConfigKey.THROTTLING_CONFIG]: throttlingFormatter,
[ConfigKey.IGNORE_HTTPS_ERRORS]: null,
[ConfigKey.JOURNEY_ID]: null,
[ConfigKey.PROJECT_ID]: null,
[ConfigKey.PLAYWRIGHT_OPTIONS]: null,
[ConfigKey.CUSTOM_HEARTBEAT_ID]: null,
[ConfigKey.ORIGINAL_SPACE]: null,
...commonFormatters,
};
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ export const browserNormalizers: BrowserNormalizerMap = {
[ConfigKey.SOURCE_ZIP_USERNAME]: getBrowserNormalizer(ConfigKey.SOURCE_ZIP_USERNAME),
[ConfigKey.SOURCE_ZIP_PASSWORD]: getBrowserNormalizer(ConfigKey.SOURCE_ZIP_PASSWORD),
[ConfigKey.SOURCE_ZIP_FOLDER]: getBrowserNormalizer(ConfigKey.SOURCE_ZIP_FOLDER),
[ConfigKey.SOURCE_PROJECT_CONTENT]: getBrowserNormalizer(ConfigKey.SOURCE_PROJECT_CONTENT),
[ConfigKey.SOURCE_INLINE]: getBrowserJsonToJavascriptNormalizer(ConfigKey.SOURCE_INLINE),
[ConfigKey.SOURCE_ZIP_PROXY_URL]: getBrowserNormalizer(ConfigKey.SOURCE_ZIP_PROXY_URL),
[ConfigKey.PARAMS]: getBrowserNormalizer(ConfigKey.PARAMS),
Expand Down Expand Up @@ -106,5 +107,10 @@ export const browserNormalizers: BrowserNormalizerMap = {
ConfigKey.JOURNEY_FILTERS_TAGS
),
[ConfigKey.IGNORE_HTTPS_ERRORS]: getBrowserNormalizer(ConfigKey.IGNORE_HTTPS_ERRORS),
[ConfigKey.JOURNEY_ID]: getBrowserNormalizer(ConfigKey.JOURNEY_ID),
[ConfigKey.PROJECT_ID]: getBrowserNormalizer(ConfigKey.PROJECT_ID),
[ConfigKey.PLAYWRIGHT_OPTIONS]: getBrowserNormalizer(ConfigKey.PLAYWRIGHT_OPTIONS),
[ConfigKey.CUSTOM_HEARTBEAT_ID]: getBrowserNormalizer(ConfigKey.CUSTOM_HEARTBEAT_ID),
[ConfigKey.ORIGINAL_SPACE]: getBrowserNormalizer(ConfigKey.ORIGINAL_SPACE),
...commonNormalizers,
};
Loading