@databricks/appkit 0.4.1 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/CLAUDE.md +1 -0
  2. package/dist/analytics/analytics.d.ts +11 -1
  3. package/dist/analytics/analytics.d.ts.map +1 -1
  4. package/dist/analytics/analytics.js +12 -5
  5. package/dist/analytics/analytics.js.map +1 -1
  6. package/dist/app/index.d.ts +11 -2
  7. package/dist/app/index.d.ts.map +1 -1
  8. package/dist/app/index.js +51 -37
  9. package/dist/app/index.js.map +1 -1
  10. package/dist/appkit/package.js +1 -1
  11. package/dist/cache/index.js +11 -10
  12. package/dist/cache/index.js.map +1 -1
  13. package/dist/cache/storage/memory.js +4 -2
  14. package/dist/cache/storage/memory.js.map +1 -1
  15. package/dist/cache/storage/persistent.js +7 -0
  16. package/dist/cache/storage/persistent.js.map +1 -1
  17. package/dist/connectors/lakebase/client.js +8 -4
  18. package/dist/connectors/lakebase/client.js.map +1 -1
  19. package/dist/connectors/sql-warehouse/client.js +5 -2
  20. package/dist/connectors/sql-warehouse/client.js.map +1 -1
  21. package/dist/context/execution-context.d.ts +17 -0
  22. package/dist/context/execution-context.d.ts.map +1 -0
  23. package/dist/context/service-context.d.ts +21 -0
  24. package/dist/context/service-context.d.ts.map +1 -0
  25. package/dist/context/service-context.js +2 -6
  26. package/dist/context/service-context.js.map +1 -1
  27. package/dist/context/user-context.d.ts +29 -0
  28. package/dist/context/user-context.d.ts.map +1 -0
  29. package/dist/core/appkit.d.ts.map +1 -1
  30. package/dist/core/appkit.js +35 -12
  31. package/dist/core/appkit.js.map +1 -1
  32. package/dist/errors/authentication.js +3 -6
  33. package/dist/errors/authentication.js.map +1 -1
  34. package/dist/errors/base.js +4 -0
  35. package/dist/errors/base.js.map +1 -1
  36. package/dist/errors/configuration.js +3 -6
  37. package/dist/errors/configuration.js.map +1 -1
  38. package/dist/errors/connection.js +3 -6
  39. package/dist/errors/connection.js.map +1 -1
  40. package/dist/errors/execution.js +3 -6
  41. package/dist/errors/execution.js.map +1 -1
  42. package/dist/errors/initialization.js +3 -6
  43. package/dist/errors/initialization.js.map +1 -1
  44. package/dist/errors/server.js +3 -6
  45. package/dist/errors/server.js.map +1 -1
  46. package/dist/errors/tunnel.js +3 -6
  47. package/dist/errors/tunnel.js.map +1 -1
  48. package/dist/errors/validation.js +3 -6
  49. package/dist/errors/validation.js.map +1 -1
  50. package/dist/index.d.ts +2 -1
  51. package/dist/index.js +4 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/logging/wide-event-emitter.js +1 -3
  54. package/dist/logging/wide-event-emitter.js.map +1 -1
  55. package/dist/logging/wide-event.js +2 -0
  56. package/dist/logging/wide-event.js.map +1 -1
  57. package/dist/plugin/dev-reader.d.ts +1 -0
  58. package/dist/plugin/dev-reader.d.ts.map +1 -1
  59. package/dist/plugin/dev-reader.js +41 -6
  60. package/dist/plugin/dev-reader.js.map +1 -1
  61. package/dist/plugin/interceptors/retry.js +3 -0
  62. package/dist/plugin/interceptors/retry.js.map +1 -1
  63. package/dist/plugin/plugin.d.ts +10 -24
  64. package/dist/plugin/plugin.d.ts.map +1 -1
  65. package/dist/plugin/plugin.js +23 -30
  66. package/dist/plugin/plugin.js.map +1 -1
  67. package/dist/server/base-server.js +2 -0
  68. package/dist/server/base-server.js.map +1 -1
  69. package/dist/server/index.d.ts +23 -1
  70. package/dist/server/index.d.ts.map +1 -1
  71. package/dist/server/index.js +29 -13
  72. package/dist/server/index.js.map +1 -1
  73. package/dist/server/remote-tunnel/remote-tunnel-controller.js +30 -15
  74. package/dist/server/remote-tunnel/remote-tunnel-controller.js.map +1 -1
  75. package/dist/server/remote-tunnel/remote-tunnel-manager.js +27 -2
  76. package/dist/server/remote-tunnel/remote-tunnel-manager.js.map +1 -1
  77. package/dist/server/static-server.js +1 -0
  78. package/dist/server/static-server.js.map +1 -1
  79. package/dist/server/vite-dev-server.js +1 -0
  80. package/dist/server/vite-dev-server.js.map +1 -1
  81. package/dist/shared/src/plugin.d.ts +25 -1
  82. package/dist/shared/src/plugin.d.ts.map +1 -1
  83. package/dist/stream/arrow-stream-processor.js +5 -10
  84. package/dist/stream/arrow-stream-processor.js.map +1 -1
  85. package/dist/stream/buffers.js +7 -0
  86. package/dist/stream/buffers.js.map +1 -1
  87. package/dist/stream/stream-manager.js +5 -0
  88. package/dist/stream/stream-manager.js.map +1 -1
  89. package/dist/stream/stream-registry.js +1 -0
  90. package/dist/stream/stream-registry.js.map +1 -1
  91. package/dist/stream/validator.js +2 -6
  92. package/dist/stream/validator.js.map +1 -1
  93. package/dist/telemetry/noop.js +1 -0
  94. package/dist/telemetry/noop.js.map +1 -1
  95. package/dist/telemetry/telemetry-manager.js +4 -6
  96. package/dist/telemetry/telemetry-manager.js.map +1 -1
  97. package/dist/telemetry/telemetry-provider.js +3 -0
  98. package/dist/telemetry/telemetry-provider.js.map +1 -1
  99. package/dist/type-generator/spinner.js +9 -11
  100. package/dist/type-generator/spinner.js.map +1 -1
  101. package/docs/docs/api/appkit/Class.AppKitError/index.html +5 -3
  102. package/docs/docs/api/appkit/Class.AppKitError.md +7 -0
  103. package/docs/docs/api/appkit/Class.AuthenticationError/index.html +3 -3
  104. package/docs/docs/api/appkit/Class.ConfigurationError/index.html +3 -3
  105. package/docs/docs/api/appkit/Class.ConnectionError/index.html +3 -3
  106. package/docs/docs/api/appkit/Class.ExecutionError/index.html +3 -3
  107. package/docs/docs/api/appkit/Class.InitializationError/index.html +3 -3
  108. package/docs/docs/api/appkit/Class.Plugin/index.html +28 -21
  109. package/docs/docs/api/appkit/Class.Plugin.md +34 -34
  110. package/docs/docs/api/appkit/Class.ServerError/index.html +3 -3
  111. package/docs/docs/api/appkit/Class.TunnelError/index.html +3 -3
  112. package/docs/docs/api/appkit/Class.ValidationError/index.html +3 -3
  113. package/docs/docs/api/appkit/Function.appKitTypesPlugin/index.html +3 -3
  114. package/docs/docs/api/appkit/Function.createApp/index.html +4 -4
  115. package/docs/docs/api/appkit/Function.getExecutionContext/index.html +26 -0
  116. package/docs/docs/api/appkit/Function.getExecutionContext.md +19 -0
  117. package/docs/docs/api/appkit/Function.isSQLTypeMarker/index.html +4 -4
  118. package/docs/docs/api/appkit/Interface.BasePluginConfig/index.html +3 -3
  119. package/docs/docs/api/appkit/Interface.CacheConfig/index.html +3 -3
  120. package/docs/docs/api/appkit/Interface.ITelemetry/index.html +3 -3
  121. package/docs/docs/api/appkit/Interface.StreamExecutionSettings/index.html +3 -3
  122. package/docs/docs/api/appkit/Interface.TelemetryConfig/index.html +3 -3
  123. package/docs/docs/api/appkit/TypeAlias.IAppRouter/index.html +3 -3
  124. package/docs/docs/api/appkit/Variable.sql/index.html +3 -3
  125. package/docs/docs/api/appkit/index.html +4 -4
  126. package/docs/docs/api/appkit-ui/data/AreaChart/index.html +2 -2
  127. package/docs/docs/api/appkit-ui/data/BarChart/index.html +2 -2
  128. package/docs/docs/api/appkit-ui/data/DataTable/index.html +2 -2
  129. package/docs/docs/api/appkit-ui/data/DonutChart/index.html +2 -2
  130. package/docs/docs/api/appkit-ui/data/HeatmapChart/index.html +2 -2
  131. package/docs/docs/api/appkit-ui/data/LineChart/index.html +2 -2
  132. package/docs/docs/api/appkit-ui/data/PieChart/index.html +2 -2
  133. package/docs/docs/api/appkit-ui/data/RadarChart/index.html +2 -2
  134. package/docs/docs/api/appkit-ui/data/ScatterChart/index.html +2 -2
  135. package/docs/docs/api/appkit-ui/index.html +2 -2
  136. package/docs/docs/api/appkit-ui/styling/index.html +2 -2
  137. package/docs/docs/api/appkit-ui/ui/Accordion/index.html +2 -2
  138. package/docs/docs/api/appkit-ui/ui/Alert/index.html +2 -2
  139. package/docs/docs/api/appkit-ui/ui/AlertDialog/index.html +2 -2
  140. package/docs/docs/api/appkit-ui/ui/AspectRatio/index.html +2 -2
  141. package/docs/docs/api/appkit-ui/ui/Avatar/index.html +2 -2
  142. package/docs/docs/api/appkit-ui/ui/Badge/index.html +2 -2
  143. package/docs/docs/api/appkit-ui/ui/Breadcrumb/index.html +2 -2
  144. package/docs/docs/api/appkit-ui/ui/Button/index.html +2 -2
  145. package/docs/docs/api/appkit-ui/ui/ButtonGroup/index.html +2 -2
  146. package/docs/docs/api/appkit-ui/ui/Calendar/index.html +2 -2
  147. package/docs/docs/api/appkit-ui/ui/Card/index.html +2 -2
  148. package/docs/docs/api/appkit-ui/ui/Carousel/index.html +2 -2
  149. package/docs/docs/api/appkit-ui/ui/ChartContainer/index.html +2 -2
  150. package/docs/docs/api/appkit-ui/ui/Checkbox/index.html +2 -2
  151. package/docs/docs/api/appkit-ui/ui/Collapsible/index.html +2 -2
  152. package/docs/docs/api/appkit-ui/ui/Command/index.html +2 -2
  153. package/docs/docs/api/appkit-ui/ui/ContextMenu/index.html +2 -2
  154. package/docs/docs/api/appkit-ui/ui/Dialog/index.html +2 -2
  155. package/docs/docs/api/appkit-ui/ui/Drawer/index.html +2 -2
  156. package/docs/docs/api/appkit-ui/ui/DropdownMenu/index.html +2 -2
  157. package/docs/docs/api/appkit-ui/ui/Empty/index.html +2 -2
  158. package/docs/docs/api/appkit-ui/ui/Field/index.html +2 -2
  159. package/docs/docs/api/appkit-ui/ui/FormControl/index.html +2 -2
  160. package/docs/docs/api/appkit-ui/ui/HoverCard/index.html +2 -2
  161. package/docs/docs/api/appkit-ui/ui/Input/index.html +2 -2
  162. package/docs/docs/api/appkit-ui/ui/InputGroup/index.html +2 -2
  163. package/docs/docs/api/appkit-ui/ui/InputOTP/index.html +2 -2
  164. package/docs/docs/api/appkit-ui/ui/Item/index.html +2 -2
  165. package/docs/docs/api/appkit-ui/ui/Kbd/index.html +2 -2
  166. package/docs/docs/api/appkit-ui/ui/Label/index.html +2 -2
  167. package/docs/docs/api/appkit-ui/ui/Menubar/index.html +2 -2
  168. package/docs/docs/api/appkit-ui/ui/NavigationMenu/index.html +2 -2
  169. package/docs/docs/api/appkit-ui/ui/Pagination/index.html +2 -2
  170. package/docs/docs/api/appkit-ui/ui/Popover/index.html +2 -2
  171. package/docs/docs/api/appkit-ui/ui/Progress/index.html +2 -2
  172. package/docs/docs/api/appkit-ui/ui/RadioGroup/index.html +2 -2
  173. package/docs/docs/api/appkit-ui/ui/ResizableHandle/index.html +2 -2
  174. package/docs/docs/api/appkit-ui/ui/ScrollArea/index.html +2 -2
  175. package/docs/docs/api/appkit-ui/ui/Select/index.html +2 -2
  176. package/docs/docs/api/appkit-ui/ui/Separator/index.html +2 -2
  177. package/docs/docs/api/appkit-ui/ui/Sheet/index.html +2 -2
  178. package/docs/docs/api/appkit-ui/ui/Sidebar/index.html +2 -2
  179. package/docs/docs/api/appkit-ui/ui/Skeleton/index.html +2 -2
  180. package/docs/docs/api/appkit-ui/ui/Slider/index.html +2 -2
  181. package/docs/docs/api/appkit-ui/ui/Spinner/index.html +2 -2
  182. package/docs/docs/api/appkit-ui/ui/Switch/index.html +2 -2
  183. package/docs/docs/api/appkit-ui/ui/Table/index.html +2 -2
  184. package/docs/docs/api/appkit-ui/ui/Tabs/index.html +2 -2
  185. package/docs/docs/api/appkit-ui/ui/Textarea/index.html +2 -2
  186. package/docs/docs/api/appkit-ui/ui/Toaster/index.html +2 -2
  187. package/docs/docs/api/appkit-ui/ui/Toggle/index.html +2 -2
  188. package/docs/docs/api/appkit-ui/ui/ToggleGroup/index.html +2 -2
  189. package/docs/docs/api/appkit-ui/ui/Tooltip/index.html +2 -2
  190. package/docs/docs/api/appkit.md +6 -5
  191. package/docs/docs/api/index.html +2 -2
  192. package/docs/docs/app-management/index.html +4 -4
  193. package/docs/docs/app-management.md +2 -2
  194. package/docs/docs/architecture/index.html +2 -2
  195. package/docs/docs/category/development/index.html +2 -2
  196. package/docs/docs/configuration/index.html +2 -2
  197. package/docs/docs/core-principles/index.html +2 -2
  198. package/docs/docs/development/index.html +4 -4
  199. package/docs/docs/development/llm-guide/index.html +2 -2
  200. package/docs/docs/development/local-development/index.html +4 -4
  201. package/docs/docs/development/local-development.md +2 -2
  202. package/docs/docs/development/project-setup/index.html +2 -2
  203. package/docs/docs/development/remote-bridge/index.html +4 -4
  204. package/docs/docs/development/remote-bridge.md +2 -2
  205. package/docs/docs/development/type-generation/index.html +2 -2
  206. package/docs/docs/development.md +2 -2
  207. package/docs/docs/index.html +4 -4
  208. package/docs/docs/plugins/index.html +7 -3
  209. package/docs/docs/plugins.md +36 -11
  210. package/docs/docs.md +2 -2
  211. package/llms.txt +1 -0
  212. package/package.json +1 -1
