diff --git a/.ci/Jenkinsfile_baseline_capture b/.ci/Jenkinsfile_baseline_capture
index 791cacf7abb4c6..6993dc9e087f97 100644
--- a/.ci/Jenkinsfile_baseline_capture
+++ b/.ci/Jenkinsfile_baseline_capture
@@ -12,7 +12,17 @@ kibanaPipeline(timeoutMinutes: 120) {
]) {
parallel([
'oss-baseline': {
- workers.ci(name: 'oss-baseline', size: 'l', ramDisk: true, runErrorReporter: false) {
+ workers.ci(name: 'oss-baseline', size: 'l', ramDisk: true, runErrorReporter: false, bootstrapped: false) {
+ // bootstrap ourselves, but with the env needed to upload the ts refs cache
+ withGcpServiceAccount.fromVaultSecret('secret/kibana-issues/dev/ci-artifacts-key', 'value') {
+ withEnv([
+ 'BUILD_TS_REFS_CACHE_ENABLE=true',
+ 'BUILD_TS_REFS_CACHE_CAPTURE=true'
+ ]) {
+ kibanaPipeline.doSetup()
+ }
+ }
+
kibanaPipeline.functionalTestProcess('oss-baseline', './test/scripts/jenkins_baseline.sh')()
}
},
diff --git a/.eslintignore b/.eslintignore
index 5513ad1320232c..ea8ab55ad77269 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -22,7 +22,7 @@ snapshots.js
/src/core/lib/kbn_internal_native_observable
/src/legacy/plugin_discovery/plugin_pack/__tests__/fixtures/plugins/broken
/src/plugins/data/common/es_query/kuery/ast/_generated_/**
-/src/plugins/vis_type_timelion/public/_generated_/**
+/src/plugins/vis_type_timelion/common/_generated_/**
/x-pack/legacy/plugins/**/__tests__/fixtures/**
/x-pack/plugins/apm/e2e/tmp/*
/x-pack/plugins/canvas/canvas_plugin
diff --git a/.stylelintrc b/.stylelintrc
index 29c1f4b552b48a..26431cfee6f1d7 100644
--- a/.stylelintrc
+++ b/.stylelintrc
@@ -32,6 +32,7 @@ rules:
- function
- return
- for
+ - at-root
comment-no-empty: true
no-duplicate-at-import-rules: true
no-duplicate-selectors: true
diff --git a/common/graphql/introspection.json b/common/graphql/introspection.json
deleted file mode 100644
index 3ebb95e26da8d5..00000000000000
--- a/common/graphql/introspection.json
+++ /dev/null
@@ -1,2650 +0,0 @@
-{
- "__schema": {
- "queryType": { "name": "Query" },
- "mutationType": null,
- "subscriptionType": null,
- "types": [
- {
- "kind": "OBJECT",
- "name": "Query",
- "description": "",
- "fields": [
- {
- "name": "allPings",
- "description": "Get a list of all recorded pings for all monitors",
- "args": [
- {
- "name": "sort",
- "description": "",
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "defaultValue": null
- },
- {
- "name": "size",
- "description": "",
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "defaultValue": null
- },
- {
- "name": "monitorId",
- "description": "",
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "defaultValue": null
- },
- {
- "name": "status",
- "description": "",
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "defaultValue": null
- },
- {
- "name": "dateRangeStart",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null }
- },
- "defaultValue": null
- },
- {
- "name": "dateRangeEnd",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null }
- },
- "defaultValue": null
- }
- ],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "Ping", "ofType": null }
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "getDocCount",
- "description": "Gets the number of documents in the target index",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "DocCount", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "getMonitors",
- "description": "",
- "args": [
- {
- "name": "dateRangeStart",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- },
- {
- "name": "dateRangeEnd",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- },
- {
- "name": "filters",
- "description": "",
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "defaultValue": null
- }
- ],
- "type": { "kind": "OBJECT", "name": "LatestMonitorsResult", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "getSnapshot",
- "description": "",
- "args": [
- {
- "name": "dateRangeStart",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- },
- {
- "name": "dateRangeEnd",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- },
- {
- "name": "downCount",
- "description": "",
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "defaultValue": null
- },
- {
- "name": "windowSize",
- "description": "",
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "defaultValue": null
- },
- {
- "name": "filters",
- "description": "",
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "defaultValue": null
- }
- ],
- "type": { "kind": "OBJECT", "name": "Snapshot", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "getMonitorChartsData",
- "description": "",
- "args": [
- {
- "name": "monitorId",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- },
- {
- "name": "dateRangeStart",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- },
- {
- "name": "dateRangeEnd",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- }
- ],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "MonitorChartEntry", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "getLatestMonitors",
- "description": "",
- "args": [
- {
- "name": "dateRangeStart",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- },
- {
- "name": "dateRangeEnd",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- },
- {
- "name": "monitorId",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- }
- ],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "Ping", "ofType": null }
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "getFilterBar",
- "description": "",
- "args": [
- {
- "name": "dateRangeStart",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- },
- {
- "name": "dateRangeEnd",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- }
- ],
- "type": { "kind": "OBJECT", "name": "FilterBar", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "getErrorsList",
- "description": "",
- "args": [
- {
- "name": "dateRangeStart",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- },
- {
- "name": "dateRangeEnd",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- },
- {
- "name": "filters",
- "description": "",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "defaultValue": null
- }
- ],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "ErrorListItem", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "SCALAR",
- "name": "String",
- "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "SCALAR",
- "name": "Int",
- "description": "The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. ",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "SCALAR",
- "name": "UnsignedInteger",
- "description": "",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "Ping",
- "description": "A request sent from a monitor to a host",
- "fields": [
- {
- "name": "timestamp",
- "description": "The timestamp of the ping's creation",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "beat",
- "description": "The agent that recorded the ping",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Beat", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "docker",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Docker", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "error",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Error", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "host",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Host", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "http",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "HTTP", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "icmp",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "ICMP", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "kubernetes",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Kubernetes", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "meta",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Meta", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "monitor",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Monitor", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "resolve",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Resolve", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "socks5",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Socks5", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "tags",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "tcp",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "TCP", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "tls",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "TLS", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "Beat",
- "description": "An agent for recording a beat",
- "fields": [
- {
- "name": "hostname",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "name",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "timezone",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "type",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "Docker",
- "description": "",
- "fields": [
- {
- "name": "id",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "image",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "name",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "Error",
- "description": "",
- "fields": [
- {
- "name": "code",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "message",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "type",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "Host",
- "description": "",
- "fields": [
- {
- "name": "architecture",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "id",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "ip",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "mac",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "name",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "os",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "OS", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "OS",
- "description": "",
- "fields": [
- {
- "name": "family",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "kernel",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "platform",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "version",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "HTTP",
- "description": "",
- "fields": [
- {
- "name": "response",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "StatusCode", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "rtt",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "HttpRTT", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "url",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "StatusCode",
- "description": "",
- "fields": [
- {
- "name": "status_code",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "HttpRTT",
- "description": "",
- "fields": [
- {
- "name": "content",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Duration", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "response_header",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Duration", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "total",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Duration", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "validate",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Duration", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "validate_body",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Duration", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "write_request",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Duration", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "Duration",
- "description": "The monitor's status for a ping",
- "fields": [
- {
- "name": "us",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "ICMP",
- "description": "",
- "fields": [
- {
- "name": "requests",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "rtt",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "Kubernetes",
- "description": "",
- "fields": [
- {
- "name": "container",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "KubernetesContainer", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "namespace",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "node",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "KubernetesNode", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "pod",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "KubernetesPod", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "KubernetesContainer",
- "description": "",
- "fields": [
- {
- "name": "image",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "name",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "KubernetesNode",
- "description": "",
- "fields": [
- {
- "name": "name",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "KubernetesPod",
- "description": "",
- "fields": [
- {
- "name": "name",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "uid",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "Meta",
- "description": "",
- "fields": [
- {
- "name": "cloud",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "MetaCloud", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "MetaCloud",
- "description": "",
- "fields": [
- {
- "name": "availability_zone",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "instance_id",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "instance_name",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "machine_type",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "project_id",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "provider",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "region",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "Monitor",
- "description": "",
- "fields": [
- {
- "name": "duration",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Duration", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "host",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "id",
- "description": "The id of the monitor",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "ip",
- "description": "The IP pinged by the monitor",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "name",
- "description": "The name of the protocol being monitored",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "scheme",
- "description": "The protocol scheme of the monitored host",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "status",
- "description": "The status of the monitored host",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "type",
- "description": "The type of host being monitored",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "Resolve",
- "description": "",
- "fields": [
- {
- "name": "host",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "ip",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "rtt",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Duration", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "Socks5",
- "description": "",
- "fields": [
- {
- "name": "rtt",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "RTT", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "RTT",
- "description": "",
- "fields": [
- {
- "name": "connect",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Duration", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "handshake",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Duration", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "validate",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Duration", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "TCP",
- "description": "",
- "fields": [
- {
- "name": "port",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "rtt",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "RTT", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "TLS",
- "description": "",
- "fields": [
- {
- "name": "certificate_not_valid_after",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "certificate_not_valid_before",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "certificates",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "rtt",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "RTT", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "DocCount",
- "description": "",
- "fields": [
- {
- "name": "count",
- "description": "",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "LatestMonitorsResult",
- "description": "",
- "fields": [
- {
- "name": "monitors",
- "description": "",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "LatestMonitor", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "LatestMonitor",
- "description": "",
- "fields": [
- {
- "name": "key",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "MonitorKey", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "ping",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "Ping", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "upSeries",
- "description": "",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "MonitorSeriesPoint", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "downSeries",
- "description": "",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "MonitorSeriesPoint", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "MonitorKey",
- "description": "",
- "fields": [
- {
- "name": "id",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "port",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "MonitorSeriesPoint",
- "description": "",
- "fields": [
- {
- "name": "x",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "y",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "Snapshot",
- "description": "",
- "fields": [
- {
- "name": "up",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "down",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "trouble",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "total",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "histogram",
- "description": "",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "HistogramSeries", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "HistogramSeries",
- "description": "",
- "fields": [
- {
- "name": "monitorId",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "data",
- "description": "",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "HistogramDataPoint", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "HistogramDataPoint",
- "description": "",
- "fields": [
- {
- "name": "upCount",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "downCount",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "x",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "x0",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "y",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "MonitorChartEntry",
- "description": "",
- "fields": [
- {
- "name": "maxContent",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "DataPoint", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "maxResponse",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "DataPoint", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "maxValidate",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "DataPoint", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "maxTotal",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "DataPoint", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "maxWriteRequest",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "DataPoint", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "maxTcpRtt",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "DataPoint", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "maxDuration",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "DataPoint", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "minDuration",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "DataPoint", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "avgDuration",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "DataPoint", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "status",
- "description": "",
- "args": [],
- "type": { "kind": "OBJECT", "name": "StatusData", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "DataPoint",
- "description": "",
- "fields": [
- {
- "name": "x",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "y",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Float", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "SCALAR",
- "name": "Float",
- "description": "The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](http://en.wikipedia.org/wiki/IEEE_floating_point). ",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "StatusData",
- "description": "",
- "fields": [
- {
- "name": "x",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "up",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "down",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "total",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "FilterBar",
- "description": "",
- "fields": [
- {
- "name": "id",
- "description": "",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "port",
- "description": "",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "scheme",
- "description": "",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "status",
- "description": "",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "ErrorListItem",
- "description": "",
- "fields": [
- {
- "name": "latestMessage",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "monitorId",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "type",
- "description": "",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "count",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "Int", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "statusCode",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "timestamp",
- "description": "",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "__Schema",
- "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.",
- "fields": [
- {
- "name": "types",
- "description": "A list of all types supported by this server.",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null }
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "queryType",
- "description": "The type that query operations will be rooted at.",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "mutationType",
- "description": "If this server supports mutation, the type that mutation operations will be rooted at.",
- "args": [],
- "type": { "kind": "OBJECT", "name": "__Type", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "subscriptionType",
- "description": "If this server support subscription, the type that subscription operations will be rooted at.",
- "args": [],
- "type": { "kind": "OBJECT", "name": "__Type", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "directives",
- "description": "A list of all directives supported by this server.",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "__Directive", "ofType": null }
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "__Type",
- "description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name and description, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.",
- "fields": [
- {
- "name": "kind",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "ENUM", "name": "__TypeKind", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "name",
- "description": null,
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "description",
- "description": null,
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "fields",
- "description": null,
- "args": [
- {
- "name": "includeDeprecated",
- "description": null,
- "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null },
- "defaultValue": "false"
- }
- ],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "__Field", "ofType": null }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "interfaces",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "possibleTypes",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "enumValues",
- "description": null,
- "args": [
- {
- "name": "includeDeprecated",
- "description": null,
- "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null },
- "defaultValue": "false"
- }
- ],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "__EnumValue", "ofType": null }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "inputFields",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "__InputValue", "ofType": null }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "ofType",
- "description": null,
- "args": [],
- "type": { "kind": "OBJECT", "name": "__Type", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "ENUM",
- "name": "__TypeKind",
- "description": "An enum describing what kind of type a given `__Type` is.",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "SCALAR",
- "description": "Indicates this type is a scalar.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "OBJECT",
- "description": "Indicates this type is an object. `fields` and `interfaces` are valid fields.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "INTERFACE",
- "description": "Indicates this type is an interface. `fields` and `possibleTypes` are valid fields.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "UNION",
- "description": "Indicates this type is a union. `possibleTypes` is a valid field.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "ENUM",
- "description": "Indicates this type is an enum. `enumValues` is a valid field.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "INPUT_OBJECT",
- "description": "Indicates this type is an input object. `inputFields` is a valid field.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "LIST",
- "description": "Indicates this type is a list. `ofType` is a valid field.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "NON_NULL",
- "description": "Indicates this type is a non-null. `ofType` is a valid field.",
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "possibleTypes": null
- },
- {
- "kind": "SCALAR",
- "name": "Boolean",
- "description": "The `Boolean` scalar type represents `true` or `false`.",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "__Field",
- "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.",
- "fields": [
- {
- "name": "name",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "description",
- "description": null,
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "args",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "__InputValue", "ofType": null }
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "type",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "isDeprecated",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "deprecationReason",
- "description": null,
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "__InputValue",
- "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.",
- "fields": [
- {
- "name": "name",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "description",
- "description": null,
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "type",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "__Type", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "defaultValue",
- "description": "A GraphQL-formatted string representing the default value for this input value.",
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "__EnumValue",
- "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.",
- "fields": [
- {
- "name": "name",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "description",
- "description": null,
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "isDeprecated",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "deprecationReason",
- "description": null,
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "OBJECT",
- "name": "__Directive",
- "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.",
- "fields": [
- {
- "name": "name",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "description",
- "description": null,
- "args": [],
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "locations",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "ENUM", "name": "__DirectiveLocation", "ofType": null }
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "args",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "OBJECT", "name": "__InputValue", "ofType": null }
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "onOperation",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null }
- },
- "isDeprecated": true,
- "deprecationReason": "Use `locations`."
- },
- {
- "name": "onFragment",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null }
- },
- "isDeprecated": true,
- "deprecationReason": "Use `locations`."
- },
- {
- "name": "onField",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null }
- },
- "isDeprecated": true,
- "deprecationReason": "Use `locations`."
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null
- },
- {
- "kind": "ENUM",
- "name": "__DirectiveLocation",
- "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "QUERY",
- "description": "Location adjacent to a query operation.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "MUTATION",
- "description": "Location adjacent to a mutation operation.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "SUBSCRIPTION",
- "description": "Location adjacent to a subscription operation.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "FIELD",
- "description": "Location adjacent to a field.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "FRAGMENT_DEFINITION",
- "description": "Location adjacent to a fragment definition.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "FRAGMENT_SPREAD",
- "description": "Location adjacent to a fragment spread.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "INLINE_FRAGMENT",
- "description": "Location adjacent to an inline fragment.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "SCHEMA",
- "description": "Location adjacent to a schema definition.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "SCALAR",
- "description": "Location adjacent to a scalar definition.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "OBJECT",
- "description": "Location adjacent to an object type definition.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "FIELD_DEFINITION",
- "description": "Location adjacent to a field definition.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "ARGUMENT_DEFINITION",
- "description": "Location adjacent to an argument definition.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "INTERFACE",
- "description": "Location adjacent to an interface definition.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "UNION",
- "description": "Location adjacent to a union definition.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "ENUM",
- "description": "Location adjacent to an enum definition.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "ENUM_VALUE",
- "description": "Location adjacent to an enum value definition.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "INPUT_OBJECT",
- "description": "Location adjacent to an input object type definition.",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "INPUT_FIELD_DEFINITION",
- "description": "Location adjacent to an input object field definition.",
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "possibleTypes": null
- }
- ],
- "directives": [
- {
- "name": "skip",
- "description": "Directs the executor to skip this field or fragment when the `if` argument is true.",
- "locations": ["FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT"],
- "args": [
- {
- "name": "if",
- "description": "Skipped when true.",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null }
- },
- "defaultValue": null
- }
- ]
- },
- {
- "name": "include",
- "description": "Directs the executor to include this field or fragment only when the `if` argument is true.",
- "locations": ["FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT"],
- "args": [
- {
- "name": "if",
- "description": "Included when true.",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": { "kind": "SCALAR", "name": "Boolean", "ofType": null }
- },
- "defaultValue": null
- }
- ]
- },
- {
- "name": "deprecated",
- "description": "Marks an element of a GraphQL schema as no longer supported.",
- "locations": ["FIELD_DEFINITION", "ENUM_VALUE"],
- "args": [
- {
- "name": "reason",
- "description": "Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted in [Markdown](https://daringfireball.net/projects/markdown/).",
- "type": { "kind": "SCALAR", "name": "String", "ofType": null },
- "defaultValue": "\"No longer supported\""
- }
- ]
- }
- ]
- }
-}
diff --git a/dev_docs/assets/saved_object_vs_data_indices.png b/dev_docs/assets/saved_object_vs_data_indices.png
new file mode 100644
index 00000000000000..e79a5cd848db1c
Binary files /dev/null and b/dev_docs/assets/saved_object_vs_data_indices.png differ
diff --git a/dev_docs/key_concepts/saved_objects.mdx b/dev_docs/key_concepts/saved_objects.mdx
new file mode 100644
index 00000000000000..d89342765c8f19
--- /dev/null
+++ b/dev_docs/key_concepts/saved_objects.mdx
@@ -0,0 +1,74 @@
+---
+id: kibDevDocsSavedObjectsIntro
+slug: /kibana-dev-docs/saved-objects-intro
+title: Saved Objects
+summary: Saved Objects are a key concept to understand when building a Kibana plugin.
+date: 2021-02-02
+tags: ['kibana','dev', 'contributor', 'api docs']
+---
+
+"Saved Objects" are developer defined, persisted entities, stored in the Kibana system index (which is also sometimes referred to as the `.kibana` index).
+The Saved Objects service allows Kibana plugins to use Elasticsearch like a primary database. Think of it as an Object Document Mapper for Elasticsearch.
+ Some examples of Saved Object types are dashboards, lens, canvas workpads, index patterns, cases, ml jobs, and advanced settings. Some Saved Object types are
+ exposed to the user in the [Saved Object management UI](https://www.elastic.co/guide/en/kibana/current/managing-saved-objects.html), but not all.
+
+Developers create and manage their Saved Objects using the SavedObjectClient, while other data in Elasticsearch should be accessed via the data plugin's search
+services.
+
+![image](../assets/saved_object_vs_data_indices.png)
+
+
+
+
+## References
+
+In order to support import and export, and space-sharing capabilities, Saved Objects need to explicitly list any references they contain to other Saved Objects.
+The parent should have a reference to it's children, not the other way around. That way when a "parent" is exported (or shared to a space),
+ all the "children" will be automatically included. However, when a "child" is exported, it will not include all "parents".
+
+
+
+## Migrations and Backward compatibility
+
+As your plugin evolves, you may need to change your Saved Object type in a breaking way (for example, changing the type of an attribtue, or removing
+an attribute). If that happens, you should write a migration to upgrade the Saved Objects that existed prior to the change.
+
+.
+
+## Security
+
+Saved Objects can be secured using Kibana's Privileges model, unlike data that comes from data indices, which is secured using Elasticsearch's Privileges model.
+
+### Space awareness
+
+Saved Objects are "space aware". They exist in the space they were created in, and any spaces they have been shared with.
+
+### Feature controls and RBAC
+
+Feature controls provide another level of isolation and shareability for Saved Objects. Admins can give users and roles read, write or none permissions for each Saved Object type.
+
+### Object level security (OLS)
+
+OLS is an oft-requested feature that is not implemented yet. When it is, it will provide users with even more sharing and privacy flexibility. Individual
+objects can be private to the user, shared with a selection of others, or made public. Much like how sharing Google Docs works.
+
+## Scalability
+
+By default all saved object types go into a single index. If you expect your saved object type to have a lot of unique fields, or if you expect there
+to be many of them, you can have your objects go in a separate index by using the `indexPattern` field. Reporting and task manager are two
+examples of features that use this capability.
+
+## Searchability
+
+Because saved objects are stored in system indices, they cannot be searched like other data can. If you see the phrase “[X] as data” it is
+referring to this searching limitation. Users will not be able to create custom dashboards using saved object data, like they would for data stored
+in Elasticsearch data indices.
+
+## Saved Objects by value
+
+Sometimes Saved Objects end up persisted inside another Saved Object. We call these Saved Objects “by value”, as opposed to "by
+ reference". If an end user creates a visualization and adds it to a dashboard without saving it to the visualization
+ library, the data ends up nested inside the dashboard Saved Object. This helps keep the visualization library smaller. It also avoids
+ issues with edits propagating - since an entity can only exist in a single place.
+ Note that from the end user stand point, we don’t use these terms “by reference” and “by value”.
+
diff --git a/dev_docs/tutorials/saved_objects.mdx b/dev_docs/tutorials/saved_objects.mdx
new file mode 100644
index 00000000000000..bd7d231218af1f
--- /dev/null
+++ b/dev_docs/tutorials/saved_objects.mdx
@@ -0,0 +1,250 @@
+---
+id: kibDevTutorialSavedObject
+slug: /kibana-dev-docs/tutorial/saved-objects
+title: Register a new saved object type
+summary: Learn how to register a new saved object type.
+date: 2021-02-05
+tags: ['kibana','onboarding', 'dev', 'architecture', 'tutorials']
+---
+
+Saved Object type definitions should be defined in their own `my_plugin/server/saved_objects` directory.
+
+The folder should contain a file per type, named after the snake_case name of the type, and an index.ts file exporting all the types.
+
+**src/plugins/my_plugin/server/saved_objects/dashboard_visualization.ts**
+
+```ts
+import { SavedObjectsType } from 'src/core/server';
+
+export const dashboardVisualization: SavedObjectsType = {
+ name: 'dashboard_visualization', [1]
+ hidden: false,
+ namespaceType: 'single',
+ mappings: {
+ dynamic: false,
+ properties: {
+ description: {
+ type: 'text',
+ },
+ hits: {
+ type: 'integer',
+ },
+ },
+ },
+ migrations: {
+ '1.0.0': migratedashboardVisualizationToV1,
+ '2.0.0': migratedashboardVisualizationToV2,
+ },
+};
+```
+
+[1] Since the name of a Saved Object type forms part of the url path for the public Saved Objects HTTP API,
+these should follow our API URL path convention and always be written as snake case.
+
+**src/plugins/my_plugin/server/saved_objects/index.ts**
+
+```ts
+export { dashboardVisualization } from './dashboard_visualization';
+export { dashboard } from './dashboard';
+```
+
+**src/plugins/my_plugin/server/plugin.ts**
+
+```ts
+import { dashboard, dashboardVisualization } from './saved_objects';
+
+export class MyPlugin implements Plugin {
+ setup({ savedObjects }) {
+ savedObjects.registerType(dashboard);
+ savedObjects.registerType(dashboardVisualization);
+ }
+}
+```
+
+## Mappings
+
+Each Saved Object type can define its own Elasticsearch field mappings. Because multiple Saved Object
+types can share the same index, mappings defined by a type will be nested under a top-level field that matches the type name.
+
+For example, the mappings defined by the dashboard_visualization Saved Object type:
+
+**src/plugins/my_plugin/server/saved_objects/dashboard_visualization.ts**
+
+```ts
+import { SavedObjectsType } from 'src/core/server';
+
+export const dashboardVisualization: SavedObjectsType = {
+ name: 'dashboard_visualization',
+ ...
+ mappings: {
+ properties: {
+ dynamic: false,
+ description: {
+ type: 'text',
+ },
+ hits: {
+ type: 'integer',
+ },
+ },
+ },
+ migrations: { ... },
+};
+```
+
+Will result in the following mappings being applied to the .kibana index:
+
+```ts
+{
+ "mappings": {
+ "dynamic": "strict",
+ "properties": {
+ ...
+ "dashboard_vizualization": {
+ "dynamic": false,
+ "properties": {
+ "description": {
+ "type": "text",
+ },
+ "hits": {
+ "type": "integer",
+ },
+ },
+ }
+ }
+ }
+}
+```
+Do not use field mappings like you would use data types for the columns of a SQL database. Instead, field mappings are analogous to a
+SQL index. Only specify field mappings for the fields you wish to search on or query. By specifying `dynamic: false`
+ in any level of your mappings, Elasticsearch will accept and store any other fields even if they are not specified in your mappings.
+
+Since Elasticsearch has a default limit of 1000 fields per index, plugins should carefully consider the
+fields they add to the mappings. Similarly, Saved Object types should never use `dynamic: true` as this can cause an arbitrary
+ amount of fields to be added to the .kibana index.
+
+ ## References
+
+Declare by adding an id, type and name to the
+ `references` array.
+
+```ts
+router.get(
+ { path: '/some-path', validate: false },
+ async (context, req, res) => {
+ const object = await context.core.savedObjects.client.create(
+ 'dashboard',
+ {
+ title: 'my dashboard',
+ panels: [
+ { visualization: 'vis1' }, [1]
+ ],
+ indexPattern: 'indexPattern1'
+ },
+ { references: [
+ { id: '...', type: 'visualization', name: 'vis1' },
+ { id: '...', type: 'index_pattern', name: 'indexPattern1' },
+ ]
+ }
+ )
+ ...
+ }
+);
+```
+[1] Note how `dashboard.panels[0].visualization` stores the name property of the reference (not the id directly) to be able to uniquely
+identify this reference. This guarantees that the id the reference points to always remains up to date. If a
+ visualization id was directly stored in `dashboard.panels[0].visualization` there is a risk that this id gets updated without
+ updating the reference in the references array.
+
+## Writing migrations
+
+Saved Objects support schema changes between Kibana versions, which we call migrations. Migrations are
+ applied when a Kibana installation is upgraded from one version to the next, when exports are imported via
+ the Saved Objects Management UI, or when a new object is created via the HTTP API.
+
+Each Saved Object type may define migrations for its schema. Migrations are specified by the Kibana version number, receive an input document,
+ and must return the fully migrated document to be persisted to Elasticsearch.
+
+Let’s say we want to define two migrations: - In version 1.1.0, we want to drop the subtitle field and append it to the title - In version
+ 1.4.0, we want to add a new id field to every panel with a newly generated UUID.
+
+First, the current mappings should always reflect the latest or "target" schema. Next, we should define a migration function for each step in the schema evolution:
+
+**src/plugins/my_plugin/server/saved_objects/dashboard_visualization.ts**
+
+```ts
+import { SavedObjectsType, SavedObjectMigrationFn } from 'src/core/server';
+import uuid from 'uuid';
+
+interface DashboardVisualizationPre110 {
+ title: string;
+ subtitle: string;
+ panels: Array<{}>;
+}
+interface DashboardVisualization110 {
+ title: string;
+ panels: Array<{}>;
+}
+
+interface DashboardVisualization140 {
+ title: string;
+ panels: Array<{ id: string }>;
+}
+
+const migrateDashboardVisualization110: SavedObjectMigrationFn<
+ DashboardVisualizationPre110, [1]
+ DashboardVisualization110
+> = (doc) => {
+ const { subtitle, ...attributesWithoutSubtitle } = doc.attributes;
+ return {
+ ...doc, [2]
+ attributes: {
+ ...attributesWithoutSubtitle,
+ title: `${doc.attributes.title} - ${doc.attributes.subtitle}`,
+ },
+ };
+};
+
+const migrateDashboardVisualization140: SavedObjectMigrationFn<
+ DashboardVisualization110,
+ DashboardVisualization140
+> = (doc) => {
+ const outPanels = doc.attributes.panels?.map((panel) => {
+ return { ...panel, id: uuid.v4() };
+ });
+ return {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ panels: outPanels,
+ },
+ };
+};
+
+export const dashboardVisualization: SavedObjectsType = {
+ name: 'dashboard_visualization', [1]
+ /** ... */
+ migrations: {
+ // Takes a pre 1.1.0 doc, and converts it to 1.1.0
+ '1.1.0': migrateDashboardVisualization110,
+
+ // Takes a 1.1.0 doc, and converts it to 1.4.0
+ '1.4.0': migrateDashboardVisualization140, [3]
+ },
+};
+```
+[1] It is useful to define an interface for each version of the schema. This allows TypeScript to ensure that you are properly handling the input and output
+ types correctly as the schema evolves.
+
+[2] Returning a shallow copy is necessary to avoid type errors when using different types for the input and output shape.
+
+[3] Migrations do not have to be defined for every version. The version number of a migration must always be the earliest Kibana version
+ in which this migration was released. So if you are creating a migration which will
+ be part of the v7.10.0 release, but will also be backported and released as v7.9.3, the migration version should be: 7.9.3.
+
+ Migrations should be written defensively, an exception in a migration function will prevent a Kibana upgrade from succeeding and will cause downtime for our users.
+ Having said that, if a
+ document is encountered that is not in the expected shape, migrations are encouraged to throw an exception to abort the upgrade. In most scenarios, it is better to
+ fail an upgrade than to silently ignore a corrupt document which can cause unexpected behaviour at some future point in time.
+
+It is critical that you have extensive tests to ensure that migrations behave as expected with all possible input documents. Given how simple it is to test all the branch
+conditions in a migration function and the high impact of a bug in this code, there’s really no reason not to aim for 100% test code coverage.
diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc
index 613f2d0fbf20cf..5564b4cdcf79da 100644
--- a/docs/developer/plugin-list.asciidoc
+++ b/docs/developer/plugin-list.asciidoc
@@ -301,6 +301,10 @@ which will load the visualization's editor.
|To access an elasticsearch instance that has live data you have two options:
+|{kib-repo}blob/{branch}/x-pack/plugins/banners/README.md[banners]
+|Allow to add a header banner that will be displayed on every page of the Kibana application
+
+
|{kib-repo}blob/{branch}/x-pack/plugins/beats_management/readme.md[beatsManagement]
|Notes:
Failure to have auth enabled in Kibana will make for a broken UI. UI-based errors not yet in place
diff --git a/docs/developer/plugin/migrating-legacy-plugins-examples.asciidoc b/docs/developer/plugin/migrating-legacy-plugins-examples.asciidoc
index 92a624649d3c50..6361b3c921128a 100644
--- a/docs/developer/plugin/migrating-legacy-plugins-examples.asciidoc
+++ b/docs/developer/plugin/migrating-legacy-plugins-examples.asciidoc
@@ -800,7 +800,7 @@ However, there are some minor changes:
* The `schema.isNamespaceAgnostic` property has been renamed:
`SavedObjectsType.namespaceType`. It no longer accepts a boolean but
-instead an enum of `single`, `multiple`, or `agnostic` (see
+instead an enum of `single`, `multiple`, `multiple-isolated`, or `agnostic` (see
{kib-repo}/tree/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsnamespacetype.md[SavedObjectsNamespaceType]).
* The `schema.indexPattern` was accepting either a `string` or a
`(config: LegacyConfig) => string`. `SavedObjectsType.indexPattern` only
diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.md
index 663b326193de56..2d465745c436b5 100644
--- a/docs/development/core/public/kibana-plugin-core-public.chromestart.md
+++ b/docs/development/core/public/kibana-plugin-core-public.chromestart.md
@@ -67,6 +67,7 @@ core.chrome.setHelpExtension(elem => {
| [setBreadcrumbs(newBreadcrumbs)](./kibana-plugin-core-public.chromestart.setbreadcrumbs.md) | Override the current set of breadcrumbs |
| [setBreadcrumbsAppendExtension(breadcrumbsAppendExtension)](./kibana-plugin-core-public.chromestart.setbreadcrumbsappendextension.md) | Mount an element next to the last breadcrumb |
| [setCustomNavLink(newCustomNavLink)](./kibana-plugin-core-public.chromestart.setcustomnavlink.md) | Override the current set of custom nav link |
+| [setHeaderBanner(headerBanner)](./kibana-plugin-core-public.chromestart.setheaderbanner.md) | Set the banner that will appear on top of the chrome header. |
| [setHelpExtension(helpExtension)](./kibana-plugin-core-public.chromestart.sethelpextension.md) | Override the current set of custom help content |
| [setHelpSupportUrl(url)](./kibana-plugin-core-public.chromestart.sethelpsupporturl.md) | Override the default support URL shown in the help menu |
| [setIsVisible(isVisible)](./kibana-plugin-core-public.chromestart.setisvisible.md) | Set the temporary visibility for the chrome. This does nothing if the chrome is hidden by default and should be used to hide the chrome for things like full-screen modes with an exit button. |
diff --git a/docs/development/core/public/kibana-plugin-core-public.chromestart.setheaderbanner.md b/docs/development/core/public/kibana-plugin-core-public.chromestart.setheaderbanner.md
new file mode 100644
index 00000000000000..02a2fa65ed4781
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.chromestart.setheaderbanner.md
@@ -0,0 +1,28 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeStart](./kibana-plugin-core-public.chromestart.md) > [setHeaderBanner](./kibana-plugin-core-public.chromestart.setheaderbanner.md)
+
+## ChromeStart.setHeaderBanner() method
+
+Set the banner that will appear on top of the chrome header.
+
+Signature:
+
+```typescript
+setHeaderBanner(headerBanner?: ChromeUserBanner): void;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| headerBanner | ChromeUserBanner
| |
+
+Returns:
+
+`void`
+
+## Remarks
+
+Using `undefined` when invoking this API will remove the banner.
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.content.md b/docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.content.md
new file mode 100644
index 00000000000000..7a77fdc6223de9
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.content.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeUserBanner](./kibana-plugin-core-public.chromeuserbanner.md) > [content](./kibana-plugin-core-public.chromeuserbanner.content.md)
+
+## ChromeUserBanner.content property
+
+Signature:
+
+```typescript
+content: MountPoint;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.md b/docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.md
new file mode 100644
index 00000000000000..8617c5c4d2b12f
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.chromeuserbanner.md
@@ -0,0 +1,19 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeUserBanner](./kibana-plugin-core-public.chromeuserbanner.md)
+
+## ChromeUserBanner interface
+
+
+Signature:
+
+```typescript
+export interface ChromeUserBanner
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [content](./kibana-plugin-core-public.chromeuserbanner.content.md) | MountPoint<HTMLDivElement>
| |
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.doclinksstart.links.md b/docs/development/core/public/kibana-plugin-core-public.doclinksstart.links.md
index fd46a8a0f82c12..017e3ec57d3404 100644
--- a/docs/development/core/public/kibana-plugin-core-public.doclinksstart.links.md
+++ b/docs/development/core/public/kibana-plugin-core-public.doclinksstart.links.md
@@ -91,7 +91,9 @@ readonly links: {
readonly scriptAggs: string;
readonly painless: string;
readonly painlessApi: string;
+ readonly painlessLangSpec: string;
readonly painlessSyntax: string;
+ readonly painlessWalkthrough: string;
readonly luceneExpressions: string;
};
readonly indexPatterns: {
@@ -131,6 +133,7 @@ readonly links: {
openIndex: string;
putComponentTemplate: string;
painlessExecute: string;
+ painlessExecuteAPIContexts: string;
putComponentTemplateMetadata: string;
putWatch: string;
updateTransform: string;
diff --git a/docs/development/core/public/kibana-plugin-core-public.doclinksstart.md b/docs/development/core/public/kibana-plugin-core-public.doclinksstart.md
index f4bce8b51ebb1a..dc6804b0630bd4 100644
--- a/docs/development/core/public/kibana-plugin-core-public.doclinksstart.md
+++ b/docs/development/core/public/kibana-plugin-core-public.doclinksstart.md
@@ -17,5 +17,4 @@ export interface DocLinksStart
| --- | --- | --- |
| [DOC\_LINK\_VERSION](./kibana-plugin-core-public.doclinksstart.doc_link_version.md) | string
| |
| [ELASTIC\_WEBSITE\_URL](./kibana-plugin-core-public.doclinksstart.elastic_website_url.md) | string
| |
-| [links](./kibana-plugin-core-public.doclinksstart.links.md) | {
readonly dashboard: {
readonly guide: string;
readonly drilldowns: string;
readonly drilldownsTriggerPicker: string;
readonly urlDrilldownTemplateSyntax: string;
readonly urlDrilldownVariables: string;
};
readonly discover: Record<string, string>;
readonly filebeat: {
readonly base: string;
readonly installation: string;
readonly configuration: string;
readonly elasticsearchOutput: string;
readonly startup: string;
readonly exportedFields: string;
};
readonly auditbeat: {
readonly base: string;
};
readonly metricbeat: {
readonly base: string;
};
readonly enterpriseSearch: {
readonly base: string;
readonly appSearchBase: string;
readonly workplaceSearchBase: string;
};
readonly heartbeat: {
readonly base: string;
};
readonly logstash: {
readonly base: string;
};
readonly functionbeat: {
readonly base: string;
};
readonly winlogbeat: {
readonly base: string;
};
readonly aggs: {
readonly date_histogram: string;
readonly date_range: string;
readonly date_format_pattern: string;
readonly filter: string;
readonly filters: string;
readonly geohash_grid: string;
readonly histogram: string;
readonly ip_range: string;
readonly range: string;
readonly significant_terms: string;
readonly terms: string;
readonly avg: string;
readonly avg_bucket: string;
readonly max_bucket: string;
readonly min_bucket: string;
readonly sum_bucket: string;
readonly cardinality: string;
readonly count: string;
readonly cumulative_sum: string;
readonly derivative: string;
readonly geo_bounds: string;
readonly geo_centroid: string;
readonly max: string;
readonly median: string;
readonly min: string;
readonly moving_avg: string;
readonly percentile_ranks: string;
readonly serial_diff: string;
readonly std_dev: string;
readonly sum: string;
readonly top_hits: string;
};
readonly runtimeFields: string;
readonly scriptedFields: {
readonly scriptFields: string;
readonly scriptAggs: string;
readonly painless: string;
readonly painlessApi: string;
readonly painlessSyntax: string;
readonly luceneExpressions: string;
};
readonly indexPatterns: {
readonly loadingData: string;
readonly introduction: string;
};
readonly addData: string;
readonly kibana: string;
readonly elasticsearch: Record<string, string>;
readonly siem: {
readonly guide: string;
readonly gettingStarted: string;
};
readonly query: {
readonly eql: string;
readonly luceneQuerySyntax: string;
readonly queryDsl: string;
readonly kueryQuerySyntax: string;
};
readonly date: {
readonly dateMath: string;
};
readonly management: Record<string, string>;
readonly ml: Record<string, string>;
readonly transforms: Record<string, string>;
readonly visualize: Record<string, string>;
readonly apis: Readonly<{
createIndex: string;
createSnapshotLifecyclePolicy: string;
createRoleMapping: string;
createRoleMappingTemplates: string;
createApiKey: string;
createPipeline: string;
createTransformRequest: string;
executeWatchActionModes: string;
openIndex: string;
putComponentTemplate: string;
painlessExecute: string;
putComponentTemplateMetadata: string;
putWatch: string;
updateTransform: string;
}>;
readonly observability: Record<string, string>;
readonly alerting: Record<string, string>;
readonly maps: Record<string, string>;
readonly monitoring: Record<string, string>;
readonly security: Readonly<{
apiKeyServiceSettings: string;
clusterPrivileges: string;
elasticsearchSettings: string;
elasticsearchEnableSecurity: string;
indicesPrivileges: string;
kibanaTLS: string;
kibanaPrivileges: string;
mappingRoles: string;
mappingRolesFieldRules: string;
runAsPrivilege: string;
}>;
readonly watcher: Record<string, string>;
readonly ccs: Record<string, string>;
}
| |
-
+| [links](./kibana-plugin-core-public.doclinksstart.links.md) | {
readonly dashboard: {
readonly guide: string;
readonly drilldowns: string;
readonly drilldownsTriggerPicker: string;
readonly urlDrilldownTemplateSyntax: string;
readonly urlDrilldownVariables: string;
};
readonly discover: Record<string, string>;
readonly filebeat: {
readonly base: string;
readonly installation: string;
readonly configuration: string;
readonly elasticsearchOutput: string;
readonly elasticsearchModule: string;
readonly startup: string;
readonly exportedFields: string;
};
readonly auditbeat: {
readonly base: string;
};
readonly metricbeat: {
readonly base: string;
readonly configure: string;
readonly httpEndpoint: string;
readonly install: string;
readonly start: string;
};
readonly enterpriseSearch: {
readonly base: string;
readonly appSearchBase: string;
readonly workplaceSearchBase: string;
};
readonly heartbeat: {
readonly base: string;
};
readonly logstash: {
readonly base: string;
};
readonly functionbeat: {
readonly base: string;
};
readonly winlogbeat: {
readonly base: string;
};
readonly aggs: {
readonly date_histogram: string;
readonly date_range: string;
readonly date_format_pattern: string;
readonly filter: string;
readonly filters: string;
readonly geohash_grid: string;
readonly histogram: string;
readonly ip_range: string;
readonly range: string;
readonly significant_terms: string;
readonly terms: string;
readonly avg: string;
readonly avg_bucket: string;
readonly max_bucket: string;
readonly min_bucket: string;
readonly sum_bucket: string;
readonly cardinality: string;
readonly count: string;
readonly cumulative_sum: string;
readonly derivative: string;
readonly geo_bounds: string;
readonly geo_centroid: string;
readonly max: string;
readonly median: string;
readonly min: string;
readonly moving_avg: string;
readonly percentile_ranks: string;
readonly serial_diff: string;
readonly std_dev: string;
readonly sum: string;
readonly top_hits: string;
};
readonly runtimeFields: string;
readonly scriptedFields: {
readonly scriptFields: string;
readonly scriptAggs: string;
readonly painless: string;
readonly painlessApi: string;
readonly painlessSyntax: string;
readonly luceneExpressions: string;
};
readonly indexPatterns: {
readonly loadingData: string;
readonly introduction: string;
};
readonly addData: string;
readonly kibana: string;
readonly elasticsearch: Record<string, string>;
readonly siem: {
readonly guide: string;
readonly gettingStarted: string;
};
readonly query: {
readonly eql: string;
readonly luceneQuerySyntax: string;
readonly queryDsl: string;
readonly kueryQuerySyntax: string;
};
readonly date: {
readonly dateMath: string;
};
readonly management: Record<string, string>;
readonly ml: Record<string, string>;
readonly transforms: Record<string, string>;
readonly visualize: Record<string, string>;
readonly apis: Readonly<{
createIndex: string;
createSnapshotLifecyclePolicy: string;
createRoleMapping: string;
createRoleMappingTemplates: string;
createApiKey: string;
createPipeline: string;
createTransformRequest: string;
executeWatchActionModes: string;
indexExists: string;
openIndex: string;
putComponentTemplate: string;
painlessExecute: string;
putComponentTemplateMetadata: string;
putWatch: string;
updateTransform: string;
}>;
readonly observability: Record<string, string>;
readonly alerting: Record<string, string>;
readonly maps: Record<string, string>;
readonly monitoring: Record<string, string>;
readonly security: Readonly<{
apiKeyServiceSettings: string;
clusterPrivileges: string;
elasticsearchSettings: string;
elasticsearchEnableSecurity: string;
indicesPrivileges: string;
kibanaTLS: string;
kibanaPrivileges: string;
mappingRoles: string;
mappingRolesFieldRules: string;
runAsPrivilege: string;
}>;
readonly watcher: Record<string, string>;
readonly ccs: Record<string, string>;
}
| |
diff --git a/docs/development/core/public/kibana-plugin-core-public.md b/docs/development/core/public/kibana-plugin-core-public.md
index e307b5c9971b0b..ba48011ef84e08 100644
--- a/docs/development/core/public/kibana-plugin-core-public.md
+++ b/docs/development/core/public/kibana-plugin-core-public.md
@@ -56,6 +56,7 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [ChromeRecentlyAccessed](./kibana-plugin-core-public.chromerecentlyaccessed.md) | [APIs](./kibana-plugin-core-public.chromerecentlyaccessed.md) for recently accessed history. |
| [ChromeRecentlyAccessedHistoryItem](./kibana-plugin-core-public.chromerecentlyaccessedhistoryitem.md) | |
| [ChromeStart](./kibana-plugin-core-public.chromestart.md) | ChromeStart allows plugins to customize the global chrome header UI and enrich the UX with additional information about the current location of the browser. |
+| [ChromeUserBanner](./kibana-plugin-core-public.chromeuserbanner.md) | |
| [CoreSetup](./kibana-plugin-core-public.coresetup.md) | Core services exposed to the Plugin
setup lifecycle |
| [CoreStart](./kibana-plugin-core-public.corestart.md) | Core services exposed to the Plugin
start lifecycle |
| [DocLinksStart](./kibana-plugin-core-public.doclinksstart.md) | |
@@ -167,7 +168,7 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [SavedObjectAttributeSingle](./kibana-plugin-core-public.savedobjectattributesingle.md) | Don't use this type, it's simply a helper type for [SavedObjectAttribute](./kibana-plugin-core-public.savedobjectattribute.md) |
| [SavedObjectsClientContract](./kibana-plugin-core-public.savedobjectsclientcontract.md) | SavedObjectsClientContract as implemented by the [SavedObjectsClient](./kibana-plugin-core-public.savedobjectsclient.md) |
| [SavedObjectsImportWarning](./kibana-plugin-core-public.savedobjectsimportwarning.md) | Composite type of all the possible types of import warnings.See [SavedObjectsImportSimpleWarning](./kibana-plugin-core-public.savedobjectsimportsimplewarning.md) and [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-public.savedobjectsimportactionrequiredwarning.md) for more details. |
-| [SavedObjectsNamespaceType](./kibana-plugin-core-public.savedobjectsnamespacetype.md) | The namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive: \* single (default): this type of saved object is namespace-isolated, e.g., it exists in only one namespace. \* multiple: this type of saved object is shareable, e.g., it can exist in one or more namespaces. \* agnostic: this type of saved object is global. |
+| [SavedObjectsNamespaceType](./kibana-plugin-core-public.savedobjectsnamespacetype.md) | The namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive: \* single (default): This type of saved object is namespace-isolated, e.g., it exists in only one namespace. \* multiple: This type of saved object is shareable, e.g., it can exist in one or more namespaces. \* multiple-isolated: This type of saved object is namespace-isolated, e.g., it exists in only one namespace, but object IDs must be unique across all namespaces. This is intended to be an intermediate step when objects with a "single" namespace type are being converted to a "multiple" namespace type. In other words, objects with a "multiple-isolated" namespace type will be \*share-capable\*, but will not actually be shareable until the namespace type is changed to "multiple". \* agnostic: This type of saved object is global. |
| [StartServicesAccessor](./kibana-plugin-core-public.startservicesaccessor.md) | Allows plugins to get access to APIs available in start inside async handlers, such as [App.mount](./kibana-plugin-core-public.app.mount.md). Promise will not resolve until Core and plugin dependencies have completed start
. |
| [StringValidation](./kibana-plugin-core-public.stringvalidation.md) | Allows regex objects or a regex string |
| [Toast](./kibana-plugin-core-public.toast.md) | |
diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.maxwidth.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.maxwidth.md
new file mode 100644
index 00000000000000..0ae888f9cb3613
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.maxwidth.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [OverlayModalOpenOptions](./kibana-plugin-core-public.overlaymodalopenoptions.md) > [maxWidth](./kibana-plugin-core-public.overlaymodalopenoptions.maxwidth.md)
+
+## OverlayModalOpenOptions.maxWidth property
+
+Signature:
+
+```typescript
+maxWidth?: boolean | number | string;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.md b/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.md
index 5c0ef8fb1ec863..5307a8357a8142 100644
--- a/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.md
+++ b/docs/development/core/public/kibana-plugin-core-public.overlaymodalopenoptions.md
@@ -18,4 +18,5 @@ export interface OverlayModalOpenOptions
| ["data-test-subj"](./kibana-plugin-core-public.overlaymodalopenoptions._data-test-subj_.md) | string
| |
| [className](./kibana-plugin-core-public.overlaymodalopenoptions.classname.md) | string
| |
| [closeButtonAriaLabel](./kibana-plugin-core-public.overlaymodalopenoptions.closebuttonarialabel.md) | string
| |
+| [maxWidth](./kibana-plugin-core-public.overlaymodalopenoptions.maxwidth.md) | boolean | number | string
| |
diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.md
index 8bd87c2f6ea35f..69cfb818561e5d 100644
--- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.md
+++ b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.md
@@ -23,9 +23,11 @@ export interface SavedObjectsFindOptions
| [namespaces](./kibana-plugin-core-public.savedobjectsfindoptions.namespaces.md) | string[]
| |
| [page](./kibana-plugin-core-public.savedobjectsfindoptions.page.md) | number
| |
| [perPage](./kibana-plugin-core-public.savedobjectsfindoptions.perpage.md) | number
| |
+| [pit](./kibana-plugin-core-public.savedobjectsfindoptions.pit.md) | SavedObjectsPitParams
| Search against a specific Point In Time (PIT) that you've opened with . |
| [preference](./kibana-plugin-core-public.savedobjectsfindoptions.preference.md) | string
| An optional ES preference value to be used for the query \* |
| [rootSearchFields](./kibana-plugin-core-public.savedobjectsfindoptions.rootsearchfields.md) | string[]
| The fields to perform the parsed query against. Unlike the searchFields
argument, these are expected to be root fields and will not be modified. If used in conjunction with searchFields
, both are concatenated together. |
| [search](./kibana-plugin-core-public.savedobjectsfindoptions.search.md) | string
| Search documents using the Elasticsearch Simple Query String syntax. See Elasticsearch Simple Query String query
argument for more information |
+| [searchAfter](./kibana-plugin-core-public.savedobjectsfindoptions.searchafter.md) | unknown[]
| Use the sort values from the previous page to retrieve the next page of results. |
| [searchFields](./kibana-plugin-core-public.savedobjectsfindoptions.searchfields.md) | string[]
| The fields to perform the parsed query against. See Elasticsearch Simple Query String fields
argument for more information |
| [sortField](./kibana-plugin-core-public.savedobjectsfindoptions.sortfield.md) | string
| |
| [sortOrder](./kibana-plugin-core-public.savedobjectsfindoptions.sortorder.md) | string
| |
diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.pit.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.pit.md
new file mode 100644
index 00000000000000..2284a4d8d210d8
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.pit.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [pit](./kibana-plugin-core-public.savedobjectsfindoptions.pit.md)
+
+## SavedObjectsFindOptions.pit property
+
+Search against a specific Point In Time (PIT) that you've opened with .
+
+Signature:
+
+```typescript
+pit?: SavedObjectsPitParams;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.searchafter.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.searchafter.md
new file mode 100644
index 00000000000000..99ca2c34e77be9
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.savedobjectsfindoptions.searchafter.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsFindOptions](./kibana-plugin-core-public.savedobjectsfindoptions.md) > [searchAfter](./kibana-plugin-core-public.savedobjectsfindoptions.searchafter.md)
+
+## SavedObjectsFindOptions.searchAfter property
+
+Use the sort values from the previous page to retrieve the next page of results.
+
+Signature:
+
+```typescript
+searchAfter?: unknown[];
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsnamespacetype.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsnamespacetype.md
index f2205d2cee4240..cf5e6cb29a5329 100644
--- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsnamespacetype.md
+++ b/docs/development/core/public/kibana-plugin-core-public.savedobjectsnamespacetype.md
@@ -4,10 +4,10 @@
## SavedObjectsNamespaceType type
-The namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive: \* single (default): this type of saved object is namespace-isolated, e.g., it exists in only one namespace. \* multiple: this type of saved object is shareable, e.g., it can exist in one or more namespaces. \* agnostic: this type of saved object is global.
+The namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive: \* single (default): This type of saved object is namespace-isolated, e.g., it exists in only one namespace. \* multiple: This type of saved object is shareable, e.g., it can exist in one or more namespaces. \* multiple-isolated: This type of saved object is namespace-isolated, e.g., it exists in only one namespace, but object IDs must be unique across all namespaces. This is intended to be an intermediate step when objects with a "single" namespace type are being converted to a "multiple" namespace type. In other words, objects with a "multiple-isolated" namespace type will be \*share-capable\*, but will not actually be shareable until the namespace type is changed to "multiple". \* agnostic: This type of saved object is global.
Signature:
```typescript
-export declare type SavedObjectsNamespaceType = 'single' | 'multiple' | 'agnostic';
+export declare type SavedObjectsNamespaceType = 'single' | 'multiple' | 'multiple-isolated' | 'agnostic';
```
diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.md
index 0b7e6467667cb2..6fcfae559dd33f 100644
--- a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.md
+++ b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.md
@@ -23,6 +23,7 @@ export interface UiSettingsParams
| [name](./kibana-plugin-core-public.uisettingsparams.name.md) | string
| title in the UI |
| [optionLabels](./kibana-plugin-core-public.uisettingsparams.optionlabels.md) | Record<string, string>
| text labels for 'select' type UI element |
| [options](./kibana-plugin-core-public.uisettingsparams.options.md) | string[]
| array of permitted values for this setting |
+| [order](./kibana-plugin-core-public.uisettingsparams.order.md) | number
| index of the settings within its category (ascending order, smallest will be displayed first). Used for ordering in the UI. settings without order defined will be displayed last and ordered by name |
| [readonly](./kibana-plugin-core-public.uisettingsparams.readonly.md) | boolean
| a flag indicating that value cannot be changed |
| [requiresPageReload](./kibana-plugin-core-public.uisettingsparams.requirespagereload.md) | boolean
| a flag indicating whether new value applying requires page reloading |
| [schema](./kibana-plugin-core-public.uisettingsparams.schema.md) | Type<T>
| |
diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.order.md b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.order.md
new file mode 100644
index 00000000000000..d93aaeb9046168
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.uisettingsparams.order.md
@@ -0,0 +1,15 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) > [order](./kibana-plugin-core-public.uisettingsparams.order.md)
+
+## UiSettingsParams.order property
+
+index of the settings within its category (ascending order, smallest will be displayed first). Used for ordering in the UI.
+
+ settings without order defined will be displayed last and ordered by name
+
+Signature:
+
+```typescript
+order?: number;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.uisettingstype.md b/docs/development/core/public/kibana-plugin-core-public.uisettingstype.md
index 5753704ccfe037..65e6264ea1e08a 100644
--- a/docs/development/core/public/kibana-plugin-core-public.uisettingstype.md
+++ b/docs/development/core/public/kibana-plugin-core-public.uisettingstype.md
@@ -9,5 +9,5 @@ UI element type to represent the settings.
Signature:
```typescript
-export declare type UiSettingsType = 'undefined' | 'json' | 'markdown' | 'number' | 'select' | 'boolean' | 'string' | 'array' | 'image';
+export declare type UiSettingsType = 'undefined' | 'json' | 'markdown' | 'number' | 'select' | 'boolean' | 'string' | 'array' | 'image' | 'color';
```
diff --git a/docs/development/core/server/kibana-plugin-core-server.md b/docs/development/core/server/kibana-plugin-core-server.md
index 5fe5eda7a81729..3ec63840a67cba 100644
--- a/docs/development/core/server/kibana-plugin-core-server.md
+++ b/docs/development/core/server/kibana-plugin-core-server.md
@@ -155,6 +155,7 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [SavedObjectsCheckConflictsResponse](./kibana-plugin-core-server.savedobjectscheckconflictsresponse.md) | |
| [SavedObjectsClientProviderOptions](./kibana-plugin-core-server.savedobjectsclientprovideroptions.md) | Options to control the creation of the Saved Objects Client. |
| [SavedObjectsClientWrapperOptions](./kibana-plugin-core-server.savedobjectsclientwrapperoptions.md) | Options passed to each SavedObjectsClientWrapperFactory to aid in creating the wrapper instance. |
+| [SavedObjectsClosePointInTimeResponse](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md) | |
| [SavedObjectsComplexFieldMapping](./kibana-plugin-core-server.savedobjectscomplexfieldmapping.md) | See [SavedObjectsFieldMapping](./kibana-plugin-core-server.savedobjectsfieldmapping.md) for documentation. |
| [SavedObjectsCoreFieldMapping](./kibana-plugin-core-server.savedobjectscorefieldmapping.md) | See [SavedObjectsFieldMapping](./kibana-plugin-core-server.savedobjectsfieldmapping.md) for documentation. |
| [SavedObjectsCreateOptions](./kibana-plugin-core-server.savedobjectscreateoptions.md) | |
@@ -188,6 +189,9 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [SavedObjectsMappingProperties](./kibana-plugin-core-server.savedobjectsmappingproperties.md) | Describe the fields of a [saved object type](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md). |
| [SavedObjectsMigrationLogger](./kibana-plugin-core-server.savedobjectsmigrationlogger.md) | |
| [SavedObjectsMigrationVersion](./kibana-plugin-core-server.savedobjectsmigrationversion.md) | Information about the migrations that have been applied to this SavedObject. When Kibana starts up, KibanaMigrator detects outdated documents and migrates them based on this value. For each migration that has been applied, the plugin's name is used as a key and the latest migration version as the value. |
+| [SavedObjectsOpenPointInTimeOptions](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md) | |
+| [SavedObjectsOpenPointInTimeResponse](./kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md) | |
+| [SavedObjectsPitParams](./kibana-plugin-core-server.savedobjectspitparams.md) | |
| [SavedObjectsRawDoc](./kibana-plugin-core-server.savedobjectsrawdoc.md) | A raw document as represented directly in the saved object index. |
| [SavedObjectsRawDocParseOptions](./kibana-plugin-core-server.savedobjectsrawdocparseoptions.md) | Options that can be specified when using the saved objects serializer to parse a raw document. |
| [SavedObjectsRemoveReferencesToOptions](./kibana-plugin-core-server.savedobjectsremovereferencestooptions.md) | |
@@ -301,11 +305,12 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [SavedObjectsClientFactory](./kibana-plugin-core-server.savedobjectsclientfactory.md) | Describes the factory used to create instances of the Saved Objects Client. |
| [SavedObjectsClientFactoryProvider](./kibana-plugin-core-server.savedobjectsclientfactoryprovider.md) | Provider to invoke to retrieve a [SavedObjectsClientFactory](./kibana-plugin-core-server.savedobjectsclientfactory.md). |
| [SavedObjectsClientWrapperFactory](./kibana-plugin-core-server.savedobjectsclientwrapperfactory.md) | Describes the factory used to create instances of Saved Objects Client Wrappers. |
+| [SavedObjectsClosePointInTimeOptions](./kibana-plugin-core-server.savedobjectsclosepointintimeoptions.md) | |
| [SavedObjectsExportTransform](./kibana-plugin-core-server.savedobjectsexporttransform.md) | Transformation function used to mutate the exported objects of the associated type.A type's export transform function will be executed once per user-initiated export, for all objects of that type. |
| [SavedObjectsFieldMapping](./kibana-plugin-core-server.savedobjectsfieldmapping.md) | Describe a [saved object type mapping](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) field.Please refer to [elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html) For the mapping documentation |
| [SavedObjectsImportHook](./kibana-plugin-core-server.savedobjectsimporthook.md) | A hook associated with a specific saved object type, that will be invoked during the import process. The hook will have access to the objects of the registered type.Currently, the only supported feature for import hooks is to return warnings to be displayed in the UI when the import succeeds. The only interactions the hook can have with the import process is via the hook's response. Mutating the objects inside the hook's code will have no effect. |
| [SavedObjectsImportWarning](./kibana-plugin-core-server.savedobjectsimportwarning.md) | Composite type of all the possible types of import warnings.See [SavedObjectsImportSimpleWarning](./kibana-plugin-core-server.savedobjectsimportsimplewarning.md) and [SavedObjectsImportActionRequiredWarning](./kibana-plugin-core-server.savedobjectsimportactionrequiredwarning.md) for more details. |
-| [SavedObjectsNamespaceType](./kibana-plugin-core-server.savedobjectsnamespacetype.md) | The namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive: \* single (default): this type of saved object is namespace-isolated, e.g., it exists in only one namespace. \* multiple: this type of saved object is shareable, e.g., it can exist in one or more namespaces. \* agnostic: this type of saved object is global. |
+| [SavedObjectsNamespaceType](./kibana-plugin-core-server.savedobjectsnamespacetype.md) | The namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive: \* single (default): This type of saved object is namespace-isolated, e.g., it exists in only one namespace. \* multiple: This type of saved object is shareable, e.g., it can exist in one or more namespaces. \* multiple-isolated: This type of saved object is namespace-isolated, e.g., it exists in only one namespace, but object IDs must be unique across all namespaces. This is intended to be an intermediate step when objects with a "single" namespace type are being converted to a "multiple" namespace type. In other words, objects with a "multiple-isolated" namespace type will be \*share-capable\*, but will not actually be shareable until the namespace type is changed to "multiple". \* agnostic: This type of saved object is global. |
| [SavedObjectUnsanitizedDoc](./kibana-plugin-core-server.savedobjectunsanitizeddoc.md) | Describes Saved Object documents from Kibana < 7.0.0 which don't have a references
root property defined. This type should only be used in migrations. |
| [ScopeableRequest](./kibana-plugin-core-server.scopeablerequest.md) | A user credentials container. It accommodates the necessary auth credentials to impersonate the current user.See [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md). |
| [ServiceStatusLevel](./kibana-plugin-core-server.servicestatuslevel.md) | A convenience type that represents the union of each value in [ServiceStatusLevels](./kibana-plugin-core-server.servicestatuslevels.md). |
diff --git a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md
index 3a5e84ffdc3724..268dcdd77d6b47 100644
--- a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md
+++ b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md
@@ -11,8 +11,9 @@ core: {
savedObjects: {
client: SavedObjectsClientContract;
typeRegistry: ISavedObjectTypeRegistry;
- exporter: ISavedObjectsExporter;
- importer: ISavedObjectsImporter;
+ getClient: (options?: SavedObjectsClientProviderOptions) => SavedObjectsClientContract;
+ getExporter: (client: SavedObjectsClientContract) => ISavedObjectsExporter;
+ getImporter: (client: SavedObjectsClientContract) => ISavedObjectsImporter;
};
elasticsearch: {
client: IScopedClusterClient;
diff --git a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md
index 5300c85cf94064..54d85910f823c1 100644
--- a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md
+++ b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md
@@ -18,5 +18,5 @@ export interface RequestHandlerContext
| Property | Type | Description |
| --- | --- | --- |
-| [core](./kibana-plugin-core-server.requesthandlercontext.core.md) | {
savedObjects: {
client: SavedObjectsClientContract;
typeRegistry: ISavedObjectTypeRegistry;
exporter: ISavedObjectsExporter;
importer: ISavedObjectsImporter;
};
elasticsearch: {
client: IScopedClusterClient;
legacy: {
client: ILegacyScopedClusterClient;
};
};
uiSettings: {
client: IUiSettingsClient;
};
}
| |
+| [core](./kibana-plugin-core-server.requesthandlercontext.core.md) | {
savedObjects: {
client: SavedObjectsClientContract;
typeRegistry: ISavedObjectTypeRegistry;
getClient: (options?: SavedObjectsClientProviderOptions) => SavedObjectsClientContract;
getExporter: (client: SavedObjectsClientContract) => ISavedObjectsExporter;
getImporter: (client: SavedObjectsClientContract) => ISavedObjectsImporter;
};
elasticsearch: {
client: IScopedClusterClient;
legacy: {
client: ILegacyScopedClusterClient;
};
};
uiSettings: {
client: IUiSettingsClient;
};
}
| |
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.converttomultinamespacetypeversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.converttomultinamespacetypeversion.md
new file mode 100644
index 00000000000000..2a30693f4da84a
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.converttomultinamespacetypeversion.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectMigrationContext](./kibana-plugin-core-server.savedobjectmigrationcontext.md) > [convertToMultiNamespaceTypeVersion](./kibana-plugin-core-server.savedobjectmigrationcontext.converttomultinamespacetypeversion.md)
+
+## SavedObjectMigrationContext.convertToMultiNamespaceTypeVersion property
+
+The version in which this object type is being converted to a multi-namespace type
+
+Signature:
+
+```typescript
+convertToMultiNamespaceTypeVersion?: string;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.md
index 901f2dde0944ce..c8a291e5028453 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.md
@@ -16,5 +16,7 @@ export interface SavedObjectMigrationContext
| Property | Type | Description |
| --- | --- | --- |
+| [convertToMultiNamespaceTypeVersion](./kibana-plugin-core-server.savedobjectmigrationcontext.converttomultinamespacetypeversion.md) | string
| The version in which this object type is being converted to a multi-namespace type |
| [log](./kibana-plugin-core-server.savedobjectmigrationcontext.log.md) | SavedObjectsMigrationLogger
| logger instance to be used by the migration handler |
+| [migrationVersion](./kibana-plugin-core-server.savedobjectmigrationcontext.migrationversion.md) | string
| The migration version that this migration function is defined for |
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.migrationversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.migrationversion.md
new file mode 100644
index 00000000000000..7b20ae41048f66
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectmigrationcontext.migrationversion.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectMigrationContext](./kibana-plugin-core-server.savedobjectmigrationcontext.md) > [migrationVersion](./kibana-plugin-core-server.savedobjectmigrationcontext.migrationversion.md)
+
+## SavedObjectMigrationContext.migrationVersion property
+
+The migration version that this migration function is defined for
+
+Signature:
+
+```typescript
+migrationVersion: string;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.closepointintime.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.closepointintime.md
new file mode 100644
index 00000000000000..dc765260a08ca7
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.closepointintime.md
@@ -0,0 +1,25 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [closePointInTime](./kibana-plugin-core-server.savedobjectsclient.closepointintime.md)
+
+## SavedObjectsClient.closePointInTime() method
+
+Closes a Point In Time (PIT) by ID. This simply proxies the request to ES via the Elasticsearch client, and is included in the Saved Objects Client as a convenience for consumers who are using [SavedObjectsClient.openPointInTimeForType()](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md).
+
+Signature:
+
+```typescript
+closePointInTime(id: string, options?: SavedObjectsClosePointInTimeOptions): Promise;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| id | string
| |
+| options | SavedObjectsClosePointInTimeOptions
| |
+
+Returns:
+
+`Promise`
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.md
index da1f4d029ea2ba..887f7f7d93a873 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.md
@@ -30,11 +30,13 @@ The constructor for this class is marked as internal. Third-party code should no
| [bulkGet(objects, options)](./kibana-plugin-core-server.savedobjectsclient.bulkget.md) | | Returns an array of objects by id |
| [bulkUpdate(objects, options)](./kibana-plugin-core-server.savedobjectsclient.bulkupdate.md) | | Bulk Updates multiple SavedObject at once |
| [checkConflicts(objects, options)](./kibana-plugin-core-server.savedobjectsclient.checkconflicts.md) | | Check what conflicts will result when creating a given array of saved objects. This includes "unresolvable conflicts", which are multi-namespace objects that exist in a different namespace; such conflicts cannot be resolved/overwritten. |
+| [closePointInTime(id, options)](./kibana-plugin-core-server.savedobjectsclient.closepointintime.md) | | Closes a Point In Time (PIT) by ID. This simply proxies the request to ES via the Elasticsearch client, and is included in the Saved Objects Client as a convenience for consumers who are using [SavedObjectsClient.openPointInTimeForType()](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md). |
| [create(type, attributes, options)](./kibana-plugin-core-server.savedobjectsclient.create.md) | | Persists a SavedObject |
| [delete(type, id, options)](./kibana-plugin-core-server.savedobjectsclient.delete.md) | | Deletes a SavedObject |
| [deleteFromNamespaces(type, id, namespaces, options)](./kibana-plugin-core-server.savedobjectsclient.deletefromnamespaces.md) | | Removes namespaces from a SavedObject |
| [find(options)](./kibana-plugin-core-server.savedobjectsclient.find.md) | | Find all SavedObjects matching the search query |
| [get(type, id, options)](./kibana-plugin-core-server.savedobjectsclient.get.md) | | Retrieves a single object |
+| [openPointInTimeForType(type, options)](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md) | | Opens a Point In Time (PIT) against the indices for the specified Saved Object types. The returned id
can then be passed to [SavedObjectsClient.find()](./kibana-plugin-core-server.savedobjectsclient.find.md) to search against that PIT. |
| [removeReferencesTo(type, id, options)](./kibana-plugin-core-server.savedobjectsclient.removereferencesto.md) | | Updates all objects containing a reference to the given {type, id} tuple to remove the said reference. |
| [resolve(type, id, options)](./kibana-plugin-core-server.savedobjectsclient.resolve.md) | | Resolves a single object, using any legacy URL alias if it exists |
| [update(type, id, attributes, options)](./kibana-plugin-core-server.savedobjectsclient.update.md) | | Updates an SavedObject |
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md
new file mode 100644
index 00000000000000..56c1d6d1ddc331
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md
@@ -0,0 +1,25 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [openPointInTimeForType](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md)
+
+## SavedObjectsClient.openPointInTimeForType() method
+
+Opens a Point In Time (PIT) against the indices for the specified Saved Object types. The returned `id` can then be passed to [SavedObjectsClient.find()](./kibana-plugin-core-server.savedobjectsclient.find.md) to search against that PIT.
+
+Signature:
+
+```typescript
+openPointInTimeForType(type: string | string[], options?: SavedObjectsOpenPointInTimeOptions): Promise;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| type | string | string[]
| |
+| options | SavedObjectsOpenPointInTimeOptions
| |
+
+Returns:
+
+`Promise`
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeoptions.md
new file mode 100644
index 00000000000000..27432a8805b06d
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeoptions.md
@@ -0,0 +1,12 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClosePointInTimeOptions](./kibana-plugin-core-server.savedobjectsclosepointintimeoptions.md)
+
+## SavedObjectsClosePointInTimeOptions type
+
+
+Signature:
+
+```typescript
+export declare type SavedObjectsClosePointInTimeOptions = SavedObjectsBaseOptions;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md
new file mode 100644
index 00000000000000..43ecd1298d5d97
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md
@@ -0,0 +1,20 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClosePointInTimeResponse](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md)
+
+## SavedObjectsClosePointInTimeResponse interface
+
+
+Signature:
+
+```typescript
+export interface SavedObjectsClosePointInTimeResponse
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [num\_freed](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.num_freed.md) | number
| The number of search contexts that have been successfully closed. |
+| [succeeded](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.succeeded.md) | boolean
| If true, all search contexts associated with the PIT id are successfully closed. |
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.num_freed.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.num_freed.md
new file mode 100644
index 00000000000000..b64932fcee8f66
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.num_freed.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClosePointInTimeResponse](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md) > [num\_freed](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.num_freed.md)
+
+## SavedObjectsClosePointInTimeResponse.num\_freed property
+
+The number of search contexts that have been successfully closed.
+
+Signature:
+
+```typescript
+num_freed: number;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.succeeded.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.succeeded.md
new file mode 100644
index 00000000000000..225a549a4cf591
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclosepointintimeresponse.succeeded.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClosePointInTimeResponse](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md) > [succeeded](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.succeeded.md)
+
+## SavedObjectsClosePointInTimeResponse.succeeded property
+
+If true, all search contexts associated with the PIT id are successfully closed.
+
+Signature:
+
+```typescript
+succeeded: boolean;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporter._constructor_.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporter._constructor_.md
index 5e959bbee7beb9..3f3d708c590ee8 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporter._constructor_.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporter._constructor_.md
@@ -9,10 +9,11 @@ Constructs a new instance of the `SavedObjectsExporter` class
Signature:
```typescript
-constructor({ savedObjectsClient, typeRegistry, exportSizeLimit, }: {
+constructor({ savedObjectsClient, typeRegistry, exportSizeLimit, logger, }: {
savedObjectsClient: SavedObjectsClientContract;
typeRegistry: ISavedObjectTypeRegistry;
exportSizeLimit: number;
+ logger: Logger;
});
```
@@ -20,5 +21,5 @@ constructor({ savedObjectsClient, typeRegistry, exportSizeLimit, }: {
| Parameter | Type | Description |
| --- | --- | --- |
-| { savedObjectsClient, typeRegistry, exportSizeLimit, } | {
savedObjectsClient: SavedObjectsClientContract;
typeRegistry: ISavedObjectTypeRegistry;
exportSizeLimit: number;
}
| |
+| { savedObjectsClient, typeRegistry, exportSizeLimit, logger, } | {
savedObjectsClient: SavedObjectsClientContract;
typeRegistry: ISavedObjectTypeRegistry;
exportSizeLimit: number;
logger: Logger;
}
| |
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporter.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporter.md
index 727108b824c848..ce23e91633b078 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporter.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsexporter.md
@@ -15,7 +15,7 @@ export declare class SavedObjectsExporter
| Constructor | Modifiers | Description |
| --- | --- | --- |
-| [(constructor)({ savedObjectsClient, typeRegistry, exportSizeLimit, })](./kibana-plugin-core-server.savedobjectsexporter._constructor_.md) | | Constructs a new instance of the SavedObjectsExporter
class |
+| [(constructor)({ savedObjectsClient, typeRegistry, exportSizeLimit, logger, })](./kibana-plugin-core-server.savedobjectsexporter._constructor_.md) | | Constructs a new instance of the SavedObjectsExporter
class |
## Properties
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.md
index d393d579dbdd24..6f7c05ea469bc6 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.md
@@ -23,9 +23,11 @@ export interface SavedObjectsFindOptions
| [namespaces](./kibana-plugin-core-server.savedobjectsfindoptions.namespaces.md) | string[]
| |
| [page](./kibana-plugin-core-server.savedobjectsfindoptions.page.md) | number
| |
| [perPage](./kibana-plugin-core-server.savedobjectsfindoptions.perpage.md) | number
| |
+| [pit](./kibana-plugin-core-server.savedobjectsfindoptions.pit.md) | SavedObjectsPitParams
| Search against a specific Point In Time (PIT) that you've opened with [SavedObjectsClient.openPointInTimeForType()](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md). |
| [preference](./kibana-plugin-core-server.savedobjectsfindoptions.preference.md) | string
| An optional ES preference value to be used for the query \* |
| [rootSearchFields](./kibana-plugin-core-server.savedobjectsfindoptions.rootsearchfields.md) | string[]
| The fields to perform the parsed query against. Unlike the searchFields
argument, these are expected to be root fields and will not be modified. If used in conjunction with searchFields
, both are concatenated together. |
| [search](./kibana-plugin-core-server.savedobjectsfindoptions.search.md) | string
| Search documents using the Elasticsearch Simple Query String syntax. See Elasticsearch Simple Query String query
argument for more information |
+| [searchAfter](./kibana-plugin-core-server.savedobjectsfindoptions.searchafter.md) | unknown[]
| Use the sort values from the previous page to retrieve the next page of results. |
| [searchFields](./kibana-plugin-core-server.savedobjectsfindoptions.searchfields.md) | string[]
| The fields to perform the parsed query against. See Elasticsearch Simple Query String fields
argument for more information |
| [sortField](./kibana-plugin-core-server.savedobjectsfindoptions.sortfield.md) | string
| |
| [sortOrder](./kibana-plugin-core-server.savedobjectsfindoptions.sortorder.md) | string
| |
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.pit.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.pit.md
new file mode 100644
index 00000000000000..fac333227088c0
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.pit.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [pit](./kibana-plugin-core-server.savedobjectsfindoptions.pit.md)
+
+## SavedObjectsFindOptions.pit property
+
+Search against a specific Point In Time (PIT) that you've opened with [SavedObjectsClient.openPointInTimeForType()](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md).
+
+Signature:
+
+```typescript
+pit?: SavedObjectsPitParams;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.searchafter.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.searchafter.md
new file mode 100644
index 00000000000000..6364370948976e
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindoptions.searchafter.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) > [searchAfter](./kibana-plugin-core-server.savedobjectsfindoptions.searchafter.md)
+
+## SavedObjectsFindOptions.searchAfter property
+
+Use the sort values from the previous page to retrieve the next page of results.
+
+Signature:
+
+```typescript
+searchAfter?: unknown[];
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.md
index 4ed069d1598fe4..fd56e8ce40e241 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.md
@@ -20,6 +20,7 @@ export interface SavedObjectsFindResponse
| --- | --- | --- |
| [page](./kibana-plugin-core-server.savedobjectsfindresponse.page.md) | number
| |
| [per\_page](./kibana-plugin-core-server.savedobjectsfindresponse.per_page.md) | number
| |
+| [pit\_id](./kibana-plugin-core-server.savedobjectsfindresponse.pit_id.md) | string
| |
| [saved\_objects](./kibana-plugin-core-server.savedobjectsfindresponse.saved_objects.md) | Array<SavedObjectsFindResult<T>>
| |
| [total](./kibana-plugin-core-server.savedobjectsfindresponse.total.md) | number
| |
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.pit_id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.pit_id.md
new file mode 100644
index 00000000000000..dc4f9b509d606a
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresponse.pit_id.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindResponse](./kibana-plugin-core-server.savedobjectsfindresponse.md) > [pit\_id](./kibana-plugin-core-server.savedobjectsfindresponse.pit_id.md)
+
+## SavedObjectsFindResponse.pit\_id property
+
+Signature:
+
+```typescript
+pit_id?: string;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.md
index e455074a7d11bb..0f8e9c59236bbc 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.md
@@ -16,4 +16,5 @@ export interface SavedObjectsFindResult extends SavedObject
| Property | Type | Description |
| --- | --- | --- |
| [score](./kibana-plugin-core-server.savedobjectsfindresult.score.md) | number
| The Elasticsearch _score
of this result. |
+| [sort](./kibana-plugin-core-server.savedobjectsfindresult.sort.md) | unknown[]
| The Elasticsearch sort
value of this result. |
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.sort.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.sort.md
new file mode 100644
index 00000000000000..3cc02c404c8d71
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsfindresult.sort.md
@@ -0,0 +1,41 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsFindResult](./kibana-plugin-core-server.savedobjectsfindresult.md) > [sort](./kibana-plugin-core-server.savedobjectsfindresult.sort.md)
+
+## SavedObjectsFindResult.sort property
+
+The Elasticsearch `sort` value of this result.
+
+Signature:
+
+```typescript
+sort?: unknown[];
+```
+
+## Remarks
+
+This can be passed directly to the `searchAfter` param in the [SavedObjectsFindOptions](./kibana-plugin-core-server.savedobjectsfindoptions.md) in order to page through large numbers of hits. It is recommended you use this alongside a Point In Time (PIT) that was opened with [SavedObjectsClient.openPointInTimeForType()](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md).
+
+## Example
+
+
+```ts
+const { id } = await savedObjectsClient.openPointInTimeForType('visualization');
+const page1 = await savedObjectsClient.find({
+ type: 'visualization',
+ sortField: 'updated_at',
+ sortOrder: 'asc',
+ pit,
+});
+const lastHit = page1.saved_objects[page1.saved_objects.length - 1];
+const page2 = await savedObjectsClient.find({
+ type: 'visualization',
+ sortField: 'updated_at',
+ sortOrder: 'asc',
+ pit: { id: page1.pit_id },
+ searchAfter: lastHit.sort,
+});
+await savedObjectsClient.closePointInTime(page2.pit_id);
+
+```
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsnamespacetype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsnamespacetype.md
index 9075a780bd2c79..01a712aa89aa9a 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsnamespacetype.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsnamespacetype.md
@@ -4,10 +4,10 @@
## SavedObjectsNamespaceType type
-The namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive: \* single (default): this type of saved object is namespace-isolated, e.g., it exists in only one namespace. \* multiple: this type of saved object is shareable, e.g., it can exist in one or more namespaces. \* agnostic: this type of saved object is global.
+The namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive: \* single (default): This type of saved object is namespace-isolated, e.g., it exists in only one namespace. \* multiple: This type of saved object is shareable, e.g., it can exist in one or more namespaces. \* multiple-isolated: This type of saved object is namespace-isolated, e.g., it exists in only one namespace, but object IDs must be unique across all namespaces. This is intended to be an intermediate step when objects with a "single" namespace type are being converted to a "multiple" namespace type. In other words, objects with a "multiple-isolated" namespace type will be \*share-capable\*, but will not actually be shareable until the namespace type is changed to "multiple". \* agnostic: This type of saved object is global.
Signature:
```typescript
-export declare type SavedObjectsNamespaceType = 'single' | 'multiple' | 'agnostic';
+export declare type SavedObjectsNamespaceType = 'single' | 'multiple' | 'multiple-isolated' | 'agnostic';
```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.keepalive.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.keepalive.md
new file mode 100644
index 00000000000000..57752318cb96a9
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.keepalive.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsOpenPointInTimeOptions](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md) > [keepAlive](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.keepalive.md)
+
+## SavedObjectsOpenPointInTimeOptions.keepAlive property
+
+Optionally specify how long ES should keep the PIT alive until the next request. Defaults to `5m`.
+
+Signature:
+
+```typescript
+keepAlive?: string;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md
new file mode 100644
index 00000000000000..46516be2329e9c
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md
@@ -0,0 +1,20 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsOpenPointInTimeOptions](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md)
+
+## SavedObjectsOpenPointInTimeOptions interface
+
+
+Signature:
+
+```typescript
+export interface SavedObjectsOpenPointInTimeOptions extends SavedObjectsBaseOptions
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [keepAlive](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.keepalive.md) | string
| Optionally specify how long ES should keep the PIT alive until the next request. Defaults to 5m
. |
+| [preference](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.preference.md) | string
| An optional ES preference value to be used for the query. |
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.preference.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.preference.md
new file mode 100644
index 00000000000000..7a9f3a49e8663e
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeoptions.preference.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsOpenPointInTimeOptions](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.md) > [preference](./kibana-plugin-core-server.savedobjectsopenpointintimeoptions.preference.md)
+
+## SavedObjectsOpenPointInTimeOptions.preference property
+
+An optional ES preference value to be used for the query.
+
+Signature:
+
+```typescript
+preference?: string;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.id.md
new file mode 100644
index 00000000000000..66387e5b3b89fe
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.id.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsOpenPointInTimeResponse](./kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md) > [id](./kibana-plugin-core-server.savedobjectsopenpointintimeresponse.id.md)
+
+## SavedObjectsOpenPointInTimeResponse.id property
+
+PIT ID returned from ES.
+
+Signature:
+
+```typescript
+id: string;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md
new file mode 100644
index 00000000000000..c4be2692763a5f
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md
@@ -0,0 +1,19 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsOpenPointInTimeResponse](./kibana-plugin-core-server.savedobjectsopenpointintimeresponse.md)
+
+## SavedObjectsOpenPointInTimeResponse interface
+
+
+Signature:
+
+```typescript
+export interface SavedObjectsOpenPointInTimeResponse
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [id](./kibana-plugin-core-server.savedobjectsopenpointintimeresponse.id.md) | string
| PIT ID returned from ES. |
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.id.md
new file mode 100644
index 00000000000000..cb4d4a65727d7e
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.id.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsPitParams](./kibana-plugin-core-server.savedobjectspitparams.md) > [id](./kibana-plugin-core-server.savedobjectspitparams.id.md)
+
+## SavedObjectsPitParams.id property
+
+Signature:
+
+```typescript
+id: string;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.keepalive.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.keepalive.md
new file mode 100644
index 00000000000000..1011a908f210ac
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.keepalive.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsPitParams](./kibana-plugin-core-server.savedobjectspitparams.md) > [keepAlive](./kibana-plugin-core-server.savedobjectspitparams.keepalive.md)
+
+## SavedObjectsPitParams.keepAlive property
+
+Signature:
+
+```typescript
+keepAlive?: string;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.md
new file mode 100644
index 00000000000000..7bffca7cda281f
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectspitparams.md
@@ -0,0 +1,20 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsPitParams](./kibana-plugin-core-server.savedobjectspitparams.md)
+
+## SavedObjectsPitParams interface
+
+
+Signature:
+
+```typescript
+export interface SavedObjectsPitParams
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [id](./kibana-plugin-core-server.savedobjectspitparams.id.md) | string
| |
+| [keepAlive](./kibana-plugin-core-server.savedobjectspitparams.keepalive.md) | string
| |
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.closepointintime.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.closepointintime.md
new file mode 100644
index 00000000000000..8f9dca35fa3629
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.closepointintime.md
@@ -0,0 +1,58 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [closePointInTime](./kibana-plugin-core-server.savedobjectsrepository.closepointintime.md)
+
+## SavedObjectsRepository.closePointInTime() method
+
+Closes a Point In Time (PIT) by ID. This simply proxies the request to ES via the Elasticsearch client, and is included in the Saved Objects Client as a convenience for consumers who are using `openPointInTimeForType`.
+
+Signature:
+
+```typescript
+closePointInTime(id: string, options?: SavedObjectsClosePointInTimeOptions): Promise;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| id | string
| |
+| options | SavedObjectsClosePointInTimeOptions
| |
+
+Returns:
+
+`Promise`
+
+{promise} - [SavedObjectsClosePointInTimeResponse](./kibana-plugin-core-server.savedobjectsclosepointintimeresponse.md)
+
+## Remarks
+
+While the `keepAlive` that is provided will cause a PIT to automatically close, it is highly recommended to explicitly close a PIT when you are done with it in order to avoid consuming unneeded resources in Elasticsearch.
+
+## Example
+
+
+```ts
+const repository = coreStart.savedObjects.createInternalRepository();
+
+const { id } = await repository.openPointInTimeForType(
+ type: 'index-pattern',
+ { keepAlive: '2m' },
+);
+
+const response = await repository.find({
+ type: 'index-pattern',
+ search: 'foo*',
+ sortField: 'name',
+ sortOrder: 'desc',
+ pit: {
+ id: 'abc123',
+ keepAlive: '2m',
+ },
+ searchAfter: [1234, 'abcd'],
+});
+
+await repository.closePointInTime(response.pit_id);
+
+```
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md
index 4d13fea12572c7..632d9c279cb882 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md
@@ -20,6 +20,7 @@ export declare class SavedObjectsRepository
| [bulkGet(objects, options)](./kibana-plugin-core-server.savedobjectsrepository.bulkget.md) | | Returns an array of objects by id |
| [bulkUpdate(objects, options)](./kibana-plugin-core-server.savedobjectsrepository.bulkupdate.md) | | Updates multiple objects in bulk |
| [checkConflicts(objects, options)](./kibana-plugin-core-server.savedobjectsrepository.checkconflicts.md) | | Check what conflicts will result when creating a given array of saved objects. This includes "unresolvable conflicts", which are multi-namespace objects that exist in a different namespace; such conflicts cannot be resolved/overwritten. |
+| [closePointInTime(id, options)](./kibana-plugin-core-server.savedobjectsrepository.closepointintime.md) | | Closes a Point In Time (PIT) by ID. This simply proxies the request to ES via the Elasticsearch client, and is included in the Saved Objects Client as a convenience for consumers who are using openPointInTimeForType
. |
| [create(type, attributes, options)](./kibana-plugin-core-server.savedobjectsrepository.create.md) | | Persists an object |
| [delete(type, id, options)](./kibana-plugin-core-server.savedobjectsrepository.delete.md) | | Deletes an object |
| [deleteByNamespace(namespace, options)](./kibana-plugin-core-server.savedobjectsrepository.deletebynamespace.md) | | Deletes all objects from the provided namespace. |
@@ -27,6 +28,7 @@ export declare class SavedObjectsRepository
| [find(options)](./kibana-plugin-core-server.savedobjectsrepository.find.md) | | |
| [get(type, id, options)](./kibana-plugin-core-server.savedobjectsrepository.get.md) | | Gets a single object |
| [incrementCounter(type, id, counterFields, options)](./kibana-plugin-core-server.savedobjectsrepository.incrementcounter.md) | | Increments all the specified counter fields (by one by default). Creates the document if one doesn't exist for the given id. |
+| [openPointInTimeForType(type, { keepAlive, preference })](./kibana-plugin-core-server.savedobjectsrepository.openpointintimefortype.md) | | Opens a Point In Time (PIT) against the indices for the specified Saved Object types. The returned id
can then be passed to SavedObjects.find
to search against that PIT. |
| [removeReferencesTo(type, id, options)](./kibana-plugin-core-server.savedobjectsrepository.removereferencesto.md) | | Updates all objects containing a reference to the given {type, id} tuple to remove the said reference. |
| [resolve(type, id, options)](./kibana-plugin-core-server.savedobjectsrepository.resolve.md) | | Resolves a single object, using any legacy URL alias if it exists |
| [update(type, id, attributes, options)](./kibana-plugin-core-server.savedobjectsrepository.update.md) | | Updates an object |
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.openpointintimefortype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.openpointintimefortype.md
new file mode 100644
index 00000000000000..63956ebee68f7b
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.openpointintimefortype.md
@@ -0,0 +1,57 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [openPointInTimeForType](./kibana-plugin-core-server.savedobjectsrepository.openpointintimefortype.md)
+
+## SavedObjectsRepository.openPointInTimeForType() method
+
+Opens a Point In Time (PIT) against the indices for the specified Saved Object types. The returned `id` can then be passed to `SavedObjects.find` to search against that PIT.
+
+Signature:
+
+```typescript
+openPointInTimeForType(type: string | string[], { keepAlive, preference }?: SavedObjectsOpenPointInTimeOptions): Promise;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| type | string | string[]
| |
+| { keepAlive, preference } | SavedObjectsOpenPointInTimeOptions
| |
+
+Returns:
+
+`Promise`
+
+{promise} - { id: string }
+
+## Example
+
+
+```ts
+const repository = coreStart.savedObjects.createInternalRepository();
+
+const { id } = await repository.openPointInTimeForType(
+ type: 'index-pattern',
+ { keepAlive: '2m' },
+);
+const page1 = await savedObjectsClient.find({
+ type: 'visualization',
+ sortField: 'updated_at',
+ sortOrder: 'asc',
+ pit,
+});
+
+const lastHit = page1.saved_objects[page1.saved_objects.length - 1];
+const page2 = await savedObjectsClient.find({
+ type: 'visualization',
+ sortField: 'updated_at',
+ sortOrder: 'asc',
+ pit: { id: page1.pit_id },
+ searchAfter: lastHit.sort,
+});
+
+await savedObjectsClient.closePointInTime(page2.pit_id);
+
+```
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.aliastargetid.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.aliastargetid.md
new file mode 100644
index 00000000000000..2e73d6ba2e1a9f
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.aliastargetid.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsResolveResponse](./kibana-plugin-core-server.savedobjectsresolveresponse.md) > [aliasTargetId](./kibana-plugin-core-server.savedobjectsresolveresponse.aliastargetid.md)
+
+## SavedObjectsResolveResponse.aliasTargetId property
+
+The ID of the object that the legacy URL alias points to. This is only defined when the outcome is `'aliasMatch'` or `'conflict'`.
+
+Signature:
+
+```typescript
+aliasTargetId?: string;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.md
index cfb309da0a716f..ffcf15dbc80c7c 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsresolveresponse.md
@@ -15,6 +15,7 @@ export interface SavedObjectsResolveResponse
| Property | Type | Description |
| --- | --- | --- |
+| [aliasTargetId](./kibana-plugin-core-server.savedobjectsresolveresponse.aliastargetid.md) | string
| The ID of the object that the legacy URL alias points to. This is only defined when the outcome is 'aliasMatch'
or 'conflict'
. |
| [outcome](./kibana-plugin-core-server.savedobjectsresolveresponse.outcome.md) | 'exactMatch' | 'aliasMatch' | 'conflict'
| The outcome for a successful resolve
call is one of the following values:\* 'exactMatch'
-- One document exactly matched the given ID. \* 'aliasMatch'
-- One document with a legacy URL alias matched the given ID; in this case the saved_object.id
field is different than the given ID. \* 'conflict'
-- Two documents matched the given ID, one was an exact match and another with a legacy URL alias; in this case the saved_object
object is the exact match, and the saved_object.id
field is the same as the given ID. |
| [saved\_object](./kibana-plugin-core-server.savedobjectsresolveresponse.saved_object.md) | SavedObject<T>
| |
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.converttomultinamespacetypeversion.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.converttomultinamespacetypeversion.md
index 064bd0b35699df..20346919fc652e 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.converttomultinamespacetypeversion.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.converttomultinamespacetypeversion.md
@@ -4,13 +4,13 @@
## SavedObjectsType.convertToMultiNamespaceTypeVersion property
-If defined, objects of this type will be converted to multi-namespace objects when migrating to this version.
+If defined, objects of this type will be converted to a 'multiple' or 'multiple-isolated' namespace type when migrating to this version.
Requirements:
-1. This string value must be a valid semver version 2. This type must have previously specified [\`namespaceType: 'single'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md) 3. This type must also specify [\`namespaceType: 'multiple'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md)
+1. This string value must be a valid semver version 2. This type must have previously specified [\`namespaceType: 'single'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md) 3. This type must also specify [\`namespaceType: 'multiple'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md) \*or\* [\`namespaceType: 'multiple-isolated'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md)
-Example of a single-namespace type in 7.10:
+Example of a single-namespace type in 7.12:
```ts
{
@@ -21,7 +21,19 @@ Example of a single-namespace type in 7.10:
}
```
-Example after converting to a multi-namespace type in 7.11:
+Example after converting to a multi-namespace (isolated) type in 8.0:
+
+```ts
+{
+ name: 'foo',
+ hidden: false,
+ namespaceType: 'multiple-isolated',
+ mappings: {...},
+ convertToMultiNamespaceTypeVersion: '8.0.0'
+}
+
+```
+Example after converting to a multi-namespace (shareable) type in 8.1:
```ts
{
@@ -29,11 +41,11 @@ Example after converting to a multi-namespace type in 7.11:
hidden: false,
namespaceType: 'multiple',
mappings: {...},
- convertToMultiNamespaceTypeVersion: '7.11.0'
+ convertToMultiNamespaceTypeVersion: '8.0.0'
}
```
-Note: a migration function can be optionally specified for the same version.
+Note: migration function(s) can be optionally specified for any of these versions and will not interfere with the conversion process.
Signature:
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.md
index eacad53be39fe0..d882938d731c8c 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectstype.md
@@ -19,7 +19,7 @@ This is only internal for now, and will only be public when we expose the regist
| Property | Type | Description |
| --- | --- | --- |
| [convertToAliasScript](./kibana-plugin-core-server.savedobjectstype.converttoaliasscript.md) | string
| If defined, will be used to convert the type to an alias. |
-| [convertToMultiNamespaceTypeVersion](./kibana-plugin-core-server.savedobjectstype.converttomultinamespacetypeversion.md) | string
| If defined, objects of this type will be converted to multi-namespace objects when migrating to this version.Requirements:1. This string value must be a valid semver version 2. This type must have previously specified [\`namespaceType: 'single'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md) 3. This type must also specify [\`namespaceType: 'multiple'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md)Example of a single-namespace type in 7.10:
+| [convertToMultiNamespaceTypeVersion](./kibana-plugin-core-server.savedobjectstype.converttomultinamespacetypeversion.md) | string
| If defined, objects of this type will be converted to a 'multiple' or 'multiple-isolated' namespace type when migrating to this version.Requirements:1. This string value must be a valid semver version 2. This type must have previously specified [\`namespaceType: 'single'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md) 3. This type must also specify [\`namespaceType: 'multiple'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md) \*or\* [\`namespaceType: 'multiple-isolated'\`](./kibana-plugin-core-server.savedobjectsnamespacetype.md)Example of a single-namespace type in 7.12:
```ts
{
name: 'foo',
@@ -29,18 +29,29 @@ This is only internal for now, and will only be public when we expose the regist
}
```
-Example after converting to a multi-namespace type in 7.11:
+Example after converting to a multi-namespace (isolated) type in 8.0:
+```ts
+{
+ name: 'foo',
+ hidden: false,
+ namespaceType: 'multiple-isolated',
+ mappings: {...},
+ convertToMultiNamespaceTypeVersion: '8.0.0'
+}
+
+```
+Example after converting to a multi-namespace (shareable) type in 8.1:
```ts
{
name: 'foo',
hidden: false,
namespaceType: 'multiple',
mappings: {...},
- convertToMultiNamespaceTypeVersion: '7.11.0'
+ convertToMultiNamespaceTypeVersion: '8.0.0'
}
```
-Note: a migration function can be optionally specified for the same version. |
+Note: migration function(s) can be optionally specified for any of these versions and will not interfere with the conversion process. |
| [hidden](./kibana-plugin-core-server.savedobjectstype.hidden.md) | boolean
| Is the type hidden by default. If true, repositories will not have access to this type unless explicitly declared as an extraType
when creating the repository.See [createInternalRepository](./kibana-plugin-core-server.savedobjectsservicestart.createinternalrepository.md). |
| [indexPattern](./kibana-plugin-core-server.savedobjectstype.indexpattern.md) | string
| If defined, the type instances will be stored in the given index instead of the default one. |
| [management](./kibana-plugin-core-server.savedobjectstype.management.md) | SavedObjectsTypeManagementDefinition
| An optional [saved objects management section](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) definition for the type. |
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md
index 6532c5251d816f..0ff07ae2804ff8 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md
@@ -4,7 +4,7 @@
## SavedObjectTypeRegistry.isMultiNamespace() method
-Returns whether the type is multi-namespace (shareable); resolves to `false` if the type is not registered
+Returns whether the type is multi-namespace (shareable \*or\* isolated); resolves to `false` if the type is not registered
Signature:
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isshareable.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isshareable.md
new file mode 100644
index 00000000000000..ee240268f9d67a
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.isshareable.md
@@ -0,0 +1,24 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectTypeRegistry](./kibana-plugin-core-server.savedobjecttyperegistry.md) > [isShareable](./kibana-plugin-core-server.savedobjecttyperegistry.isshareable.md)
+
+## SavedObjectTypeRegistry.isShareable() method
+
+Returns whether the type is multi-namespace (shareable); resolves to `false` if the type is not registered
+
+Signature:
+
+```typescript
+isShareable(type: string): boolean;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| type | string
| |
+
+Returns:
+
+`boolean`
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.md b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.md
index 55ad7ca137de0a..0f2de8c8ef9b33 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjecttyperegistry.md
@@ -23,8 +23,9 @@ export declare class SavedObjectTypeRegistry
| [getVisibleTypes()](./kibana-plugin-core-server.savedobjecttyperegistry.getvisibletypes.md) | | Returns all visible [types](./kibana-plugin-core-server.savedobjectstype.md).A visible type is a type that doesn't explicitly define hidden=true
during registration. |
| [isHidden(type)](./kibana-plugin-core-server.savedobjecttyperegistry.ishidden.md) | | Returns the hidden
property for given type, or false
if the type is not registered. |
| [isImportableAndExportable(type)](./kibana-plugin-core-server.savedobjecttyperegistry.isimportableandexportable.md) | | Returns the management.importableAndExportable
property for given type, or false
if the type is not registered or does not define a management section. |
-| [isMultiNamespace(type)](./kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md) | | Returns whether the type is multi-namespace (shareable); resolves to false
if the type is not registered |
+| [isMultiNamespace(type)](./kibana-plugin-core-server.savedobjecttyperegistry.ismultinamespace.md) | | Returns whether the type is multi-namespace (shareable \*or\* isolated); resolves to false
if the type is not registered |
| [isNamespaceAgnostic(type)](./kibana-plugin-core-server.savedobjecttyperegistry.isnamespaceagnostic.md) | | Returns whether the type is namespace-agnostic (global); resolves to false
if the type is not registered |
+| [isShareable(type)](./kibana-plugin-core-server.savedobjecttyperegistry.isshareable.md) | | Returns whether the type is multi-namespace (shareable); resolves to false
if the type is not registered |
| [isSingleNamespace(type)](./kibana-plugin-core-server.savedobjecttyperegistry.issinglenamespace.md) | | Returns whether the type is single-namespace (isolated); resolves to true
if the type is not registered |
| [registerType(type)](./kibana-plugin-core-server.savedobjecttyperegistry.registertype.md) | | Register a [type](./kibana-plugin-core-server.savedobjectstype.md) inside the registry. A type can only be registered once. subsequent calls with the same type name will throw an error. |
diff --git a/docs/development/core/server/kibana-plugin-core-server.searchresponse.hits.md b/docs/development/core/server/kibana-plugin-core-server.searchresponse.hits.md
index 1629e774255252..599c4e3ad6319e 100644
--- a/docs/development/core/server/kibana-plugin-core-server.searchresponse.hits.md
+++ b/docs/development/core/server/kibana-plugin-core-server.searchresponse.hits.md
@@ -22,7 +22,7 @@ hits: {
highlight?: any;
inner_hits?: any;
matched_queries?: string[];
- sort?: string[];
+ sort?: unknown[];
}>;
};
```
diff --git a/docs/development/core/server/kibana-plugin-core-server.searchresponse.md b/docs/development/core/server/kibana-plugin-core-server.searchresponse.md
index b53cbf0d87f240..cbaab4632014d9 100644
--- a/docs/development/core/server/kibana-plugin-core-server.searchresponse.md
+++ b/docs/development/core/server/kibana-plugin-core-server.searchresponse.md
@@ -18,7 +18,8 @@ export interface SearchResponse
| [\_scroll\_id](./kibana-plugin-core-server.searchresponse._scroll_id.md) | string
| |
| [\_shards](./kibana-plugin-core-server.searchresponse._shards.md) | ShardsResponse
| |
| [aggregations](./kibana-plugin-core-server.searchresponse.aggregations.md) | any
| |
-| [hits](./kibana-plugin-core-server.searchresponse.hits.md) | {
total: number;
max_score: number;
hits: Array<{
_index: string;
_type: string;
_id: string;
_score: number;
_source: T;
_version?: number;
_explanation?: Explanation;
fields?: any;
highlight?: any;
inner_hits?: any;
matched_queries?: string[];
sort?: string[];
}>;
}
| |
+| [hits](./kibana-plugin-core-server.searchresponse.hits.md) | {
total: number;
max_score: number;
hits: Array<{
_index: string;
_type: string;
_id: string;
_score: number;
_source: T;
_version?: number;
_explanation?: Explanation;
fields?: any;
highlight?: any;
inner_hits?: any;
matched_queries?: string[];
sort?: unknown[];
}>;
}
| |
+| [pit\_id](./kibana-plugin-core-server.searchresponse.pit_id.md) | string
| |
| [timed\_out](./kibana-plugin-core-server.searchresponse.timed_out.md) | boolean
| |
| [took](./kibana-plugin-core-server.searchresponse.took.md) | number
| |
diff --git a/docs/development/core/server/kibana-plugin-core-server.searchresponse.pit_id.md b/docs/development/core/server/kibana-plugin-core-server.searchresponse.pit_id.md
new file mode 100644
index 00000000000000..f214bc05380455
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.searchresponse.pit_id.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SearchResponse](./kibana-plugin-core-server.searchresponse.md) > [pit\_id](./kibana-plugin-core-server.searchresponse.pit_id.md)
+
+## SearchResponse.pit\_id property
+
+Signature:
+
+```typescript
+pit_id?: string;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.md
index d35afc4a149d19..4bb7be77c595a9 100644
--- a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.md
+++ b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.md
@@ -23,6 +23,7 @@ export interface UiSettingsParams
| [name](./kibana-plugin-core-server.uisettingsparams.name.md) | string
| title in the UI |
| [optionLabels](./kibana-plugin-core-server.uisettingsparams.optionlabels.md) | Record<string, string>
| text labels for 'select' type UI element |
| [options](./kibana-plugin-core-server.uisettingsparams.options.md) | string[]
| array of permitted values for this setting |
+| [order](./kibana-plugin-core-server.uisettingsparams.order.md) | number
| index of the settings within its category (ascending order, smallest will be displayed first). Used for ordering in the UI. settings without order defined will be displayed last and ordered by name |
| [readonly](./kibana-plugin-core-server.uisettingsparams.readonly.md) | boolean
| a flag indicating that value cannot be changed |
| [requiresPageReload](./kibana-plugin-core-server.uisettingsparams.requirespagereload.md) | boolean
| a flag indicating whether new value applying requires page reloading |
| [schema](./kibana-plugin-core-server.uisettingsparams.schema.md) | Type<T>
| |
diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.order.md b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.order.md
new file mode 100644
index 00000000000000..140bdad5d786bf
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.uisettingsparams.order.md
@@ -0,0 +1,15 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) > [order](./kibana-plugin-core-server.uisettingsparams.order.md)
+
+## UiSettingsParams.order property
+
+index of the settings within its category (ascending order, smallest will be displayed first). Used for ordering in the UI.
+
+ settings without order defined will be displayed last and ordered by name
+
+Signature:
+
+```typescript
+order?: number;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.uisettingstype.md b/docs/development/core/server/kibana-plugin-core-server.uisettingstype.md
index 3c439897ea0310..7edee442baa24b 100644
--- a/docs/development/core/server/kibana-plugin-core-server.uisettingstype.md
+++ b/docs/development/core/server/kibana-plugin-core-server.uisettingstype.md
@@ -9,5 +9,5 @@ UI element type to represent the settings.
Signature:
```typescript
-export declare type UiSettingsType = 'undefined' | 'json' | 'markdown' | 'number' | 'select' | 'boolean' | 'string' | 'array' | 'image';
+export declare type UiSettingsType = 'undefined' | 'json' | 'markdown' | 'number' | 'select' | 'boolean' | 'string' | 'array' | 'image' | 'color';
```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md
index f576d795b93a52..d2e7ef9db05e8e 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md
@@ -126,6 +126,7 @@
| [noSearchSessionStorageCapabilityMessage](./kibana-plugin-plugins-data-public.nosearchsessionstoragecapabilitymessage.md) | Message to display in case storing session session is disabled due to turned off capability |
| [parseSearchSourceJSON](./kibana-plugin-plugins-data-public.parsesearchsourcejson.md) | |
| [QueryStringInput](./kibana-plugin-plugins-data-public.querystringinput.md) | |
+| [SEARCH\_SESSIONS\_MANAGEMENT\_ID](./kibana-plugin-plugins-data-public.search_sessions_management_id.md) | |
| [search](./kibana-plugin-plugins-data-public.search.md) | |
| [SearchBar](./kibana-plugin-plugins-data-public.searchbar.md) | |
| [syncQueryStateWithUrl](./kibana-plugin-plugins-data-public.syncquerystatewithurl.md) | Helper to setup syncing of global data with the URL |
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.search_sessions_management_id.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.search_sessions_management_id.md
new file mode 100644
index 00000000000000..ad16d21403a984
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.search_sessions_management_id.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [SEARCH\_SESSIONS\_MANAGEMENT\_ID](./kibana-plugin-plugins-data-public.search_sessions_management_id.md)
+
+## SEARCH\_SESSIONS\_MANAGEMENT\_ID variable
+
+Signature:
+
+```typescript
+SEARCH_SESSIONS_MANAGEMENT_ID = "search_sessions"
+```
diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.cleareditorstate.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.cleareditorstate.md
index 034f9c70e389fe..d5a8ec311df31e 100644
--- a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.cleareditorstate.md
+++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.cleareditorstate.md
@@ -9,7 +9,7 @@ Clears the [editor state](./kibana-plugin-plugins-embeddable-public.embeddableed
Signature:
```typescript
-clearEditorState(appId: string): void;
+clearEditorState(appId?: string): void;
```
## Parameters
diff --git a/docs/user/alerting/alerting-production-considerations.asciidoc b/docs/user/alerting/alerting-production-considerations.asciidoc
index 3a68e81879e249..cc7adc87b150ef 100644
--- a/docs/user/alerting/alerting-production-considerations.asciidoc
+++ b/docs/user/alerting/alerting-production-considerations.asciidoc
@@ -27,4 +27,9 @@ Because by default tasks are polled at 3 second intervals and only 10 tasks can
For details on the settings that can influence the performance and throughput of Task Manager, see {task-manager-settings}.
-==============================================
\ No newline at end of file
+==============================================
+
+[float]
+=== Deployment considerations
+
+{es} and {kib} instances use the system clock to determine the current time. To ensure schedules are triggered when expected, you should synchronize the clocks of all nodes in the cluster using a time service such as http://www.ntp.org/[Network Time Protocol].
\ No newline at end of file
diff --git a/docs/user/dashboard/vega-reference.asciidoc b/docs/user/dashboard/vega-reference.asciidoc
index 88fd870fefa74d..cc384ec041a9da 100644
--- a/docs/user/dashboard/vega-reference.asciidoc
+++ b/docs/user/dashboard/vega-reference.asciidoc
@@ -401,7 +401,9 @@ Vega-Lite compilation.
[[vega-expression-functions]]
===== (Vega only) Expression functions which can update the time range and dashboard filters
-{kib} has extended the Vega expression language with these functions:
+{kib} has extended the Vega expression language with these functions.
+These functions will trigger new data to be fetched, which by default will reset Vega signals.
+To keep signal values set `restoreSignalValuesOnRefresh: true` in the Vega config.
```js
/**
@@ -444,6 +446,8 @@ kibanaSetTimeFilter(start, end)
hideWarnings: true
// Vega renderer to use: `svg` or `canvas` (default)
renderer: canvas
+ // Defaults to 'false', restores Vega signal values on refresh
+ restoreSignalValuesOnRefresh: false
}
}
}
diff --git a/docs/user/security/audit-logging.asciidoc b/docs/user/security/audit-logging.asciidoc
index 12a87b1422c5cd..b9fc0c9c4ac466 100644
--- a/docs/user/security/audit-logging.asciidoc
+++ b/docs/user/security/audit-logging.asciidoc
@@ -85,6 +85,10 @@ Refer to the corresponding {es} logs for potential write errors.
| `unknown` | User is creating a saved object.
| `failure` | User is not authorized to create a saved object.
+.2+| `saved_object_open_point_in_time`
+| `unknown` | User is creating a Point In Time to use when querying saved objects.
+| `failure` | User is not authorized to create a Point In Time for the provided saved object types.
+
.2+| `connector_create`
| `unknown` | User is creating a connector.
| `failure` | User is not authorized to create a connector.
@@ -171,6 +175,10 @@ Refer to the corresponding {es} logs for potential write errors.
| `unknown` | User is deleting a saved object.
| `failure` | User is not authorized to delete a saved object.
+.2+| `saved_object_close_point_in_time`
+| `unknown` | User is deleting a Point In Time that was used to query saved objects.
+| `failure` | User is not authorized to delete a Point In Time.
+
.2+| `connector_delete`
| `unknown` | User is deleting a connector.
| `failure` | User is not authorized to delete a connector.
diff --git a/package.json b/package.json
index 0fa8ef31ab251d..ed21cb7052c1cb 100644
--- a/package.json
+++ b/package.json
@@ -121,6 +121,7 @@
"@kbn/ace": "link:packages/kbn-ace",
"@kbn/analytics": "link:packages/kbn-analytics",
"@kbn/apm-config-loader": "link:packages/kbn-apm-config-loader",
+ "@kbn/apm-utils": "link:packages/kbn-apm-utils",
"@kbn/config": "link:packages/kbn-config",
"@kbn/config-schema": "link:packages/kbn-config-schema",
"@kbn/i18n": "link:packages/kbn-i18n",
@@ -129,6 +130,7 @@
"@kbn/logging": "link:packages/kbn-logging",
"@kbn/monaco": "link:packages/kbn-monaco",
"@kbn/std": "link:packages/kbn-std",
+ "@kbn/tinymath": "link:packages/kbn-tinymath",
"@kbn/ui-framework": "link:packages/kbn-ui-framework",
"@kbn/ui-shared-deps": "link:packages/kbn-ui-shared-deps",
"@kbn/utils": "link:packages/kbn-utils",
@@ -312,7 +314,6 @@
"tabbable": "1.1.3",
"tar": "4.4.13",
"tinygradient": "0.4.3",
- "@kbn/tinymath": "link:packages/kbn-tinymath",
"tree-kill": "^1.2.2",
"ts-easing": "^0.2.0",
"tslib": "^2.0.0",
@@ -351,7 +352,7 @@
"@cypress/webpack-preprocessor": "^5.5.0",
"@elastic/apm-rum": "^5.6.1",
"@elastic/apm-rum-react": "^1.2.5",
- "@elastic/charts": "24.4.0",
+ "@elastic/charts": "24.5.1",
"@elastic/eslint-config-kibana": "link:packages/elastic-eslint-config-kibana",
"@elastic/eslint-plugin-eui": "0.0.2",
"@elastic/github-checks-reporter": "0.0.20b3",
@@ -390,10 +391,10 @@
"@scant/router": "^0.1.0",
"@storybook/addon-a11y": "^6.0.26",
"@storybook/addon-actions": "^6.0.26",
+ "@storybook/addon-docs": "^6.0.26",
"@storybook/addon-essentials": "^6.0.26",
"@storybook/addon-knobs": "^6.0.26",
"@storybook/addon-storyshots": "^6.0.26",
- "@storybook/addon-docs": "^6.0.26",
"@storybook/components": "^6.0.26",
"@storybook/core": "^6.0.26",
"@storybook/core-events": "^6.0.26",
@@ -851,4 +852,4 @@
"yargs": "^15.4.1",
"zlib": "^1.0.5"
}
-}
\ No newline at end of file
+}
diff --git a/packages/kbn-apm-utils/package.json b/packages/kbn-apm-utils/package.json
new file mode 100644
index 00000000000000..d414b94cb39789
--- /dev/null
+++ b/packages/kbn-apm-utils/package.json
@@ -0,0 +1,13 @@
+{
+ "name": "@kbn/apm-utils",
+ "main": "./target/index.js",
+ "types": "./target/index.d.ts",
+ "version": "1.0.0",
+ "license": "SSPL-1.0 OR Elastic License 2.0",
+ "private": true,
+ "scripts": {
+ "build": "../../node_modules/.bin/tsc",
+ "kbn:bootstrap": "yarn build",
+ "kbn:watch": "yarn build --watch"
+ }
+}
diff --git a/packages/kbn-apm-utils/src/index.ts b/packages/kbn-apm-utils/src/index.ts
new file mode 100644
index 00000000000000..f2f537138dad07
--- /dev/null
+++ b/packages/kbn-apm-utils/src/index.ts
@@ -0,0 +1,87 @@
+/*
+ * 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 agent from 'elastic-apm-node';
+import asyncHooks from 'async_hooks';
+
+export interface SpanOptions {
+ name: string;
+ type?: string;
+ subtype?: string;
+ labels?: Record;
+}
+
+export function parseSpanOptions(optionsOrName: SpanOptions | string) {
+ const options = typeof optionsOrName === 'string' ? { name: optionsOrName } : optionsOrName;
+
+ return options;
+}
+
+const runInNewContext = any>(cb: T): ReturnType => {
+ const resource = new asyncHooks.AsyncResource('fake_async');
+
+ return resource.runInAsyncScope(cb);
+};
+
+export async function withSpan(
+ optionsOrName: SpanOptions | string,
+ cb: () => Promise
+): Promise {
+ const options = parseSpanOptions(optionsOrName);
+
+ const { name, type, subtype, labels } = options;
+
+ if (!agent.isStarted()) {
+ return cb();
+ }
+
+ // When a span starts, it's marked as the active span in its context.
+ // When it ends, it's not untracked, which means that if a span
+ // starts directly after this one ends, the newly started span is a
+ // child of this span, even though it should be a sibling.
+ // To mitigate this, we queue a microtask by awaiting a promise.
+ await Promise.resolve();
+
+ const span = agent.startSpan(name);
+
+ if (!span) {
+ return cb();
+ }
+
+ // If a span is created in the same context as the span that we just
+ // started, it will be a sibling, not a child. E.g., the Elasticsearch span
+ // that is created when calling search() happens in the same context. To
+ // mitigate this we create a new context.
+
+ return runInNewContext(() => {
+ // @ts-ignore
+ if (type) {
+ span.type = type;
+ }
+ if (subtype) {
+ span.subtype = subtype;
+ }
+
+ if (labels) {
+ span.addLabels(labels);
+ }
+
+ return cb()
+ .then((res) => {
+ span.outcome = 'success';
+ return res;
+ })
+ .catch((err) => {
+ span.outcome = 'failure';
+ throw err;
+ })
+ .finally(() => {
+ span.end();
+ });
+ });
+}
diff --git a/packages/kbn-apm-utils/tsconfig.json b/packages/kbn-apm-utils/tsconfig.json
new file mode 100644
index 00000000000000..e1f79b5ef394da
--- /dev/null
+++ b/packages/kbn-apm-utils/tsconfig.json
@@ -0,0 +1,18 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "declaration": true,
+ "outDir": "./target",
+ "stripInternal": false,
+ "declarationMap": true,
+ "types": [
+ "node"
+ ]
+ },
+ "include": [
+ "./src/**/*.ts"
+ ],
+ "exclude": [
+ "target"
+ ]
+}
diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml
index a1e40c06f6fa17..6d81b39df71135 100644
--- a/packages/kbn-optimizer/limits.yml
+++ b/packages/kbn-optimizer/limits.yml
@@ -91,7 +91,7 @@ pageLoadAssetSize:
visTypeMetric: 42790
visTypeTable: 94934
visTypeTagcloud: 37575
- visTypeTimelion: 51933
+ visTypeTimelion: 68883
visTypeTimeseries: 155203
visTypeVega: 153573
visTypeVislib: 242838
@@ -105,3 +105,4 @@ pageLoadAssetSize:
spacesOss: 18817
osquery: 107090
fileUpload: 25664
+ banners: 17946
diff --git a/packages/kbn-test/jest-preset.js b/packages/kbn-test/jest-preset.js
index 79fc3db86e066b..a1475985af8df0 100644
--- a/packages/kbn-test/jest-preset.js
+++ b/packages/kbn-test/jest-preset.js
@@ -37,7 +37,6 @@ module.exports = {
'\\.ace\\.worker.js$': '/packages/kbn-test/target/jest/mocks/worker_module_mock.js',
'\\.editor\\.worker.js$': '/packages/kbn-test/target/jest/mocks/worker_module_mock.js',
'^(!!)?file-loader!': '/packages/kbn-test/target/jest/mocks/file_mock.js',
- '^fixtures/(.*)': '/src/fixtures/$1',
'^src/core/(.*)': '/src/core/$1',
'^src/plugins/(.*)': '/src/plugins/$1',
},
diff --git a/packages/kbn-utils/src/package_json/index.test.ts b/packages/kbn-utils/src/package_json/index.test.ts
index 49aace6b4ff93e..f6d7e1f2f611b6 100644
--- a/packages/kbn-utils/src/package_json/index.test.ts
+++ b/packages/kbn-utils/src/package_json/index.test.ts
@@ -7,14 +7,14 @@
*/
import path from 'path';
-import { kibanaPackageJSON } from './';
+import { kibanaPackageJson } from './';
it('parses package.json', () => {
- expect(kibanaPackageJSON.name).toEqual('kibana');
+ expect(kibanaPackageJson.name).toEqual('kibana');
});
it('includes __dirname and __filename', () => {
const root = path.resolve(__dirname, '../../../../');
- expect(kibanaPackageJSON.__filename).toEqual(path.resolve(root, 'package.json'));
- expect(kibanaPackageJSON.__dirname).toEqual(root);
+ expect(kibanaPackageJson.__filename).toEqual(path.resolve(root, 'package.json'));
+ expect(kibanaPackageJson.__dirname).toEqual(root);
});
diff --git a/packages/kbn-utils/src/package_json/index.ts b/packages/kbn-utils/src/package_json/index.ts
index 0368d883896e92..40ce353780749a 100644
--- a/packages/kbn-utils/src/package_json/index.ts
+++ b/packages/kbn-utils/src/package_json/index.ts
@@ -9,7 +9,7 @@
import { dirname, resolve } from 'path';
import { REPO_ROOT } from '../repo_root';
-export const kibanaPackageJSON = {
+export const kibanaPackageJson = {
__filename: resolve(REPO_ROOT, 'package.json'),
__dirname: dirname(resolve(REPO_ROOT, 'package.json')),
...require(resolve(REPO_ROOT, 'package.json')),
diff --git a/src/core/public/_mixins.scss b/src/core/public/_mixins.scss
new file mode 100644
index 00000000000000..2dbef465e074e6
--- /dev/null
+++ b/src/core/public/_mixins.scss
@@ -0,0 +1,43 @@
+@import './variables';
+
+/* stylelint-disable-next-line length-zero-no-unit -- need consistent unit to sum them */
+@mixin kibanaFullBodyHeight($additionalOffset: 0px) {
+ // default - header, no banner
+ height: calc(100vh - #{$kbnHeaderOffset + $additionalOffset});
+
+ @at-root {
+ // no header, no banner
+ .kbnBody--chromeHidden & {
+ height: calc(100vh - #{$additionalOffset});
+ }
+ // header, banner
+ .kbnBody--hasHeaderBanner & {
+ height: calc(100vh - #{$kbnHeaderOffsetWithBanner + $additionalOffset});
+ }
+ // no header, banner
+ .kbnBody--chromeHidden.kbnBody--hasHeaderBanner & {
+ height: calc(100vh - #{$kbnHeaderBannerHeight + $additionalOffset});
+ }
+ }
+}
+
+/* stylelint-disable-next-line length-zero-no-unit -- need consistent unit to sum them */
+@mixin kibanaFullBodyMinHeight($additionalOffset: 0px) {
+ // default - header, no banner
+ min-height: calc(100vh - #{$kbnHeaderOffset + $additionalOffset});
+
+ @at-root {
+ // no header, no banner
+ .kbnBody--chromeHidden & {
+ min-height: calc(100vh - #{$additionalOffset});
+ }
+ // header, banner
+ .kbnBody--hasHeaderBanner & {
+ min-height: calc(100vh - #{$kbnHeaderOffsetWithBanner + $additionalOffset});
+ }
+ // no header, banner
+ .kbnBody--chromeHidden.kbnBody--hasHeaderBanner & {
+ min-height: calc(100vh - #{$kbnHeaderBannerHeight + $additionalOffset});
+ }
+ }
+}
diff --git a/src/core/public/_variables.scss b/src/core/public/_variables.scss
index 8c054e770bd4b7..f6ff5619bfc534 100644
--- a/src/core/public/_variables.scss
+++ b/src/core/public/_variables.scss
@@ -1,3 +1,8 @@
@import '@elastic/eui/src/global_styling/variables/header';
+// height of the header banner
+$kbnHeaderBannerHeight: $euiSizeXL;
+// total height of the header (when the banner is *not* present)
$kbnHeaderOffset: $euiHeaderHeightCompensation * 2;
+// total height of the header when the banner is present
+$kbnHeaderOffsetWithBanner: $kbnHeaderOffset + $kbnHeaderBannerHeight;
diff --git a/src/core/public/chrome/chrome_service.mock.ts b/src/core/public/chrome/chrome_service.mock.ts
index cb0876f6bc7253..ae9c58af696032 100644
--- a/src/core/public/chrome/chrome_service.mock.ts
+++ b/src/core/public/chrome/chrome_service.mock.ts
@@ -61,6 +61,8 @@ const createStartContractMock = () => {
getIsNavDrawerLocked$: jest.fn(),
getCustomNavLink$: jest.fn(),
setCustomNavLink: jest.fn(),
+ setHeaderBanner: jest.fn(),
+ getBodyClasses$: jest.fn(),
};
startContract.navLinks.getAll.mockReturnValue([]);
startContract.getBrand$.mockReturnValue(new BehaviorSubject({} as ChromeBrand));
@@ -72,6 +74,7 @@ const createStartContractMock = () => {
startContract.getCustomNavLink$.mockReturnValue(new BehaviorSubject(undefined));
startContract.getHelpExtension$.mockReturnValue(new BehaviorSubject(undefined));
startContract.getIsNavDrawerLocked$.mockReturnValue(new BehaviorSubject(false));
+ startContract.getBodyClasses$.mockReturnValue(new BehaviorSubject([]));
return startContract;
};
diff --git a/src/core/public/chrome/chrome_service.tsx b/src/core/public/chrome/chrome_service.tsx
index ee8d1c17ccd59c..e69bf9025fdb92 100644
--- a/src/core/public/chrome/chrome_service.tsx
+++ b/src/core/public/chrome/chrome_service.tsx
@@ -6,69 +6,37 @@
* Side Public License, v 1.
*/
-import { EuiBreadcrumb, IconType } from '@elastic/eui';
import React from 'react';
import { FormattedMessage } from '@kbn/i18n/react';
import { BehaviorSubject, combineLatest, merge, Observable, of, ReplaySubject } from 'rxjs';
import { flatMap, map, takeUntil } from 'rxjs/operators';
import { parse } from 'url';
import { EuiLink } from '@elastic/eui';
-import { MountPoint } from '../types';
import { mountReactNode } from '../utils/mount';
import { InternalApplicationStart } from '../application';
import { DocLinksStart } from '../doc_links';
import { HttpStart } from '../http';
import { InjectedMetadataStart } from '../injected_metadata';
import { NotificationsStart } from '../notifications';
-import { IUiSettingsClient } from '../ui_settings';
import { KIBANA_ASK_ELASTIC_LINK } from './constants';
import { ChromeDocTitle, DocTitleService } from './doc_title';
import { ChromeNavControls, NavControlsService } from './nav_controls';
-import { ChromeNavLinks, NavLinksService, ChromeNavLink } from './nav_links';
+import { NavLinksService, ChromeNavLink } from './nav_links';
import { ChromeRecentlyAccessed, RecentlyAccessedService } from './recently_accessed';
import { Header } from './ui';
-import { ChromeHelpExtensionMenuLink } from './ui/header/header_help_menu';
export { ChromeNavControls, ChromeRecentlyAccessed, ChromeDocTitle };
+import {
+ ChromeBadge,
+ ChromeBrand,
+ ChromeBreadcrumb,
+ ChromeBreadcrumbsAppendExtension,
+ ChromeHelpExtension,
+ InternalChromeStart,
+ ChromeUserBanner,
+} from './types';
const IS_LOCKED_KEY = 'core.chrome.isLocked';
-/** @public */
-export interface ChromeBadge {
- text: string;
- tooltip: string;
- iconType?: IconType;
-}
-
-/** @public */
-export interface ChromeBrand {
- logo?: string;
- smallLogo?: string;
-}
-
-/** @public */
-export type ChromeBreadcrumb = EuiBreadcrumb;
-
-/** @public */
-export interface ChromeBreadcrumbsAppendExtension {
- content: MountPoint;
-}
-
-/** @public */
-export interface ChromeHelpExtension {
- /**
- * Provide your plugin's name to create a header for separation
- */
- appName: string;
- /**
- * Creates unified links for sending users to documentation, GitHub, Discuss, or a custom link/button
- */
- links?: ChromeHelpExtensionMenuLink[];
- /**
- * Custom content to occur below the list of links
- */
- content?: (element: HTMLDivElement) => () => void;
-}
-
interface ConstructorParams {
browserSupportsCsp: boolean;
}
@@ -79,7 +47,6 @@ interface StartDeps {
http: HttpStart;
injectedMetadata: InjectedMetadataStart;
notifications: NotificationsStart;
- uiSettings: IUiSettingsClient;
}
/** @internal */
@@ -132,7 +99,6 @@ export class ChromeService {
http,
injectedMetadata,
notifications,
- uiSettings,
}: StartDeps): Promise {
this.initVisibility(application);
@@ -149,6 +115,17 @@ export class ChromeService {
const helpSupportUrl$ = new BehaviorSubject(KIBANA_ASK_ELASTIC_LINK);
const isNavDrawerLocked$ = new BehaviorSubject(localStorage.getItem(IS_LOCKED_KEY) === 'true');
+ const headerBanner$ = new BehaviorSubject(undefined);
+ const bodyClasses$ = combineLatest([headerBanner$, this.isVisible$!]).pipe(
+ map(([headerBanner, isVisible]) => {
+ return [
+ 'kbnBody',
+ headerBanner ? 'kbnBody--hasHeaderBanner' : 'kbnBody--noHeaderBanner',
+ isVisible ? 'kbnBody--chromeVisible' : 'kbnBody--chromeHidden',
+ ];
+ })
+ );
+
const navControls = this.navControls.start();
const navLinks = this.navLinks.start({ application, http });
const recentlyAccessed = await this.recentlyAccessed.start({ http });
@@ -220,6 +197,7 @@ export class ChromeService {
loadingCount$={http.getLoadingCount$()}
application={application}
appTitle$={appTitle$.pipe(takeUntil(this.stop$))}
+ headerBanner$={headerBanner$.pipe(takeUntil(this.stop$))}
badge$={badge$.pipe(takeUntil(this.stop$))}
basePath={http.basePath}
breadcrumbs$={breadcrumbs$.pipe(takeUntil(this.stop$))}
@@ -312,6 +290,12 @@ export class ChromeService {
setCustomNavLink: (customNavLink?: ChromeNavLink) => {
customNavLink$.next(customNavLink);
},
+
+ setHeaderBanner: (headerBanner?: ChromeUserBanner) => {
+ headerBanner$.next(headerBanner);
+ },
+
+ getBodyClasses$: () => bodyClasses$.pipe(takeUntil(this.stop$)),
};
}
@@ -320,173 +304,3 @@ export class ChromeService {
this.stop$.next();
}
}
-
-/**
- * ChromeStart allows plugins to customize the global chrome header UI and
- * enrich the UX with additional information about the current location of the
- * browser.
- *
- * @remarks
- * While ChromeStart exposes many APIs, they should be used sparingly and the
- * developer should understand how they affect other plugins and applications.
- *
- * @example
- * How to add a recently accessed item to the sidebar:
- * ```ts
- * core.chrome.recentlyAccessed.add('/app/map/1234', 'Map 1234', '1234');
- * ```
- *
- * @example
- * How to set the help dropdown extension:
- * ```tsx
- * core.chrome.setHelpExtension(elem => {
- * ReactDOM.render(, elem);
- * return () => ReactDOM.unmountComponentAtNode(elem);
- * });
- * ```
- *
- * @public
- */
-export interface ChromeStart {
- /** {@inheritdoc ChromeNavLinks} */
- navLinks: ChromeNavLinks;
- /** {@inheritdoc ChromeNavControls} */
- navControls: ChromeNavControls;
- /** {@inheritdoc ChromeRecentlyAccessed} */
- recentlyAccessed: ChromeRecentlyAccessed;
- /** {@inheritdoc ChromeDocTitle} */
- docTitle: ChromeDocTitle;
-
- /**
- * Sets the current app's title
- *
- * @internalRemarks
- * This should be handled by the application service once it is in charge
- * of mounting applications.
- */
- setAppTitle(appTitle: string): void;
-
- /**
- * Get an observable of the current brand information.
- */
- getBrand$(): Observable;
-
- /**
- * Set the brand configuration.
- *
- * @remarks
- * Normally the `logo` property will be rendered as the
- * CSS background for the home link in the chrome navigation, but when the page is
- * rendered in a small window the `smallLogo` will be used and rendered at about
- * 45px wide.
- *
- * @example
- * ```js
- * chrome.setBrand({
- * logo: 'url(/plugins/app/logo.png) center no-repeat'
- * smallLogo: 'url(/plugins/app/logo-small.png) center no-repeat'
- * })
- * ```
- *
- */
- setBrand(brand: ChromeBrand): void;
-
- /**
- * Get an observable of the current visibility state of the chrome.
- */
- getIsVisible$(): Observable;
-
- /**
- * Set the temporary visibility for the chrome. This does nothing if the chrome is hidden
- * by default and should be used to hide the chrome for things like full-screen modes
- * with an exit button.
- */
- setIsVisible(isVisible: boolean): void;
-
- /**
- * Get the current set of classNames that will be set on the application container.
- */
- getApplicationClasses$(): Observable;
-
- /**
- * Add a className that should be set on the application container.
- */
- addApplicationClass(className: string): void;
-
- /**
- * Remove a className added with `addApplicationClass()`. If className is unknown it is ignored.
- */
- removeApplicationClass(className: string): void;
-
- /**
- * Get an observable of the current badge
- */
- getBadge$(): Observable;
-
- /**
- * Override the current badge
- */
- setBadge(badge?: ChromeBadge): void;
-
- /**
- * Get an observable of the current list of breadcrumbs
- */
- getBreadcrumbs$(): Observable;
-
- /**
- * Override the current set of breadcrumbs
- */
- setBreadcrumbs(newBreadcrumbs: ChromeBreadcrumb[]): void;
-
- /**
- * Get an observable of the current extension appended to breadcrumbs
- */
- getBreadcrumbsAppendExtension$(): Observable;
-
- /**
- * Mount an element next to the last breadcrumb
- */
- setBreadcrumbsAppendExtension(
- breadcrumbsAppendExtension?: ChromeBreadcrumbsAppendExtension
- ): void;
-
- /**
- * Get an observable of the current custom nav link
- */
- getCustomNavLink$(): Observable | undefined>;
-
- /**
- * Override the current set of custom nav link
- */
- setCustomNavLink(newCustomNavLink?: Partial): void;
-
- /**
- * Get an observable of the current custom help conttent
- */
- getHelpExtension$(): Observable;
-
- /**
- * Override the current set of custom help content
- */
- setHelpExtension(helpExtension?: ChromeHelpExtension): void;
-
- /**
- * Override the default support URL shown in the help menu
- * @param url The updated support URL
- */
- setHelpSupportUrl(url: string): void;
-
- /**
- * Get an observable of the current locked state of the nav drawer.
- */
- getIsNavDrawerLocked$(): Observable;
-}
-
-/** @internal */
-export interface InternalChromeStart extends ChromeStart {
- /**
- * Used only by MountingService to render the header UI
- * @internal
- */
- getHeaderComponent(): JSX.Element;
-}
diff --git a/src/core/public/chrome/index.ts b/src/core/public/chrome/index.ts
index cf4106a42e0d4d..069d29ca70d01e 100644
--- a/src/core/public/chrome/index.ts
+++ b/src/core/public/chrome/index.ts
@@ -6,15 +6,7 @@
* Side Public License, v 1.
*/
-export {
- ChromeBadge,
- ChromeBreadcrumb,
- ChromeService,
- ChromeStart,
- InternalChromeStart,
- ChromeBrand,
- ChromeHelpExtension,
-} from './chrome_service';
+export { ChromeService } from './chrome_service';
export {
ChromeHelpExtensionLinkBase,
ChromeHelpExtensionMenuLink,
@@ -28,3 +20,13 @@ export { ChromeNavLink, ChromeNavLinks, ChromeNavLinkUpdateableFields } from './
export { ChromeRecentlyAccessed, ChromeRecentlyAccessedHistoryItem } from './recently_accessed';
export { ChromeNavControl, ChromeNavControls } from './nav_controls';
export { ChromeDocTitle } from './doc_title';
+export {
+ InternalChromeStart,
+ ChromeStart,
+ ChromeHelpExtension,
+ ChromeBreadcrumbsAppendExtension,
+ ChromeBreadcrumb,
+ ChromeBrand,
+ ChromeBadge,
+ ChromeUserBanner,
+} from './types';
diff --git a/src/core/public/chrome/types.ts b/src/core/public/chrome/types.ts
new file mode 100644
index 00000000000000..732236f1ba4a12
--- /dev/null
+++ b/src/core/public/chrome/types.ts
@@ -0,0 +1,241 @@
+/*
+ * 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 { EuiBreadcrumb, IconType } from '@elastic/eui';
+import { Observable } from 'rxjs';
+import { MountPoint } from '../types';
+import { ChromeDocTitle } from './doc_title';
+import { ChromeNavControls } from './nav_controls';
+import { ChromeNavLinks, ChromeNavLink } from './nav_links';
+import { ChromeRecentlyAccessed } from './recently_accessed';
+import { ChromeHelpExtensionMenuLink } from './ui/header/header_help_menu';
+
+/** @public */
+export interface ChromeBadge {
+ text: string;
+ tooltip: string;
+ iconType?: IconType;
+}
+
+/** @public */
+export interface ChromeBrand {
+ logo?: string;
+ smallLogo?: string;
+}
+
+/** @public */
+export type ChromeBreadcrumb = EuiBreadcrumb;
+
+/** @public */
+export interface ChromeBreadcrumbsAppendExtension {
+ content: MountPoint;
+}
+
+/** @public */
+export interface ChromeUserBanner {
+ content: MountPoint;
+}
+
+/** @public */
+export interface ChromeHelpExtension {
+ /**
+ * Provide your plugin's name to create a header for separation
+ */
+ appName: string;
+ /**
+ * Creates unified links for sending users to documentation, GitHub, Discuss, or a custom link/button
+ */
+ links?: ChromeHelpExtensionMenuLink[];
+ /**
+ * Custom content to occur below the list of links
+ */
+ content?: (element: HTMLDivElement) => () => void;
+}
+
+/**
+ * ChromeStart allows plugins to customize the global chrome header UI and
+ * enrich the UX with additional information about the current location of the
+ * browser.
+ *
+ * @remarks
+ * While ChromeStart exposes many APIs, they should be used sparingly and the
+ * developer should understand how they affect other plugins and applications.
+ *
+ * @example
+ * How to add a recently accessed item to the sidebar:
+ * ```ts
+ * core.chrome.recentlyAccessed.add('/app/map/1234', 'Map 1234', '1234');
+ * ```
+ *
+ * @example
+ * How to set the help dropdown extension:
+ * ```tsx
+ * core.chrome.setHelpExtension(elem => {
+ * ReactDOM.render(, elem);
+ * return () => ReactDOM.unmountComponentAtNode(elem);
+ * });
+ * ```
+ *
+ * @public
+ */
+export interface ChromeStart {
+ /** {@inheritdoc ChromeNavLinks} */
+ navLinks: ChromeNavLinks;
+ /** {@inheritdoc ChromeNavControls} */
+ navControls: ChromeNavControls;
+ /** {@inheritdoc ChromeRecentlyAccessed} */
+ recentlyAccessed: ChromeRecentlyAccessed;
+ /** {@inheritdoc ChromeDocTitle} */
+ docTitle: ChromeDocTitle;
+
+ /**
+ * Sets the current app's title
+ *
+ * @internalRemarks
+ * This should be handled by the application service once it is in charge
+ * of mounting applications.
+ */
+ setAppTitle(appTitle: string): void;
+
+ /**
+ * Get an observable of the current brand information.
+ */
+ getBrand$(): Observable;
+
+ /**
+ * Set the brand configuration.
+ *
+ * @remarks
+ * Normally the `logo` property will be rendered as the
+ * CSS background for the home link in the chrome navigation, but when the page is
+ * rendered in a small window the `smallLogo` will be used and rendered at about
+ * 45px wide.
+ *
+ * @example
+ * ```js
+ * chrome.setBrand({
+ * logo: 'url(/plugins/app/logo.png) center no-repeat'
+ * smallLogo: 'url(/plugins/app/logo-small.png) center no-repeat'
+ * })
+ * ```
+ *
+ */
+ setBrand(brand: ChromeBrand): void;
+
+ /**
+ * Get an observable of the current visibility state of the chrome.
+ */
+ getIsVisible$(): Observable;
+
+ /**
+ * Set the temporary visibility for the chrome. This does nothing if the chrome is hidden
+ * by default and should be used to hide the chrome for things like full-screen modes
+ * with an exit button.
+ */
+ setIsVisible(isVisible: boolean): void;
+
+ /**
+ * Get the current set of classNames that will be set on the application container.
+ */
+ getApplicationClasses$(): Observable;
+
+ /**
+ * Add a className that should be set on the application container.
+ */
+ addApplicationClass(className: string): void;
+
+ /**
+ * Remove a className added with `addApplicationClass()`. If className is unknown it is ignored.
+ */
+ removeApplicationClass(className: string): void;
+
+ /**
+ * Get an observable of the current badge
+ */
+ getBadge$(): Observable;
+
+ /**
+ * Override the current badge
+ */
+ setBadge(badge?: ChromeBadge): void;
+
+ /**
+ * Get an observable of the current list of breadcrumbs
+ */
+ getBreadcrumbs$(): Observable;
+
+ /**
+ * Override the current set of breadcrumbs
+ */
+ setBreadcrumbs(newBreadcrumbs: ChromeBreadcrumb[]): void;
+
+ /**
+ * Get an observable of the current extension appended to breadcrumbs
+ */
+ getBreadcrumbsAppendExtension$(): Observable;
+
+ /**
+ * Mount an element next to the last breadcrumb
+ */
+ setBreadcrumbsAppendExtension(
+ breadcrumbsAppendExtension?: ChromeBreadcrumbsAppendExtension
+ ): void;
+
+ /**
+ * Get an observable of the current custom nav link
+ */
+ getCustomNavLink$(): Observable | undefined>;
+
+ /**
+ * Override the current set of custom nav link
+ */
+ setCustomNavLink(newCustomNavLink?: Partial): void;
+
+ /**
+ * Get an observable of the current custom help conttent
+ */
+ getHelpExtension$(): Observable;
+
+ /**
+ * Override the current set of custom help content
+ */
+ setHelpExtension(helpExtension?: ChromeHelpExtension): void;
+
+ /**
+ * Override the default support URL shown in the help menu
+ * @param url The updated support URL
+ */
+ setHelpSupportUrl(url: string): void;
+
+ /**
+ * Get an observable of the current locked state of the nav drawer.
+ */
+ getIsNavDrawerLocked$(): Observable;
+
+ /**
+ * Set the banner that will appear on top of the chrome header.
+ *
+ * @remarks Using `undefined` when invoking this API will remove the banner.
+ */
+ setHeaderBanner(headerBanner?: ChromeUserBanner): void;
+}
+
+/** @internal */
+export interface InternalChromeStart extends ChromeStart {
+ /**
+ * Used only by the rendering service to render the header UI
+ * @internal
+ */
+ getHeaderComponent(): JSX.Element;
+ /**
+ * Used only by the rendering service to retrieve the set of classNames
+ * that will be set on the body element.
+ * @internal
+ */
+ getBodyClasses$(): Observable;
+}
diff --git a/src/core/public/chrome/ui/header/__snapshots__/header.test.tsx.snap b/src/core/public/chrome/ui/header/__snapshots__/header.test.tsx.snap
index 9e7906250949e4..4f31c952b88268 100644
--- a/src/core/public/chrome/ui/header/__snapshots__/header.test.tsx.snap
+++ b/src/core/public/chrome/ui/header/__snapshots__/header.test.tsx.snap
@@ -452,6 +452,55 @@ exports[`Header renders 1`] = `
"thrownError": null,
}
}
+ headerBanner$={
+ BehaviorSubject {
+ "_isScalar": false,
+ "_value": undefined,
+ "closed": false,
+ "hasError": false,
+ "isStopped": false,
+ "observers": Array [
+ Subscriber {
+ "_parentOrParents": null,
+ "_subscriptions": Array [
+ SubjectSubscription {
+ "_parentOrParents": [Circular],
+ "_subscriptions": null,
+ "closed": false,
+ "subject": [Circular],
+ "subscriber": [Circular],
+ },
+ ],
+ "closed": false,
+ "destination": SafeSubscriber {
+ "_complete": undefined,
+ "_context": [Circular],
+ "_error": undefined,
+ "_next": [Function],
+ "_parentOrParents": null,
+ "_parentSubscriber": [Circular],
+ "_subscriptions": null,
+ "closed": false,
+ "destination": Object {
+ "closed": true,
+ "complete": [Function],
+ "error": [Function],
+ "next": [Function],
+ },
+ "isStopped": false,
+ "syncErrorThrowable": false,
+ "syncErrorThrown": false,
+ "syncErrorValue": null,
+ },
+ "isStopped": false,
+ "syncErrorThrowable": true,
+ "syncErrorThrown": false,
+ "syncErrorValue": null,
+ },
+ ],
+ "thrownError": null,
+ }
+ }
helpExtension$={
BehaviorSubject {
"_isScalar": false,
@@ -1699,14 +1748,67 @@ exports[`Header renders 1`] = `
}
}
>
+