@termix-ssh/plugin-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/README.md +52 -0
  2. package/cli/commands/build.mjs +246 -0
  3. package/cli/commands/migrations.mjs +248 -0
  4. package/cli/commands/pack.mjs +42 -0
  5. package/cli/commands/sign.mjs +83 -0
  6. package/cli/commands/test.mjs +33 -0
  7. package/cli/commands/validate.mjs +215 -0
  8. package/cli/index.mjs +65 -0
  9. package/cli/lib/changelog.mjs +126 -0
  10. package/cli/lib/externals.mjs +46 -0
  11. package/cli/lib/plugin-dir.mjs +29 -0
  12. package/cli/lib/signing.mjs +86 -0
  13. package/cli/lib/static-url-imports.mjs +54 -0
  14. package/cli/lib/tmxplug.mjs +106 -0
  15. package/cli/patches/guacamole-common-js-flush.cjs +76 -0
  16. package/cli/patches/xterm-android-ime.cjs +130 -0
  17. package/client.d.ts +13 -0
  18. package/dist/backend.d.ts +1777 -0
  19. package/dist/backend.js +84 -0
  20. package/dist/capabilities.d.ts +38 -0
  21. package/dist/capabilities.js +71 -0
  22. package/dist/db.d.ts +112 -0
  23. package/dist/db.js +189 -0
  24. package/dist/ddl.d.ts +76 -0
  25. package/dist/ddl.js +678 -0
  26. package/dist/desktop.d.ts +346 -0
  27. package/dist/desktop.js +5 -0
  28. package/dist/frontend.d.ts +1206 -0
  29. package/dist/frontend.js +388 -0
  30. package/dist/host/chunk-F3SDZDDG.js +6017 -0
  31. package/dist/host/chunk-XGWE7BTJ.js +90 -0
  32. package/dist/host/chunk-XH5NXL6Y.js +56314 -0
  33. package/dist/host/chunk-YC2MAKSP.js +14 -0
  34. package/dist/host/linked-server-FZGWQW32.js +12 -0
  35. package/dist/host/rbac-api-6KDMBVDZ.js +52 -0
  36. package/dist/host/testing-host.js +414 -0
  37. package/dist/host/theme.css +91 -0
  38. package/dist/host/types/src/types/auth-protocols.d.ts +10 -0
  39. package/dist/host/types/src/types/connection-log.d.ts +13 -0
  40. package/dist/host/types/src/types/credential-sidebar-preferences.d.ts +38 -0
  41. package/dist/host/types/src/types/host-defaults.d.ts +60 -0
  42. package/dist/host/types/src/types/host-sidebar-preferences.d.ts +55 -0
  43. package/dist/host/types/src/types/index.d.ts +298 -0
  44. package/dist/host/types/src/types/keybindings.d.ts +27 -0
  45. package/dist/host/types/src/types/ui-preferences.d.ts +102 -0
  46. package/dist/host/types/src/types/ui-types.d.ts +260 -0
  47. package/dist/host/types/src/ui/api/admin-user-data-api.d.ts +11 -0
  48. package/dist/host/types/src/ui/api/auth-methods-api.d.ts +63 -0
  49. package/dist/host/types/src/ui/api/credential-sidebar-preferences-api.d.ts +3 -0
  50. package/dist/host/types/src/ui/api/credentials-api.d.ts +56 -0
  51. package/dist/host/types/src/ui/api/dashboard-api.d.ts +23 -0
  52. package/dist/host/types/src/ui/api/external-account-api.d.ts +8 -0
  53. package/dist/host/types/src/ui/api/host-sidebar-preferences-api.d.ts +3 -0
  54. package/dist/host/types/src/ui/api/host-status-api.d.ts +11 -0
  55. package/dist/host/types/src/ui/api/open-tabs-api.d.ts +74 -0
  56. package/dist/host/types/src/ui/api/plugins-api.d.ts +128 -0
  57. package/dist/host/types/src/ui/api/rbac-api.d.ts +167 -0
  58. package/dist/host/types/src/ui/api/settings-api.d.ts +22 -0
  59. package/dist/host/types/src/ui/api/ssh-host-management-api.d.ts +65 -0
  60. package/dist/host/types/src/ui/api/sync-api.d.ts +93 -0
  61. package/dist/host/types/src/ui/api/system-status-api.d.ts +49 -0
  62. package/dist/host/types/src/ui/api/ui-preferences-api.d.ts +8 -0
  63. package/dist/host/types/src/ui/api/user-management-api.d.ts +80 -0
  64. package/dist/host/types/src/ui/auth/Auth.d.ts +12 -0
  65. package/dist/host/types/src/ui/auth/auth-bits.d.ts +11 -0
  66. package/dist/host/types/src/ui/auth/silent-signin.d.ts +2 -0
  67. package/dist/host/types/src/ui/components/FullScreenAppWrapper.d.ts +9 -0
  68. package/dist/host/types/src/ui/components/alert-dialog.d.ts +14 -0
  69. package/dist/host/types/src/ui/components/alert.d.ts +9 -0
  70. package/dist/host/types/src/ui/components/badge.d.ts +9 -0
  71. package/dist/host/types/src/ui/components/button.d.ts +13 -0
  72. package/dist/host/types/src/ui/components/card-grid/CardGridCanvas.d.ts +22 -0
  73. package/dist/host/types/src/ui/components/card-grid/layout-utils.d.ts +26 -0
  74. package/dist/host/types/src/ui/components/card-grid/types.d.ts +29 -0
  75. package/dist/host/types/src/ui/components/card-masonry.d.ts +16 -0
  76. package/dist/host/types/src/ui/components/card.d.ts +11 -0
  77. package/dist/host/types/src/ui/components/charts/BarSeries.d.ts +16 -0
  78. package/dist/host/types/src/ui/components/charts/LineChart.d.ts +17 -0
  79. package/dist/host/types/src/ui/components/charts/RadialGauge.d.ts +18 -0
  80. package/dist/host/types/src/ui/components/charts/Sparkline.d.ts +22 -0
  81. package/dist/host/types/src/ui/components/charts/StatRow.d.ts +15 -0
  82. package/dist/host/types/src/ui/components/charts/geometry.d.ts +20 -0
  83. package/dist/host/types/src/ui/components/charts/index.d.ts +4 -0
  84. package/dist/host/types/src/ui/components/checkbox.d.ts +4 -0
  85. package/dist/host/types/src/ui/components/connection/ConnectionGate.d.ts +56 -0
  86. package/dist/host/types/src/ui/components/connection/ConnectionLogPanel.d.ts +9 -0
  87. package/dist/host/types/src/ui/components/connection/ConnectionScreen.d.ts +34 -0
  88. package/dist/host/types/src/ui/components/connection/connection-status.d.ts +1 -0
  89. package/dist/host/types/src/ui/components/data-view.d.ts +32 -0
  90. package/dist/host/types/src/ui/components/dialog.d.ts +17 -0
  91. package/dist/host/types/src/ui/components/dropdown-menu.d.ts +29 -0
  92. package/dist/host/types/src/ui/components/empty-state.d.ts +19 -0
  93. package/dist/host/types/src/ui/components/form-fields.d.ts +115 -0
  94. package/dist/host/types/src/ui/components/input.d.ts +3 -0
  95. package/dist/host/types/src/ui/components/kbd.d.ts +12 -0
  96. package/dist/host/types/src/ui/components/label.d.ts +4 -0
  97. package/dist/host/types/src/ui/components/manager-card.d.ts +25 -0
  98. package/dist/host/types/src/ui/components/meter.d.ts +14 -0
  99. package/dist/host/types/src/ui/components/metric-card.d.ts +18 -0
  100. package/dist/host/types/src/ui/components/panel-layout.d.ts +83 -0
  101. package/dist/host/types/src/ui/components/password-input.d.ts +4 -0
  102. package/dist/host/types/src/ui/components/popover.d.ts +7 -0
  103. package/dist/host/types/src/ui/components/scroll-area.d.ts +5 -0
  104. package/dist/host/types/src/ui/components/section-card.d.ts +29 -0
  105. package/dist/host/types/src/ui/components/select.d.ts +15 -0
  106. package/dist/host/types/src/ui/components/select2.d.ts +8 -0
  107. package/dist/host/types/src/ui/components/separator.d.ts +4 -0
  108. package/dist/host/types/src/ui/components/sheet.d.ts +14 -0
  109. package/dist/host/types/src/ui/components/sidebar.d.ts +69 -0
  110. package/dist/host/types/src/ui/components/skeleton.d.ts +2 -0
  111. package/dist/host/types/src/ui/components/slider.d.ts +4 -0
  112. package/dist/host/types/src/ui/components/sonner.d.ts +4 -0
  113. package/dist/host/types/src/ui/components/surface/prompt-styles.d.ts +4 -0
  114. package/dist/host/types/src/ui/components/surface/surface-scope.d.ts +79 -0
  115. package/dist/host/types/src/ui/components/switch.d.ts +4 -0
  116. package/dist/host/types/src/ui/components/tab-strip.d.ts +19 -0
  117. package/dist/host/types/src/ui/components/tabs.d.ts +7 -0
  118. package/dist/host/types/src/ui/components/textarea.d.ts +4 -0
  119. package/dist/host/types/src/ui/components/theme-provider.d.ts +14 -0
  120. package/dist/host/types/src/ui/components/tooltip.d.ts +7 -0
  121. package/dist/host/types/src/ui/contexts/BrandingContext.d.ts +15 -0
  122. package/dist/host/types/src/ui/contexts/UiPreferencesContext.d.ts +38 -0
  123. package/dist/host/types/src/ui/contexts/branding-document.d.ts +10 -0
  124. package/dist/host/types/src/ui/dashboard/dashboard-cards-registry.d.ts +30 -0
  125. package/dist/host/types/src/ui/hooks/use-action-slot.d.ts +10 -0
  126. package/dist/host/types/src/ui/hooks/use-adaptive-polling.d.ts +5 -0
  127. package/dist/host/types/src/ui/hooks/use-mobile.d.ts +1 -0
  128. package/dist/host/types/src/ui/hooks/use-permissions.d.ts +29 -0
  129. package/dist/host/types/src/ui/hooks/use-status-color-scheme.d.ts +12 -0
  130. package/dist/host/types/src/ui/hooks/use-sync-status.d.ts +4 -0
  131. package/dist/host/types/src/ui/hooks/useSshAuthProviders.d.ts +17 -0
  132. package/dist/host/types/src/ui/i18n/i18n.d.ts +52 -0
  133. package/dist/host/types/src/ui/lib/ServerStatusContext.d.ts +33 -0
  134. package/dist/host/types/src/ui/lib/adaptive-polling.d.ts +29 -0
  135. package/dist/host/types/src/ui/lib/adaptive-resource-budget.d.ts +39 -0
  136. package/dist/host/types/src/ui/lib/app-keyboard-shortcuts.d.ts +8 -0
  137. package/dist/host/types/src/ui/lib/base-path.d.ts +1 -0
  138. package/dist/host/types/src/ui/lib/clipboard-provider.d.ts +9 -0
  139. package/dist/host/types/src/ui/lib/clipboard.d.ts +20 -0
  140. package/dist/host/types/src/ui/lib/connection-origin.d.ts +47 -0
  141. package/dist/host/types/src/ui/lib/db-health-monitor.d.ts +34 -0
  142. package/dist/host/types/src/ui/lib/device-id.d.ts +1 -0
  143. package/dist/host/types/src/ui/lib/electron.d.ts +1 -0
  144. package/dist/host/types/src/ui/lib/embedded-server-status.d.ts +15 -0
  145. package/dist/host/types/src/ui/lib/error-message.d.ts +9 -0
  146. package/dist/host/types/src/ui/lib/frontend-logger.d.ts +67 -0
  147. package/dist/host/types/src/ui/lib/global-shortcut-handler.d.ts +3 -0
  148. package/dist/host/types/src/ui/lib/host-defaults-context.d.ts +48 -0
  149. package/dist/host/types/src/ui/lib/hosts-request-cache.d.ts +9 -0
  150. package/dist/host/types/src/ui/lib/keybinding-match.d.ts +3 -0
  151. package/dist/host/types/src/ui/lib/linked-server.d.ts +10 -0
  152. package/dist/host/types/src/ui/lib/local-adaptive-engine.d.ts +40 -0
  153. package/dist/host/types/src/ui/lib/permissions.d.ts +16 -0
  154. package/dist/host/types/src/ui/lib/plugin-i18n.d.ts +11 -0
  155. package/dist/host/types/src/ui/lib/plugin-icon.d.ts +11 -0
  156. package/dist/host/types/src/ui/lib/plugin-transport.d.ts +50 -0
  157. package/dist/host/types/src/ui/lib/registry.d.ts +29 -0
  158. package/dist/host/types/src/ui/lib/rem.d.ts +7 -0
  159. package/dist/host/types/src/ui/lib/remote-server-api.d.ts +11 -0
  160. package/dist/host/types/src/ui/lib/server-status-store.d.ts +37 -0
  161. package/dist/host/types/src/ui/lib/sync-events.d.ts +2 -0
  162. package/dist/host/types/src/ui/lib/sync-status.d.ts +6 -0
  163. package/dist/host/types/src/ui/lib/tab-jump-hotkey.d.ts +4 -0
  164. package/dist/host/types/src/ui/lib/theme.d.ts +21 -0
  165. package/dist/host/types/src/ui/lib/ttl-request-cache.d.ts +10 -0
  166. package/dist/host/types/src/ui/lib/usage-color.d.ts +5 -0
  167. package/dist/host/types/src/ui/lib/utils.d.ts +2 -0
  168. package/dist/host/types/src/ui/lib/visible-interval.d.ts +5 -0
  169. package/dist/host/types/src/ui/lib/widget-title.d.ts +8 -0
  170. package/dist/host/types/src/ui/lib/ws-auth.d.ts +1 -0
  171. package/dist/host/types/src/ui/main-axios.d.ts +170 -0
  172. package/dist/host/types/src/ui/plugin-host/PluginViewPlaceholder.d.ts +13 -0
  173. package/dist/host/types/src/ui/plugin-host/app.d.ts +18 -0
  174. package/dist/host/types/src/ui/plugin-host/auth-registry.d.ts +50 -0
  175. package/dist/host/types/src/ui/plugin-host/bridge.d.ts +26 -0
  176. package/dist/host/types/src/ui/plugin-host/component-registry.d.ts +24 -0
  177. package/dist/host/types/src/ui/plugin-host/desktop.d.ts +7 -0
  178. package/dist/host/types/src/ui/plugin-host/extension-registry.d.ts +16 -0
  179. package/dist/host/types/src/ui/plugin-host/host-scope.d.ts +26 -0
  180. package/dist/host/types/src/ui/plugin-host/loader.d.ts +52 -0
  181. package/dist/host/types/src/ui/plugin-host/plugin-store.d.ts +40 -0
  182. package/dist/host/types/src/ui/plugin-host/scope.d.ts +20 -0
  183. package/dist/host/types/src/ui/plugin-host/sdk-ui.d.ts +99 -0
  184. package/dist/host/types/src/ui/plugin-host/shell-bridge.d.ts +67 -0
  185. package/dist/host/types/src/ui/plugin-host/view-ownership.d.ts +31 -0
  186. package/dist/host/types/src/ui/settings/HostPluginSections.d.ts +31 -0
  187. package/dist/host/types/src/ui/settings/SettingsFields.d.ts +22 -0
  188. package/dist/host/types/src/ui/settings/host-feature-tabs.d.ts +11 -0
  189. package/dist/host/types/src/ui/settings/settings-components.d.ts +32 -0
  190. package/dist/host/types/src/ui/settings/settings-fields-util.d.ts +11 -0
  191. package/dist/host/types/src/ui/shell/ActionSlot.d.ts +41 -0
  192. package/dist/host/types/src/ui/shell/TabContext.d.ts +30 -0
  193. package/dist/host/types/src/ui/shell/action-registry.d.ts +99 -0
  194. package/dist/host/types/src/ui/shell/keybinding-registry.d.ts +62 -0
  195. package/dist/host/types/src/ui/shell/palette-registry.d.ts +55 -0
  196. package/dist/host/types/src/ui/shell/panel-registry.d.ts +24 -0
  197. package/dist/host/types/src/ui/shell/tab-registry.d.ts +92 -0
  198. package/dist/host/types/src/ui/sidebar/HostManagerTabs.d.ts +65 -0
  199. package/dist/host/types/src/ui/sidebar/host-contributions.d.ts +72 -0
  200. package/dist/host/types/src/ui/sidebar/host-defaults/catalog.d.ts +17 -0
  201. package/dist/host/types/src/ui/sidebar/host-protocols.d.ts +49 -0
  202. package/dist/host/types/src/ui/sidebar/quick-connect-host.d.ts +21 -0
  203. package/dist/host/types/src/ui/sidebar/rail-items.d.ts +103 -0
  204. package/dist/host/types/src/ui/ssh/connection-log/ConnectionLogContext.d.ts +17 -0
  205. package/dist/host/types/src/ui/ssh/dialogs/BrowserSignInDialog.d.ts +18 -0
  206. package/dist/host/types/src/ui/ssh/dialogs/HostKeyVerificationDialog.d.ts +17 -0
  207. package/dist/host/types/src/ui/ssh/dialogs/PassphraseDialog.d.ts +15 -0
  208. package/dist/host/types/src/ui/ssh/dialogs/SSHAuthDialog.d.ts +20 -0
  209. package/dist/host/types/src/ui/ssh/dialogs/TOTPDialog.d.ts +13 -0
  210. package/dist/host/ui.d.ts +1 -0
  211. package/dist/host/ui.js +31754 -0
  212. package/dist/host/use-permissions-NULZL43J.js +18 -0
  213. package/dist/host-commands.d.ts +89 -0
  214. package/dist/host-commands.js +387 -0
  215. package/dist/manifest.d.ts +461 -0
  216. package/dist/manifest.js +1499 -0
  217. package/dist/settings.d.ts +43 -0
  218. package/dist/settings.js +168 -0
  219. package/dist/ssh-certs.d.ts +25 -0
  220. package/dist/ssh-certs.js +234 -0
  221. package/dist/ssh-options.d.ts +23 -0
  222. package/dist/ssh-options.js +1 -0
  223. package/dist/table-builder.d.ts +26 -0
  224. package/dist/table-builder.js +87 -0
  225. package/dist/testing/safe-ports.d.ts +10 -0
  226. package/dist/testing/safe-ports.js +59 -0
  227. package/dist/testing/setup.d.ts +7 -0
  228. package/dist/testing/setup.js +146 -0
  229. package/dist/testing.d.ts +537 -0
  230. package/dist/testing.js +1451 -0
  231. package/dist/vitest-preset.d.ts +54 -0
  232. package/dist/vitest-preset.js +96 -0
  233. package/package.json +143 -0
  234. package/schema/changelog.schema.json +67 -0
  235. package/schema/manifest.schema.json +1160 -0
  236. package/tsconfig.plugin.json +31 -0