@@ -4,14 +4,14 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="generator" content="Docusaurus v3.9.2">
6
6
  <title data-rh="true">Abstract Class: Plugin\&lt;TConfig\&gt; | AppKit</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://databricks.github.io/appkit/docs/api/appkit/Class.Plugin"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="keywords" content="Databricks Apps, Node.js, React.js, SDK, TypeScript, SQL, Databricks, AI, full-stack, development"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Abstract Class: Plugin\&lt;TConfig\&gt; | AppKit"><meta data-rh="true" name="description" content="Base abstract class for creating AppKit plugins"><meta data-rh="true" property="og:description" content="Base abstract class for creating AppKit plugins"><link data-rh="true" rel="icon" href="/appkit/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://databricks.github.io/appkit/docs/api/appkit/Class.Plugin"><link data-rh="true" rel="alternate" href="https://databricks.github.io/appkit/docs/api/appkit/Class.Plugin" hreflang="en"><link data-rh="true" rel="alternate" href="https://databricks.github.io/appkit/docs/api/appkit/Class.Plugin" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"API reference","item":"https://databricks.github.io/appkit/docs/api/"},{"@type":"ListItem","position":2,"name":"@databricks/appkit","item":"https://databricks.github.io/appkit/docs/api/appkit/"},{"@type":"ListItem","position":3,"name":"Plugin","item":"https://databricks.github.io/appkit/docs/api/appkit/Class.Plugin"}]}</script><link rel="stylesheet" href="/appkit/assets/css/styles.0ec7398f.css">
