From abca61880d84a8046ea9e5b926cabdc276f7d299 Mon Sep 17 00:00:00 2001 From: Anto Date: Fri, 31 Jul 2026 14:06:24 +0200 Subject: [PATCH 1/2] chore(release): v1.1.1 - dependency updates and 7-day pnpm grace period Resolves 5 advisories reported by `pnpm audit` (3 high, 1 moderate, 1 low), all transitive: ws (DoS + uninitialized memory disclosure) via viem, brace-expansion (DoS x2) via eslint/typescript-eslint, and esbuild (arbitrary file read in dev server) via tsx. Audit is now clean. - viem 2.48.11 -> 2.55.8 - @grafana/grafana-foundation-sdk 0.0.12 -> 0.0.18 - @typescript-eslint/{eslint-plugin,parser} 8.59.3 -> 8.65.0 - eslint 10.3.0 -> 10.7.0 - tsx 4.21.0 -> 4.23.1 (esbuild 0.27.7 -> 0.28.1) Supply chain: raise minimumReleaseAge from 3 to 7 days (10080 minutes) and copy pnpm-workspace.yaml into the Docker build context so the policy also applies to image builds. Drop the `pnpm.onlyBuiltDependencies` field from package.json: pnpm 11 no longer reads it (it warned on every command) and the setting already lives in `allowBuilds` in pnpm-workspace.yaml. Grafana SDK 0.0.18 started emitting its own timeseries `options` defaults with showLegend: false, which would have hidden the legend on all six timeseries panels. Set the legend explicitly in timeseriesPanel() to keep the previous rendering. Co-Authored-By: Claude Opus 5 --- Dockerfile | 2 +- grafana/dashboard.json | 500 ++++++++++++++++++++++----------------- package.json | 19 +- pnpm-lock.yaml | 517 ++++++++++++++++++++--------------------- pnpm-workspace.yaml | 6 +- src/grafana/panels.ts | 14 +- 6 files changed, 563 insertions(+), 495 deletions(-) diff --git a/Dockerfile b/Dockerfile index d650ca3..399a10a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ WORKDIR /app RUN corepack enable pnpm -COPY package.json pnpm-lock.yaml ./ +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ RUN pnpm install --frozen-lockfile --prod COPY src ./src diff --git a/grafana/dashboard.json b/grafana/dashboard.json index 9742c47..8818c99 100644 --- a/grafana/dashboard.json +++ b/grafana/dashboard.json @@ -100,11 +100,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Watcher version", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -120,6 +115,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Watcher version", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "stvaults_watcher_info{chain=\"$chain\"}", @@ -154,11 +154,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Watcher alive", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -174,6 +169,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Watcher alive", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "(time() - stvaults_watcher_last_poll_timestamp{chain=~\"$chain\"}) < bool 300", @@ -230,11 +230,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Vault healthy", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -250,6 +245,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Vault healthy", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_is_healthy{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -306,11 +306,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Unfinalized requests", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -326,6 +321,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Unfinalized requests", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_wq_unfinalized_requests{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -370,11 +370,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Inactive ETH", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -390,6 +385,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Inactive ETH", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_inactive_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -435,11 +435,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Withdrawal deficit", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -455,6 +450,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Withdrawal deficit", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "clamp_min(lido_wq_unfinalized_assets_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"} - lido_vault_available_balance_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}, 0)", @@ -513,11 +513,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Total value", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "area", "colorMode": "value", @@ -533,6 +528,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Total value", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_total_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -570,11 +570,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Available balance", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "area", "colorMode": "value", @@ -590,6 +585,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Available balance", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_available_balance_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -627,11 +627,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Staged balance", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "area", "colorMode": "value", @@ -647,6 +642,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Staged balance", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_staged_balance_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -684,11 +684,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Withdrawable value", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "area", "colorMode": "value", @@ -704,6 +699,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Withdrawable value", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_withdrawable_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -741,11 +741,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Node Operator fee", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "area", "colorMode": "value", @@ -761,6 +756,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Node Operator fee", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_node_operator_fee_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -798,11 +798,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Staking efficiency", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -818,6 +813,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Staking efficiency", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "(lido_vault_total_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"} - lido_vault_inactive_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}) / lido_vault_total_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"} * 100", @@ -863,10 +863,17 @@ "type": "timeseries", "transparent": false, "repeatDirection": "h", - "title": "Total value (ETH)", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "calcs": [] + }, + "tooltip": { + "mode": "single", + "sort": "asc" + } }, "fieldConfig": { "defaults": { @@ -879,6 +886,11 @@ }, "overrides": [] }, + "title": "Total value (ETH)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_total_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -896,10 +908,17 @@ "type": "timeseries", "transparent": false, "repeatDirection": "h", - "title": "Available vs Staged (ETH)", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "calcs": [] + }, + "tooltip": { + "mode": "single", + "sort": "asc" + } }, "fieldConfig": { "defaults": { @@ -912,6 +931,11 @@ }, "overrides": [] }, + "title": "Available vs Staged (ETH)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_available_balance_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1114,11 +1138,6 @@ "type": "gauge", "transparent": false, "repeatDirection": "h", - "title": "Health factor", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "showThresholdLabels": false, "showThresholdMarkers": true, @@ -1132,6 +1151,11 @@ "minVizHeight": 75, "orientation": "auto" }, + "title": "Health factor", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_health_factor{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1191,11 +1215,6 @@ "type": "gauge", "transparent": false, "repeatDirection": "h", - "title": "stETH Minted", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "showThresholdLabels": false, "showThresholdMarkers": true, @@ -1209,6 +1228,11 @@ "minVizHeight": 75, "orientation": "auto" }, + "title": "stETH Minted", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_utilization_ratio{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1256,11 +1280,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Forced rebalance threshold", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "none", @@ -1276,6 +1295,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Forced rebalance threshold", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_forced_rebalance_threshold{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1301,11 +1325,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Reserve ratio", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "none", @@ -1321,6 +1340,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Reserve ratio", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_reserve_ratio{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1346,11 +1370,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Oracle report", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -1366,6 +1385,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Oracle report", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_report_fresh{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1421,11 +1445,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Health shortfall", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "value", @@ -1441,6 +1460,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Health shortfall", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_health_shortfall_shares{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1481,11 +1505,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Connected to VaultHub", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -1501,6 +1520,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Connected to VaultHub", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_disconnected{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1557,11 +1581,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Quarantine", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -1577,6 +1596,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Quarantine", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_quarantine_active{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1633,11 +1657,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Quarantine pending value", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "area", "colorMode": "value", @@ -1653,6 +1672,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Quarantine pending value", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_quarantine_pending_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1690,11 +1714,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Quarantine ends", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "none", @@ -1710,6 +1729,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Quarantine ends", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_quarantine_end_timestamp{chain=~\"$chain\",vault_name=~\"$vault_name\"} * 1000", @@ -1745,10 +1769,17 @@ "type": "timeseries", "transparent": false, "repeatDirection": "h", - "title": "Health factor %", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "calcs": [] + }, + "tooltip": { + "mode": "single", + "sort": "asc" + } }, "fieldConfig": { "defaults": { @@ -1794,6 +1825,11 @@ }, "overrides": [] }, + "title": "Health factor %", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "clamp_max(lido_vault_health_factor{chain=~\"$chain\",vault_name=~\"$vault_name\"}, 9999)", @@ -1811,10 +1847,17 @@ "type": "timeseries", "transparent": false, "repeatDirection": "h", - "title": "stETH Minted %", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "calcs": [] + }, + "tooltip": { + "mode": "single", + "sort": "asc" + } }, "fieldConfig": { "defaults": { @@ -1847,6 +1890,11 @@ }, "overrides": [] }, + "title": "stETH Minted %", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_utilization_ratio{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1877,11 +1925,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "stETH liability", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "area", "colorMode": "value", @@ -1897,6 +1940,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "stETH liability", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_steth_liability_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1933,11 +1981,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Minting capacity", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "area", "colorMode": "value", @@ -1953,6 +1996,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Minting capacity", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_minting_capacity_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -1989,11 +2037,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Withdrawable value", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "area", "colorMode": "value", @@ -2009,6 +2052,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Withdrawable value", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_withdrawable_value_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -2058,11 +2106,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Unfinalized requests", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -2078,6 +2121,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Unfinalized requests", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_wq_unfinalized_requests{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -2121,11 +2169,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Unfinalized assets", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "area", "colorMode": "value", @@ -2141,6 +2184,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Unfinalized assets", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_wq_unfinalized_assets_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -2177,11 +2225,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Last request ID", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "none", @@ -2197,6 +2240,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Last request ID", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_wq_last_request_id{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -2220,11 +2268,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Last finalized ID", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "none", @@ -2240,6 +2283,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Last finalized ID", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_wq_last_finalized_id{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -2263,10 +2311,17 @@ "type": "timeseries", "transparent": false, "repeatDirection": "h", - "title": "Unfinalized assets (ETH)", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "calcs": [] + }, + "tooltip": { + "mode": "single", + "sort": "asc" + } }, "fieldConfig": { "defaults": { @@ -2279,6 +2334,11 @@ }, "overrides": [] }, + "title": "Unfinalized assets (ETH)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_wq_unfinalized_assets_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -2309,11 +2369,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "PDG Policy", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -2329,6 +2384,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "PDG Policy", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_pdg_policy{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -2395,11 +2455,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "PDG Total", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "value", @@ -2415,6 +2470,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "PDG Total", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_pdg_total_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -2452,11 +2512,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "PDG Locked", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "value", @@ -2472,6 +2527,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "PDG Locked", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_pdg_locked_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -2509,11 +2569,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "PDG Unlocked", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "value", @@ -2529,6 +2584,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "PDG Unlocked", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_pdg_unlocked_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -2570,11 +2630,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "PDG Pending activations", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "background_solid", @@ -2590,6 +2645,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "PDG Pending activations", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_pdg_pending_activations{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -2634,10 +2694,17 @@ "type": "timeseries", "transparent": false, "repeatDirection": "h", - "title": "PDG Locked vs Unlocked (ETH)", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "calcs": [] + }, + "tooltip": { + "mode": "single", + "sort": "asc" + } }, "fieldConfig": { "defaults": { @@ -2681,6 +2748,11 @@ } ] }, + "title": "PDG Locked vs Unlocked (ETH)", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "lido_vault_pdg_locked_eth{chain=~\"$chain\",vault_name=~\"$vault_name\"}", @@ -2715,11 +2787,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Poll errors", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "value", @@ -2735,6 +2802,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Poll errors", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "increase(stvaults_watcher_poll_errors_total{chain=~\"$chain\"}[$__range])", @@ -2779,11 +2851,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Last successful poll", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "none", @@ -2799,6 +2866,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Last successful poll", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "stvaults_watcher_last_poll_timestamp{chain=~\"$chain\"} * 1000", @@ -2822,11 +2894,6 @@ "type": "stat", "transparent": false, "repeatDirection": "h", - "title": "Time since last poll", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, "options": { "graphMode": "none", "colorMode": "value", @@ -2842,6 +2909,11 @@ "percentChangeColorMode": "standard", "orientation": "auto" }, + "title": "Time since last poll", + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, "targets": [ { "expr": "time() - stvaults_watcher_last_poll_timestamp{chain=~\"$chain\"}", @@ -2899,11 +2971,6 @@ "type": "logs", "transparent": false, "repeatDirection": "h", - "title": "Watcher logs", - "datasource": { - "type": "loki", - "uid": "${DS_LOKI}" - }, "options": { "showLabels": false, "showCommonLabels": false, @@ -2917,6 +2984,11 @@ "fontSize": "sm", "syntaxHighlighting": true }, + "title": "Watcher logs", + "datasource": { + "type": "loki", + "uid": "${DS_LOKI}" + }, "targets": [ { "expr": "{app=\"stvaults-watcher\", chain=~\"$chain\"}", diff --git a/package.json b/package.json index 2d66d76..aab4fee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "stvaults-watcher", - "version": "1.1.0", + "version": "1.1.1", "description": "Monitor for Lido stVaults. Prometheus metrics and Discord alerts", "type": "module", "main": "src/index.js", @@ -18,18 +18,15 @@ "node": ">=20", "pnpm": ">=11" }, - "pnpm": { - "onlyBuiltDependencies": ["esbuild"] - }, "dependencies": { - "prom-client": "^15.1.0", - "viem": "^2.21.0" + "prom-client": "^15.1.3", + "viem": "^2.55.8" }, "devDependencies": { - "@grafana/grafana-foundation-sdk": "~0.0.12", - "@typescript-eslint/eslint-plugin": "^8.57.1", - "@typescript-eslint/parser": "^8.57.1", - "eslint": "^10.1.0", - "tsx": "^4.21.0" + "@grafana/grafana-foundation-sdk": "~0.0.18", + "@typescript-eslint/eslint-plugin": "^8.65.0", + "@typescript-eslint/parser": "^8.65.0", + "eslint": "^10.7.0", + "tsx": "^4.23.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e1769bd..41e233c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,191 +9,191 @@ importers: .: dependencies: prom-client: - specifier: ^15.1.0 + specifier: ^15.1.3 version: 15.1.3 viem: - specifier: ^2.21.0 - version: 2.48.11(typescript@6.0.3) + specifier: ^2.55.8 + version: 2.55.8(typescript@6.0.3) devDependencies: '@grafana/grafana-foundation-sdk': - specifier: ~0.0.12 - version: 0.0.12 + specifier: ~0.0.18 + version: 0.0.18 '@typescript-eslint/eslint-plugin': - specifier: ^8.57.1 - version: 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0)(typescript@6.0.3))(eslint@10.3.0)(typescript@6.0.3) + specifier: ^8.65.0 + version: 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.7.0)(typescript@6.0.3))(eslint@10.7.0)(typescript@6.0.3) '@typescript-eslint/parser': - specifier: ^8.57.1 - version: 8.59.3(eslint@10.3.0)(typescript@6.0.3) + specifier: ^8.65.0 + version: 8.65.0(eslint@10.7.0)(typescript@6.0.3) eslint: - specifier: ^10.1.0 - version: 10.3.0 + specifier: ^10.7.0 + version: 10.7.0 tsx: - specifier: ^4.21.0 - version: 4.21.0 + specifier: ^4.23.1 + version: 4.23.1 packages: '@adraffy/ens-normalize@1.11.1': resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} - '@esbuild/aix-ppc64@0.27.7': - resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.27.7': - resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.27.7': - resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.27.7': - resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.27.7': - resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.27.7': - resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.27.7': - resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.7': - resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.27.7': - resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.27.7': - resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.27.7': - resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.27.7': - resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.27.7': - resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.27.7': - resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.27.7': - resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.27.7': - resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.27.7': - resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.7': - resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.7': - resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.27.7': - resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.7': - resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.27.7': - resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.27.7': - resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.27.7': - resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.7': - resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.27.7': - resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + '@eslint-community/eslint-utils@4.10.1': + resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -206,8 +206,8 @@ packages: resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.5.5': - resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/core@1.2.1': @@ -218,12 +218,12 @@ packages: resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.7.1': - resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} + '@eslint/plugin-kit@0.7.2': + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@grafana/grafana-foundation-sdk@0.0.12': - resolution: {integrity: sha512-9OXNTXblkwV9o0ToQtXd4GzUG5CmeMvUxTRVge2Xrws7+W/Ytc7fNF80Xs4vnEDRFBOIw7psZIJXpVHDVxVQaA==} + '@grafana/grafana-foundation-sdk@0.0.18': + resolution: {integrity: sha512-cxJw+VXHNQGbR6x76FiNxJBR2XUrElHHXEV3jOb/oVDEhajYm3VxpfPCzeOIcHiNfRvLgVVsEtBje3yW4+Tiew==} '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} @@ -279,63 +279,63 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@typescript-eslint/eslint-plugin@8.59.3': - resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==} + '@typescript-eslint/eslint-plugin@8.65.0': + resolution: {integrity: sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.59.3 + '@typescript-eslint/parser': ^8.65.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.59.3': - resolution: {integrity: sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==} + '@typescript-eslint/parser@8.65.0': + resolution: {integrity: sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.59.3': - resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==} + '@typescript-eslint/project-service@8.65.0': + resolution: {integrity: sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.59.3': - resolution: {integrity: sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==} + '@typescript-eslint/scope-manager@8.65.0': + resolution: {integrity: sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.59.3': - resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==} + '@typescript-eslint/tsconfig-utils@8.65.0': + resolution: {integrity: sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.59.3': - resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==} + '@typescript-eslint/type-utils@8.65.0': + resolution: {integrity: sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.59.3': - resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==} + '@typescript-eslint/types@8.65.0': + resolution: {integrity: sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.59.3': - resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} + '@typescript-eslint/typescript-estree@8.65.0': + resolution: {integrity: sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.59.3': - resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==} + '@typescript-eslint/utils@8.65.0': + resolution: {integrity: sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.59.3': - resolution: {integrity: sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==} + '@typescript-eslint/visitor-keys@8.65.0': + resolution: {integrity: sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} abitype@1.2.3: @@ -354,8 +354,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} engines: {node: '>=0.4.0'} hasBin: true @@ -369,9 +369,9 @@ packages: bintrees@1.0.2: resolution: {integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==} - brace-expansion@5.0.6: - resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} - engines: {node: 18 || 20 || >=22} + brace-expansion@5.0.8: + resolution: {integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==} + engines: {node: 20 || >=22} cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} @@ -389,8 +389,8 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - esbuild@0.27.7: - resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true @@ -410,8 +410,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.3.0: - resolution: {integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw==} + eslint@10.7.0: + resolution: {integrity: sha512-GVTD7s1vdIl6UYvAfriOPeY1Df8LIZjfofLvHwde+erDHGGuHyuM6xoxRxmHiebhYuD2p1vN4wWh0XzPARSGDQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -473,17 +473,14 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.4.2: - resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + flatted@3.4.3: + resolution: {integrity: sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==} fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - get-tsconfig@4.14.0: - resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} - glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} @@ -492,8 +489,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + ignore@7.0.6: + resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} engines: {node: '>= 4'} imurmurhash@0.1.4: @@ -550,8 +547,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - ox@0.14.20: - resolution: {integrity: sha512-rby38C3nDn8eQkf29Zgw4hkCZJ64Qqi0zRPWL8ENUQ7JVuoITqrVtwWQgM/He19SCMUEc7hS/Sjw0jIOSLJhOw==} + ox@0.14.32: + resolution: {integrity: sha512-EPB214GvtsP2TtAYZXkNdizLzGp6PXtfaHcRrD4pcBk/D0Y7ZCNv71QgwrjeCsZ+82moVeMlZZG+NDEIUfxMpw==} peerDependencies: typescript: '>=5.4.0' peerDependenciesMeta: @@ -574,8 +571,8 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} prelude-ls@1.2.1: @@ -590,11 +587,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - semver@7.8.0: - resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true @@ -609,8 +603,8 @@ packages: tdigest@0.1.2: resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==} - tinyglobby@0.2.16: - resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} ts-api-utils@2.5.0: @@ -622,8 +616,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + tsx@4.23.1: + resolution: {integrity: sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==} engines: {node: '>=18.0.0'} hasBin: true @@ -639,8 +633,8 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - viem@2.48.11: - resolution: {integrity: sha512-+WZ5E0dBS6GtKb+1wEk5DeYRRRW42+pFnXCo67Ydodf42sBwO+hu3wnQy66lc4MKmHz+llPVdbyehYr9oTE2iw==} + viem@2.55.8: + resolution: {integrity: sha512-BHqtsmK4iMLuLnRyrPIB1jVrmFVliRIP/K0dnFT7gBOpfo8Ko4ozhkzUCRNfR+Z/ZZdnlnVrh04fAOuIm5Svkg==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -656,8 +650,8 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -676,87 +670,87 @@ snapshots: '@adraffy/ens-normalize@1.11.1': {} - '@esbuild/aix-ppc64@0.27.7': + '@esbuild/aix-ppc64@0.28.1': optional: true - '@esbuild/android-arm64@0.27.7': + '@esbuild/android-arm64@0.28.1': optional: true - '@esbuild/android-arm@0.27.7': + '@esbuild/android-arm@0.28.1': optional: true - '@esbuild/android-x64@0.27.7': + '@esbuild/android-x64@0.28.1': optional: true - '@esbuild/darwin-arm64@0.27.7': + '@esbuild/darwin-arm64@0.28.1': optional: true - '@esbuild/darwin-x64@0.27.7': + '@esbuild/darwin-x64@0.28.1': optional: true - '@esbuild/freebsd-arm64@0.27.7': + '@esbuild/freebsd-arm64@0.28.1': optional: true - '@esbuild/freebsd-x64@0.27.7': + '@esbuild/freebsd-x64@0.28.1': optional: true - '@esbuild/linux-arm64@0.27.7': + '@esbuild/linux-arm64@0.28.1': optional: true - '@esbuild/linux-arm@0.27.7': + '@esbuild/linux-arm@0.28.1': optional: true - '@esbuild/linux-ia32@0.27.7': + '@esbuild/linux-ia32@0.28.1': optional: true - '@esbuild/linux-loong64@0.27.7': + '@esbuild/linux-loong64@0.28.1': optional: true - '@esbuild/linux-mips64el@0.27.7': + '@esbuild/linux-mips64el@0.28.1': optional: true - '@esbuild/linux-ppc64@0.27.7': + '@esbuild/linux-ppc64@0.28.1': optional: true - '@esbuild/linux-riscv64@0.27.7': + '@esbuild/linux-riscv64@0.28.1': optional: true - '@esbuild/linux-s390x@0.27.7': + '@esbuild/linux-s390x@0.28.1': optional: true - '@esbuild/linux-x64@0.27.7': + '@esbuild/linux-x64@0.28.1': optional: true - '@esbuild/netbsd-arm64@0.27.7': + '@esbuild/netbsd-arm64@0.28.1': optional: true - '@esbuild/netbsd-x64@0.27.7': + '@esbuild/netbsd-x64@0.28.1': optional: true - '@esbuild/openbsd-arm64@0.27.7': + '@esbuild/openbsd-arm64@0.28.1': optional: true - '@esbuild/openbsd-x64@0.27.7': + '@esbuild/openbsd-x64@0.28.1': optional: true - '@esbuild/openharmony-arm64@0.27.7': + '@esbuild/openharmony-arm64@0.28.1': optional: true - '@esbuild/sunos-x64@0.27.7': + '@esbuild/sunos-x64@0.28.1': optional: true - '@esbuild/win32-arm64@0.27.7': + '@esbuild/win32-arm64@0.28.1': optional: true - '@esbuild/win32-ia32@0.27.7': + '@esbuild/win32-ia32@0.28.1': optional: true - '@esbuild/win32-x64@0.27.7': + '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0)': + '@eslint-community/eslint-utils@4.10.1(eslint@10.7.0)': dependencies: - eslint: 10.3.0 + eslint: 10.7.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -769,7 +763,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.5': + '@eslint/config-helpers@0.6.0': dependencies: '@eslint/core': 1.2.1 @@ -779,12 +773,12 @@ snapshots: '@eslint/object-schema@3.0.5': {} - '@eslint/plugin-kit@0.7.1': + '@eslint/plugin-kit@0.7.2': dependencies: '@eslint/core': 1.2.1 levn: 0.4.1 - '@grafana/grafana-foundation-sdk@0.0.12': + '@grafana/grafana-foundation-sdk@0.0.18': dependencies: tslib: 2.8.1 @@ -833,106 +827,106 @@ snapshots: '@types/json-schema@7.0.15': {} - '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0)(typescript@6.0.3))(eslint@10.3.0)(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.7.0)(typescript@6.0.3))(eslint@10.7.0)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.3(eslint@10.3.0)(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/type-utils': 8.59.3(eslint@10.3.0)(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.3.0)(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.59.3 - eslint: 10.3.0 - ignore: 7.0.5 + '@typescript-eslint/parser': 8.65.0(eslint@10.7.0)(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.65.0 + '@typescript-eslint/type-utils': 8.65.0(eslint@10.7.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.65.0(eslint@10.7.0)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.65.0 + eslint: 10.7.0 + ignore: 7.0.6 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.3(eslint@10.3.0)(typescript@6.0.3)': + '@typescript-eslint/parser@8.65.0(eslint@10.7.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.59.3 + '@typescript-eslint/scope-manager': 8.65.0 + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.65.0 debug: 4.4.3 - eslint: 10.3.0 + eslint: 10.7.0 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.59.3(typescript@6.0.3)': + '@typescript-eslint/project-service@8.65.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@6.0.3) - '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@6.0.3) + '@typescript-eslint/types': 8.65.0 debug: 4.4.3 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.59.3': + '@typescript-eslint/scope-manager@8.65.0': dependencies: - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/visitor-keys': 8.59.3 + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/visitor-keys': 8.65.0 - '@typescript-eslint/tsconfig-utils@8.59.3(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.65.0(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.59.3(eslint@10.3.0)(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.65.0(eslint@10.7.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.3.0)(typescript@6.0.3) + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.65.0(eslint@10.7.0)(typescript@6.0.3) debug: 4.4.3 - eslint: 10.3.0 + eslint: 10.7.0 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.59.3': {} + '@typescript-eslint/types@8.65.0': {} - '@typescript-eslint/typescript-estree@8.59.3(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.65.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.59.3(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@6.0.3) - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/visitor-keys': 8.59.3 + '@typescript-eslint/project-service': 8.65.0(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@6.0.3) + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/visitor-keys': 8.65.0 debug: 4.4.3 minimatch: 10.2.5 - semver: 7.8.0 - tinyglobby: 0.2.16 + semver: 7.8.5 + tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.3(eslint@10.3.0)(typescript@6.0.3)': + '@typescript-eslint/utils@8.65.0(eslint@10.7.0)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) - '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) - eslint: 10.3.0 + '@eslint-community/eslint-utils': 4.10.1(eslint@10.7.0) + '@typescript-eslint/scope-manager': 8.65.0 + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) + eslint: 10.7.0 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.59.3': + '@typescript-eslint/visitor-keys@8.65.0': dependencies: - '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/types': 8.65.0 eslint-visitor-keys: 5.0.1 abitype@1.2.3(typescript@6.0.3): optionalDependencies: typescript: 6.0.3 - acorn-jsx@5.3.2(acorn@8.16.0): + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: - acorn: 8.16.0 + acorn: 8.17.0 - acorn@8.16.0: {} + acorn@8.17.0: {} ajv@6.15.0: dependencies: @@ -945,7 +939,7 @@ snapshots: bintrees@1.0.2: {} - brace-expansion@5.0.6: + brace-expansion@5.0.8: dependencies: balanced-match: 4.0.4 @@ -961,34 +955,34 @@ snapshots: deep-is@0.1.4: {} - esbuild@0.27.7: + esbuild@0.28.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.7 - '@esbuild/android-arm': 0.27.7 - '@esbuild/android-arm64': 0.27.7 - '@esbuild/android-x64': 0.27.7 - '@esbuild/darwin-arm64': 0.27.7 - '@esbuild/darwin-x64': 0.27.7 - '@esbuild/freebsd-arm64': 0.27.7 - '@esbuild/freebsd-x64': 0.27.7 - '@esbuild/linux-arm': 0.27.7 - '@esbuild/linux-arm64': 0.27.7 - '@esbuild/linux-ia32': 0.27.7 - '@esbuild/linux-loong64': 0.27.7 - '@esbuild/linux-mips64el': 0.27.7 - '@esbuild/linux-ppc64': 0.27.7 - '@esbuild/linux-riscv64': 0.27.7 - '@esbuild/linux-s390x': 0.27.7 - '@esbuild/linux-x64': 0.27.7 - '@esbuild/netbsd-arm64': 0.27.7 - '@esbuild/netbsd-x64': 0.27.7 - '@esbuild/openbsd-arm64': 0.27.7 - '@esbuild/openbsd-x64': 0.27.7 - '@esbuild/openharmony-arm64': 0.27.7 - '@esbuild/sunos-x64': 0.27.7 - '@esbuild/win32-arm64': 0.27.7 - '@esbuild/win32-ia32': 0.27.7 - '@esbuild/win32-x64': 0.27.7 + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 escape-string-regexp@4.0.0: {} @@ -1003,14 +997,14 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.3.0: + eslint@10.7.0: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.7.0) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 - '@eslint/config-helpers': 0.5.5 + '@eslint/config-helpers': 0.6.0 '@eslint/core': 1.2.1 - '@eslint/plugin-kit': 0.7.1 + '@eslint/plugin-kit': 0.7.2 '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -1040,8 +1034,8 @@ snapshots: espree@11.2.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 5.0.1 esquery@1.7.0: @@ -1064,9 +1058,9 @@ snapshots: fast-levenshtein@2.0.6: {} - fdir@6.5.0(picomatch@4.0.4): + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: - picomatch: 4.0.4 + picomatch: 4.0.5 file-entry-cache@8.0.0: dependencies: @@ -1079,25 +1073,21 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.4.2 + flatted: 3.4.3 keyv: 4.5.4 - flatted@3.4.2: {} + flatted@3.4.3: {} fsevents@2.3.3: optional: true - get-tsconfig@4.14.0: - dependencies: - resolve-pkg-maps: 1.0.0 - glob-parent@6.0.2: dependencies: is-glob: 4.0.3 ignore@5.3.2: {} - ignore@7.0.5: {} + ignore@7.0.6: {} imurmurhash@0.1.4: {} @@ -1109,9 +1099,9 @@ snapshots: isexe@2.0.0: {} - isows@1.0.7(ws@8.18.3): + isows@1.0.7(ws@8.21.0): dependencies: - ws: 8.18.3 + ws: 8.21.0 json-buffer@3.0.1: {} @@ -1134,7 +1124,7 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.6 + brace-expansion: 5.0.8 ms@2.1.3: {} @@ -1149,7 +1139,7 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - ox@0.14.20(typescript@6.0.3): + ox@0.14.32(typescript@6.0.3): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -1176,7 +1166,7 @@ snapshots: path-key@3.1.1: {} - picomatch@4.0.4: {} + picomatch@4.0.5: {} prelude-ls@1.2.1: {} @@ -1187,9 +1177,7 @@ snapshots: punycode@2.3.1: {} - resolve-pkg-maps@1.0.0: {} - - semver@7.8.0: {} + semver@7.8.5: {} shebang-command@2.0.0: dependencies: @@ -1201,10 +1189,10 @@ snapshots: dependencies: bintrees: 1.0.2 - tinyglobby@0.2.16: + tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 ts-api-utils@2.5.0(typescript@6.0.3): dependencies: @@ -1212,10 +1200,9 @@ snapshots: tslib@2.8.1: {} - tsx@4.21.0: + tsx@4.23.1: dependencies: - esbuild: 0.27.7 - get-tsconfig: 4.14.0 + esbuild: 0.28.1 optionalDependencies: fsevents: 2.3.3 @@ -1229,16 +1216,16 @@ snapshots: dependencies: punycode: 2.3.1 - viem@2.48.11(typescript@6.0.3): + viem@2.55.8(typescript@6.0.3): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 abitype: 1.2.3(typescript@6.0.3) - isows: 1.0.7(ws@8.18.3) - ox: 0.14.20(typescript@6.0.3) - ws: 8.18.3 + isows: 1.0.7(ws@8.21.0) + ox: 0.14.32(typescript@6.0.3) + ws: 8.21.0 optionalDependencies: typescript: 6.0.3 transitivePeerDependencies: @@ -1252,6 +1239,6 @@ snapshots: word-wrap@1.2.5: {} - ws@8.18.3: {} + ws@8.21.0: {} yocto-queue@0.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 9a1c7ae..138be67 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,7 +1,7 @@ allowBuilds: esbuild: true -# Supply chain: only install packages published at least 3 days ago. +# Supply chain: only install packages published at least 7 days ago. # Blocks zero-day malicious releases (e.g. the nx, event-stream, ua-parser-js incidents). -# Value is in minutes: 3 days × 24 h × 60 min = 4320. -minimumReleaseAge: 4320 +# Value is in minutes: 7 days × 24 h × 60 min = 10080. +minimumReleaseAge: 10080 diff --git a/src/grafana/panels.ts b/src/grafana/panels.ts index 3e901fb..519e9b9 100644 --- a/src/grafana/panels.ts +++ b/src/grafana/panels.ts @@ -4,7 +4,10 @@ * value mappings and proper sizing. */ -import { ReduceDataOptionsBuilder } from "@grafana/grafana-foundation-sdk/common"; +import { + ReduceDataOptionsBuilder, + VizLegendOptionsBuilder, +} from "@grafana/grafana-foundation-sdk/common"; import { FieldColorBuilder, ThresholdsConfigBuilder, @@ -135,11 +138,20 @@ export function gaugePanel(o: GaugeOpts): GaugePanelBuilder { } export function timeseriesPanel(o: TsOpts): TimeseriesPanelBuilder { + // The SDK emits its own `options` defaults (showLegend: false) since 0.0.18, + // so the legend has to be enabled explicitly to keep the previous rendering. const p = new TimeseriesPanelBuilder() .title(o.title) .datasource(DS) .lineWidth(2) .fillOpacity(15) + .legend( + new VizLegendOptionsBuilder() + .showLegend(true) + .displayMode("list" as any) + .placement("bottom" as any) + .calcs([]), + ) .withTarget(new DataqueryBuilder().expr(o.expr).legendFormat(o.legendLabel ?? "{{vault_name}}")); if (o.unit) p.unit(o.unit); From a3bde8112695d93b226cbfa26abfdc96d31b16df Mon Sep 17 00:00:00 2001 From: Anto Date: Fri, 31 Jul 2026 16:37:52 +0200 Subject: [PATCH 2/2] chore: re-trigger Kilo Code Review The previous run aborted with "Your provider API key hit its rate limit." without posting any review. Empty commit to re-run the check on PR #5. Co-Authored-By: Claude Opus 5