@@ -0,0 +1,260 @@
1
+ import type { HostProtocolAuthSummary, HostSshOptions, HostTerminalConfig, SSHAuthType } from "./index.js";
2
+ import type { HostAuthOverrides } from "./auth-protocols.js";
3
+ import type { DefaultOverrides } from "./host-defaults.js";
4
+ import type { QuickConnectLogin } from "@termix-ssh/plugin-sdk/frontend";
5
+ export type Host = {
6
+ id: string;
7
+ name: string;
8
+ username: string;
9
+ ip: string;
10
+ port: number;
11
+ folder: string;
12
+ /** Sub-host nesting: the id of the host this one is organized under, if any. */
13
+ parentHostId?: string | null;
14
+ /**
15
+ * Sub-hosts nested under this host, populated client-side by buildHostTree.
16
+ * A host with children still renders and behaves as a normal, connectable
17
+ * HostItem row -- this only adds an expand/collapse chevron for its nested
18
+ * children, it never wraps the host in a synthetic folder node.
19
+ */
20
+ childHosts?: Host[];
21
+ online: boolean;
22
+ status?: "online" | "offline" | "unknown";
23
+ cpu: number | null;
24
+ ram: number | null;
25
+ lastAccess: string;
26
+ tags?: string[];
27
+ authType: SSHAuthType;
28
+ shareSshAuth?: boolean;
29
+ credentialId?: string;
30
+ overrideCredentialUsername?: boolean;
31
+ password?: string;
32
+ hasPassword?: boolean;
33
+ sudoPassword?: string;
34
+ hasSudoPassword?: boolean;
35
+ hasKey?: boolean;
36
+ hasKeyPassword?: boolean;
37
+ key?: string;
38
+ keyPassword?: string;
39
+ keyType?: string;
40
+ notes?: string;
41
+ pin?: boolean;
42
+ /** Quick connect only: core can save this host as-is. */
43
+ quickConnectSavable?: boolean;
44
+ /** A Quick Connect host's plugin protocol login, never saved. */
45
+ quickConnectLogin?: QuickConnectLogin;
46
+ sortOrder?: number | null;
47
+ /** Stable identity across a desktop/server sync pair. */
48
+ syncId?: string | null;
49
+ terminalConfig?: HostTerminalConfig;
50
+ sshOptions?: HostSshOptions;
51
+ useSocks5?: boolean;
52
+ socks5Host?: string;
53
+ socks5Port?: number;
54
+ connectionOrigin?: "local" | "remote" | null;
55
+ socks5Username?: string;
56
+ socks5Password?: string;
57
+ socks5ProxyChain?: {
58
+ host: string;
59
+ port: number;
60
+ type: 4 | 5 | "http" | "socks4" | "socks5";
61
+ username?: string;
62
+ password?: string;
63
+ }[];
64
+ /** hostid is a legacy lowercase spelling still present in stored rows. */
65
+ jumpHosts?: {
66
+ hostId: string;
67
+ hostid?: string;
68
+ }[];
69
+ portKnockSequence?: {
70
+ port: number;
71
+ protocol: "tcp" | "udp";
72
+ delay: number;
73
+ }[];
74
+ statusCheckEnabled?: boolean;
75
+ /** Seconds between status checks; null follows the global setting. */
76
+ statusCheckInterval?: number | null;
77
+ enableSsh: boolean;
78
+ sshPort: number;
79
+ /** Each plugin protocol's login, secrets left out. */
80
+ protocolAuth?: Record<string, HostProtocolAuthSummary>;
81
+ /** Host-scope plugin settings, keyed by plugin id. Secrets are redacted. */
82
+ pluginSettings?: Record<string, Record<string, unknown>>;
83
+ /** Host default keys this host sets itself, per namespace. */
84
+ defaultOverrides?: DefaultOverrides | null;
85
+ forceKeyboardInteractive?: boolean;
86
+ isShared?: boolean;
87
+ authOverrides?: HostAuthOverrides<string>;
88
+ permissionLevel?: SharePermissionLevel;
89
+ sharedExpiresAt?: string;
90
+ ownerUsername?: string;
91
+ /**
92
+ * A read-only copy of a host shared with the account this desktop is
93
+ * linked to. It arrives through sync and is managed on the server.
94
+ */
95
+ sharedCopy?: boolean;
96
+ /** Desktop only: kept on this device, never synced to the server. */
97
+ localOnly?: boolean;
98
+ };
99
+ export type SharePermissionLevel = "connect" | "view" | "edit" | "manage";
100
+ export type Credential = {
101
+ id: string;
102
+ name: string;
103
+ username: string;
104
+ type: "password" | "key";
105
+ value?: string;
106
+ password?: string;
107
+ publicKey?: string;
108
+ passphrase?: string;
109
+ description?: string;
110
+ folder?: string;
111
+ tags?: string[];
112
+ pin?: boolean;
113
+ sortOrder?: number | null;
114
+ certPublicKey?: string;
115
+ /** Set when someone else owns this credential and shared it with you. */
116
+ isShared?: boolean;
117
+ ownerUsername?: string | null;
118
+ permissionLevel?: "use" | "manage";
119
+ };
120
+ export type HostFolder = {
121
+ name: string;
122
+ children: (Host | HostFolder)[];
123
+ path?: string;
124
+ color?: string;
125
+ icon?: string;
126
+ credentialId?: number | null;
127
+ sortOrder?: number | null;
128
+ localOnly?: boolean;
129
+ };
130
+ /** Core's own tab types. Plugins register theirs at runtime. */
131
+ type KnownTabType = "dashboard" | "host-manager" | "settings" | "user-profile" | "admin-settings" | "split-screen";
132
+ /**
133
+ * TabType covers every built-in tab plus any plugin-contributed tab id.
134
+ * `string & {}` (rather than plain `string`) keeps IDE autocomplete
135
+ * suggesting the known members while still accepting an arbitrary id, since
136
+ * a bare `string` would widen every literal and kill autocomplete entirely.
137
+ * Plugin tab ids are resolved at render time via the tab-component registry
138
+ * in tabUtils.tsx, not through this type.
139
+ */
140
+ export type TabType = KnownTabType | (string & {});
141
+ export type Tab = {
142
+ id: string;
143
+ instanceId: string;
144
+ type: TabType;
145
+ label: string;
146
+ customLabel?: string;
147
+ host?: Host;
148
+ openedAt: number;
149
+ restoredSessionId?: string | null;
150
+ /** Payload owned by the tab's plugin, e.g. which fleet or endpoint it shows. */
151
+ data?: Record<string, unknown>;
152
+ /** Present only on a split-screen container tab. Pane tab ids reference live child tabs. */
153
+ split?: SplitState;
154
+ /** Hides this session from the top-level tab bar while it belongs to a split tab. */
155
+ parentSplitTabId?: string;
156
+ terminalRef?: import("react").RefObject<{
157
+ disconnect?: () => void;
158
+ isConnected?: () => boolean;
159
+ sendInput?: (data: string) => void;
160
+ subscribeOutput?: (listener: (data: string) => void) => () => void;
161
+ paste?: (text: string) => void;
162
+ reconnect?: () => void;
163
+ /** Start a manual reconnect only when disconnected and idle; return whether it started. */
164
+ reconnectIfDisconnected?: () => boolean;
165
+ fit?: () => void;
166
+ notifyResize?: () => void;
167
+ refresh?: () => void;
168
+ getApplicationCursorKeysMode?: () => boolean;
169
+ focus?: () => void;
170
+ /** Asked before the tab closes; resolve false to keep it open. */
171
+ confirmClose?: () => boolean | Promise<boolean>;
172
+ } | null>;
173
+ };
174
+ /** Core cards are named here; plugin cards add their own ids. */
175
+ export type DashboardCardId = "stats_bar" | "counters_bar" | "quick_actions" | "host_status" | "recent_activity" | (string & {});
176
+ export type DashboardCardConfig = {
177
+ id: DashboardCardId;
178
+ label: string;
179
+ description: string;
180
+ defaultEnabled: boolean;
181
+ };
182
+ export type AdminSection = "general" | "users" | "sessions" | "roles" | "host-defaults" | "branding" | "database" | "api-keys" | "audit-log" | "ssl";
183
+ export type ThemeId = "dark" | "light" | "system" | "dracula" | "catppuccin" | "nord" | "solarized" | "tokyo-night" | "one-dark" | "gruvbox";
184
+ export type FontSizeId = "xs" | "sm" | "md" | "lg" | "xl";
185
+ export type UiFontId = "jetbrains-mono" | "system-sans" | "fira-code" | "source-code-pro" | "caskaydia-cove";
186
+ /** A tools panel view: a rail panel a plugin registered. */
187
+ export type ToolsTab = string & {};
188
+ /** "row" lays children side by side, "column" stacks them. */
189
+ export type SplitDirection = "row" | "column";
190
+ export interface PaneNode {
191
+ kind: "pane";
192
+ id: string;
193
+ tabId: string | null;
194
+ }
195
+ export interface SplitNode {
196
+ kind: "split";
197
+ id: string;
198
+ direction: SplitDirection;
199
+ children: LayoutNode[];
200
+ /** Percent of the parent per child, summing to 100. */
201
+ sizes: number[];
202
+ }
203
+ export type LayoutNode = PaneNode | SplitNode;
204
+ /** The layout of one split tab. */
205
+ export interface SplitState {
206
+ root: LayoutNode;
207
+ focusedPaneId: string;
208
+ /** A pane shown alone, filling the split, until unzoomed. */
209
+ zoomedPaneId?: string | null;
210
+ }
211
+ export type WorkspaceTabSnapshot = {
212
+ /** Stable key within the saved tab list, not the live Tab.id (which is regenerated on every open). */
213
+ slotId: string;
214
+ type: TabType;
215
+ /** Set for host-bound tab types, resolved by Host.syncId on apply. */
216
+ hostSyncId?: string | null;
217
+ /** Denormalized snapshot for display and graceful-skip messaging if the host is later deleted. */
218
+ hostNameSnapshot?: string | null;
219
+ label: string;
220
+ customLabel?: string;
221
+ /** Read from payloads saved before tabs carried `data`. */
222
+ initialFilePath?: string;
223
+ initialPath?: string;
224
+ fleetId?: number;
225
+ /** The tab's plugin payload. */
226
+ data?: Record<string, unknown>;
227
+ };
228
+ /** One dock's arrangement. `view` is a RailView, or null when the dock is closed. */
229
+ type WorkspaceDockState = {
230
+ view: string | null;
231
+ open: boolean;
232
+ width: number;
233
+ };
234
+ /** One split tab in a saved layout, its pane tab ids swapped for slotIds. */
235
+ export type WorkspaceSplitSnapshot = {
236
+ slotId: string;
237
+ label: string;
238
+ root: LayoutNode;
239
+ focusedPaneId: string;
240
+ };
241
+ export type WorkspacePayload = {
242
+ version: 1 | 2;
243
+ tabs: WorkspaceTabSnapshot[];
244
+ /** A tab's slotId, or a split's. */
245
+ activeSlotId: string | null;
246
+ /** Every split tab. Version 2 and later. */
247
+ splits?: WorkspaceSplitSnapshot[];
248
+ /** Version 1: the one split, as a fixed mode. */
249
+ splitMode?: string;
250
+ /** Version 1: indexed by the mode's pane order, holding slotIds. */
251
+ paneTabIds?: (string | null)[];
252
+ rowSizes?: number[];
253
+ rowColSizes?: number[][];
254
+ /** Sidebar arrangement, so a workspace restores the whole layout and not just tabs. */
255
+ sidebar?: {
256
+ left: WorkspaceDockState;
257
+ right: WorkspaceDockState;
258
+ };
259
+ };
260
+ export {};
@@ -0,0 +1,11 @@
1
+ import type { SSHHost, SSHHostData } from "../../types/index";
2
+ export declare function adminGetUserHosts(targetUserId: string): Promise<SSHHost[]>;
3
+ export declare function adminCreateUserHost(targetUserId: string, hostData: SSHHostData): Promise<SSHHost>;
4
+ export declare function adminUpdateUserHost(targetUserId: string, hostId: number, hostData: SSHHostData): Promise<SSHHost>;
5
+ export declare function adminDeleteUserHost(targetUserId: string, hostId: number): Promise<Record<string, unknown>>;
6
+ export declare function adminGetHostPassword(targetUserId: string, hostId: number, field?: "password" | "sudoPassword" | "key" | "keyPassword"): Promise<string | null>;
7
+ export declare function adminGetUserCredentials(targetUserId: string): Promise<Record<string, unknown>[] | Record<string, unknown>>;
8
+ export declare function adminGetUserCredentialDetails(targetUserId: string, credentialId: number): Promise<Record<string, unknown>>;
9
+ export declare function adminCreateUserCredential(targetUserId: string, credentialData: Record<string, unknown>): Promise<Record<string, unknown>>;
10
+ export declare function adminUpdateUserCredential(targetUserId: string, credentialId: number, credentialData: Record<string, unknown>): Promise<Record<string, unknown>>;
11
+ export declare function adminDeleteUserCredential(targetUserId: string, credentialId: number): Promise<Record<string, unknown>>;
@@ -0,0 +1,63 @@
1
+ import { type AuthResponse } from "../main-axios";
2
+ export interface PublicLoginMethod {
3
+ id: string;
4
+ pluginId: string;
5
+ kind: "redirect" | "form";
6
+ labelKey: string;
7
+ icon?: string;
8
+ instances: Array<{
9
+ id: string;
10
+ label: string;
11
+ autoStart?: boolean;
12
+ }>;
13
+ }
14
+ export interface SecondFactorRef {
15
+ id: string;
16
+ pluginId: string;
17
+ labelKey: string;
18
+ }
19
+ export type LoginResponse = AuthResponse & {
20
+ requires_second_factor?: boolean;
21
+ second_factors?: SecondFactorRef[];
22
+ userId?: string;
23
+ };
24
+ /** Enabled login methods for the login screen. Public. */
25
+ export declare function getLoginMethods(): Promise<PublicLoginMethod[]>;
26
+ export declare function submitLoginMethod(methodId: string, body: Record<string, unknown>, instanceId?: string): Promise<LoginResponse>;
27
+ export declare function startLoginRedirect(methodId: string, params: {
28
+ instanceId?: string;
29
+ rememberMe?: boolean;
30
+ desktopCallbackPort?: number;
31
+ }): Promise<string>;
32
+ /**
33
+ * Answers a second factor. With no temp token the server reads the pending
34
+ * login cookie a redirect method left.
35
+ */
36
+ export declare function verifySecondFactor(factorId: string, body: Record<string, unknown>): Promise<LoginResponse>;
37
+ export declare function challengeSecondFactor(factorId: string, tempToken?: string): Promise<unknown>;
38
+ export interface UserSecondFactorSummary {
39
+ pluginId: string;
40
+ factorId: string;
41
+ labelKey: string | null;
42
+ available: boolean;
43
+ }
44
+ export declare function getUserSecondFactors(userId: string): Promise<UserSecondFactorSummary[]>;
45
+ export declare function resetUserSecondFactors(userId: string): Promise<void>;
46
+ export interface SshAuthProviderSummary {
47
+ type: string;
48
+ labelKey: string;
49
+ descriptionKey?: string;
50
+ pluginId: string;
51
+ fields: Array<Record<string, unknown>>;
52
+ credentialType: boolean;
53
+ needsUserInteraction: boolean;
54
+ supportsBackground: boolean;
55
+ /** Offered in Quick Connect, for a host that is never saved. */
56
+ quickConnect?: boolean;
57
+ available: boolean;
58
+ missingPlugin?: {
59
+ id: string;
60
+ name: string;
61
+ };
62
+ }
63
+ export declare function getSshAuthProviders(): Promise<SshAuthProviderSummary[]>;
@@ -0,0 +1,3 @@
1
+ import { type CredentialSidebarPreferences } from "../../types/credential-sidebar-preferences";
2
+ export declare function getCredentialSidebarPreferences(): Promise<CredentialSidebarPreferences>;
3
+ export declare function saveCredentialSidebarPreferences(preferences: CredentialSidebarPreferences): Promise<void>;
@@ -0,0 +1,56 @@
1
+ import type { SSHFolder } from "../../types/index";
2
+ export declare function getCredentials(): Promise<Record<string, unknown>[] | Record<string, unknown>>;
3
+ export declare function getCredentialDetails(credentialId: number): Promise<Record<string, unknown>>;
4
+ export declare function createCredential(credentialData: Record<string, unknown>): Promise<Record<string, unknown>>;
5
+ export declare function updateCredential(credentialId: number, credentialData: Record<string, unknown>): Promise<Record<string, unknown>>;
6
+ export declare function duplicateCredential(credentialId: number, data: Record<string, unknown>): Promise<Record<string, unknown>>;
7
+ export declare function deleteCredential(credentialId: number): Promise<Record<string, unknown>>;
8
+ export declare function getCredentialHosts(credentialId: number): Promise<Record<string, unknown>>;
9
+ export declare function getCredentialFolders(): Promise<Record<string, unknown>>;
10
+ export declare function getSSHHostWithCredentials(hostId: number): Promise<Record<string, unknown>>;
11
+ export declare function getHostPassword(hostId: number, field?: "password" | "sudoPassword" | "key" | "keyPassword"): Promise<string | null>;
12
+ export declare function applyCredentialToHost(hostId: number, credentialId: number): Promise<Record<string, unknown>>;
13
+ export declare function removeCredentialFromHost(hostId: number): Promise<Record<string, unknown>>;
14
+ export declare function migrateHostToCredential(hostId: number, credentialName: string): Promise<Record<string, unknown>>;
15
+ export declare function getFoldersWithStats(): Promise<Record<string, unknown>>;
16
+ export declare function renameFolder(oldName: string, newName: string): Promise<Record<string, unknown>>;
17
+ export declare function getSSHFolders(): Promise<SSHFolder[]>;
18
+ export declare function updateFolderMetadata(name: string, color?: string, icon?: string, credentialId?: number | null, localOnly?: boolean): Promise<void>;
19
+ export declare function reorderFolders(positions: {
20
+ name: string;
21
+ sortOrder: number;
22
+ }[]): Promise<{
23
+ updated: number;
24
+ }>;
25
+ export declare function deleteAllHostsInFolder(folderName: string): Promise<{
26
+ deletedCount: number;
27
+ }>;
28
+ export declare function renameCredentialFolder(oldName: string, newName: string): Promise<Record<string, unknown>>;
29
+ export declare function reorderCredentials(positions: {
30
+ id: number;
31
+ sortOrder: number;
32
+ }[]): Promise<{
33
+ updated: number;
34
+ }>;
35
+ export declare function detectKeyType(privateKey: string, keyPassword?: string): Promise<Record<string, unknown>>;
36
+ export declare function detectPublicKeyType(publicKey: string): Promise<Record<string, unknown>>;
37
+ export declare function validateKeyPair(privateKey: string, publicKey: string, keyPassword?: string): Promise<Record<string, unknown>>;
38
+ export interface GeneratedPublicKey {
39
+ success?: boolean;
40
+ publicKey?: string;
41
+ error?: string;
42
+ }
43
+ export declare function generatePublicKeyFromPrivate(privateKey: string, keyPassword?: string): Promise<GeneratedPublicKey>;
44
+ export interface GeneratedKeyPair {
45
+ success: boolean;
46
+ privateKey?: string;
47
+ publicKey?: string;
48
+ keyType?: string;
49
+ format?: string;
50
+ algorithm?: string;
51
+ keySize?: number;
52
+ curve?: string;
53
+ error?: string;
54
+ }
55
+ export declare function generateKeyPair(keyType: "ssh-ed25519" | "ssh-rsa" | "ecdsa-sha2-nistp256", keySize?: number, passphrase?: string): Promise<GeneratedKeyPair>;
56
+ export declare function deployCredentialToHost(credentialId: number, targetHostId: number): Promise<Record<string, unknown>>;
@@ -0,0 +1,23 @@
1
+ export interface UptimeInfo {
2
+ uptimeMs: number;
3
+ uptimeSeconds: number;
4
+ formatted: string;
5
+ }
6
+ export interface RecentActivityItem {
7
+ id: number;
8
+ userId: string;
9
+ /** The activity type; each plugin records its own. */
10
+ type: string;
11
+ hostId: number;
12
+ hostName: string;
13
+ timestamp: string;
14
+ }
15
+ export declare function getUptime(): Promise<UptimeInfo>;
16
+ export declare function getRecentActivity(limit?: number): Promise<RecentActivityItem[]>;
17
+ export declare function logActivity(type: string, hostId: number, hostName: string): Promise<{
18
+ message: string;
19
+ id: number | string;
20
+ }>;
21
+ export declare function resetRecentActivity(): Promise<{
22
+ message: string;
23
+ }>;
@@ -0,0 +1,8 @@
1
+ export declare function linkExternalToPasswordAccount(externalUserId: string, targetUsername: string): Promise<{
2
+ success: boolean;
3
+ message: string;
4
+ }>;
5
+ export declare function unlinkExternalFromPasswordAccount(userId: string): Promise<{
6
+ success: boolean;
7
+ message: string;
8
+ }>;
@@ -0,0 +1,3 @@
1
+ import { type HostSidebarPreferences } from "../../types/host-sidebar-preferences";
2
+ export declare function getHostSidebarPreferences(): Promise<HostSidebarPreferences>;
3
+ export declare function saveHostSidebarPreferences(preferences: HostSidebarPreferences): Promise<void>;
@@ -0,0 +1,11 @@
1
+ import type { ServerStatus } from "../main-axios";
2
+ /** Throws when the statuses could not be read, so callers keep what they had. */
3
+ export declare function getAllServerStatuses(): Promise<Record<number, ServerStatus>>;
4
+ export declare function getServerStatusById(id: number): Promise<ServerStatus>;
5
+ export declare function refreshServerPolling(): Promise<void>;
6
+ export declare function getStatusCheckSettings(): Promise<{
7
+ statusCheckInterval: number;
8
+ }>;
9
+ export declare function updateStatusCheckSettings(settings: {
10
+ statusCheckInterval: number;
11
+ }): Promise<void>;
@@ -0,0 +1,74 @@
1
+ import type { CustomKeybinding } from "../../types/keybindings";
2
+ export interface OpenTabRecord {
3
+ id: string;
4
+ userId: string;
5
+ tabType: string;
6
+ hostId: number | null;
7
+ label: string;
8
+ tabOrder: number;
9
+ backendSessionId: string | null;
10
+ createdAt: string;
11
+ updatedAt: string;
12
+ }
13
+ export interface OpenTabSyncPayload {
14
+ id: string;
15
+ tabType: string;
16
+ hostId?: number | null;
17
+ label: string;
18
+ tabOrder: number;
19
+ backendSessionId?: string | null;
20
+ }
21
+ export interface OpenTabUpsertPayload {
22
+ id: string;
23
+ tabType: string;
24
+ hostId?: number | null;
25
+ label: string;
26
+ tabOrder: number;
27
+ backendSessionId?: string | null;
28
+ }
29
+ export interface ActiveSessionInfo {
30
+ sessionId: string;
31
+ hostId: number;
32
+ hostName: string;
33
+ tabInstanceId: string | null;
34
+ isConnected: boolean;
35
+ createdAt: number;
36
+ }
37
+ export declare function getOpenTabs(): Promise<OpenTabRecord[]>;
38
+ export declare function syncOpenTabs(tabs: OpenTabSyncPayload[]): Promise<void>;
39
+ export declare function deleteOpenTab(instanceId: string): Promise<void>;
40
+ export declare function patchOpenTab(instanceId: string, updates: Partial<Pick<OpenTabRecord, "hostId" | "label" | "tabOrder" | "backendSessionId">>): Promise<void>;
41
+ export declare function addOpenTab(tab: OpenTabUpsertPayload): Promise<void>;
42
+ /** The caller's own live sessions. */
43
+ export declare function getActiveSessions(): Promise<ActiveSessionInfo[]>;
44
+ /** How long a detached terminal session is kept, in minutes. */
45
+ export declare function getSessionTimeoutMinutes(): Promise<number>;
46
+ export interface UserPreferences {
47
+ reopenTabsOnLogin: boolean;
48
+ theme?: string | null;
49
+ fontSize?: string | null;
50
+ accentColor?: string | null;
51
+ language?: string | null;
52
+ storageMode?: string | null;
53
+ commandPaletteEnabled?: boolean | null;
54
+ showHostTags?: boolean | null;
55
+ hostTrayOnClick?: boolean | null;
56
+ pinAppRail?: boolean | null;
57
+ expandAppRailOnHover?: boolean | null;
58
+ showPinAppRailButton?: boolean | null;
59
+ disableUpdateCheck?: boolean | null;
60
+ confirmTabClose?: boolean | null;
61
+ hiddenRailTabs?: string | null;
62
+ compactHostView?: boolean | null;
63
+ statusColorScheme?: string | null;
64
+ customKeybindings?: string | null;
65
+ }
66
+ export declare function parseCustomKeybindings(raw?: string | null): CustomKeybinding[];
67
+ /**
68
+ * Cached briefly so the loading gate's prefetch and the shell's own read on
69
+ * mount share one request instead of two, which is what let stale
70
+ * localStorage flags (hiddenRailTabs, pinAppRail) flash before the real
71
+ * values landed a moment after the shell first rendered.
72
+ */
73
+ export declare function getUserPreferences(): Promise<UserPreferences>;
74
+ export declare function saveUserPreferences(prefs: Partial<UserPreferences>): Promise<void>;
@@ -0,0 +1,128 @@
1
+ export interface PluginTabContribution {
2
+ id: string;
3
+ titleKey: string;
4
+ icon: string;
5
+ openFrom: string[];
6
+ }
7
+ export type PluginSettingsFieldType = "boolean" | "string" | "number" | "select" | "multiselect" | "secret" | "textarea" | "json" | "custom";
8
+ export interface PluginSettingsField {
9
+ key: string;
10
+ type: PluginSettingsFieldType;
11
+ labelKey?: string;
12
+ descriptionKey?: string;
13
+ placeholderKey?: string;
14
+ default?: unknown;
15
+ options?: {
16
+ value: string;
17
+ labelKey: string;
18
+ }[];
19
+ min?: number;
20
+ max?: number;
21
+ requires?: string;
22
+ permission?: string;
23
+ group?: string;
24
+ component?: string;
25
+ hidden?: boolean;
26
+ defaultable?: boolean;
27
+ defaultLevels?: Array<"admin" | "user" | "folder">;
28
+ personal?: boolean;
29
+ secretKeys?: string[];
30
+ shareRead?: "connect" | "view" | "edit" | "manage";
31
+ ownerOnly?: boolean;
32
+ }
33
+ export interface PluginHostSettingsContribution {
34
+ enableKey?: string;
35
+ enableLabelKey?: string;
36
+ enableDescriptionKey?: string;
37
+ enableDefault?: boolean;
38
+ editorGroup?: "top" | "ssh";
39
+ editorOrder?: number;
40
+ fields: PluginSettingsField[];
41
+ }
42
+ /** A plugin's Appearance defaults for each interface preset. */
43
+ export type PluginUiPresets = Record<"simple" | "balanced" | "advanced", Record<string, unknown>>;
44
+ export interface PluginSettingsContribution {
45
+ admin?: PluginSettingsField[];
46
+ user?: PluginSettingsField[];
47
+ host?: PluginHostSettingsContribution;
48
+ }
49
+ /** A panel or dashboard card, declared so its owner is known while it is off. */
50
+ export interface PluginViewContribution {
51
+ id: string;
52
+ titleKey: string;
53
+ icon?: string;
54
+ }
55
+ export interface PluginContributions {
56
+ tabs?: PluginTabContribution[];
57
+ panels?: PluginViewContribution[];
58
+ dashboardCards?: PluginViewContribution[];
59
+ /** The frontend also runs on anonymous guest pages. */
60
+ guest?: boolean;
61
+ settings?: PluginSettingsContribution;
62
+ permissions?: {
63
+ name: string;
64
+ titleKey: string;
65
+ descriptionKey: string;
66
+ }[];
67
+ uiPresets?: PluginUiPresets;
68
+ }
69
+ export { isRedactedSecret, type RedactedSecret, } from "@termix-ssh/plugin-sdk/settings";
70
+ export type PluginSettingsValues = Record<string, unknown>;
71
+ /** Per-field messages from a rejected PUT, keyed by field key. */
72
+ export interface PluginSettingsErrors {
73
+ [key: string]: string;
74
+ }
75
+ export declare class PluginSettingsValidationError extends Error {
76
+ readonly errors: PluginSettingsErrors;
77
+ constructor(errors: PluginSettingsErrors);
78
+ }
79
+ export declare function getPluginAdminSettings(pluginId: string): Promise<PluginSettingsValues>;
80
+ /** Tells the plugin's own frontend, through app.onSettingsChanged. */
81
+ export declare const PLUGIN_SETTINGS_CHANGED_EVENT = "termix:plugin-settings-changed";
82
+ export declare function updatePluginAdminSettings(pluginId: string, values: PluginSettingsValues): Promise<PluginSettingsValues>;
83
+ export declare function getPluginUserSettings(pluginId: string): Promise<PluginSettingsValues>;
84
+ export declare function updatePluginUserSettings(pluginId: string, values: PluginSettingsValues): Promise<PluginSettingsValues>;
85
+ export declare function getPluginHostSettings(pluginId: string, hostId: number): Promise<PluginSettingsValues>;
86
+ export declare function updatePluginHostSettings(pluginId: string, hostId: number, values: PluginSettingsValues): Promise<PluginSettingsValues>;
87
+ /**
88
+ * What GET /plugins returns.
89
+ *
90
+ * The admin-only fields are absent for a caller without
91
+ * admin.plugins.manage: what a plugin may do, what it has been granted and
92
+ * why it failed are operational details the shell does not need.
93
+ */
94
+ export interface PluginSummary {
95
+ id: string;
96
+ name: string;
97
+ version: string;
98
+ enabled: boolean;
99
+ /** enabled | disabled | blocked | failed, or the loader's live state. */
100
+ state: string;
101
+ contributes: PluginContributions | null;
102
+ /** Lucide icon name from the manifest. */
103
+ icon?: string;
104
+ dependencies?: Record<string, string>;
105
+ optionalDependencies?: Record<string, string>;
106
+ /** A built frontend bundle is served at /plugin-assets/<id>/frontend.js. */
107
+ frontend?: boolean;
108
+ /** A frontend.css sits beside the bundle. */
109
+ css?: boolean;
110
+ /** Cache key for the bundle; changes when it is rebuilt. */
111
+ assetVersion?: string | null;
112
+ /** "en" plus the xx_YY names of shipped translations. */
113
+ locales?: string[];
114
+ tier?: string;
115
+ source?: string;
116
+ /** Capabilities this plugin's manifest declares. Admins only. */
117
+ capabilities?: string[];
118
+ /** The subset of `capabilities` actually granted. Admins only. */
119
+ grantedCapabilities?: string[];
120
+ /** Why the plugin is blocked or failed. Admins only. */
121
+ lastError?: string | null;
122
+ /** Paths a running plugin serves without login. Admins only. */
123
+ publicRoutes?: {
124
+ http: string[];
125
+ ws: string[];
126
+ };
127
+ }
128
+ export declare function getPlugins(): Promise<PluginSummary[]>;