7
- <script src="/appkit/assets/js/runtime~main.a874f05e.js" defer="defer"></script>
8
- <script src="/appkit/assets/js/main.e19edae3.js" defer="defer"></script>
7
+ <script src="/appkit/assets/js/runtime~main.11a6f15e.js" defer="defer"></script>
8
+ <script src="/appkit/assets/js/main.d41b6412.js" defer="defer"></script>
9
9
  </head>
10
10
  <body class="navigation-with-keyboard">
11
11
  <svg style="display: none;"><defs>
12
12
  <symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
13
13
  </defs></svg>
14
- <script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script><div id="__docusaurus"><link rel="preload" as="image" href="/appkit/img/logo.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_R3I2" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="theme-announcement-bar announcementBar_Upl7" style="background-color:#f0f0f0;color:#000000" role="banner"><div class="announcementBarPlaceholder_Lvio"></div><div class="content_vq0X announcementBarContent_FIMQ">⚠️ AppKit is in an early development phase and is subject to change without notice. <strong>DO NOT</strong> use in production environments.</div><button type="button" aria-label="Close" class="clean-btn close closeButton_J8WU announcementBarClose_jD94"><svg viewBox="0 0 15 15" width="14" height="14"><g stroke="currentColor" stroke-width="3.1"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></button></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/appkit/"><div class="navbar__logo"><img src="/appkit/img/logo.png" alt="AppKit" class="themedComponent_hkXO themedComponent--light_BgK8"><img src="/appkit/img/logo.png" alt="AppKit" class="themedComponent_hkXO themedComponent--dark_RKPt"></div><b class="navbar__title text--truncate">AppKit</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/appkit/docs/">Documentation</a><a class="navbar__item navbar__link" href="/appkit/contributing">Contributing</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/databricks/appkit" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_eFYw colorModeToggle_EPbi"><button class="clean-btn toggleButton_HRKp toggleButtonDisabled_bICu" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO lightToggleIcon_vxPA"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO darkToggleIcon_PZNO"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO systemToggleIcon_A7x6"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_cVhq"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper__Y_W"><div class="docsWrapper_cIfN"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_xQFv" type="button"></button><div class="docRoot_FHtD"><aside class="theme-doc-sidebar-container docSidebarContainer_dvCd"><div class="sidebarViewport_GeRf"><div class="sidebar_T8N1"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_uyE9 menuWithAnnouncementBar_Bucd"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/"><span title="Getting started" class="linkLabel_hZzm">Getting started</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/app-management"><span title="App management" class="linkLabel_hZzm">App management</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/plugins"><span title="Plugins" class="linkLabel_hZzm">Plugins</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/architecture"><span title="Architecture" class="linkLabel_hZzm">Architecture</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/configuration"><span title="Configuration" class="linkLabel_hZzm">Configuration</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist" href="/appkit/docs/category/development"><span title="Development" class="categoryLinkLabel_ShmP">Development</span></a><button aria-label="Collapse sidebar category &#x27;Development&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/local-development"><span title="Local development" class="linkLabel_hZzm">Local development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/"><span title="Development" class="linkLabel_hZzm">Development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/remote-bridge"><span title="Remote Bridge" class="linkLabel_hZzm">Remote Bridge</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/project-setup"><span title="Project setup" class="linkLabel_hZzm">Project setup</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/type-generation"><span title="Type generation" class="linkLabel_hZzm">Type generation</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/llm-guide"><span title="LLM Guide" class="linkLabel_hZzm">LLM Guide</span></a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/core-principles"><span title="Core principles" class="linkLabel_hZzm">Core principles</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist menu__link--active" href="/appkit/docs/api/"><span title="API reference" class="categoryLinkLabel_ShmP">API reference</span></a><button aria-label="Collapse sidebar category &#x27;API reference&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist menu__link--active" tabindex="0" href="/appkit/docs/api/appkit/"><span title="@databricks/appkit" class="categoryLinkLabel_ShmP">@databricks/appkit</span></a><button aria-label="Collapse sidebar category &#x27;@databricks/appkit&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.AppKitError"><span title="AppKitError" class="linkLabel_hZzm">AppKitError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.AuthenticationError"><span title="AuthenticationError" class="linkLabel_hZzm">AuthenticationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ConfigurationError"><span title="ConfigurationError" class="linkLabel_hZzm">ConfigurationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ConnectionError"><span title="ConnectionError" class="linkLabel_hZzm">ConnectionError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ExecutionError"><span title="ExecutionError" class="linkLabel_hZzm">ExecutionError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.InitializationError"><span title="InitializationError" class="linkLabel_hZzm">InitializationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/appkit/docs/api/appkit/Class.Plugin"><span title="Plugin" class="linkLabel_hZzm">Plugin</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ServerError"><span title="ServerError" class="linkLabel_hZzm">ServerError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.TunnelError"><span title="TunnelError" class="linkLabel_hZzm">TunnelError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ValidationError"><span title="ValidationError" class="linkLabel_hZzm">ValidationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.BasePluginConfig"><span title="BasePluginConfig" class="linkLabel_hZzm">BasePluginConfig</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.CacheConfig"><span title="CacheConfig" class="linkLabel_hZzm">CacheConfig</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.ITelemetry"><span title="ITelemetry" class="linkLabel_hZzm">ITelemetry</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.StreamExecutionSettings"><span title="StreamExecutionSettings" class="linkLabel_hZzm">StreamExecutionSettings</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.TelemetryConfig"><span title="TelemetryConfig" class="linkLabel_hZzm">TelemetryConfig</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-typealias"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/TypeAlias.IAppRouter"><span title="IAppRouter" class="linkLabel_hZzm">IAppRouter</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-variable"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Variable.sql"><span title="sql" class="linkLabel_hZzm">sql</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.appKitTypesPlugin"><span title="appKitTypesPlugin" class="linkLabel_hZzm">appKitTypesPlugin</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.createApp"><span title="createApp" class="linkLabel_hZzm">createApp</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.isSQLTypeMarker"><span title="isSQLTypeMarker" class="linkLabel_hZzm">isSQLTypeMarker</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist" tabindex="0" href="/appkit/docs/api/appkit-ui/"><span title="@databricks/appkit-ui" class="categoryLinkLabel_ShmP">@databricks/appkit-ui</span></a><button aria-label="Expand sidebar category &#x27;@databricks/appkit-ui&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_P5br"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_poBZ"><div class="docItemContainer_TdBg"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_bEIa" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/appkit/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_sma7"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/appkit/docs/api/"><span>API reference</span></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/appkit/docs/api/appkit/"><span>@databricks/appkit</span></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Plugin</span></li></ul></nav><div class="tocCollapsible_gJxE theme-doc-toc-mobile tocMobile_ZHYV"><button type="button" class="clean-btn tocCollapsibleButton_uxuR">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Abstract Class: Plugin&lt;TConfig&gt;</h1></header>
14
+ <script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script><div id="__docusaurus"><link rel="preload" as="image" href="/appkit/img/logo.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_R3I2" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="theme-announcement-bar announcementBar_Upl7" style="background-color:#f0f0f0;color:#000000" role="banner"><div class="announcementBarPlaceholder_Lvio"></div><div class="content_vq0X announcementBarContent_FIMQ">⚠️ AppKit is in an early development phase and is subject to change without notice. <strong>DO NOT</strong> use in production environments.</div><button type="button" aria-label="Close" class="clean-btn close closeButton_J8WU announcementBarClose_jD94"><svg viewBox="0 0 15 15" width="14" height="14"><g stroke="currentColor" stroke-width="3.1"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></button></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/appkit/"><div class="navbar__logo"><img src="/appkit/img/logo.png" alt="AppKit" class="themedComponent_hkXO themedComponent--light_BgK8"><img src="/appkit/img/logo.png" alt="AppKit" class="themedComponent_hkXO themedComponent--dark_RKPt"></div><b class="navbar__title text--truncate">AppKit</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/appkit/docs/">Documentation</a><a class="navbar__item navbar__link" href="/appkit/contributing">Contributing</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/databricks/appkit" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_eFYw colorModeToggle_EPbi"><button class="clean-btn toggleButton_HRKp toggleButtonDisabled_bICu" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO lightToggleIcon_vxPA"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO darkToggleIcon_PZNO"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO systemToggleIcon_A7x6"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_cVhq"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper__Y_W"><div class="docsWrapper_cIfN"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_xQFv" type="button"></button><div class="docRoot_FHtD"><aside class="theme-doc-sidebar-container docSidebarContainer_dvCd"><div class="sidebarViewport_GeRf"><div class="sidebar_T8N1"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_uyE9 menuWithAnnouncementBar_Bucd"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/"><span title="Getting started" class="linkLabel_hZzm">Getting started</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/app-management"><span title="App management" class="linkLabel_hZzm">App management</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/plugins"><span title="Plugins" class="linkLabel_hZzm">Plugins</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/architecture"><span title="Architecture" class="linkLabel_hZzm">Architecture</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/configuration"><span title="Configuration" class="linkLabel_hZzm">Configuration</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist" href="/appkit/docs/category/development"><span title="Development" class="categoryLinkLabel_ShmP">Development</span></a><button aria-label="Collapse sidebar category &#x27;Development&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/local-development"><span title="Local development" class="linkLabel_hZzm">Local development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/"><span title="Development" class="linkLabel_hZzm">Development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/remote-bridge"><span title="Remote Bridge" class="linkLabel_hZzm">Remote Bridge</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/project-setup"><span title="Project setup" class="linkLabel_hZzm">Project setup</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/type-generation"><span title="Type generation" class="linkLabel_hZzm">Type generation</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/llm-guide"><span title="LLM Guide" class="linkLabel_hZzm">LLM Guide</span></a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/core-principles"><span title="Core principles" class="linkLabel_hZzm">Core principles</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist menu__link--active" href="/appkit/docs/api/"><span title="API reference" class="categoryLinkLabel_ShmP">API reference</span></a><button aria-label="Collapse sidebar category &#x27;API reference&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist menu__link--active" tabindex="0" href="/appkit/docs/api/appkit/"><span title="@databricks/appkit" class="categoryLinkLabel_ShmP">@databricks/appkit</span></a><button aria-label="Collapse sidebar category &#x27;@databricks/appkit&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.AppKitError"><span title="AppKitError" class="linkLabel_hZzm">AppKitError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.AuthenticationError"><span title="AuthenticationError" class="linkLabel_hZzm">AuthenticationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ConfigurationError"><span title="ConfigurationError" class="linkLabel_hZzm">ConfigurationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ConnectionError"><span title="ConnectionError" class="linkLabel_hZzm">ConnectionError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ExecutionError"><span title="ExecutionError" class="linkLabel_hZzm">ExecutionError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.InitializationError"><span title="InitializationError" class="linkLabel_hZzm">InitializationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/appkit/docs/api/appkit/Class.Plugin"><span title="Plugin" class="linkLabel_hZzm">Plugin</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ServerError"><span title="ServerError" class="linkLabel_hZzm">ServerError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.TunnelError"><span title="TunnelError" class="linkLabel_hZzm">TunnelError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ValidationError"><span title="ValidationError" class="linkLabel_hZzm">ValidationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.BasePluginConfig"><span title="BasePluginConfig" class="linkLabel_hZzm">BasePluginConfig</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.CacheConfig"><span title="CacheConfig" class="linkLabel_hZzm">CacheConfig</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.ITelemetry"><span title="ITelemetry" class="linkLabel_hZzm">ITelemetry</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.StreamExecutionSettings"><span title="StreamExecutionSettings" class="linkLabel_hZzm">StreamExecutionSettings</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.TelemetryConfig"><span title="TelemetryConfig" class="linkLabel_hZzm">TelemetryConfig</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-typealias"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/TypeAlias.IAppRouter"><span title="IAppRouter" class="linkLabel_hZzm">IAppRouter</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-variable"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Variable.sql"><span title="sql" class="linkLabel_hZzm">sql</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.appKitTypesPlugin"><span title="appKitTypesPlugin" class="linkLabel_hZzm">appKitTypesPlugin</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.createApp"><span title="createApp" class="linkLabel_hZzm">createApp</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.getExecutionContext"><span title="getExecutionContext" class="linkLabel_hZzm">getExecutionContext</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.isSQLTypeMarker"><span title="isSQLTypeMarker" class="linkLabel_hZzm">isSQLTypeMarker</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist" tabindex="0" href="/appkit/docs/api/appkit-ui/"><span title="@databricks/appkit-ui" class="categoryLinkLabel_ShmP">@databricks/appkit-ui</span></a><button aria-label="Expand sidebar category &#x27;@databricks/appkit-ui&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_P5br"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_poBZ"><div class="docItemContainer_TdBg"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_bEIa" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/appkit/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_sma7"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/appkit/docs/api/"><span>API reference</span></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/appkit/docs/api/appkit/"><span>@databricks/appkit</span></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Plugin</span></li></ul></nav><div class="tocCollapsible_gJxE theme-doc-toc-mobile tocMobile_ZHYV"><button type="button" class="clean-btn tocCollapsibleButton_uxuR">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Abstract Class: Plugin&lt;TConfig&gt;</h1></header>
15
15
  <p>Base abstract class for creating AppKit plugins</p>
