Compare commits
3 Commits
release-12
...
release-12
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
436269848d | ||
|
|
76ea754dbb | ||
|
|
72f54b2cd9 |
15
CHANGELOG.md
15
CHANGELOG.md
@@ -1,3 +1,18 @@
|
||||
<!-- 12.0.2+security-01 START -->
|
||||
|
||||
# 12.0.2+security-01 (2025-07-17)
|
||||
|
||||
### Features and enhancements
|
||||
|
||||
- **Profiles:** Stop passing response headers for Grafana-Pyroscope and parca datasources [#106730](https://github.com/grafana/grafana/pull/106730), [@simonswine](https://github.com/simonswine)
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- **FlameGraph:** Fix bug for function names that conflict with JavaScript object prototype properties [#106625](https://github.com/grafana/grafana/pull/106625), [@simonswine](https://github.com/simonswine)
|
||||
- **Security:** Fixed CVE-2025-6023
|
||||
- **Security:** Fixed CVE-2025-6197
|
||||
|
||||
<!-- 12.0.2+security-01 END -->
|
||||
<!-- 12.0.1 START -->
|
||||
|
||||
# 12.0.1 (2025-05-22)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
|
||||
"npmClient": "yarn",
|
||||
"version": "12.0.2"
|
||||
"version": "12.0.3"
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"license": "AGPL-3.0-only",
|
||||
"private": true,
|
||||
"name": "grafana",
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"repository": "github:grafana/grafana",
|
||||
"scripts": {
|
||||
"build": "NODE_ENV=production nx exec --verbose -- webpack --config scripts/webpack/webpack.prod.js --progress",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
"name": "@grafana/data",
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"description": "Grafana Data Library",
|
||||
"keywords": [
|
||||
"typescript"
|
||||
@@ -56,7 +56,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@braintree/sanitize-url": "7.0.1",
|
||||
"@grafana/schema": "12.0.2",
|
||||
"@grafana/schema": "12.0.3",
|
||||
"@types/d3-interpolate": "^3.0.0",
|
||||
"@types/string-hash": "1.1.3",
|
||||
"@types/systemjs": "6.15.1",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
"name": "@grafana/e2e-selectors",
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"description": "Grafana End-to-End Test Selectors Library",
|
||||
"keywords": [
|
||||
"cli",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@grafana/eslint-plugin",
|
||||
"description": "ESLint rules for use within the Grafana repo. Not suitable (or supported) for external use.",
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"main": "./index.cjs",
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
"name": "@grafana/flamegraph",
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"description": "Grafana flamegraph visualization component",
|
||||
"keywords": [
|
||||
"grafana",
|
||||
@@ -44,8 +44,8 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"@leeoniya/ufuzzy": "1.0.18",
|
||||
"d3": "^7.8.5",
|
||||
"lodash": "4.17.21",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@grafana/saga-icons",
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"private": true,
|
||||
"description": "Icons for Grafana",
|
||||
"author": "Grafana Labs",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"license": "AGPL-3.0-only",
|
||||
"name": "@grafana/o11y-ds-frontend",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"description": "Library to manage traces in Grafana.",
|
||||
"sideEffects": false,
|
||||
"repository": {
|
||||
@@ -18,12 +18,12 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/e2e-selectors": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/e2e-selectors": "12.0.3",
|
||||
"@grafana/plugin-ui": "0.10.5",
|
||||
"@grafana/runtime": "12.0.2",
|
||||
"@grafana/schema": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/runtime": "12.0.3",
|
||||
"@grafana/schema": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"react-select": "5.10.0",
|
||||
"react-use": "17.6.0",
|
||||
"rxjs": "7.8.1",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "@grafana/plugin-configs",
|
||||
"description": "Shared dependencies and files for core plugins",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"dependencies": {
|
||||
"tslib": "2.8.1"
|
||||
},
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "AGPL-3.0-only",
|
||||
"name": "@grafana/prometheus",
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"description": "Grafana Prometheus Library",
|
||||
"keywords": [
|
||||
"typescript"
|
||||
@@ -38,12 +38,12 @@
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@floating-ui/react": "0.27.7",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/e2e-selectors": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/e2e-selectors": "12.0.3",
|
||||
"@grafana/plugin-ui": "0.10.5",
|
||||
"@grafana/runtime": "12.0.2",
|
||||
"@grafana/schema": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/runtime": "12.0.3",
|
||||
"@grafana/schema": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"@hello-pangea/dnd": "17.0.0",
|
||||
"@leeoniya/ufuzzy": "1.0.18",
|
||||
"@lezer/common": "1.2.3",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
"name": "@grafana/runtime",
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"description": "Grafana Runtime Library",
|
||||
"keywords": [
|
||||
"grafana",
|
||||
@@ -53,11 +53,11 @@
|
||||
"postpack": "mv package.json.bak package.json && rimraf ./unstable"
|
||||
},
|
||||
"dependencies": {
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/e2e-selectors": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/e2e-selectors": "12.0.3",
|
||||
"@grafana/faro-web-sdk": "^1.13.2",
|
||||
"@grafana/schema": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/schema": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"@types/systemjs": "6.15.1",
|
||||
"history": "4.10.1",
|
||||
"lodash": "4.17.21",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
"name": "@grafana/schema",
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"description": "Grafana Schema Library",
|
||||
"keywords": [
|
||||
"typescript"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options {
|
||||
limit: number;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options extends common.OptionsWithLegend, common.OptionsWithTooltip, common.OptionsWithTextFormatting {
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options extends common.OptionsWithLegend, common.SingleStatBaseOptions {
|
||||
displayMode: common.BarGaugeDisplayMode;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export enum VizDisplayMode {
|
||||
Candles = 'candles',
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as ui from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export enum HorizontalConstraint {
|
||||
Center = 'center',
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface MetricStat {
|
||||
/**
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options {
|
||||
/**
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options {
|
||||
selectedSeries: number;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export type UpdateConfig = {
|
||||
render: boolean,
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export type BucketAggregation = (DateHistogram | Histogram | Terms | Filters | GeoHashGrid | Nested);
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options extends common.SingleStatBaseOptions {
|
||||
minVizHeight: number;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as ui from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options {
|
||||
basemap: ui.MapLayerOptions;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as ui from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
/**
|
||||
* Controls the color mode of the heatmap
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options extends common.OptionsWithLegend, common.OptionsWithTooltip {
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options {
|
||||
dedupStrategy: common.LogsDedupStrategy;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options {
|
||||
dedupStrategy: common.LogsDedupStrategy;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export enum QueryEditorMode {
|
||||
Builder = 'builder',
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options {
|
||||
/**
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface ArcOption {
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
/**
|
||||
* Select the pie chart display style.
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options extends common.SingleStatBaseOptions {
|
||||
colorMode: common.BigValueColorMode;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as ui from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options extends ui.OptionsWithLegend, ui.OptionsWithTooltip, ui.OptionsWithTimezones {
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as ui from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options extends ui.OptionsWithLegend, ui.OptionsWithTooltip, ui.OptionsWithTimezones {
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as ui from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options {
|
||||
/**
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//
|
||||
// Run 'make gen-cue' from repository root to regenerate.
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export enum TextMode {
|
||||
Code = 'code',
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export interface Options extends common.OptionsWithTimezones {
|
||||
legend: common.VizLegendOptions;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
/**
|
||||
* Identical to timeseries... except it does not have timezone settings
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
import * as common from '@grafana/schema';
|
||||
|
||||
export const pluginVersion = "12.0.2";
|
||||
export const pluginVersion = "12.0.3";
|
||||
|
||||
export enum PointShape {
|
||||
Circle = 'circle',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"license": "AGPL-3.0-only",
|
||||
"private": true,
|
||||
"name": "@grafana/sql",
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "http://github.com/grafana/grafana.git",
|
||||
@@ -15,11 +15,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/e2e-selectors": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/e2e-selectors": "12.0.3",
|
||||
"@grafana/plugin-ui": "0.10.5",
|
||||
"@grafana/runtime": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/runtime": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"@react-awesome-query-builder/ui": "6.6.14",
|
||||
"immutable": "5.0.3",
|
||||
"lodash": "4.17.21",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Grafana Labs",
|
||||
"license": "Apache-2.0",
|
||||
"name": "@grafana/ui",
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"description": "Grafana Components Library",
|
||||
"keywords": [
|
||||
"grafana",
|
||||
@@ -66,10 +66,10 @@
|
||||
"@emotion/react": "11.14.0",
|
||||
"@emotion/serialize": "1.3.3",
|
||||
"@floating-ui/react": "0.27.7",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/e2e-selectors": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/e2e-selectors": "12.0.3",
|
||||
"@grafana/faro-web-sdk": "^1.13.2",
|
||||
"@grafana/schema": "12.0.2",
|
||||
"@grafana/schema": "12.0.3",
|
||||
"@hello-pangea/dnd": "17.0.0",
|
||||
"@leeoniya/ufuzzy": "1.0.18",
|
||||
"@monaco-editor/react": "4.6.0",
|
||||
|
||||
@@ -7,6 +7,8 @@ import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"path"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/grafana/grafana/pkg/api/response"
|
||||
@@ -39,6 +41,9 @@ var getViewIndex = func() string {
|
||||
return viewIndex
|
||||
}
|
||||
|
||||
// Only allow redirects that start with an alphanumerical character, a dash or an underscore.
|
||||
var redirectRe = regexp.MustCompile(`^/[a-zA-Z0-9-_].*`)
|
||||
|
||||
var (
|
||||
errAbsoluteRedirectTo = errors.New("absolute URLs are not allowed for redirect_to cookie value")
|
||||
errInvalidRedirectTo = errors.New("invalid redirect_to cookie value")
|
||||
@@ -68,6 +73,15 @@ func (hs *HTTPServer) ValidateRedirectTo(redirectTo string) error {
|
||||
return errForbiddenRedirectTo
|
||||
}
|
||||
|
||||
cleanPath := path.Clean(to.Path)
|
||||
// "." is what path.Clean returns for empty paths
|
||||
if cleanPath == "." {
|
||||
return errForbiddenRedirectTo
|
||||
}
|
||||
if to.Path != "/" && !redirectRe.MatchString(cleanPath) {
|
||||
return errForbiddenRedirectTo
|
||||
}
|
||||
|
||||
// when using a subUrl, the redirect_to should start with the subUrl (which contains the leading slash), otherwise the redirect
|
||||
// will send the user to the wrong location
|
||||
if hs.Cfg.AppSubURL != "" && !strings.HasPrefix(to.Path, hs.Cfg.AppSubURL+"/") {
|
||||
|
||||
@@ -14,20 +14,16 @@ import (
|
||||
"github.com/grafana/grafana/pkg/services/authn/authntest"
|
||||
"github.com/grafana/grafana/pkg/services/secrets/fakes"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"github.com/grafana/grafana/pkg/web/webtest"
|
||||
)
|
||||
|
||||
func setClientWithoutRedirectFollow(t *testing.T) {
|
||||
func setClientWithoutRedirectFollow(t *testing.T, s *webtest.Server) {
|
||||
t.Helper()
|
||||
old := http.DefaultClient
|
||||
http.DefaultClient = &http.Client{
|
||||
s.HttpClient = &http.Client{
|
||||
CheckRedirect: func(req *http.Request, via []*http.Request) error {
|
||||
return http.ErrUseLastResponse
|
||||
},
|
||||
}
|
||||
|
||||
t.Cleanup(func() {
|
||||
http.DefaultClient = old
|
||||
})
|
||||
}
|
||||
|
||||
func TestOAuthLogin_Redirect(t *testing.T) {
|
||||
@@ -79,7 +75,7 @@ func TestOAuthLogin_Redirect(t *testing.T) {
|
||||
})
|
||||
|
||||
// we need to prevent the http.Client from following redirects
|
||||
setClientWithoutRedirectFollow(t)
|
||||
setClientWithoutRedirectFollow(t, server)
|
||||
|
||||
res, err := server.Send(server.NewGetRequest("/login/generic_oauth"))
|
||||
require.NoError(t, err)
|
||||
@@ -155,7 +151,7 @@ func TestOAuthLogin_AuthorizationCode(t *testing.T) {
|
||||
})
|
||||
|
||||
// we need to prevent the http.Client from following redirects
|
||||
setClientWithoutRedirectFollow(t)
|
||||
setClientWithoutRedirectFollow(t, server)
|
||||
|
||||
res, err := server.Send(server.NewGetRequest("/login/generic_oauth?code=code"))
|
||||
require.NoError(t, err)
|
||||
@@ -199,7 +195,7 @@ func TestOAuthLogin_Error(t *testing.T) {
|
||||
hs.SecretsService = fakes.NewFakeSecretsService()
|
||||
})
|
||||
|
||||
setClientWithoutRedirectFollow(t)
|
||||
setClientWithoutRedirectFollow(t, server)
|
||||
|
||||
res, err := server.Send(server.NewGetRequest("/login/azuread?error=someerror"))
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -20,6 +21,7 @@ import (
|
||||
"github.com/grafana/grafana/pkg/services/user"
|
||||
"github.com/grafana/grafana/pkg/services/user/usertest"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"github.com/grafana/grafana/pkg/web/webtest"
|
||||
)
|
||||
|
||||
func TestUserTokenAPIEndpoint(t *testing.T) {
|
||||
@@ -150,6 +152,95 @@ func TestUserTokenAPIEndpoint(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestHTTPServer_RotateUserAuthTokenRedirect(t *testing.T) {
|
||||
redirectTestCases := []struct {
|
||||
name string
|
||||
redirectUrl string
|
||||
expectedUrl string
|
||||
}{
|
||||
// Valid redirects should be preserved
|
||||
{"valid root path", "/", "/"},
|
||||
{"valid simple path", "/hello", "/hello"},
|
||||
{"valid single char path", "/a", "/a"},
|
||||
{"valid nested path", "/asd/hello", "/asd/hello"},
|
||||
|
||||
// Invalid redirects should be converted to root
|
||||
{"backslash domain", `/\grafana.com`, "/"},
|
||||
{"traversal backslash domain", `/a/../\grafana.com`, "/"},
|
||||
{"double slash", "//grafana", "/"},
|
||||
{"missing initial slash", "missingInitialSlash", "/"},
|
||||
{"parent directory", "/../", "/"},
|
||||
}
|
||||
|
||||
sessionTestCases := []struct {
|
||||
name string
|
||||
useSessionStorageRedirect bool
|
||||
}{
|
||||
{"when useSessionStorageRedirect is enabled", true},
|
||||
{"when useSessionStorageRedirect is disabled", false},
|
||||
}
|
||||
|
||||
for _, sessionCase := range sessionTestCases {
|
||||
t.Run(sessionCase.name, func(t *testing.T) {
|
||||
for _, redirectCase := range redirectTestCases {
|
||||
t.Run(redirectCase.name, func(t *testing.T) {
|
||||
server := SetupAPITestServer(t, func(hs *HTTPServer) {
|
||||
cfg := setting.NewCfg()
|
||||
cfg.LoginCookieName = "grafana_session"
|
||||
cfg.LoginMaxLifetime = 10 * time.Hour
|
||||
hs.Cfg = cfg
|
||||
hs.log = log.New()
|
||||
hs.AuthTokenService = &authtest.FakeUserAuthTokenService{
|
||||
RotateTokenProvider: func(ctx context.Context, cmd auth.RotateCommand) (*auth.UserToken, error) {
|
||||
return &auth.UserToken{UnhashedToken: "new"}, nil
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
redirectToQuery := url.QueryEscape(redirectCase.redirectUrl)
|
||||
urlString := "/user/auth-tokens/rotate"
|
||||
|
||||
if sessionCase.useSessionStorageRedirect {
|
||||
urlString = urlString + "?redirectTo=" + redirectToQuery
|
||||
}
|
||||
|
||||
req := server.NewGetRequest(urlString)
|
||||
req.AddCookie(&http.Cookie{Name: "grafana_session", Value: "123", Path: "/"})
|
||||
|
||||
if sessionCase.useSessionStorageRedirect {
|
||||
req = webtest.RequestWithWebContext(req, &contextmodel.ReqContext{UseSessionStorageRedirect: true})
|
||||
} else {
|
||||
req.AddCookie(&http.Cookie{Name: "redirect_to", Value: redirectToQuery, Path: "/"})
|
||||
}
|
||||
|
||||
var redirectStatusCode int
|
||||
var redirectLocation string
|
||||
|
||||
server.HttpClient.CheckRedirect = func(req *http.Request, via []*http.Request) error {
|
||||
if len(via) > 1 {
|
||||
// Stop after first redirect
|
||||
return http.ErrUseLastResponse
|
||||
}
|
||||
|
||||
if req.Response == nil {
|
||||
return nil
|
||||
}
|
||||
redirectStatusCode = req.Response.StatusCode
|
||||
redirectLocation = req.Response.Header.Get("Location")
|
||||
return nil
|
||||
}
|
||||
res, err := server.Send(req)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 302, redirectStatusCode)
|
||||
assert.Equal(t, redirectCase.expectedUrl, redirectLocation)
|
||||
|
||||
require.NoError(t, res.Body.Close())
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestHTTPServer_RotateUserAuthToken(t *testing.T) {
|
||||
type testCase struct {
|
||||
desc string
|
||||
|
||||
@@ -3,6 +3,8 @@ package middleware
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"path"
|
||||
"regexp"
|
||||
"strconv"
|
||||
|
||||
"github.com/grafana/grafana/pkg/services/contexthandler"
|
||||
@@ -11,6 +13,9 @@ import (
|
||||
"github.com/grafana/grafana/pkg/web"
|
||||
)
|
||||
|
||||
// Only allow redirects that start with an alphanumerical character, a dash or an underscore.
|
||||
var redirectRe = regexp.MustCompile(`^/?[a-zA-Z0-9-_].*`)
|
||||
|
||||
// OrgRedirect changes org and redirects users if the
|
||||
// querystring `orgId` doesn't match the active org.
|
||||
func OrgRedirect(cfg *setting.Cfg, userSvc user.Service) web.Handler {
|
||||
@@ -31,6 +36,11 @@ func OrgRedirect(cfg *setting.Cfg, userSvc user.Service) web.Handler {
|
||||
return
|
||||
}
|
||||
|
||||
if !validRedirectPath(c.Req.URL.Path) {
|
||||
// Do not switch orgs or perform the redirect because the new path is not valid
|
||||
return
|
||||
}
|
||||
|
||||
if err := userSvc.Update(ctx.Req.Context(), &user.UpdateUserCommand{UserID: ctx.UserID, OrgID: &orgId}); err != nil {
|
||||
if ctx.IsApiRequest() {
|
||||
ctx.JsonApiErr(404, "Not found", nil)
|
||||
@@ -54,3 +64,8 @@ func OrgRedirect(cfg *setting.Cfg, userSvc user.Service) web.Handler {
|
||||
c.Redirect(newURL, 302)
|
||||
}
|
||||
}
|
||||
|
||||
func validRedirectPath(p string) bool {
|
||||
cleanPath := path.Clean(p)
|
||||
return cleanPath == "." || cleanPath == "/" || redirectRe.MatchString(cleanPath)
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package middleware
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
@@ -23,6 +24,12 @@ func TestOrgRedirectMiddleware(t *testing.T) {
|
||||
expStatus: 302,
|
||||
expLocation: "/?orgId=3",
|
||||
},
|
||||
{
|
||||
desc: "when setting a correct org for the user with an empty path",
|
||||
input: "?orgId=3",
|
||||
expStatus: 302,
|
||||
expLocation: "/?orgId=3",
|
||||
},
|
||||
{
|
||||
desc: "when setting a correct org for the user with '&kiosk'",
|
||||
input: "/?orgId=3&kiosk",
|
||||
@@ -64,6 +71,16 @@ func TestOrgRedirectMiddleware(t *testing.T) {
|
||||
require.Equal(t, 404, sc.resp.Code)
|
||||
})
|
||||
|
||||
middlewareScenario(t, "when redirecting to an invalid path", func(t *testing.T, sc *scenarioContext) {
|
||||
sc.withIdentity(&authn.Identity{})
|
||||
|
||||
path := url.QueryEscape(`/\example.com`)
|
||||
sc.m.Get(url.QueryEscape(path), sc.defaultHandler)
|
||||
sc.fakeReq("GET", fmt.Sprintf("%s?orgId=3", path)).exec()
|
||||
|
||||
require.Equal(t, 404, sc.resp.Code)
|
||||
})
|
||||
|
||||
middlewareScenario(t, "works correctly when grafana is served under a subpath", func(t *testing.T, sc *scenarioContext) {
|
||||
sc.withIdentity(&authn.Identity{})
|
||||
|
||||
|
||||
@@ -387,6 +387,10 @@ func (am *alertmanager) AppURL() string {
|
||||
|
||||
// buildReceiverIntegrations builds a list of integration notifiers off of a receiver config.
|
||||
func (am *alertmanager) buildReceiverIntegrations(receiver *alertingNotify.APIReceiver, tmpl *alertingTemplates.Template) ([]*alertingNotify.Integration, error) {
|
||||
err := patchNewSecureFields(context.Background(), receiver, alertingNotify.DecodeSecretsFromBase64, am.decryptFn)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
receiverCfg, err := alertingNotify.BuildReceiverConfiguration(context.Background(), receiver, alertingNotify.DecodeSecretsFromBase64, am.decryptFn)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -414,6 +418,50 @@ func (am *alertmanager) buildReceiverIntegrations(receiver *alertingNotify.APIRe
|
||||
return integrations, nil
|
||||
}
|
||||
|
||||
func patchNewSecureFields(ctx context.Context, api *alertingNotify.APIReceiver, decode alertingNotify.DecodeSecretsFn, decrypt alertingNotify.GetDecryptedValueFn) error {
|
||||
for _, integration := range api.Integrations {
|
||||
switch integration.Type {
|
||||
case "dingding":
|
||||
err := patchSettingsFromSecureSettings(ctx, integration, "url", decode, decrypt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func patchSettingsFromSecureSettings(ctx context.Context, integration *alertingNotify.GrafanaIntegrationConfig, key string, decode alertingNotify.DecodeSecretsFn, decrypt alertingNotify.GetDecryptedValueFn) error {
|
||||
if _, ok := integration.SecureSettings[key]; !ok {
|
||||
return nil
|
||||
}
|
||||
decoded, err := decode(integration.SecureSettings)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
settings := map[string]any{}
|
||||
err = json.Unmarshal(integration.Settings, &settings)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
currentValue, ok := settings[key]
|
||||
currentString := ""
|
||||
if ok {
|
||||
currentString, _ = currentValue.(string)
|
||||
}
|
||||
secretValue := decrypt(ctx, decoded, key, currentString)
|
||||
if secretValue == currentString {
|
||||
return nil
|
||||
}
|
||||
settings[key] = secretValue
|
||||
data, err := json.Marshal(settings)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
integration.Settings = data
|
||||
return nil
|
||||
}
|
||||
|
||||
// PutAlerts receives the alerts and then sends them through the corresponding route based on whenever the alert has a receiver embedded or not
|
||||
func (am *alertmanager) PutAlerts(_ context.Context, postableAlerts apimodels.PostableAlerts) error {
|
||||
alerts := make(alertingNotify.PostableAlerts, 0, len(postableAlerts.PostableAlerts))
|
||||
|
||||
@@ -127,6 +127,7 @@ func GetAvailableNotifiers() []*NotifierPlugin {
|
||||
Placeholder: "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxx",
|
||||
PropertyName: "url",
|
||||
Required: true,
|
||||
Secure: true,
|
||||
},
|
||||
{
|
||||
Label: "Message Type",
|
||||
|
||||
@@ -11,7 +11,7 @@ func TestGetSecretKeysForContactPointType(t *testing.T) {
|
||||
receiverType string
|
||||
expectedSecretFields []string
|
||||
}{
|
||||
{receiverType: "dingding", expectedSecretFields: []string{}},
|
||||
{receiverType: "dingding", expectedSecretFields: []string{"url"}},
|
||||
{receiverType: "kafka", expectedSecretFields: []string{"password"}},
|
||||
{receiverType: "email", expectedSecretFields: []string{}},
|
||||
{receiverType: "pagerduty", expectedSecretFields: []string{"integrationKey"}},
|
||||
|
||||
@@ -24,12 +24,17 @@ func (am *alertmanager) TestReceivers(ctx context.Context, c apimodels.TestRecei
|
||||
SecureSettings: gr.SecureSettings,
|
||||
})
|
||||
}
|
||||
receivers = append(receivers, &alertingNotify.APIReceiver{
|
||||
recv := &alertingNotify.APIReceiver{
|
||||
ConfigReceiver: r.Receiver,
|
||||
GrafanaIntegrations: alertingNotify.GrafanaIntegrations{
|
||||
Integrations: integrations,
|
||||
},
|
||||
})
|
||||
}
|
||||
err := patchNewSecureFields(ctx, recv, alertingNotify.DecodeSecretsFromBase64, am.decryptFn)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
receivers = append(receivers, recv)
|
||||
}
|
||||
a := &alertingNotify.PostableAlert{}
|
||||
if c.Alert != nil {
|
||||
|
||||
@@ -2088,10 +2088,8 @@ var expAlertmanagerConfigFromAPI = `
|
||||
"name": "dingding_test",
|
||||
"type": "dingding",
|
||||
"disableResolveMessage": false,
|
||||
"settings": {
|
||||
"url": "http://CHANNEL_ADDR/dingding_recv/dingding_test"
|
||||
},
|
||||
"secureFields": {}
|
||||
"settings": {},
|
||||
"secureFields": {"url": true}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -24,6 +24,7 @@ type Server struct {
|
||||
Mux *web.Mux
|
||||
RouteRegister routing.RouteRegister
|
||||
TestServer *httptest.Server
|
||||
HttpClient *http.Client
|
||||
}
|
||||
|
||||
// NewServer starts and returns a new server.
|
||||
@@ -50,6 +51,7 @@ func NewServer(t testing.TB, routeRegister routing.RouteRegister) *Server {
|
||||
RouteRegister: routeRegister,
|
||||
Mux: m,
|
||||
TestServer: testServer,
|
||||
HttpClient: &http.Client{},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,7 +83,7 @@ func (s *Server) NewRequest(method string, target string, body io.Reader) *http.
|
||||
|
||||
// Send sends a HTTP request to the test server and returns an HTTP response.
|
||||
func (s *Server) Send(req *http.Request) (*http.Response, error) {
|
||||
return http.DefaultClient.Do(req)
|
||||
return s.HttpClient.Do(req)
|
||||
}
|
||||
|
||||
// SendJSON sets the Content-Type header to application/json and sends
|
||||
@@ -144,6 +146,7 @@ func requestContextMiddleware() web.Middleware {
|
||||
c.RequestNonce = ctx.RequestNonce
|
||||
c.PerfmonTimer = ctx.PerfmonTimer
|
||||
c.LookupTokenErr = ctx.LookupTokenErr
|
||||
c.UseSessionStorageRedirect = ctx.UseSessionStorageRedirect
|
||||
}
|
||||
|
||||
next.ServeHTTP(w, r)
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
"name": "@grafana-plugins/grafana-azure-monitor-datasource",
|
||||
"description": "Grafana data source for Azure Monitor",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/plugin-ui": "0.10.5",
|
||||
"@grafana/runtime": "12.0.2",
|
||||
"@grafana/schema": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/runtime": "12.0.3",
|
||||
"@grafana/schema": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"@kusto/monaco-kusto": "^10.0.0",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"i18next": "^24.0.0",
|
||||
@@ -25,8 +25,8 @@
|
||||
"tslib": "2.8.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/e2e-selectors": "12.0.2",
|
||||
"@grafana/plugin-configs": "12.0.2",
|
||||
"@grafana/e2e-selectors": "12.0.3",
|
||||
"@grafana/plugin-configs": "12.0.3",
|
||||
"@testing-library/dom": "10.4.0",
|
||||
"@testing-library/jest-dom": "6.6.3",
|
||||
"@testing-library/react": "16.2.0",
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
"name": "@grafana-plugins/stackdriver",
|
||||
"description": "Grafana data source for Google Cloud Monitoring",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/google-sdk": "0.1.2",
|
||||
"@grafana/plugin-ui": "0.10.5",
|
||||
"@grafana/runtime": "12.0.2",
|
||||
"@grafana/schema": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/runtime": "12.0.3",
|
||||
"@grafana/schema": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"debounce-promise": "3.1.2",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"i18next": "^24.0.0",
|
||||
@@ -26,8 +26,8 @@
|
||||
"tslib": "2.8.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/e2e-selectors": "12.0.2",
|
||||
"@grafana/plugin-configs": "12.0.2",
|
||||
"@grafana/e2e-selectors": "12.0.3",
|
||||
"@grafana/plugin-configs": "12.0.3",
|
||||
"@testing-library/dom": "10.4.0",
|
||||
"@testing-library/jest-dom": "6.6.3",
|
||||
"@testing-library/react": "16.2.0",
|
||||
|
||||
@@ -2,22 +2,22 @@
|
||||
"name": "@grafana-plugins/grafana-postgresql-datasource",
|
||||
"description": "PostgreSQL data source plugin",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/plugin-ui": "0.10.5",
|
||||
"@grafana/runtime": "12.0.2",
|
||||
"@grafana/sql": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/runtime": "12.0.3",
|
||||
"@grafana/sql": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"lodash": "4.17.21",
|
||||
"react": "18.3.1",
|
||||
"rxjs": "7.8.1",
|
||||
"tslib": "2.8.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/e2e-selectors": "12.0.2",
|
||||
"@grafana/plugin-configs": "12.0.2",
|
||||
"@grafana/e2e-selectors": "12.0.3",
|
||||
"@grafana/plugin-configs": "12.0.3",
|
||||
"@testing-library/dom": "10.4.0",
|
||||
"@testing-library/react": "16.2.0",
|
||||
"@testing-library/user-event": "14.6.1",
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
"name": "@grafana-plugins/grafana-pyroscope-datasource",
|
||||
"description": "Continuous profiling for analysis of CPU and memory usage, down to the line number and throughout time. Saving infrastructure cost, improving performance, and increasing reliability.",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/runtime": "12.0.2",
|
||||
"@grafana/schema": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/runtime": "12.0.3",
|
||||
"@grafana/schema": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"lodash": "4.17.21",
|
||||
"monaco-editor": "0.34.1",
|
||||
@@ -20,7 +20,7 @@
|
||||
"tslib": "2.8.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/plugin-configs": "12.0.2",
|
||||
"@grafana/plugin-configs": "12.0.3",
|
||||
"@testing-library/dom": "10.4.0",
|
||||
"@testing-library/jest-dom": "6.6.3",
|
||||
"@testing-library/react": "16.2.0",
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
"name": "@grafana-plugins/grafana-testdata-datasource",
|
||||
"description": "Generates test data in different forms",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/runtime": "12.0.2",
|
||||
"@grafana/schema": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/runtime": "12.0.3",
|
||||
"@grafana/schema": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"d3-random": "^3.0.1",
|
||||
"lodash": "4.17.21",
|
||||
"micro-memoize": "^4.1.2",
|
||||
@@ -21,8 +21,8 @@
|
||||
"uuid": "11.0.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/e2e-selectors": "12.0.2",
|
||||
"@grafana/plugin-configs": "12.0.2",
|
||||
"@grafana/e2e-selectors": "12.0.3",
|
||||
"@grafana/plugin-configs": "12.0.3",
|
||||
"@testing-library/dom": "10.4.0",
|
||||
"@testing-library/react": "16.2.0",
|
||||
"@testing-library/user-event": "14.6.1",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "@grafana-plugins/jaeger",
|
||||
"description": "Jaeger plugin for Grafana",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "workspace:*",
|
||||
|
||||
@@ -2,22 +2,22 @@
|
||||
"name": "@grafana-plugins/mssql",
|
||||
"description": "MSSQL data source plugin",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/plugin-ui": "0.10.5",
|
||||
"@grafana/runtime": "12.0.2",
|
||||
"@grafana/sql": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/runtime": "12.0.3",
|
||||
"@grafana/sql": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"lodash": "4.17.21",
|
||||
"react": "18.3.1",
|
||||
"rxjs": "7.8.1",
|
||||
"tslib": "2.8.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/e2e-selectors": "12.0.2",
|
||||
"@grafana/plugin-configs": "12.0.2",
|
||||
"@grafana/e2e-selectors": "12.0.3",
|
||||
"@grafana/plugin-configs": "12.0.3",
|
||||
"@testing-library/dom": "10.4.0",
|
||||
"@testing-library/react": "16.2.0",
|
||||
"@testing-library/user-event": "14.6.1",
|
||||
|
||||
@@ -2,22 +2,22 @@
|
||||
"name": "@grafana-plugins/mysql",
|
||||
"description": "MySQL data source plugin",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/plugin-ui": "0.10.5",
|
||||
"@grafana/runtime": "12.0.2",
|
||||
"@grafana/sql": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/runtime": "12.0.3",
|
||||
"@grafana/sql": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"lodash": "4.17.21",
|
||||
"react": "18.3.1",
|
||||
"rxjs": "7.8.1",
|
||||
"tslib": "2.8.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/e2e-selectors": "12.0.2",
|
||||
"@grafana/plugin-configs": "12.0.2",
|
||||
"@grafana/e2e-selectors": "12.0.3",
|
||||
"@grafana/plugin-configs": "12.0.3",
|
||||
"@testing-library/dom": "10.4.0",
|
||||
"@testing-library/react": "16.2.0",
|
||||
"@testing-library/user-event": "14.6.1",
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
"name": "@grafana-plugins/parca",
|
||||
"description": "Continuous profiling for analysis of CPU and memory usage, down to the line number and throughout time. Saving infrastructure cost, improving performance, and increasing reliability.",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "12.0.2",
|
||||
"@grafana/runtime": "12.0.2",
|
||||
"@grafana/schema": "12.0.2",
|
||||
"@grafana/ui": "12.0.2",
|
||||
"@grafana/data": "12.0.3",
|
||||
"@grafana/runtime": "12.0.3",
|
||||
"@grafana/schema": "12.0.3",
|
||||
"@grafana/ui": "12.0.3",
|
||||
"lodash": "4.17.21",
|
||||
"monaco-editor": "0.34.1",
|
||||
"react": "18.3.1",
|
||||
@@ -18,7 +18,7 @@
|
||||
"tslib": "2.8.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/plugin-configs": "12.0.2",
|
||||
"@grafana/plugin-configs": "12.0.3",
|
||||
"@testing-library/dom": "10.4.0",
|
||||
"@testing-library/react": "16.2.0",
|
||||
"@testing-library/user-event": "14.6.1",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "@grafana-plugins/tempo",
|
||||
"description": "Grafana plugin for the Tempo data source.",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "workspace:*",
|
||||
@@ -39,7 +39,7 @@
|
||||
"uuid": "11.0.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/plugin-configs": "12.0.2",
|
||||
"@grafana/plugin-configs": "12.0.3",
|
||||
"@testing-library/dom": "10.4.0",
|
||||
"@testing-library/jest-dom": "6.6.3",
|
||||
"@testing-library/react": "16.2.0",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "@grafana-plugins/zipkin",
|
||||
"description": "Zipkin plugin for Grafana",
|
||||
"private": true,
|
||||
"version": "12.0.2",
|
||||
"version": "12.0.3",
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
"@grafana/data": "workspace:*",
|
||||
|
||||
156
yarn.lock
156
yarn.lock
@@ -2476,13 +2476,13 @@ __metadata:
|
||||
resolution: "@grafana-plugins/grafana-azure-monitor-datasource@workspace:public/app/plugins/datasource/azuremonitor"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.5"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/e2e-selectors": "npm:12.0.2"
|
||||
"@grafana/plugin-configs": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/e2e-selectors": "npm:12.0.3"
|
||||
"@grafana/plugin-configs": "npm:12.0.3"
|
||||
"@grafana/plugin-ui": "npm:0.10.5"
|
||||
"@grafana/runtime": "npm:12.0.2"
|
||||
"@grafana/schema": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/runtime": "npm:12.0.3"
|
||||
"@grafana/schema": "npm:12.0.3"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@kusto/monaco-kusto": "npm:^10.0.0"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
"@testing-library/jest-dom": "npm:6.6.3"
|
||||
@@ -2520,13 +2520,13 @@ __metadata:
|
||||
resolution: "@grafana-plugins/grafana-postgresql-datasource@workspace:public/app/plugins/datasource/grafana-postgresql-datasource"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.5"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/e2e-selectors": "npm:12.0.2"
|
||||
"@grafana/plugin-configs": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/e2e-selectors": "npm:12.0.3"
|
||||
"@grafana/plugin-configs": "npm:12.0.3"
|
||||
"@grafana/plugin-ui": "npm:0.10.5"
|
||||
"@grafana/runtime": "npm:12.0.2"
|
||||
"@grafana/sql": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/runtime": "npm:12.0.3"
|
||||
"@grafana/sql": "npm:12.0.3"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
"@testing-library/react": "npm:16.2.0"
|
||||
"@testing-library/user-event": "npm:14.6.1"
|
||||
@@ -2551,11 +2551,11 @@ __metadata:
|
||||
resolution: "@grafana-plugins/grafana-pyroscope-datasource@workspace:public/app/plugins/datasource/grafana-pyroscope-datasource"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.5"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/plugin-configs": "npm:12.0.2"
|
||||
"@grafana/runtime": "npm:12.0.2"
|
||||
"@grafana/schema": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/plugin-configs": "npm:12.0.3"
|
||||
"@grafana/runtime": "npm:12.0.3"
|
||||
"@grafana/schema": "npm:12.0.3"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
"@testing-library/jest-dom": "npm:6.6.3"
|
||||
"@testing-library/react": "npm:16.2.0"
|
||||
@@ -2591,12 +2591,12 @@ __metadata:
|
||||
resolution: "@grafana-plugins/grafana-testdata-datasource@workspace:public/app/plugins/datasource/grafana-testdata-datasource"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.5"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/e2e-selectors": "npm:12.0.2"
|
||||
"@grafana/plugin-configs": "npm:12.0.2"
|
||||
"@grafana/runtime": "npm:12.0.2"
|
||||
"@grafana/schema": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/e2e-selectors": "npm:12.0.3"
|
||||
"@grafana/plugin-configs": "npm:12.0.3"
|
||||
"@grafana/runtime": "npm:12.0.3"
|
||||
"@grafana/schema": "npm:12.0.3"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
"@testing-library/react": "npm:16.2.0"
|
||||
"@testing-library/user-event": "npm:14.6.1"
|
||||
@@ -2672,13 +2672,13 @@ __metadata:
|
||||
resolution: "@grafana-plugins/mssql@workspace:public/app/plugins/datasource/mssql"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.5"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/e2e-selectors": "npm:12.0.2"
|
||||
"@grafana/plugin-configs": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/e2e-selectors": "npm:12.0.3"
|
||||
"@grafana/plugin-configs": "npm:12.0.3"
|
||||
"@grafana/plugin-ui": "npm:0.10.5"
|
||||
"@grafana/runtime": "npm:12.0.2"
|
||||
"@grafana/sql": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/runtime": "npm:12.0.3"
|
||||
"@grafana/sql": "npm:12.0.3"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
"@testing-library/react": "npm:16.2.0"
|
||||
"@testing-library/user-event": "npm:14.6.1"
|
||||
@@ -2703,13 +2703,13 @@ __metadata:
|
||||
resolution: "@grafana-plugins/mysql@workspace:public/app/plugins/datasource/mysql"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.5"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/e2e-selectors": "npm:12.0.2"
|
||||
"@grafana/plugin-configs": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/e2e-selectors": "npm:12.0.3"
|
||||
"@grafana/plugin-configs": "npm:12.0.3"
|
||||
"@grafana/plugin-ui": "npm:0.10.5"
|
||||
"@grafana/runtime": "npm:12.0.2"
|
||||
"@grafana/sql": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/runtime": "npm:12.0.3"
|
||||
"@grafana/sql": "npm:12.0.3"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
"@testing-library/react": "npm:16.2.0"
|
||||
"@testing-library/user-event": "npm:14.6.1"
|
||||
@@ -2734,11 +2734,11 @@ __metadata:
|
||||
resolution: "@grafana-plugins/parca@workspace:public/app/plugins/datasource/parca"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.5"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/plugin-configs": "npm:12.0.2"
|
||||
"@grafana/runtime": "npm:12.0.2"
|
||||
"@grafana/schema": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/plugin-configs": "npm:12.0.3"
|
||||
"@grafana/runtime": "npm:12.0.3"
|
||||
"@grafana/schema": "npm:12.0.3"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
"@testing-library/react": "npm:16.2.0"
|
||||
"@testing-library/user-event": "npm:14.6.1"
|
||||
@@ -2766,14 +2766,14 @@ __metadata:
|
||||
resolution: "@grafana-plugins/stackdriver@workspace:public/app/plugins/datasource/cloud-monitoring"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.5"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/e2e-selectors": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/e2e-selectors": "npm:12.0.3"
|
||||
"@grafana/google-sdk": "npm:0.1.2"
|
||||
"@grafana/plugin-configs": "npm:12.0.2"
|
||||
"@grafana/plugin-configs": "npm:12.0.3"
|
||||
"@grafana/plugin-ui": "npm:0.10.5"
|
||||
"@grafana/runtime": "npm:12.0.2"
|
||||
"@grafana/schema": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/runtime": "npm:12.0.3"
|
||||
"@grafana/schema": "npm:12.0.3"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
"@testing-library/jest-dom": "npm:6.6.3"
|
||||
"@testing-library/react": "npm:16.2.0"
|
||||
@@ -2818,7 +2818,7 @@ __metadata:
|
||||
"@grafana/lezer-traceql": "npm:0.0.21"
|
||||
"@grafana/monaco-logql": "npm:^0.0.8"
|
||||
"@grafana/o11y-ds-frontend": "workspace:*"
|
||||
"@grafana/plugin-configs": "npm:12.0.2"
|
||||
"@grafana/plugin-configs": "npm:12.0.3"
|
||||
"@grafana/plugin-ui": "npm:0.10.5"
|
||||
"@grafana/runtime": "workspace:*"
|
||||
"@grafana/schema": "workspace:*"
|
||||
@@ -2931,12 +2931,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@grafana/data@npm:12.0.2, @grafana/data@workspace:*, @grafana/data@workspace:packages/grafana-data":
|
||||
"@grafana/data@npm:12.0.3, @grafana/data@workspace:*, @grafana/data@workspace:packages/grafana-data":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/data@workspace:packages/grafana-data"
|
||||
dependencies:
|
||||
"@braintree/sanitize-url": "npm:7.0.1"
|
||||
"@grafana/schema": "npm:12.0.2"
|
||||
"@grafana/schema": "npm:12.0.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@rollup/plugin-node-resolve": "npm:16.0.0"
|
||||
"@types/d3-interpolate": "npm:^3.0.0"
|
||||
@@ -2984,7 +2984,7 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@grafana/e2e-selectors@npm:12.0.2, @grafana/e2e-selectors@workspace:*, @grafana/e2e-selectors@workspace:packages/grafana-e2e-selectors":
|
||||
"@grafana/e2e-selectors@npm:12.0.3, @grafana/e2e-selectors@workspace:*, @grafana/e2e-selectors@workspace:packages/grafana-e2e-selectors":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/e2e-selectors@workspace:packages/grafana-e2e-selectors"
|
||||
dependencies:
|
||||
@@ -3087,9 +3087,9 @@ __metadata:
|
||||
"@babel/preset-env": "npm:7.26.9"
|
||||
"@babel/preset-react": "npm:7.26.3"
|
||||
"@emotion/css": "npm:11.13.5"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@leeoniya/ufuzzy": "npm:1.0.18"
|
||||
"@rollup/plugin-node-resolve": "npm:16.0.0"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
@@ -3196,13 +3196,13 @@ __metadata:
|
||||
resolution: "@grafana/o11y-ds-frontend@workspace:packages/grafana-o11y-ds-frontend"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.5"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/e2e-selectors": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/e2e-selectors": "npm:12.0.3"
|
||||
"@grafana/plugin-ui": "npm:0.10.5"
|
||||
"@grafana/runtime": "npm:12.0.2"
|
||||
"@grafana/schema": "npm:12.0.2"
|
||||
"@grafana/runtime": "npm:12.0.3"
|
||||
"@grafana/schema": "npm:12.0.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
"@testing-library/jest-dom": "npm:^6.1.2"
|
||||
"@testing-library/react": "npm:16.2.0"
|
||||
@@ -3226,7 +3226,7 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@grafana/plugin-configs@npm:12.0.2, @grafana/plugin-configs@workspace:*, @grafana/plugin-configs@workspace:packages/grafana-plugin-configs":
|
||||
"@grafana/plugin-configs@npm:12.0.3, @grafana/plugin-configs@workspace:*, @grafana/plugin-configs@workspace:packages/grafana-plugin-configs":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/plugin-configs@workspace:packages/grafana-plugin-configs"
|
||||
dependencies:
|
||||
@@ -3326,13 +3326,13 @@ __metadata:
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.5"
|
||||
"@floating-ui/react": "npm:0.27.7"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/e2e-selectors": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/e2e-selectors": "npm:12.0.3"
|
||||
"@grafana/plugin-ui": "npm:0.10.5"
|
||||
"@grafana/runtime": "npm:12.0.2"
|
||||
"@grafana/schema": "npm:12.0.2"
|
||||
"@grafana/runtime": "npm:12.0.3"
|
||||
"@grafana/schema": "npm:12.0.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@hello-pangea/dnd": "npm:17.0.0"
|
||||
"@leeoniya/ufuzzy": "npm:1.0.18"
|
||||
"@lezer/common": "npm:1.2.3"
|
||||
@@ -3388,16 +3388,16 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@grafana/runtime@npm:12.0.2, @grafana/runtime@workspace:*, @grafana/runtime@workspace:packages/grafana-runtime":
|
||||
"@grafana/runtime@npm:12.0.3, @grafana/runtime@workspace:*, @grafana/runtime@workspace:packages/grafana-runtime":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/runtime@workspace:packages/grafana-runtime"
|
||||
dependencies:
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/e2e-selectors": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/e2e-selectors": "npm:12.0.3"
|
||||
"@grafana/faro-web-sdk": "npm:^1.13.2"
|
||||
"@grafana/schema": "npm:12.0.2"
|
||||
"@grafana/schema": "npm:12.0.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@rollup/plugin-node-resolve": "npm:16.0.0"
|
||||
"@rollup/plugin-terser": "npm:0.4.4"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
@@ -3510,7 +3510,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@grafana/schema@npm:12.0.2, @grafana/schema@workspace:*, @grafana/schema@workspace:packages/grafana-schema":
|
||||
"@grafana/schema@npm:12.0.3, @grafana/schema@workspace:*, @grafana/schema@workspace:packages/grafana-schema":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/schema@workspace:packages/grafana-schema"
|
||||
dependencies:
|
||||
@@ -3528,17 +3528,17 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@grafana/sql@npm:12.0.2, @grafana/sql@workspace:*, @grafana/sql@workspace:packages/grafana-sql":
|
||||
"@grafana/sql@npm:12.0.3, @grafana/sql@workspace:*, @grafana/sql@workspace:packages/grafana-sql":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/sql@workspace:packages/grafana-sql"
|
||||
dependencies:
|
||||
"@emotion/css": "npm:11.13.5"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/e2e-selectors": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/e2e-selectors": "npm:12.0.3"
|
||||
"@grafana/plugin-ui": "npm:0.10.5"
|
||||
"@grafana/runtime": "npm:12.0.2"
|
||||
"@grafana/runtime": "npm:12.0.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@grafana/ui": "npm:12.0.2"
|
||||
"@grafana/ui": "npm:12.0.3"
|
||||
"@react-awesome-query-builder/ui": "npm:6.6.14"
|
||||
"@testing-library/dom": "npm:10.4.0"
|
||||
"@testing-library/jest-dom": "npm:^6.1.2"
|
||||
@@ -3579,7 +3579,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@grafana/ui@npm:12.0.2, @grafana/ui@workspace:*, @grafana/ui@workspace:packages/grafana-ui":
|
||||
"@grafana/ui@npm:12.0.3, @grafana/ui@workspace:*, @grafana/ui@workspace:packages/grafana-ui":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@grafana/ui@workspace:packages/grafana-ui"
|
||||
dependencies:
|
||||
@@ -3589,10 +3589,10 @@ __metadata:
|
||||
"@emotion/serialize": "npm:1.3.3"
|
||||
"@faker-js/faker": "npm:^9.0.0"
|
||||
"@floating-ui/react": "npm:0.27.7"
|
||||
"@grafana/data": "npm:12.0.2"
|
||||
"@grafana/e2e-selectors": "npm:12.0.2"
|
||||
"@grafana/data": "npm:12.0.3"
|
||||
"@grafana/e2e-selectors": "npm:12.0.3"
|
||||
"@grafana/faro-web-sdk": "npm:^1.13.2"
|
||||
"@grafana/schema": "npm:12.0.2"
|
||||
"@grafana/schema": "npm:12.0.3"
|
||||
"@grafana/tsconfig": "npm:^2.0.0"
|
||||
"@hello-pangea/dnd": "npm:17.0.0"
|
||||
"@leeoniya/ufuzzy": "npm:1.0.18"
|
||||
|
||||
Reference in New Issue
Block a user