@groundcover/api-client 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -398,6 +398,58 @@ export type AssetFetchResult = {
398
398
  type?: string;
399
399
  };
400
400
 
401
+ /**
402
+ * AssetFunnel is the wet-mode hierarchical breakdown for one asset type.
403
+ *
404
+ * Unit names what Total counts: monitors are counted whole, dashboards are
405
+ * counted per widget.
406
+ */
407
+ export type AssetFunnel = {
408
+ excluded?: ExcludedBucket;
409
+ not_supported?: NotSupportedBucket;
410
+ supported_converted?: SupportedConvertedBucket;
411
+ supported_not_converted?: SupportedNotConvertedBucket;
412
+ total?: number;
413
+ unit?: string;
414
+ };
415
+
416
+ /**
417
+ * AssetGapDetail describes one unit's gaps, counted once regardless of how many
418
+ * findings produced it.
419
+ */
420
+ export type AssetGapDetail = {
421
+ asset_id?: string;
422
+ asset_name?: string;
423
+ datasources?: Array<string>;
424
+ keys?: Array<string>;
425
+ keys_by_datasource?: {
426
+ [key: string]: Array<string>;
427
+ };
428
+ /**
429
+ * KeysByMetric and KeysByDatasource preserve which owner each missing key
430
+ * belongs to. Without them a unit missing a metric label and a log field
431
+ * reported both keys under the metric *and* under logs.
432
+ */
433
+ keys_by_metric?: {
434
+ [key: string]: Array<string>;
435
+ };
436
+ metrics?: Array<string>;
437
+ queries?: Array<ExecutedQuery>;
438
+ reason?: string;
439
+ /**
440
+ * SomeQueriesReturnedData distinguishes a unit where every query came back
441
+ * empty from one where only some did. Without it, a widget with nine working
442
+ * series and one broken one is indistinguishable from a wholly dead widget.
443
+ */
444
+ some_queries_returned_data?: boolean;
445
+ values?: Array<string>;
446
+ values_by_metric?: {
447
+ [key: string]: Array<string>;
448
+ };
449
+ widget_id?: string;
450
+ widget_title?: string;
451
+ };
452
+
401
453
  export type AssetInstallResult = {
402
454
  /**
403
455
  * Error message if the installation failed.
@@ -1626,6 +1678,14 @@ export type ConvertMonitorResponse = {
1626
1678
  success?: boolean;
1627
1679
  };
1628
1680
 
1681
+ /**
1682
+ * CountPct is a count with percentage of its parent total.
1683
+ */
1684
+ export type CountPct = {
1685
+ count?: number;
1686
+ pct?: number;
1687
+ };
1688
+
1629
1689
  /**
1630
1690
  * CoverageAction defines an actionable step and its estimated query impact.
1631
1691
  */
@@ -2428,11 +2488,34 @@ export type DataScope = {
2428
2488
  simple?: Group;
2429
2489
  };
2430
2490
 
2491
+ /**
2492
+ * DataSetAvailableBucket is converted units whose underlying dataset exists in GC.
2493
+ */
2494
+ export type DataSetAvailableBucket = {
2495
+ /**
2496
+ * Lookback is the widest window actually queried, so the report never claims
2497
+ * a window it did not use.
2498
+ */
2499
+ lookback?: string;
2500
+ no_data?: NoDataBreakdown;
2501
+ returns_data?: CountPct;
2502
+ total?: number;
2503
+ };
2504
+
2431
2505
  /**
2432
2506
  * Datasource identifies the query backend.
2433
2507
  */
2434
2508
  export type Datasource = string;
2435
2509
 
2510
+ /**
2511
+ * DatasourceKeyGap aggregates missing field keys for one search datasource.
2512
+ */
2513
+ export type DatasourceKeyGap = {
2514
+ count?: number;
2515
+ datasource?: string;
2516
+ keys?: Array<string>;
2517
+ };
2518
+
2436
2519
  export type DeleteIngestionKeyRequest = {
2437
2520
  /**
2438
2521
  * Name of the ingestion key to delete
@@ -2772,6 +2855,42 @@ export type EventsSearchTimeSeriesRequest = {
2772
2855
  valueField?: string;
2773
2856
  };
2774
2857
 
2858
+ /**
2859
+ * ExcludedBucket counts units held out of the funnel because their only unmet
2860
+ * dependency is Datadog's own telemetry: a self-observability metric, or one
2861
+ * already inactive in Datadog. Migration quality has no bearing on either —
2862
+ * they were never going to return data — so they are reported separately
2863
+ * rather than weighing on supported/unsupported like a real gap would.
2864
+ */
2865
+ export type ExcludedBucket = {
2866
+ datadog_self_observability?: MetricListBucket;
2867
+ inactive_in_datadog?: MetricListBucket;
2868
+ total?: number;
2869
+ };
2870
+
2871
+ /**
2872
+ * ExecutedQuery is the evidence for a unit's wet outcome: the query that ran,
2873
+ *
2874
+ * the window it ran over, and what came back.
2875
+ */
2876
+ export type ExecutedQuery = {
2877
+ datasource?: string;
2878
+ error?: string;
2879
+ language?: string;
2880
+ /**
2881
+ * Metric names the query's underlying metric, for datasource == "metrics"
2882
+ * only. Without it a metrics query that returned no data cannot be traced
2883
+ * back to which metric was empty without parsing the query text.
2884
+ */
2885
+ metric?: string;
2886
+ original_dd?: string;
2887
+ query?: string;
2888
+ query_id?: string;
2889
+ resolved_query?: string;
2890
+ status?: string;
2891
+ window?: string;
2892
+ };
2893
+
2775
2894
  /**
2776
2895
  * ExecutionPolicy defines model for ExecutionPolicy.
2777
2896
  */
@@ -2959,6 +3078,36 @@ export type Finding = {
2959
3078
  widget_title?: string;
2960
3079
  };
2961
3080
 
3081
+ /**
3082
+ * FunnelAssetEntry maps one asset — or one dashboard widget — to the funnel stage
3083
+ * it reached, with the queries that were executed as evidence.
3084
+ */
3085
+ export type FunnelAssetEntry = {
3086
+ asset_id?: string;
3087
+ asset_name?: string;
3088
+ asset_type?: string;
3089
+ metrics?: Array<string>;
3090
+ missing_keys?: Array<string>;
3091
+ missing_values?: Array<string>;
3092
+ queries?: Array<ExecutedQuery>;
3093
+ reason?: string;
3094
+ stage?: string;
3095
+ widget_id?: string;
3096
+ widget_title?: string;
3097
+ };
3098
+
3099
+ /**
3100
+ * FunnelByAsset is the per-asset view of the funnel: every monitor and every
3101
+ * dashboard widget, with the stage it terminated at.
3102
+ */
3103
+ export type FunnelByAsset = {
3104
+ assets?: Array<FunnelAssetEntry>;
3105
+ by_stage?: {
3106
+ [key: string]: number;
3107
+ };
3108
+ total?: number;
3109
+ };
3110
+
2962
3111
  export type GenericFiltersItem = {
2963
3112
  count?: number;
2964
3113
  name?: string;
@@ -3336,6 +3485,17 @@ export type IntegrationCount = {
3336
3485
  name?: string;
3337
3486
  };
3338
3487
 
3488
+ /**
3489
+ * IntegrationCountBucket counts units per data-source mapping.
3490
+ */
3491
+ export type IntegrationCountBucket = {
3492
+ by_integration?: {
3493
+ [key: string]: number;
3494
+ };
3495
+ count?: number;
3496
+ metrics?: Array<TaggedMetric>;
3497
+ };
3498
+
3339
3499
  export type Integrations = {
3340
3500
  /**
3341
3501
  * Identity is the principal of the backend's own cloud (an AWS role ARN, a GCP
@@ -3503,6 +3663,20 @@ export type KeyMapping = {
3503
3663
  source_key?: string;
3504
3664
  };
3505
3665
 
3666
+ /**
3667
+ * KeyMissingBreakdown groups units with missing keys.
3668
+ *
3669
+ * Metric label gaps and search field gaps are reported separately: a log or event
3670
+ * field gap has no metric to attribute it to, and folding both into a by-metric
3671
+ * view produced a meaningless "unknown" bucket.
3672
+ */
3673
+ export type KeyMissingBreakdown = {
3674
+ assets?: Array<AssetGapDetail>;
3675
+ by_datasource?: Array<DatasourceKeyGap>;
3676
+ by_metric?: Array<MetricKeyGap>;
3677
+ count?: number;
3678
+ };
3679
+
3506
3680
  export type KeysResponse = {
3507
3681
  isLimitReached?: boolean;
3508
3682
  keys?: Array<KeyItem>;
@@ -4119,6 +4293,22 @@ export type LogsInsightsRequestParams = {
4119
4293
  threshold?: number;
4120
4294
  };
4121
4295
 
4296
+ /**
4297
+ * LogsMissingBucket covers units whose log dataset is absent, including the case
4298
+ * where the log source they filter on is not ingested into groundcover at all.
4299
+ */
4300
+ export type LogsMissingBucket = {
4301
+ assets?: Array<AssetGapDetail>;
4302
+ count?: number;
4303
+ known_sources?: Array<string>;
4304
+ missing_sources?: Array<string>;
4305
+ /**
4306
+ * SourceNotIngested counts units filtering on a source:<value> that
4307
+ * groundcover does not ingest, which no lookback widening can fix.
4308
+ */
4309
+ source_not_ingested?: number;
4310
+ };
4311
+
4122
4312
  export type LogsPatternParamDistributionResponse = {
4123
4313
  values?: Array<PatternParamDistributionValue>;
4124
4314
  };
@@ -4482,6 +4672,15 @@ export type Metadata = {
4482
4672
  target?: string;
4483
4673
  };
4484
4674
 
4675
+ /**
4676
+ * MetricKeyGap aggregates missing label keys for one metric across units.
4677
+ */
4678
+ export type MetricKeyGap = {
4679
+ count?: number;
4680
+ keys?: Array<string>;
4681
+ metric?: string;
4682
+ };
4683
+
4485
4684
  export type MetricKeysRequestV2 = {
4486
4685
  end?: string;
4487
4686
  filter?: string;
@@ -4500,11 +4699,28 @@ export type MetricLabels = {
4500
4699
  [key: string]: string;
4501
4700
  };
4502
4701
 
4702
+ /**
4703
+ * MetricListBucket counts units and lists the metrics responsible.
4704
+ */
4705
+ export type MetricListBucket = {
4706
+ count?: number;
4707
+ metrics?: Array<TaggedMetric>;
4708
+ };
4709
+
4503
4710
  export type MetricMapping = {
4504
4711
  groundcover_metric?: string;
4505
4712
  source_metric?: string;
4506
4713
  };
4507
4714
 
4715
+ /**
4716
+ * MetricValueGap aggregates missing label values for one metric.
4717
+ */
4718
+ export type MetricValueGap = {
4719
+ count?: number;
4720
+ metric?: string;
4721
+ values?: Array<string>;
4722
+ };
4723
+
4508
4724
  export type MetricValuesRequestV2 = {
4509
4725
  conditions?: Array<Condition>;
4510
4726
  end?: string;
@@ -4834,6 +5050,34 @@ export type MigrationDetectedIntegration = {
4834
5050
  metricCount: number;
4835
5051
  };
4836
5052
 
5053
+ /**
5054
+ * MissingDataSetBucket covers converted units whose underlying dataset is absent.
5055
+ */
5056
+ export type MissingDataSetBucket = {
5057
+ logs?: LogsMissingBucket;
5058
+ metrics?: MissingMetricsBreakdown;
5059
+ missing_env?: ValueMissingBucket;
5060
+ tail?: TailDataSetBreakdown;
5061
+ total?: number;
5062
+ };
5063
+
5064
+ /**
5065
+ * MissingMetricsBreakdown splits missing metrics into mutually exclusive buckets.
5066
+ *
5067
+ * A metric can qualify for several buckets at once (a datadog.* metric that is
5068
+ * also inactive, say). It is counted in exactly one — chosen by the priority
5069
+ * order in classifyMissingMetric — and carries a tag for every bucket that
5070
+ * applies, so nothing is lost to that choice.
5071
+ */
5072
+ export type MissingMetricsBreakdown = {
5073
+ custom_metrics?: MetricListBucket;
5074
+ datadog_self_observability?: MetricListBucket;
5075
+ inactive_in_datadog?: MetricListBucket;
5076
+ integrations_we_dont_have?: IntegrationCountBucket;
5077
+ integrations_we_have?: IntegrationCountBucket;
5078
+ total?: number;
5079
+ };
5080
+
4837
5081
  /**
4838
5082
  * Model holds the core query/reducer/threshold definitions.
4839
5083
  */
@@ -5011,6 +5255,44 @@ export type MonitorVariable = {
5011
5255
  storage?: string;
5012
5256
  };
5013
5257
 
5258
+ /**
5259
+ * NoDataBreakdown drills into units that did not come back fully working.
5260
+ *
5261
+ * A unit lands here when any of its queries returned no data, or when a static
5262
+ * key/value gap was found. For a multi-query unit — a widget with several series,
5263
+ * a monitor with a formula — that means "not all queries returned data" rather
5264
+ * than "nothing returned data"; SomeQueriesReturnedData on each entry records
5265
+ * which of the two it was.
5266
+ */
5267
+ export type NoDataBreakdown = {
5268
+ count?: number;
5269
+ negative_key_missing?: KeyMissingBreakdown;
5270
+ negative_value_missing?: ValueMissingBucket;
5271
+ pct?: number;
5272
+ positive_all_keys_values_exist?: PositiveNoDataBucket;
5273
+ };
5274
+
5275
+ /**
5276
+ * NoDataNeededBucket counts units that need no query to render.
5277
+ */
5278
+ export type NoDataNeededBucket = {
5279
+ by_type?: {
5280
+ [key: string]: number;
5281
+ };
5282
+ count?: number;
5283
+ };
5284
+
5285
+ /**
5286
+ * NotSupportedBucket covers unsupported types, bucketed by type.
5287
+ */
5288
+ export type NotSupportedBucket = {
5289
+ assets?: Array<AssetGapDetail>;
5290
+ by_type?: {
5291
+ [key: string]: number;
5292
+ };
5293
+ total?: number;
5294
+ };
5295
+
5014
5296
  export type NotificationRouteListItemResponse = {
5015
5297
  /**
5016
5298
  * The creation timestamp
@@ -5360,11 +5642,30 @@ export type PolicyWithEntityCount = Policy & {
5360
5642
  readonly entityCount?: number;
5361
5643
  };
5362
5644
 
5645
+ /**
5646
+ * PositiveNoDataBucket covers units where every dependency resolves yet no data
5647
+ * came back, broken down by the reason we could establish.
5648
+ */
5649
+ export type PositiveNoDataBucket = {
5650
+ assets?: Array<AssetGapDetail>;
5651
+ by_reason?: OrderedReasons;
5652
+ count?: number;
5653
+ pct?: number;
5654
+ };
5655
+
5363
5656
  /**
5364
5657
  * PreflightReport is the top-level structured output of a preflight validation run.
5365
5658
  */
5366
5659
  export type PreflightReport = {
5367
5660
  coverage_plan?: CoveragePlan;
5661
+ funnel_by_asset?: FunnelByAsset;
5662
+ /**
5663
+ * GeneratedAt is when this report was produced, set once right before it is
5664
+ * written out. A report is often diffed against a later rerun after a fix, so
5665
+ * the file needs to say for itself when it was taken without relying on
5666
+ * filesystem mtimes, which a copy or a git checkout does not preserve.
5667
+ */
5668
+ generated_at?: string;
5368
5669
  integrations_summary?: Array<IntegrationCount>;
5369
5670
  raw_findings?: Array<Finding>;
5370
5671
  summary?: UnifiedSummary;
@@ -6136,12 +6437,25 @@ export type ServiceAccountsWithPolicy = {
6136
6437
  };
6137
6438
 
6138
6439
  export type Session = {
6440
+ /**
6441
+ * AppVersion is the mobile application version. Empty for web sessions, which
6442
+ * report ReleaseID instead.
6443
+ */
6444
+ appVersion?: string;
6139
6445
  browser?: string;
6140
6446
  country?: string;
6447
+ deviceBrand?: string;
6448
+ deviceModel?: string;
6141
6449
  durationMilli?: number;
6142
6450
  endTime?: string;
6143
6451
  hasSessionReplay?: number;
6144
6452
  isMobile?: string;
6453
+ /**
6454
+ * Mobile RUM. Empty for web sessions, which report browser.* instead. The client
6455
+ * platform is not returned: it is a filter dimension only.
6456
+ */
6457
+ osName?: string;
6458
+ osVersion?: string;
6145
6459
  pageCount?: number;
6146
6460
  releaseId?: string;
6147
6461
  serviceName?: string;
@@ -6154,6 +6468,11 @@ export type Session = {
6154
6468
  };
6155
6469
 
6156
6470
  export type SessionDetailsRequestParams = {
6471
+ /**
6472
+ * Category selects the platform to query: 'rum' for web RUM, 'mobile-rum' for
6473
+ * React Native. Defaults to 'rum' when omitted.
6474
+ */
6475
+ category?: 'rum' | 'mobile-rum';
6157
6476
  conditions?: Array<Condition>;
6158
6477
  end?: string;
6159
6478
  sessionID?: string;
@@ -6239,6 +6558,11 @@ export type SessionReplayVelocityResponse = {
6239
6558
  };
6240
6559
 
6241
6560
  export type SessionsFiltersRequestParams = {
6561
+ /**
6562
+ * Category selects the platform to query: 'rum' for web RUM, 'mobile-rum' for
6563
+ * React Native. Defaults to 'rum' when omitted.
6564
+ */
6565
+ category?: 'rum' | 'mobile-rum';
6242
6566
  conditions?: Array<Condition>;
6243
6567
  end?: string;
6244
6568
  required?: Array<Column>;
@@ -6251,11 +6575,21 @@ export type SessionsFiltersResponse = {
6251
6575
  };
6252
6576
 
6253
6577
  export type SessionsQueryRequestParams = {
6578
+ /**
6579
+ * Category selects the platform to query: 'rum' for web RUM, 'mobile-rum' for
6580
+ * React Native. Defaults to 'rum' when omitted.
6581
+ */
6582
+ category?: 'rum' | 'mobile-rum';
6254
6583
  conditions?: Array<Condition>;
6255
6584
  end?: string;
6256
6585
  limit?: number;
6257
6586
  skip?: number;
6258
- sortBy?: string;
6587
+ /**
6588
+ * Interpolated raw into ORDER BY, so this list is the only guard - and it is
6589
+ * version-independent while the template is version-selected, so every value
6590
+ * needs an alias in all three variants. Keep the enum below in lockstep.
6591
+ */
6592
+ sortBy?: 'sessionID' | 'startTime' | 'endTime' | 'userEmail' | 'userId' | 'country' | 'isMobile' | 'browser' | 'sessionErrors' | 'pageCount' | 'durationMilli' | 'osName' | 'deviceModel';
6259
6593
  sortOrder?: string;
6260
6594
  sources?: Array<Condition>;
6261
6595
  start?: string;
@@ -6266,6 +6600,11 @@ export type SessionsQueryResponse = {
6266
6600
  };
6267
6601
 
6268
6602
  export type SessionsSummaryRequestParams = {
6603
+ /**
6604
+ * Category selects the platform to query: 'rum' for web RUM, 'mobile-rum' for
6605
+ * React Native. Defaults to 'rum' when omitted.
6606
+ */
6607
+ category?: 'rum' | 'mobile-rum';
6269
6608
  conditions?: Array<Condition>;
6270
6609
  end?: string;
6271
6610
  sources?: Array<Condition>;
@@ -6572,11 +6911,51 @@ export type Subject = {
6572
6911
  */
6573
6912
  export type Suggestion = {
6574
6913
  confidence?: number;
6575
- reason?: string;
6914
+ reasons?: Array<SuggestionReason>;
6576
6915
  type?: string;
6577
6916
  value?: string;
6578
6917
  };
6579
6918
 
6919
+ /**
6920
+ * SuggestionReason is one scoring signal that contributed to a Suggestion.
6921
+ *
6922
+ * Weight is the signal's additive contribution within the scorer that produced
6923
+ * it. Name-similarity signals and value-overlap signals are scored
6924
+ * independently, so when both back the same candidate the suggestion carries
6925
+ * reasons from each and Confidence is the higher of the two estimates rather
6926
+ * than their sum — weights add up within a scorer, not across them.
6927
+ *
6928
+ * Detail carries the evidence behind the signal. For value-overlap signals that
6929
+ * means the matched values themselves, which is what makes the difference
6930
+ * between a suggestion worth acting on and one worth eyeballing.
6931
+ */
6932
+ export type SuggestionReason = {
6933
+ code?: string;
6934
+ detail?: string;
6935
+ weight?: number;
6936
+ };
6937
+
6938
+ /**
6939
+ * SupportedConvertedBucket covers units that converted successfully.
6940
+ */
6941
+ export type SupportedConvertedBucket = {
6942
+ data_set_available?: DataSetAvailableBucket;
6943
+ missing_underlying_data_set?: MissingDataSetBucket;
6944
+ no_data_needed?: NoDataNeededBucket;
6945
+ total?: number;
6946
+ };
6947
+
6948
+ /**
6949
+ * SupportedNotConvertedBucket covers supported types that failed conversion.
6950
+ */
6951
+ export type SupportedNotConvertedBucket = {
6952
+ assets?: Array<AssetGapDetail>;
6953
+ by_error?: {
6954
+ [key: string]: number;
6955
+ };
6956
+ total?: number;
6957
+ };
6958
+
6580
6959
  /**
6581
6960
  * SyntheticMonitorConfig represents optional monitor configuration overrides for a synthetic test.
6582
6961
  *
@@ -6703,6 +7082,23 @@ export type SyntheticsCheckInput = {
6703
7082
  interval?: string;
6704
7083
  };
6705
7084
 
7085
+ /**
7086
+ * TaggedMetric names a metric plus every classification that applies to it.
7087
+ */
7088
+ export type TaggedMetric = {
7089
+ metric?: string;
7090
+ tags?: Array<string>;
7091
+ };
7092
+
7093
+ /**
7094
+ * TailDataSetBreakdown covers non-metrics/logs datasets.
7095
+ */
7096
+ export type TailDataSetBreakdown = {
7097
+ events?: number;
7098
+ rum?: number;
7099
+ traces?: number;
7100
+ };
7101
+
6706
7102
  /**
6707
7103
  * +enum
6708
7104
  */
@@ -7624,13 +8020,19 @@ export type UnfurlTraceSummary = {
7624
8020
  * UnifiedSummary is the single hierarchical summary included in JSON output.
7625
8021
  */
7626
8022
  export type UnifiedSummary = {
7627
- affected_assets_by_type?: {
8023
+ assets?: AssetsSummary;
8024
+ /**
8025
+ * AssetsByFindingType is the distribution of affected assets per finding
8026
+ * type, keyed by asset type.
8027
+ */
8028
+ assets_by_finding_type?: {
7628
8029
  [key: string]: {
7629
8030
  [key: string]: number;
7630
8031
  };
7631
8032
  };
7632
- assets?: AssetsSummary;
7633
8033
  conversion?: ConversionSummary;
8034
+ dashboards?: AssetFunnel;
8035
+ monitors?: AssetFunnel;
7634
8036
  queries?: QueriesSummary;
7635
8037
  wet_validation?: WetValidationSummary;
7636
8038
  };
@@ -8100,6 +8502,15 @@ export type ValueItem = {
8100
8502
  value?: string;
8101
8503
  };
8102
8504
 
8505
+ /**
8506
+ * ValueMissingBucket lists units whose filter values are absent in groundcover.
8507
+ */
8508
+ export type ValueMissingBucket = {
8509
+ assets?: Array<AssetGapDetail>;
8510
+ by_metric?: Array<MetricValueGap>;
8511
+ count?: number;
8512
+ };
8513
+
8103
8514
  export type ValuesDistributionRequest = {
8104
8515
  conditions?: Array<Condition>;
8105
8516
  /**
@@ -8318,14 +8729,31 @@ export type WetResult = {
8318
8729
  asset_type?: string;
8319
8730
  datasource?: Datasource;
8320
8731
  error?: string;
8732
+ /**
8733
+ * HasFreeText mirrors WetQuery.HasFreeText.
8734
+ */
8735
+ has_free_text?: boolean;
8321
8736
  latency?: Duration;
8737
+ /**
8738
+ * Metric mirrors WetQuery.Metric.
8739
+ */
8740
+ metric?: string;
8322
8741
  original_dd?: string;
8323
8742
  query?: string;
8324
8743
  query_id?: string;
8325
8744
  query_type?: QueryType;
8326
8745
  resolved_query?: string;
8327
8746
  status?: WetStatus;
8747
+ widget_id?: string;
8328
8748
  widget_title?: string;
8749
+ /**
8750
+ * Window is the span actually queried:
8751
+ * "5m" progressive first pass
8752
+ * "30m" dashboard long pass
8753
+ * "7d" monitor long pass (or whatever --wet-monitor-lookback sets)
8754
+ * "instant" instant query answered at a single point in time
8755
+ * "instant→7d" instant query was empty, so it was re-run as a range
8756
+ */
8329
8757
  window?: string;
8330
8758
  };
8331
8759