16
16
  <h2 class="anchor anchorTargetStickyNavbar_scV4" id="type-parameters">Type Parameters<a href="#type-parameters" class="hash-link" aria-label="Direct link to Type Parameters" title="Direct link to Type Parameters" translate="no">​</a></h2>
17
17
  <table><thead><tr><th>Type Parameter</th><th>Default type</th></tr></thead><tbody><tr><td><code>TConfig</code> <em>extends</em> <a class="" href="/appkit/docs/api/appkit/Interface.BasePluginConfig"><code>BasePluginConfig</code></a></td><td><a class="" href="/appkit/docs/api/appkit/Interface.BasePluginConfig"><code>BasePluginConfig</code></a></td></tr></tbody></table>
@@ -68,19 +68,16 @@
68
68
  <hr>
69
69
  <h3 class="anchor anchorTargetStickyNavbar_scV4" id="asuser">asUser()<a href="#asuser" class="hash-link" aria-label="Direct link to asUser()" title="Direct link to asUser()" translate="no">​</a></h3>
70
70
  <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token function" style="color:rgb(0, 0, 255)">asUser</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain">req</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> Request</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">this</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div>
71
- <p>Execute operations using the user&#x27;s identity from the request.</p>
72
- <p>Returns a scoped instance of this plugin where all method calls
73
- will execute with the user&#x27;s Databricks credentials instead of
74
- the service principal.</p>
71
+ <p>Execute operations using the user&#x27;s identity from the request.
72
+ Returns a proxy of this plugin where all method calls execute
73
+ with the user&#x27;s Databricks credentials instead of the service principal.</p>
75
74
  <h4 class="anchor anchorTargetStickyNavbar_scV4" id="parameters-1">Parameters<a href="#parameters-1" class="hash-link" aria-label="Direct link to Parameters" title="Direct link to Parameters" translate="no">​</a></h4>
