55 Commits

Author SHA1 Message Date
a9b6d098e9 Chore: Add eslint no-restricted-globals rule (#104519)
* Chore: Add no-restricted-globals eslint rule

* Fix eslint warnings

* Revert some changes

* Update

* Feedback
2025-05-12 12:38:26 +03:00
7b4eb22242 Chore: Remove code for feature flag frontendSandboxMonitorOnly (#103982)
* Chore: Remove code for feature flag frontendSandboxMonitorOnly

* Fix lint issues
2025-04-15 12:52:14 +02:00
39dcff23f9 Plugin Extensions: Clean up the deprecated APIs (#102102)
* PanelMenuBehaviour: stop using the deprecated `getPluginLinkExtensions()` API

* Wip

* grafana-runtime: remove deprecated APIs `usePluginExtensions()`, `usePluginLinkExtensions()` and `usePluginComponentExtensions()`

* Wip

* Wip

* wip

* wip

* Chore: removed PluginExtensionLinkConfig

* Chore: removed PluginExtensionComponentConfig

* Chore: fixed grafana-pyroscope-datasource QueryEditor test

* Chore: fixed PublicDashboardScenePage.test.tsx

* Chore: fix PanelDataQueriesTab test

* Chore: fix PanelMenuBehavior test

* Chore: fix transformSceneToSaveModel test

* Chore: fix last type errors

* Chore: fix alerting/unified/testSetup/plugins.ts

* Chore: break out types to separate file

* feat(Extensions): expose an observable API for added links and components

* chore: prettier fixes

* Revert "chore: prettier fixes"

This reverts commit 53aa7676647a50785cb18098c6cc4c81bad5b4c7.

* Revert "feat(Extensions): expose an observable API for added links and components"

This reverts commit bdc588250e790f91a3c93c7c79448280d39fbd22.

---------

Co-authored-by: Hugo Häggmark <hugo.haggmark@gmail.com>
2025-04-09 10:24:29 +02:00
f96e4e9ad2 Frontend: Remove Angular (#99760)
* chore(angularsupport): delete feature toggle to disable angular

* feat(angular-support): remove config.angularSupportEnabled

* chore(jest): remove angular from setup file

* chore(angular): delete angular deprecation ui components

* refactor(angular): move migration featureflags into migration notice

* chore(dashboard): remove angular deprecation notices

* chore(annotations): remove angular editor loader

* feat(appwrapper): no more angular app loading

* feat(pluginscatalog): clean up angular plugin warnings and logic

* chore(angular): delete angular app and associated files

* feat(plugins): delete old angular graph plugin

* feat(plugins): delete old angular table panel

* feat(frontend): remove unused appEvent type

* feat(dashboards): clean up angular from panel options and menu

* feat(plugins): remove graph and table-old from built in plugins and delete sdk

* feat(frontend): remove angular related imports in routes and explore graph

* feat(theme): remove angular panel styles from global styles

* chore(i18n): run make i18n-extract

* test(api_plugins_test): refresh snapshot due to deleting old graph and table plugins

* chore(angulardeprecation): delete angular migration notice components and usage

* test(frontend): clean up tests that assert rendering angular deprecation notices

* chore(backend): remove autoMigrateOldPanels feature flag

* chore(config): remove angularSupportEnabled from config preventing loading angular plugins

* chore(graphpanel): remove autoMigrateGraphPanel from feature toggles

* chore(tablepanel): delete autoMigrateTablePanel feature flag

* chore(piechart): delete autoMigratePiechartPanel feature flag

* chore(worldmappanel): remove autoMigrateWorldmapPanel feature toggle

* chore(statpanel): remove autoMigrateStatPanel feature flag

* feat(dashboards): remove automigrate feature flags and always auto migrate angular panels

* test(pluginsintegration): fix failing loader test

* test(frontend): wip: fix failures and skip erroring migration tests

* chore(codeowners): remove deleted angular related files and directories

* test(graphite): remove angular mock from test file

* test(dashboards): skip failing exporter test, remove angularSupportEnabled flags

* test(dashbaord): skip another failing panel menu test

* Tests: fixes pkg/services/pluginsintegration/loader/loader_test.go (#100505)

* Tests: fixes pkg/services/pluginsintegration/plugins_integration_test.go

* Trigger Build

* chore(dashboards): remove angularComponent from getPanelMenu, update test

* feat(dashboards): remove all usage of AngularComponent and getAngularLoader

* chore(betterer): refresh results file

* feat(plugins): remove PluginAngularBadge component and usage

* feat(datasource_srv): remove usage of getLegacyAngularInjector

* feat(queryeditor): delete AngularQueryComponentScope type

* Chore: removes Angular from plugin_loader

* Chore: remove angular from getPlugin

* Chore: fix i18n

* Trigger Build

* Chore: remove more Angular from importPanelPlugin

* Chore: remove search options warning

* Chore: remove and deprecate Angular related

* chore(angular): remove angular dependencies from core and runtime

* chore(runtime): delete angular injector

* chore(data): delete angular scope from event bus

* chore(plugin-catalog): remove code pushing app plugins angular config page

* chore(yarn): refresh lock file

* chore(frontend): remove ng-loader from webpack configs, remove systemjs cjs plugin

* chore(navigation): remove tether-drop cleanup from GrafanaRouter, delete dependency

* chore(runtime): delete AngularLoader

* chore(betterer): refresh results file

* chore(betterer): fix out of sync results file

* feat(query): fix type and import errors in QueryEditorRow

* test(dashboards): delete skipped angular related tests

* Tests: add back tests and fix betterer

* Tests: fix broken test

* Trigger build

* chore(i18n): remove angular deprecation related strings

* test: clean up connections and plugins catalog tests

* chore(betterer): update results file

---------

Co-authored-by: Hugo Häggmark <hugo.haggmark@gmail.com>
2025-04-04 11:31:35 +02:00
053ee5cb1f Frontend Sandbox: Use DOMPurify to sanitize innerHTML (#102302) 2025-03-19 15:24:32 +02:00
13d1f02597 Frontend Sandbox: Do not perform authenticated queries for non authenticated users (#101946)
* Do not perform authenticated queries for non authenticated users

* Empty commit
2025-03-11 09:40:15 -06:00
2d3de82ae9 Frontend sandbox: Improve signature elegibility check to avoid extra requests (#100980)
* Frontend sandbox: Improve signature elegibility check to avoid extra requests

* remove caching element
2025-02-19 18:54:25 +02:00
9f77c86b21 Frontend Sandbox: Allow enabling sandbox before installing plugins (#100365)
* Frontend Sandbox: Allow enabling sandbox before installing plugins
2025-02-11 11:52:21 +02:00
f65e9fa9ab Sandbox: Add SRI validation for CDN assets loaded in the sandbox (#99023)
Add SRI validation for frontend sandbox
2025-01-17 11:47:36 +01:00
acf57aa556 Frontend Sandbox: Do not consider internal plugins as elegible (#96325) 2024-11-13 10:28:19 +02:00
77b8b505ad Catalog: Allow extensions to render in the plugin catalog subtitle (#95239)
* Plugins Catalog: Allow plugin subtitle additional extensions to register and render

* Add tests

* Fix prettier issues

* Fix typo

* Empty commit
2024-10-24 15:44:50 +02:00
f248a55576 Frontend Sandbox: Create a plugin sandbox enable registry. Use enable list instead of disable list (#94809)
* Use a enable configuration to enable frontend sandbox

* Modify settings to load enableFrontendSandbox

* Check for signature type

* Update commment

* Fix e2e tests for the frontend sandbox

* Modify logic so a custom check function is used instead of a list of checks

* Fixes flaky test

* fix comment

* Update comment

* Empty commit

* Empty commit
2024-10-17 16:56:50 +02:00
892a50a3b7 Performance: Load shared frontend plugin dependencies on demand (#87644)
* feat(plugins): only load shared plugin dependencies when needed

* feat(plugins): add react-redux and fix up comments

* feat(plugins): attempt to load async deps in fe sandbox

* feat(frontend): defer script execution to prevent systemjs from loading app.js
2024-08-27 15:10:26 +02:00
47f8717149 React: Use new JSX transform (#88802)
* update eslint, tsconfig + esbuild to handle new jsx transform

* remove thing that breaks the new jsx transform

* remove react imports

* adjust grafana-icons build

* is this the correct syntax?

* try this

* well this was much easier than expected...

* change grafana-plugin-configs webpack config

* fixes

* fix lockfile

* fix 2 more violations

* use path.resolve instead of require.resolve

* remove react import

* fix react imports

* more fixes

* remove React import

* remove import React from docs

* remove another react import
2024-06-25 12:43:47 +01:00
e5474511d8 Plugins: Introduce magic modules to fe sandbox loader (#89274)
* feat(fe-sandbox): introduce module and exports magic modules to executed plugin code

* refactor(fe-sandbox): rename module and exports vars for clarity
2024-06-21 11:35:02 +02:00
9f5ab38477 FE Sandbox: Fix innerHTML distortion causing issues with DOMPurify inner works (#87117)
* FE Sandbox: Fix innerHTML distortion causing issues with DOMPurify inner works

* Add a comment explaining the fix
2024-05-02 11:17:04 +02:00
1e1c62fef1 FE Sandbox: Get plugin module path from bootdata instead of plugin settings (#86702)
* FE Sandbox: Get plugin module path from bootdata instead of plugin settings

* Remove unnecessary async/await
2024-04-24 12:05:20 +02:00
0ec9c3e01a FE Sandbox: Fix worker post message not handling proxy objects correctly (#86654)
* FE Sandbox: Fix worker post message not handling proxy objects correctly

* use expect error instead of ignore

* use assertion instead of ignore

* Fix formatting
2024-04-23 14:08:34 +02:00
f209a5a8b8 fix typos (#83414) 2024-02-26 10:52:44 -07:00
49a3553b94 Sandbox: Fix custom variable query editors not working inside the sandbox (#83152) 2024-02-21 13:31:16 +01:00
99feb928cf Plugins: Don't auto prepend app sub url to plugin asset paths (#81658)
* don't prepend app sub url to paths

* simplify logo path

* fix(plugins): dynamically prepend appSubUrl for System module resolving to work

* fix(sandbox): support dynamic appSuburl prepend when loading plugin module.js

* fix tests

* update test name

* fix tests

* update fe + add some tests

* refactor(plugins): move wrangleurl to utils, rename to resolveModulePath, update usage

* chore: fix a typo

* test(plugins): add missing name to utils test

* reset test flag

---------

Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com>
2024-02-08 12:19:28 +01:00
ec5623f552 Sandbox: Fix cloneDeep not working inside plugins (#81950) 2024-02-06 16:47:29 +01:00
572c182a81 Unify frontend monitoring (#80075)
* Unify frontend monitoring

* Add missing mock

* Add missing mock

* Keep source:sandbox

* Create separate logger for plugins/sql package

* chore: rename "logAlertingError" to "logError"

* Use internal Faro logging for debugging instead of redundant browser logging

* Post-merge fix

* Add more docs about debug levels

* Unify logger names

* Update packages/grafana-runtime/src/utils/logging.ts

Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>

* Update packages/grafana-runtime/src/utils/logging.ts

Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>

---------

Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com>
Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>
2024-02-01 15:08:40 +01:00
7e68e3f49e Sandbox: Improve logging of sandbox lifecycle for monitoring (#79297)
* Sandbox: Log a plugin loading inside the sandbox

* Improve tracking of general sandbox errors

* Fix import
2023-12-12 16:28:56 +01:00
cfc67a9e2d Sandbox: do not load grafana signed app plugins into the sandbox (#78334)
* Sandbox: do not load grafana signed app plugins into the sandbox

* remove unused dependency
2023-11-20 12:00:31 +01:00
b6d6375e2b Sandbox: Add setImmediate polyfill (#78093) 2023-11-14 10:40:58 +01:00
0b03344baa Chore: Update to typescript 5 (#76511)
* Update dependency typescript to v5

* Update yarn.lock

* Fix typescript errors

* Update typescript version sdk

* Revert useDescription.ts

* Fix ts errors

* Fix Typescript errors after Symbol.unscopables type change

* Fix colormanipulator errors

* Update packages/grafana-data/src/vector/FunctionalVector.ts

* Fix ts errors in dashboardmigrator

* Fix sandbox component typescript error

* Update yarn

* Update to typescript 5.2

* Fix typescript error

* update typescript/vscode patch/sdk/whatever

* fix ts errors in elasticsearch

* Fix two errors in alerting

* Fix error in dashboard-scene

* Fix errors in dashboard tests

* Fix errors in explore tests

* Fix error in plugins sandbox

* fix error in DashboardQueryRunner

* fix errors in grafana-data

* fix errors in PanelChrome story

* update betterer

* better fix for cloud monitoring

* fix error in reducer tester

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com>
Co-authored-by: Josh Hunt <joshhunt@users.noreply.github.com>
Co-authored-by: joshhunt <josh@trtr.co>
2023-11-07 13:20:20 +00:00
7107ba0104 Sandbox: Patch history.replaceState to make it work inside the sandbox (#76255)
* Patch history.replaceState api instead of doing a live distortion

* Add better patching mechanism

* Remove console log
2023-11-07 09:09:17 +01:00
7b8945571c Sandbox: Fix dynamic loaded chunks not processed correcly inside the sandbox (#76047)
* Sandbox: Patch dynamic chunks using CDN method

* Patch plugin apis when dynamically loaded

* use same method to transform all code
2023-10-09 14:23:47 +02:00
5549cd7a76 Sandbox: Fix history.replace calls inside the sandbox (#76049)
* Sandbox: Fix `history.replace` calls inside the sandbox

* Improve signature verification and comments

* Add clarifying comment
2023-10-09 10:42:38 +02:00
027028d9a0 Sandbox: Make jquery available to plugins in the global scope (#75960) 2023-10-04 16:25:47 +02:00
9747cdd7d1 Sandbox: Update to latest near membrane version ^0.13.0 (#75605)
* Sandbox: Update to latest near membrane version ^0.13.0

* Use exact version

* Replace throw with reject

* Add nera membrane to renovate skip list
2023-10-03 10:22:17 +02:00
677a2ad4d8 Sandbox: Patch array vector prototype methods inside the sandbox (#75835) 2023-10-03 09:02:55 +02:00
e45867c635 Sandbox: allow access to window.grafanaBootData for plugins (#75522)
* Sandbox: allow access to window.grafanaBootData for plugins

* Do not overlog access to bootdata

* Fix wrong string
2023-09-29 17:15:04 +02:00
f890cb23b8 Sandbox: use same trusted types default policy than grafana main realm (#75539) 2023-09-27 16:50:23 +02:00
2bbd5521fe Sandbox: Use resolveCache to resolve plugin's code file as systemjs does (#75509)
* Sandbox: Use resolveCache to resolve plugin's code file as systemjs does

* Add clarifying comments
2023-09-27 13:56:35 +02:00
95889b2e25 Tests: Add basic e2e tests for frontend plugin sandbox (#70759)
* Add initial e2e tests for sandboxing

* Add tests for sandbox on

* Add additional sandbox tests

* Move sandbox into various suite

* Test drone setup

* Move variable

* Update drone

* Update plugins path for e2e

* Revert drone changes

* use drone from main

* Use lib.star from main

* Move sandbox test to its own suite

* Expand methods to inject iframes

* Restore e2e script

* Add back change to script

* Update tests for trusted types

* Integrate custom plugins into grafana-server

* Echo for deubging

* add debugging message

* Expand message

* Add extra for ci

* fix path

* Improve start-server logic

* Remove duplicated logic

* Restore file deleted by mistake

* Restore file to main
p

* restore file

* Restore start script

* Update e2e/panels-suite/frontend-sandbox-panel.spec.ts

Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com>

---------

Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com>
2023-09-26 10:58:47 +02:00
62d0becd25 Sandbox: Set sandbox wrapper to height 100% for panel plugins (#75004)
Sandbox: Fix panel plugin not showing scrollbars
2023-09-19 09:11:56 +02:00
c7b6ac065a Sandbox: Make window.monaco and window.Prism available for plugins inside the sandbox (#74977)
* Sandbox: Make `window.monaco` available for plugins inside the sandbox

* Add Prism as an endowment

* Fix typo
2023-09-18 10:45:09 +02:00
ae858fcdd2 Sandbox: Fix sandbox not loading SystemJs.module objects correctly inside plugins (#74445) 2023-09-06 16:46:31 +03:00
f8026463a8 Sandbox: Fix plugins not loading due to wrong plugin module url (#74436) 2023-09-06 13:49:09 +03:00
b8dd081d8a Sandbox: Fix post message trying to serialize proxy objects inside plugins (#73596) 2023-09-01 16:54:06 +03:00
62821c69b3 Plugins: Bump SystemJS to 6.14.2 (#70068)
* chore(plugins): bump systemjs to latest version

* refactor(plugins): switch runtime over to use latest systemjs, add typings

* refactor(plugins): use latest systemjs APIs for runtime dependency resolution

* refactor(plugins): return valid urls from backend for latest systemjs import to work

* revert(plugins): remove cfg from assetpath in favour of relative paths

* fix(plugins): useDefault for systemjs deps to solve undefined errors

* feat(plugins): add basic support for loading plugins via CDN

* fix(plugins): load nested plugins with latest systemjs

* feat(plugins): add back ability to transform plugin src for cdns

* feat(plugins): get caching for module.js working, clean up

* refactor(plugin_loader): create buildImportMap fn and more clean up

* refactor(angularapp): use buildImportMap for dependencies and clean up

* test(plugin_loader): fix failing test due to systemjs update

* test(jest): mock systemjs amd extra in tests to prevent it breaking tests

* chore(plugins): remove systemjs module-types extra, already included with system

* fix(plugins): update key for invalidating cached plugins

* fix: move systemjs amd define to another global so monaco can load

* refactor(plugins): clean up cache buster and tests

* chore(plugins): remove debug

* refactor(plugins): move systemjs define to keep global cleaner

* fix(plugins): set useDefault so system modules lodash references dont fail

* feat(plugins): hook systemjs onload so stylesheets are applied to the dom

* refactor(plugins): wrap amd formatted plugins in iife to prevent define collision

* feat(plugins): support system module format for legacy plugins

* test(plugincachebuster): update tests to match latest implementation

* test(plugins-loader): fix up tests post module property change

* fix test

* Update pkg/plugins/manager/loader/assetpath/assetpath.go

Co-authored-by: Will Browne <wbrowne@users.noreply.github.com>

* chore(plugin_loader): remove stray import from merge conflict

* Revert "Update pkg/plugins/manager/loader/assetpath/assetpath.go"

This reverts commit 0df57d1cf20f49c22c93369001c70aae46a97c42.

* fix(plugin_loader): set use default for shared plugin dependencies

* refactor(plugins): use leading slash for Module and BaseUrl

* fix(plugins): fix resolve appending extension to cache query param

* refactor(plugins): align baseurl and module paths

* refactor(plugins): update builtInPlugins keys to match naming convention

* refactor(plugins): minor loader clean up, fix up types

* test(plugins): fix failing tests

* refactor(plugins): rename cache buster systemjs plugin to cache

* refactor(plugins): separate plugin_loader into smaller files

* chore(plugins): clean up plugin_loader types

* chore(plugin_sandbox): fix typescript error

* chore(npm): remove unplug debug and pin systemjs to 6.14.1

* refactor(plugins-cdn): update loaders to use absolute module url from backend

* fix(plugins): escape period in systemjs  module regex

* chore(plugins): delete redundant systemjs plugins

* refactor(plugin_loader): move hooks into own file, add types

* test(plugins): add tests for systemjs loader hooks

* chore(plugins): rename systemjshooks file

* chore(plugins): remove redundant systemjs cdn backend code

* fix(plugins): handle loading with config.appSubUrl

* chore(plugins): delete redundant plugin-cdn angular code

* test(plugins): fix failing systemjs test missing pluginsCDNBaseUrl

* refactor(plugins): backend provides base and module properties with AppSubUrl

* fix(plugins): consider AppSubUrl for plugin logos

* fix(plugins): use isHostedOnCDN util when checking for cdn hosted plugins

* add new appSubURL field to config

* refactor relative URL func

* fix path for core app

* refactor asset path input

* fix(plugins): catch errors in loadPluginCss

* feat(plugins-cdn): selectively transform sourceMapURL

* re-add deleted test case

* chore(plugins): bump to latest systemjs@6.14.2

* feat(plugins): add systemjs-cjs-extra for loading commonjs plugins

---------

Co-authored-by: Will Browne <will.browne@grafana.com>
Co-authored-by: Will Browne <wbrowne@users.noreply.github.com>
2023-08-31 15:45:44 +02:00
050b9d9a85 Sandbox: Fix prismjs syntax for plugins defining its own language (#73393)
* Sandbox: Fix prismjs syntax for plugins defining its own language

* Add clarifying comment
2023-08-22 13:04:57 +02:00
84181eb613 Sandbox: Fix monaco editor custom languages not working correctly inside the sandbox (#72911) 2023-08-11 10:50:57 +02:00
81a940f675 Sandbox: Redirect calls to window.location to window.locationSandbox (#72252) 2023-07-28 15:04:23 +03:00
20d7cf34b2 Sandbox: Set the style attribute of all Element child to be a live target (#72208) 2023-07-24 17:23:40 +02:00
e8e3f81e38 Sandbox: Add support for webpack dynamic imports (#71714) 2023-07-20 13:19:57 +02:00
0db1d16c09 Plugins: Make datasource instances live targets for the sandbox (#71472) 2023-07-13 15:44:52 +02:00
78efef4ac0 Plugins: App plugins running inside a sandbox div will have height 100% (#71453) 2023-07-13 14:59:20 +02:00