76
75
  <table><thead><tr><th>Parameter</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>req</code></td><td><code>Request</code></td><td>The Express request containing the user token in headers</td></tr></tbody></table>
77
76
  <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-2">Returns<a href="#returns-2" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
78
77
  <p><code>this</code></p>
79
- <p>A scoped plugin instance that executes as the user</p>
78
+ <p>A proxied plugin instance that executes as the user</p>
80
79
  <h4 class="anchor anchorTargetStickyNavbar_scV4" id="throws">Throws<a href="#throws" class="hash-link" aria-label="Direct link to Throws" title="Direct link to Throws" translate="no">​</a></h4>
81
80
  <p>Error if user token is not available in request headers</p>
82
- <h4 class="anchor anchorTargetStickyNavbar_scV4" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h4>
83
- <div class="language-typescript codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-typescript codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token comment" style="color:rgb(0, 128, 0)">// In route handler - execute query as the requesting user</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain">router</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">post</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token string" style="color:rgb(163, 21, 21)">&#x27;/users/me/query/:key&#x27;</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">async</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain">req</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">const</span><span class="token plain"> result </span><span class="token operator" style="color:rgb(0, 0, 0)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">await</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">this</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">asUser</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain">req</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">query</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain">req</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">params</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">json</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain">result</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token comment" style="color:rgb(0, 128, 0)">// Mixed execution in same handler</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain">router</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">post</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token string" style="color:rgb(163, 21, 21)">&#x27;/dashboard&#x27;</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">async</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain">req</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">[</span><span class="token plain">systemData</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> userData</span><span class="token punctuation" style="color:rgb(4, 81, 165)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">await</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(0, 112, 193)">Promise</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">all</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">this</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">getSystemStats</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(0, 128, 0)">// Service principal</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">this</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">asUser</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain">req</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">getUserPreferences</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(0, 128, 0)">// User context</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">]</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">json</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"> systemData</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> userData </span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><br></span></code></pre></div></div>
84
81
  <hr>
85
82
  <h3 class="anchor anchorTargetStickyNavbar_scV4" id="execute">execute()<a href="#execute" class="hash-link" aria-label="Direct link to execute()" title="Direct link to execute()" translate="no">​</a></h3>
86
83
  <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token keyword" style="color:rgb(0, 0, 255)">protected</span><span class="token plain"> </span><span class="token generic-function function" style="color:rgb(0, 0, 255)">execute</span><span class="token generic-function generic class-name operator" style="color:rgb(0, 0, 0)">&lt;</span><span class="token generic-function generic class-name constant" style="color:rgb(129, 31, 63)">T</span><span class="token generic-function generic class-name operator" style="color:rgb(0, 0, 0)">&gt;</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(0, 0, 255)">fn</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain">signal</span><span class="token operator" style="color:rgb(0, 0, 0)">?</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> AbortSignal</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(0, 112, 193)">Promise</span><span class="token operator" style="color:rgb(0, 0, 0)">&lt;</span><span class="token constant" style="color:rgb(129, 31, 63)">T</span><span class="token operator" style="color:rgb(0, 0, 0)">&gt;</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> options</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> PluginExecutionSettings</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#000000"><span class="token plain">userKey</span><span class="token operator" style="color:rgb(0, 0, 0)">?</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(0, 112, 193)">string</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(0, 112, 193)">Promise</span><span class="token operator" style="color:rgb(0, 0, 0)">&lt;</span><span class="token constant" style="color:rgb(129, 31, 63)">T</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">|</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">undefined</span><span class="token operator" style="color:rgb(0, 0, 0)">&gt;</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div>
@@ -100,27 +97,37 @@ the service principal.</p>
100
97
  <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-4">Returns<a href="#returns-4" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
101
98
  <p><code>Promise</code>&lt;<code>void</code>&gt;</p>
102
99
  <hr>
100
+ <h3 class="anchor anchorTargetStickyNavbar_scV4" id="exports">exports()<a href="#exports" class="hash-link" aria-label="Direct link to exports()" title="Direct link to exports()" translate="no">​</a></h3>
101
+ <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token function" style="color:rgb(0, 0, 255)">exports</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(0, 112, 193)">unknown</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div>
102
+ <p>Returns the public exports for this plugin.
103
+ Override this to define a custom public API.
104
+ By default, returns an empty object.</p>
105
+ <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-5">Returns<a href="#returns-5" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
106
+ <p><code>unknown</code></p>
107
+ <h4 class="anchor anchorTargetStickyNavbar_scV4" id="implementation-of-2">Implementation of<a href="#implementation-of-2" class="hash-link" aria-label="Direct link to Implementation of" title="Direct link to Implementation of" translate="no">​</a></h4>
108
+ <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token plain">BasePlugin</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">exports</span><br></span></code></pre></div></div>
109
+ <hr>
103
110
  <h3 class="anchor anchorTargetStickyNavbar_scV4" id="getendpoints">getEndpoints()<a href="#getendpoints" class="hash-link" aria-label="Direct link to getEndpoints()" title="Direct link to getEndpoints()" translate="no">​</a></h3>
104
111
  <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token function" style="color:rgb(0, 0, 255)">getEndpoints</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> PluginEndpointMap</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div>
105
- <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-5">Returns<a href="#returns-5" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
112
+ <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-6">Returns<a href="#returns-6" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
106
113
  <p><code>PluginEndpointMap</code></p>
107
- <h4 class="anchor anchorTargetStickyNavbar_scV4" id="implementation-of-2">Implementation of<a href="#implementation-of-2" class="hash-link" aria-label="Direct link to Implementation of" title="Direct link to Implementation of" translate="no">​</a></h4>
114
+ <h4 class="anchor anchorTargetStickyNavbar_scV4" id="implementation-of-3">Implementation of<a href="#implementation-of-3" class="hash-link" aria-label="Direct link to Implementation of" title="Direct link to Implementation of" translate="no">​</a></h4>
108
115
  <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token plain">BasePlugin</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">getEndpoints</span><br></span></code></pre></div></div>
109
116
  <hr>
110
117
  <h3 class="anchor anchorTargetStickyNavbar_scV4" id="injectroutes">injectRoutes()<a href="#injectroutes" class="hash-link" aria-label="Direct link to injectRoutes()" title="Direct link to injectRoutes()" translate="no">​</a></h3>
111
118
  <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token function" style="color:rgb(0, 0, 255)">injectRoutes</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain">_</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> Router</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">void</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div>
112
119
  <h4 class="anchor anchorTargetStickyNavbar_scV4" id="parameters-4">Parameters<a href="#parameters-4" class="hash-link" aria-label="Direct link to Parameters" title="Direct link to Parameters" translate="no">​</a></h4>
113
120
  <table><thead><tr><th>Parameter</th><th>Type</th></tr></thead><tbody><tr><td><code>_</code></td><td><code>Router</code></td></tr></tbody></table>
114
- <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-6">Returns<a href="#returns-6" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
121
+ <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-7">Returns<a href="#returns-7" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
115
122
  <p><code>void</code></p>
116
- <h4 class="anchor anchorTargetStickyNavbar_scV4" id="implementation-of-3">Implementation of<a href="#implementation-of-3" class="hash-link" aria-label="Direct link to Implementation of" title="Direct link to Implementation of" translate="no">​</a></h4>
123
+ <h4 class="anchor anchorTargetStickyNavbar_scV4" id="implementation-of-4">Implementation of<a href="#implementation-of-4" class="hash-link" aria-label="Direct link to Implementation of" title="Direct link to Implementation of" translate="no">​</a></h4>
117
124
  <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token plain">BasePlugin</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">injectRoutes</span><br></span></code></pre></div></div>
118
125
  <hr>
119
126
  <h3 class="anchor anchorTargetStickyNavbar_scV4" id="registerendpoint">registerEndpoint()<a href="#registerendpoint" class="hash-link" aria-label="Direct link to registerEndpoint()" title="Direct link to registerEndpoint()" translate="no">​</a></h3>
120
127
  <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token keyword" style="color:rgb(0, 0, 255)">protected</span><span class="token plain"> </span><span class="token function" style="color:rgb(0, 0, 255)">registerEndpoint</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain">name</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(0, 112, 193)">string</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> path</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(0, 112, 193)">string</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">void</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div>
121
128
  <h4 class="anchor anchorTargetStickyNavbar_scV4" id="parameters-5">Parameters<a href="#parameters-5" class="hash-link" aria-label="Direct link to Parameters" title="Direct link to Parameters" translate="no">​</a></h4>
122
129
  <table><thead><tr><th>Parameter</th><th>Type</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>string</code></td></tr><tr><td><code>path</code></td><td><code>string</code></td></tr></tbody></table>
123
- <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-7">Returns<a href="#returns-7" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
130
+ <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-8">Returns<a href="#returns-8" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
124
131
  <p><code>void</code></p>
125
132
  <hr>
126
133
  <h3 class="anchor anchorTargetStickyNavbar_scV4" id="route">route()<a href="#route" class="hash-link" aria-label="Direct link to route()" title="Direct link to route()" translate="no">​</a></h3>
@@ -129,21 +136,21 @@ the service principal.</p>
129
136
  <table><thead><tr><th>Type Parameter</th></tr></thead><tbody><tr><td><code>_TResponse</code></td></tr></tbody></table>
130
137
  <h4 class="anchor anchorTargetStickyNavbar_scV4" id="parameters-6">Parameters<a href="#parameters-6" class="hash-link" aria-label="Direct link to Parameters" title="Direct link to Parameters" translate="no">​</a></h4>
131
138
  <table><thead><tr><th>Parameter</th><th>Type</th></tr></thead><tbody><tr><td><code>router</code></td><td><code>Router</code></td></tr><tr><td><code>config</code></td><td><code>RouteConfig</code></td></tr></tbody></table>
132
- <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-8">Returns<a href="#returns-8" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
139
+ <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-9">Returns<a href="#returns-9" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
133
140
  <p><code>void</code></p>
134
141
  <hr>
135
142
  <h3 class="anchor anchorTargetStickyNavbar_scV4" id="setup">setup()<a href="#setup" class="hash-link" aria-label="Direct link to setup()" title="Direct link to setup()" translate="no">​</a></h3>
136
143
  <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token function" style="color:rgb(0, 0, 255)">setup</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(0, 112, 193)">Promise</span><span class="token operator" style="color:rgb(0, 0, 0)">&lt;</span><span class="token keyword" style="color:rgb(0, 0, 255)">void</span><span class="token operator" style="color:rgb(0, 0, 0)">&gt;</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div>
137
- <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-9">Returns<a href="#returns-9" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
144
+ <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-10">Returns<a href="#returns-10" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
138
145
  <p><code>Promise</code>&lt;<code>void</code>&gt;</p>
139
- <h4 class="anchor anchorTargetStickyNavbar_scV4" id="implementation-of-4">Implementation of<a href="#implementation-of-4" class="hash-link" aria-label="Direct link to Implementation of" title="Direct link to Implementation of" translate="no">​</a></h4>
146
+ <h4 class="anchor anchorTargetStickyNavbar_scV4" id="implementation-of-5">Implementation of<a href="#implementation-of-5" class="hash-link" aria-label="Direct link to Implementation of" title="Direct link to Implementation of" translate="no">​</a></h4>
140
147
  <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token plain">BasePlugin</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">setup</span><br></span></code></pre></div></div>
141
148
  <hr>
142
149
  <h3 class="anchor anchorTargetStickyNavbar_scV4" id="validateenv">validateEnv()<a href="#validateenv" class="hash-link" aria-label="Direct link to validateEnv()" title="Direct link to validateEnv()" translate="no">​</a></h3>
143
150
  <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token function" style="color:rgb(0, 0, 255)">validateEnv</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">void</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div>
144
- <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-10">Returns<a href="#returns-10" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
151
+ <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-11">Returns<a href="#returns-11" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
145
152
  <p><code>void</code></p>
146
- <h4 class="anchor anchorTargetStickyNavbar_scV4" id="implementation-of-5">Implementation of<a href="#implementation-of-5" class="hash-link" aria-label="Direct link to Implementation of" title="Direct link to Implementation of" translate="no">​</a></h4>
147
- <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token plain">BasePlugin</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">validateEnv</span><br></span></code></pre></div></div></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_Z6Q_"><a href="https://github.com/databricks/appkit/edit/main/docs/docs/api/appkit/Class.Plugin.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_kMm5" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_mnLK"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/appkit/docs/api/appkit/Class.InitializationError"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">InitializationError</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/appkit/docs/api/appkit/Class.ServerError"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">ServerError</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_xfIk thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#type-parameters" class="table-of-contents__link toc-highlight">Type Parameters</a></li><li><a href="#implements" class="table-of-contents__link toc-highlight">Implements</a></li><li><a href="#constructors" class="table-of-contents__link toc-highlight">Constructors</a><ul><li><a href="#constructor" class="table-of-contents__link toc-highlight">Constructor</a></li></ul></li><li><a href="#properties" class="table-of-contents__link toc-highlight">Properties</a><ul><li><a href="#app" class="table-of-contents__link toc-highlight">app</a></li><li><a href="#cache" class="table-of-contents__link toc-highlight">cache</a></li><li><a href="#config" class="table-of-contents__link toc-highlight">config</a></li><li><a href="#devfilereader" class="table-of-contents__link toc-highlight">devFileReader</a></li><li><a href="#envvars" class="table-of-contents__link toc-highlight">envVars</a></li><li><a href="#isready" class="table-of-contents__link toc-highlight">isReady</a></li><li><a href="#name" class="table-of-contents__link toc-highlight">name</a></li><li><a href="#streammanager" class="table-of-contents__link toc-highlight">streamManager</a></li><li><a href="#telemetry" class="table-of-contents__link toc-highlight">telemetry</a></li><li><a href="#phase" class="table-of-contents__link toc-highlight">phase</a></li></ul></li><li><a href="#methods" class="table-of-contents__link toc-highlight">Methods</a><ul><li><a href="#abortactiveoperations" class="table-of-contents__link toc-highlight">abortActiveOperations()</a></li><li><a href="#asuser" class="table-of-contents__link toc-highlight">asUser()</a></li><li><a href="#execute" class="table-of-contents__link toc-highlight">execute()</a></li><li><a href="#executestream" class="table-of-contents__link toc-highlight">executeStream()</a></li><li><a href="#getendpoints" class="table-of-contents__link toc-highlight">getEndpoints()</a></li><li><a href="#injectroutes" class="table-of-contents__link toc-highlight">injectRoutes()</a></li><li><a href="#registerendpoint" class="table-of-contents__link toc-highlight">registerEndpoint()</a></li><li><a href="#route" class="table-of-contents__link toc-highlight">route()</a></li><li><a href="#setup" class="table-of-contents__link toc-highlight">setup()</a></li><li><a href="#validateenv" class="table-of-contents__link toc-highlight">validateEnv()</a></li></ul></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/appkit/docs/">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/appkit/docs/api/">API reference</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/appkit/contributing">Contributing</a></li><li class="footer__item"><a href="https://github.com/databricks/appkit" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://docs.databricks.com/aws/en/dev-tools/databricks-apps/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Databricks Apps docs<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/databricks/cli" target="_blank" rel="noopener noreferrer" class="footer__link-item">Databricks CLI<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2026 Databricks, Inc.</div></div></div></footer></div>
153
+ <h4 class="anchor anchorTargetStickyNavbar_scV4" id="implementation-of-6">Implementation of<a href="#implementation-of-6" class="hash-link" aria-label="Direct link to Implementation of" title="Direct link to Implementation of" translate="no">​</a></h4>
154
+ <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token plain">BasePlugin</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">validateEnv</span><br></span></code></pre></div></div></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_Z6Q_"><a href="https://github.com/databricks/appkit/edit/main/docs/docs/api/appkit/Class.Plugin.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_kMm5" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_mnLK"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/appkit/docs/api/appkit/Class.InitializationError"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">InitializationError</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/appkit/docs/api/appkit/Class.ServerError"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">ServerError</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_xfIk thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#type-parameters" class="table-of-contents__link toc-highlight">Type Parameters</a></li><li><a href="#implements" class="table-of-contents__link toc-highlight">Implements</a></li><li><a href="#constructors" class="table-of-contents__link toc-highlight">Constructors</a><ul><li><a href="#constructor" class="table-of-contents__link toc-highlight">Constructor</a></li></ul></li><li><a href="#properties" class="table-of-contents__link toc-highlight">Properties</a><ul><li><a href="#app" class="table-of-contents__link toc-highlight">app</a></li><li><a href="#cache" class="table-of-contents__link toc-highlight">cache</a></li><li><a href="#config" class="table-of-contents__link toc-highlight">config</a></li><li><a href="#devfilereader" class="table-of-contents__link toc-highlight">devFileReader</a></li><li><a href="#envvars" class="table-of-contents__link toc-highlight">envVars</a></li><li><a href="#isready" class="table-of-contents__link toc-highlight">isReady</a></li><li><a href="#name" class="table-of-contents__link toc-highlight">name</a></li><li><a href="#streammanager" class="table-of-contents__link toc-highlight">streamManager</a></li><li><a href="#telemetry" class="table-of-contents__link toc-highlight">telemetry</a></li><li><a href="#phase" class="table-of-contents__link toc-highlight">phase</a></li></ul></li><li><a href="#methods" class="table-of-contents__link toc-highlight">Methods</a><ul><li><a href="#abortactiveoperations" class="table-of-contents__link toc-highlight">abortActiveOperations()</a></li><li><a href="#asuser" class="table-of-contents__link toc-highlight">asUser()</a></li><li><a href="#execute" class="table-of-contents__link toc-highlight">execute()</a></li><li><a href="#executestream" class="table-of-contents__link toc-highlight">executeStream()</a></li><li><a href="#exports" class="table-of-contents__link toc-highlight">exports()</a></li><li><a href="#getendpoints" class="table-of-contents__link toc-highlight">getEndpoints()</a></li><li><a href="#injectroutes" class="table-of-contents__link toc-highlight">injectRoutes()</a></li><li><a href="#registerendpoint" class="table-of-contents__link toc-highlight">registerEndpoint()</a></li><li><a href="#route" class="table-of-contents__link toc-highlight">route()</a></li><li><a href="#setup" class="table-of-contents__link toc-highlight">setup()</a></li><li><a href="#validateenv" class="table-of-contents__link toc-highlight">validateEnv()</a></li></ul></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/appkit/docs/">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/appkit/docs/api/">API reference</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/appkit/contributing">Contributing</a></li><li class="footer__item"><a href="https://github.com/databricks/appkit" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://docs.databricks.com/aws/en/dev-tools/databricks-apps/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Databricks Apps docs<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/databricks/cli" target="_blank" rel="noopener noreferrer" class="footer__link-item">Databricks CLI<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2026 Databricks, Inc.</div></div></div></footer></div>
148
155
  </body>
149
156
  </html>
@@ -157,9 +157,7 @@ asUser(req: Request): this;
157
157
 
158
158
  ```
159
159
 
160
- Execute operations using the user's identity from the request.
161
-
162
- Returns a scoped instance of this plugin where all method calls will execute with the user's Databricks credentials instead of the service principal.
160
+ Execute operations using the user's identity from the request. Returns a proxy of this plugin where all method calls execute with the user's Databricks credentials instead of the service principal.
163
161
 
164
162
  #### Parameters[​](#parameters-1 "Direct link to Parameters")
165
163
 
@@ -171,32 +169,12 @@ Returns a scoped instance of this plugin where all method calls will execute wit
171
169
 
172
170
  `this`
173
171
 
174
- A scoped plugin instance that executes as the user
172
+ A proxied plugin instance that executes as the user
175
173
 
176
174
  #### Throws[​](#throws "Direct link to Throws")
177
175
 
178
176
  Error if user token is not available in request headers
179
177
 
180
- #### Example[​](#example "Direct link to Example")
181
-
182
- ```typescript
183
- // In route handler - execute query as the requesting user
184
- router.post('/users/me/query/:key', async (req, res) => {
185
- const result = await this.asUser(req).query(req.params.key)
186
- res.json(result)
187
- })
188
-
189
- // Mixed execution in same handler
190
- router.post('/dashboard', async (req, res) => {
191
- const [systemData, userData] = await Promise.all([
192
- this.getSystemStats(), // Service principal
193
- this.asUser(req).getUserPreferences(), // User context
194
- ])
195
- res.json({ systemData, userData })
196
- })
197
-
198
- ```
199
-
200
178
  ***
201
179
 
202
180
  ### execute()[​](#execute "Direct link to execute()")
@@ -261,6 +239,28 @@ userKey?: string): Promise<void>;
261
239
 
262
240
  ***
263
241
 
242
+ ### exports()[​](#exports "Direct link to exports()")
243
+
244
+ ```ts
245
+ exports(): unknown;
246
+
247
+ ```
248
+
249
+ Returns the public exports for this plugin. Override this to define a custom public API. By default, returns an empty object.
250
+
251
+ #### Returns[​](#returns-5 "Direct link to Returns")
252
+
253
+ `unknown`
254
+
255
+ #### Implementation of[​](#implementation-of-2 "Direct link to Implementation of")
256
+
257
+ ```ts
258
+ BasePlugin.exports
259
+
260
+ ```
261
+
262
+ ***
263
+
264
264
  ### getEndpoints()[​](#getendpoints "Direct link to getEndpoints()")
265
265
 
266
266
  ```ts
@@ -268,11 +268,11 @@ getEndpoints(): PluginEndpointMap;
268
268
 
269
269
  ```
270
270
 
271
- #### Returns[​](#returns-5 "Direct link to Returns")
271
+ #### Returns[​](#returns-6 "Direct link to Returns")
272
272
 
273
273
  `PluginEndpointMap`
274
274
 
275
- #### Implementation of[​](#implementation-of-2 "Direct link to Implementation of")
275
+ #### Implementation of[​](#implementation-of-3 "Direct link to Implementation of")
276
276
 
277
277
  ```ts
278
278
  BasePlugin.getEndpoints
@@ -294,11 +294,11 @@ injectRoutes(_: Router): void;
294
294
  | --------- | -------- |
295
295
  | `_` | `Router` |
296
296
 
297
- #### Returns[​](#returns-6 "Direct link to Returns")
297
+ #### Returns[​](#returns-7 "Direct link to Returns")
298
298
 
299
299
  `void`
300
300
 
301
- #### Implementation of[​](#implementation-of-3 "Direct link to Implementation of")
301
+ #### Implementation of[​](#implementation-of-4 "Direct link to Implementation of")
302
302
 
303
303
  ```ts
304
304
  BasePlugin.injectRoutes
@@ -321,7 +321,7 @@ protected registerEndpoint(name: string, path: string): void;
321
321
  | `name` | `string` |
322
322
  | `path` | `string` |
323
323
 
324
- #### Returns[​](#returns-7 "Direct link to Returns")
324
+ #### Returns[​](#returns-8 "Direct link to Returns")
325
325
 
326
326
  `void`
327
327
 
@@ -347,7 +347,7 @@ protected route<_TResponse>(router: Router, config: RouteConfig): void;
347
347
  | `router` | `Router` |
348
348
  | `config` | `RouteConfig` |
349
349
 
350
- #### Returns[​](#returns-8 "Direct link to Returns")
350
+ #### Returns[​](#returns-9 "Direct link to Returns")
351
351
 
352
352
  `void`
353
353
 
@@ -360,11 +360,11 @@ setup(): Promise<void>;
360
360
 
361
361
  ```
362
362
 
363
- #### Returns[​](#returns-9 "Direct link to Returns")
363
+ #### Returns[​](#returns-10 "Direct link to Returns")
364
364
 
365
365
  `Promise`<`void`>
366
366
 
367
- #### Implementation of[​](#implementation-of-4 "Direct link to Implementation of")
367
+ #### Implementation of[​](#implementation-of-5 "Direct link to Implementation of")
368
368
 
369
369
  ```ts
370
370
  BasePlugin.setup
@@ -380,11 +380,11 @@ validateEnv(): void;
380
380
 
381
381
  ```
382
382
 
383
- #### Returns[​](#returns-10 "Direct link to Returns")
383
+ #### Returns[​](#returns-11 "Direct link to Returns")
384
384
 
385
385
  `void`
386
386
 
387
- #### Implementation of[​](#implementation-of-5 "Direct link to Implementation of")
387
+ #### Implementation of[​](#implementation-of-6 "Direct link to Implementation of")
388
388
 
389
389
  ```ts
390
390
  BasePlugin.validateEnv