@termix-ssh/plugin-sdk 1.0.12 → 1.0.15
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.
- package/CHANGELOG.md +42 -0
- package/PLUGIN-GUIDE.md +106 -59
- package/dist/backend.d.ts +534 -1
- package/dist/backend.js +7 -0
- package/dist/capabilities.js +7 -0
- package/dist/db.js +1 -0
- package/dist/desktop.d.ts +0 -243
- package/dist/frontend.d.ts +23 -2
- package/dist/host/{PluginsTab-EV4MSGY6.js → PluginsTab-S33WIIGC.js} +511 -178
- package/dist/host/{chunk-AWR6FYDO.js → chunk-2IV3VX7F.js} +5552 -5550
- package/dist/host/{chunk-RUPLD6RF.js → chunk-3L45NNT5.js} +29 -84
- package/dist/host/{chunk-VEWOYAMZ.js → chunk-57DJU2ZA.js} +1 -1
- package/dist/host/{chunk-XKA3DBB2.js → chunk-V44FCJBQ.js} +135 -54
- package/dist/host/{chunk-X4QZKO5G.js → chunk-VFTB2RDP.js} +54 -5
- package/dist/host/core-classes.json +1 -1
- package/dist/host/{linked-server-B4NEG4MA.js → linked-server-SCJH7DSL.js} +1 -1
- package/dist/host/{rbac-api-OUO3LUOC.js → rbac-api-KA5IPQQL.js} +1 -1
- package/dist/host/testing-host.js +4 -4
- package/dist/host/types/src/types/index.d.ts +10 -0
- package/dist/host/types/src/types/onboarding.d.ts +0 -2
- package/dist/host/types/src/types/ui-types.d.ts +3 -1
- package/dist/host/types/src/ui/api/audit-log-api.d.ts +0 -10
- package/dist/host/types/src/ui/api/auth-methods-api.d.ts +2 -0
- package/dist/host/types/src/ui/api/credentials-api.d.ts +0 -22
- package/dist/host/types/src/ui/api/plugins-api.d.ts +4 -0
- package/dist/host/types/src/ui/api/settings-api.d.ts +6 -6
- package/dist/host/types/src/ui/api/ssh-host-management-api.d.ts +6 -28
- package/dist/host/types/src/ui/main-axios.d.ts +3 -3
- package/dist/host/types/src/ui/onboarding/onboarding-registry.d.ts +3 -1
- package/dist/host/types/src/ui/plugin-host/sdk-ui.d.ts +6 -7
- package/dist/host/types/src/ui/plugins/plugin-model.d.ts +20 -0
- package/dist/host/types/src/ui/plugins/use-plugins-manager.d.ts +3 -0
- package/dist/host/types/src/ui/sidebar/AuthEnrollmentSections.d.ts +4 -1
- package/dist/host/types/src/ui/sidebar/host-contributions.d.ts +10 -0
- package/dist/host/ui.js +36 -210
- package/dist/host/{use-permissions-6VSHHUMB.js → use-permissions-LLN6TLAL.js} +1 -1
- package/dist/manifest.d.ts +10 -1
- package/dist/manifest.js +16 -1
- package/dist/ssh-keys.d.ts +29 -0
- package/dist/ssh-keys.js +85 -0
- package/dist/testing.d.ts +52 -15
- package/dist/testing.js +279 -2
- package/dist/vitest-preset.js +23 -0
- package/package.json +5 -1
- package/schema/manifest.schema.json +12 -0
- package/dist/host/types/src/ui/sidebar/host-export-payload.d.ts +0 -30
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.0.15
|
|
4
|
+
|
|
5
|
+
Plugin API 1.7.0.
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- `ctx.auth.policy.provide` and the `auth:policy` capability, so a plugin can set an idle timeout, cap session length, turn off remember me and require a second factor
|
|
10
|
+
- `ctx.auth.listSecondFactors` lists the second factors from every running plugin
|
|
11
|
+
- `AuthEnrollmentSections` takes `factorsOnly`
|
|
12
|
+
- `getHttpsSettings` and `updateHttpsSettings` in `@termix-ssh/plugin-sdk/ui`
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Plugin frontend tests against a locally linked SDK failed with a second copy of React
|
|
17
|
+
|
|
18
|
+
## 1.0.14
|
|
19
|
+
|
|
20
|
+
Plugin API 1.6.0.
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- `ctx.hosts.locks.provide` and the `hosts:lock` capability, so a plugin can manage hosts that stay read only for everyone else and block adding hosts by hand
|
|
25
|
+
- `ctx.hosts.setShares` to replace every grant on a host in one call
|
|
26
|
+
- `ctx.credentials.list` returns the acting user's credentials by name, without secrets
|
|
27
|
+
- `ctx.hosts.create` and `update` take `password`, `key`, `keyPassword`, `keyType`, `sudoPassword`, `protocolAuth` and `pluginEnable`
|
|
28
|
+
|
|
29
|
+
## 1.0.13
|
|
30
|
+
|
|
31
|
+
Plugin API 1.5.0.
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- `runtime: "desktop"` in the manifest for a plugin that only loads on the desktop app
|
|
36
|
+
- `desktop:local` and `ctx.desktop.local`: file system, local shell and machine info on the desktop app's own backend
|
|
37
|
+
- `ctx.audit.subscribe`, `ctx.audit.list` and `ctx.audit.exportBatches` under `audit:read`
|
|
38
|
+
- `ctx.hosts.importMany`, `importSshConfig`, `exportMany` and `registerImportNormalizer`, with the `hosts:export` capability
|
|
39
|
+
- `ctx.credentials.publicKey` and `resolveKeyRefs`, `ctx.ssh.exec`, and `@termix-ssh/plugin-sdk/ssh-keys`
|
|
40
|
+
- `ctx.hosts.status.provide` and `ctx.hosts.activity.provide` so a plugin can own host status and recent activity, with `ctx.network.tcpProbe`, `ctx.ssh.probe`, `ctx.hosts.probeTargets` and `ctx.hosts.sessionActive`
|
|
41
|
+
- `registerHostStatusIndicator` and `registerHostEditorToolbarItem`, and `order` for host badges
|
|
42
|
+
- Onboarding steps can sit in a `start` section, take a `position` and `replaces` a core step
|
|
43
|
+
- A plugin can provide the app name, tagline and logo through the `<id>.brandingProvider` registry key
|
|
44
|
+
|
|
3
45
|
## 1.0.12
|
|
4
46
|
|
|
5
47
|
Plugin API 1.4.0.
|
package/PLUGIN-GUIDE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Termix plugin guide
|
|
2
2
|
|
|
3
|
-
SDK 1.0.
|
|
3
|
+
SDK 1.0.15 | Plugin API 1.7.0
|
|
4
4
|
|
|
5
5
|
This guide is for anyone, person or AI coding tool, building a Termix plugin. It ships inside
|
|
6
6
|
`@termix-ssh/plugin-sdk`, so the copy in your `node_modules` always matches the SDK you have installed.
|
|
@@ -164,7 +164,7 @@ Unknown fields are refused at every level, so a typo fails validation. The schem
|
|
|
164
164
|
| `icon` | A [Lucide](https://lucide.dev/icons/) icon name, like `Hand`. |
|
|
165
165
|
| `features` | Up to 20 short lines shown on the plugin's page. |
|
|
166
166
|
| `docs` | An https link to your docs. |
|
|
167
|
-
| `engine.termix` | Termix versions you work with, like `>=26.10.0`.
|
|
167
|
+
| `engine.termix` | Termix versions you work with, like `>=26.10.0`. Older Termix builds don't list a release they can't run. |
|
|
168
168
|
| `engine.api` | Plugin API range, like `^1.2`. A major bump of the API is breaking. |
|
|
169
169
|
| `capabilities` | What your code may do. See the reference at the end. |
|
|
170
170
|
| `dependencies`, `optionalDependencies` | Other plugins, `{ "snippets": "^1.0.0" }`. You must keep working without optional ones. |
|
|
@@ -226,6 +226,7 @@ Bundled as ESM for Node 22+ into `dist/backend.js`. Backend imports of your own
|
|
|
226
226
|
| `sync` | none | Sync your tables to a linked desktop |
|
|
227
227
|
| `auth` | `auth:provide` | Login methods, second factors, SSH auth types |
|
|
228
228
|
| `auth.issueUserToken` | `users:impersonate` | A short-lived session for calling Termix's API as a user |
|
|
229
|
+
| `auth.policy` | `auth:policy` | Login rules: idle timeout, session length, second factors |
|
|
229
230
|
| `users.getLocale` | `users:read` | A user's UI language |
|
|
230
231
|
| `system` | `system:tls` | The server's HTTPS certificate |
|
|
231
232
|
| `plugins.list()` | `plugins:read` | Which plugins are installed |
|
|
@@ -300,6 +301,11 @@ router.post("/notes", async (req, res) => {
|
|
|
300
301
|
- `ctx.rbac.require("manage")` on a single route, `await ctx.rbac.has("manage")` in code. A full id like
|
|
301
302
|
`hosts.edit` checks a core permission.
|
|
302
303
|
- Host access: `ctx.hosts.checkAccess(hostId, "connect" | "view" | "edit" | "manage")`.
|
|
304
|
+
- Managed hosts: with `hosts:lock`, `ctx.hosts.locks.provide({ isLocked, note, allowManualCreate })` makes
|
|
305
|
+
the hosts you manage read only for the UI, the API and other plugins (pins and order still work), and
|
|
306
|
+
`allowManualCreate: () => false` blocks adding hosts by hand. Your own `ctx.hosts` writes still go
|
|
307
|
+
through. `ctx.hosts.setShares(hostId, grants)` replaces a host's whole grant list, and
|
|
308
|
+
`ctx.credentials.list()` finds the acting user's credentials by name.
|
|
303
309
|
|
|
304
310
|
### Errors
|
|
305
311
|
|
|
@@ -325,6 +331,24 @@ try {
|
|
|
325
331
|
commands. `@termix-ssh/plugin-sdk/host-commands` has helpers to detect the OS and run package manager and
|
|
326
332
|
sudo commands. Hosts from `ctx.hosts` never carry secrets. Pass the host or its id to `ctx.ssh`.
|
|
327
333
|
|
|
334
|
+
### The desktop app
|
|
335
|
+
|
|
336
|
+
Set `"runtime": "desktop"` in the manifest for a plugin that only makes sense on a desktop app. It never
|
|
337
|
+
loads on a server, ignores server sync and may declare `desktop:local`. Any plugin can declare
|
|
338
|
+
`desktop:local` and check `ctx.desktop.local.available()` at runtime.
|
|
339
|
+
|
|
340
|
+
`ctx.desktop.local` works on the desktop app's own backend only:
|
|
341
|
+
|
|
342
|
+
- `info()`: home folder, platform, user data folder, backend port and the linked server (url and token) or null
|
|
343
|
+
- `fs`: `list`, `mkdir`, `createFile`, `rename`, `ensureDir`, `exists`, `walk`, `trash`, `reveal`, `open`,
|
|
344
|
+
`openRead` and `openDownload`. Downloads stay inside the folder the user picked, links in it are refused and
|
|
345
|
+
an existing file is never replaced by accident
|
|
346
|
+
- `pty.spawn()`: a local shell, stopped when the plugin stops
|
|
347
|
+
- `pluginFetch(origin, subPath, init)`: calls this plugin's own routes on the desktop's backend ("local") or the linked server ("remote") as the acting user. Bodies can be streams, so a plugin can move big files without the renderer
|
|
348
|
+
|
|
349
|
+
Use `ctx.audit.subscribe`, `list` and `exportBatches` (`audit:read`) to read the audit trail. Subscribers
|
|
350
|
+
are called after a line is accepted and never delay the action that wrote it.
|
|
351
|
+
|
|
328
352
|
### Events, timers, alerts, services
|
|
329
353
|
|
|
330
354
|
```ts
|
|
@@ -470,13 +494,15 @@ your plugin's error boundary and Suspense.
|
|
|
470
494
|
| `registerHostEditorSection` | Your own host editor section (host settings get one for free) |
|
|
471
495
|
| `registerHostProtocol` | A connection protocol next to SSH |
|
|
472
496
|
| `registerHostBadge`, `registerHostContextMenuItem` | Badges and menu items on host rows |
|
|
497
|
+
| `registerHostStatusIndicator` | The status dot or stripe on a host row (a layout draws it) |
|
|
498
|
+
| `registerHostEditorToolbarItem` | A control in the host editor toolbar (a layout draws it) |
|
|
473
499
|
| `registerPaletteEntry`, `registerPaletteGroup` | Command palette entries |
|
|
474
500
|
| `registerKeybindingAction`, `registerKeybindingDefault` | Bindable actions |
|
|
475
501
|
| `registerSettingsComponent` | A component for a `custom` settings field |
|
|
476
502
|
| `registerAction`, `invokeAction` | Actions across plugins |
|
|
477
503
|
| `registerSlotContribution`, `declareActionSlot` | Fill or own a UI slot |
|
|
478
504
|
| `registerComponent`, `registerExtension` | Offer a component by id, add to an extension point |
|
|
479
|
-
| `registerOnboardingStep` | A first run setup step
|
|
505
|
+
| `registerOnboardingStep` | A first run setup step (`section`, `position`, `replaces`) |
|
|
480
506
|
| `registerLoginMethod`, `registerSecondFactorUI`, `registerSshAuthEditor` | Sign in UI |
|
|
481
507
|
| `registerLayout` | A whole-app layout (`contributes.layouts`, API 1.4) |
|
|
482
508
|
| `api` | Axios client for your `/plugin-api/<id>/` routes, auth included |
|
|
@@ -484,6 +510,16 @@ your plugin's error boundary and Suspense.
|
|
|
484
510
|
| `docs`, `tabs`, `confirm`, `listHosts`, `getHost`, `t`, `hasPermission`, `desktop` | Helpers |
|
|
485
511
|
| `onSettingsChanged`, `onDispose` | Hooks |
|
|
486
512
|
|
|
513
|
+
Badges, status indicators and toolbar items take `{ id, when(host), component, order? }`; lower `order`
|
|
514
|
+
comes first. An onboarding step sits in a section (`start`, `setup`, `explore`, `security`) or at an exact
|
|
515
|
+
`position` from 1 to 99. `replaces: ["preset"]` lists older step keys the step took over, so people who saw
|
|
516
|
+
those are not shown it again.
|
|
517
|
+
|
|
518
|
+
Branding: a plugin that owns the app name, tagline and logo provides
|
|
519
|
+
`ctx.registry.provide("<id>.brandingProvider", async () => ({ appName, tagline, logo }))` in its backend.
|
|
520
|
+
Core reads it for `GET /users/branding` (the login page, the browser tab and the sync server name) and falls
|
|
521
|
+
back to "Termix" with no logo when no plugin provides one. `logo` is a PNG data URL or null.
|
|
522
|
+
|
|
487
523
|
Hooks from `@termix-ssh/plugin-sdk/frontend`: `useTranslation`, `usePermission`, `useSettings`, `useHost`,
|
|
488
524
|
`useHosts`, `usePluginApi`, `useCurrentUser`, `useTheme`, `useToast`, `useDocsUrl`, `useTabs`,
|
|
489
525
|
`useSlotContributions`, `useSshAuthTypes`, `useExtensions`, `useShell`.
|
|
@@ -563,8 +599,6 @@ export function activate(app: TermixApp) {
|
|
|
563
599
|
`classic-layout.hostTree` and `classic-layout.dashboard` for other plugins to place with `PluginComponent`.
|
|
564
600
|
It reads the shell with `useShellController()` from `@termix-ssh/plugin-sdk/ui`, which exposes more than
|
|
565
601
|
`useShell()` and may change with Termix. A third party layout should start from `useShell()`.
|
|
566
|
-
- Example Top Bar Layout (https://github.com/Termix-SSH/Plugin-Example-Topbar-Layout) is a small third party
|
|
567
|
-
style layout built only on `useShell()`, `TabStage` and `@termix-ssh/plugin-sdk/ui`, with a phone version.
|
|
568
602
|
|
|
569
603
|
A theme is CSS only. Declare it in `contributes.themes` (`id`, `label`, `mode` light or dark, `css` path,
|
|
570
604
|
optional `swatch` colors for the picker) with the `ui:theme` capability. The id becomes a class on `<html>`,
|
|
@@ -582,9 +616,7 @@ A plugin that only holds themes needs no code. Leave out `src/`: `termix-plugin
|
|
|
582
616
|
- Themes show in the picker in the order core lists its own, then the plugin's order.
|
|
583
617
|
- A theme someone saved that no longer exists shows as System. It comes back when the plugin does.
|
|
584
618
|
- Accent color, UI font, font size and density are not part of a theme. Core applies them on top.
|
|
585
|
-
- Bundled Classic Themes (https://github.com/Termix-SSH/Plugin-Classic-Themes) is a full example
|
|
586
|
-
Example Theme (https://github.com/Termix-SSH/Plugin-Example-Theme) a small one with one light and one dark
|
|
587
|
-
theme.
|
|
619
|
+
- Bundled Classic Themes (https://github.com/Termix-SSH/Plugin-Classic-Themes) is a full example.
|
|
588
620
|
|
|
589
621
|
## Looking native
|
|
590
622
|
|
|
@@ -668,6 +700,13 @@ closely. Declare ids in `contributes.auth` and register them with `ctx.auth.regi
|
|
|
668
700
|
`registerSecondFactor` or `registerSshAuthProvider`. Connection protocols go in `contributes.protocols`
|
|
669
701
|
and `app.registerHostProtocol`. Read https://docs.termix.site/develop/auth before starting one.
|
|
670
702
|
|
|
703
|
+
Login rules need `auth:policy`. `ctx.auth.policy.provide({ evaluate, allowRememberDevice })` is asked at
|
|
704
|
+
every login with the user, the method, the device and every second factor (`ctx.auth.listSecondFactors()`
|
|
705
|
+
lists them too). `evaluate` returns `allowRememberDevice`, `maxSessionSeconds`, `idleTimeoutSeconds` and
|
|
706
|
+
`secondFactor` (`"always"` or `"new-device"`). The strictest answer from all plugins wins, and a throw
|
|
707
|
+
refuses the login. A user who must have a second factor but has none gets a session that can only set one
|
|
708
|
+
up, and `/users/me` reports `restriction: "second-factor-setup"`.
|
|
709
|
+
|
|
671
710
|
## Testing
|
|
672
711
|
|
|
673
712
|
```ts
|
|
@@ -832,60 +871,68 @@ To run your own registry instead, see https://docs.termix.site/develop/registrie
|
|
|
832
871
|
|
|
833
872
|
## SDK entry points
|
|
834
873
|
|
|
835
|
-
| Import | What it is
|
|
836
|
-
| -------------------------------------------------------------------- |
|
|
837
|
-
| `@termix-ssh/plugin-sdk/backend` | `PluginContext` and the backend types
|
|
838
|
-
| `@termix-ssh/plugin-sdk/frontend` | `TermixApp`, `TabProps` and the hooks
|
|
839
|
-
| `@termix-ssh/plugin-sdk/ui` | The UI kit, served by Termix at runtime
|
|
840
|
-
| `@termix-ssh/plugin-sdk/db` | `defineTable` and column builders
|
|
841
|
-
| `@termix-ssh/plugin-sdk/manifest` | `PluginManifest` type and manifest checks
|
|
842
|
-
| `@termix-ssh/plugin-sdk/capabilities` | The capability catalog
|
|
843
|
-
| `@termix-ssh/plugin-sdk/settings` | Settings field validation
|
|
844
|
-
| `@termix-ssh/plugin-sdk/testing` | `createMockCtx`, `createTestDb`, `renderWithApp`, `createFakeContext`
|
|
845
|
-
| `@termix-ssh/plugin-sdk/vitest-preset` | `pluginVitestConfig`
|
|
846
|
-
| `@termix-ssh/plugin-sdk/host-commands` | OS detection, package manager and sudo helpers over ssh2
|
|
847
|
-
| `@termix-ssh/plugin-sdk/ssh-certs` | `applyCertificateAuth()` for certificate based SSH auth
|
|
848
|
-
| `@termix-ssh/plugin-sdk/
|
|
849
|
-
| `@termix-ssh/plugin-sdk/
|
|
850
|
-
| `@termix-ssh/plugin-sdk/
|
|
851
|
-
| `@termix-ssh/plugin-sdk/
|
|
852
|
-
| `@termix-ssh/plugin-sdk/
|
|
874
|
+
| Import | What it is |
|
|
875
|
+
| -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
876
|
+
| `@termix-ssh/plugin-sdk/backend` | `PluginContext` and the backend types |
|
|
877
|
+
| `@termix-ssh/plugin-sdk/frontend` | `TermixApp`, `TabProps` and the hooks |
|
|
878
|
+
| `@termix-ssh/plugin-sdk/ui` | The UI kit, served by Termix at runtime |
|
|
879
|
+
| `@termix-ssh/plugin-sdk/db` | `defineTable` and column builders |
|
|
880
|
+
| `@termix-ssh/plugin-sdk/manifest` | `PluginManifest` type and manifest checks |
|
|
881
|
+
| `@termix-ssh/plugin-sdk/capabilities` | The capability catalog |
|
|
882
|
+
| `@termix-ssh/plugin-sdk/settings` | Settings field validation |
|
|
883
|
+
| `@termix-ssh/plugin-sdk/testing` | `createMockCtx`, `createTestDb`, `renderWithApp`, `createFakeContext` |
|
|
884
|
+
| `@termix-ssh/plugin-sdk/vitest-preset` | `pluginVitestConfig` |
|
|
885
|
+
| `@termix-ssh/plugin-sdk/host-commands` | OS detection, package manager and sudo helpers over ssh2 |
|
|
886
|
+
| `@termix-ssh/plugin-sdk/ssh-certs` | `applyCertificateAuth()` for certificate based SSH auth |
|
|
887
|
+
| `@termix-ssh/plugin-sdk/ssh-keys` | `generateSshKeyPair()`, `detectSshKeyType()`, `publicKeyFromPrivate()`, `validateSshKeyPair()` |
|
|
888
|
+
| `@termix-ssh/plugin-sdk/desktop` | The desktop app bridge, typed. Check it exists before use |
|
|
889
|
+
| `@termix-ssh/plugin-sdk/openapi` | `buildOpenApi()` |
|
|
890
|
+
| `@termix-ssh/plugin-sdk/changelog` | Changelog parsing and checks |
|
|
891
|
+
| `@termix-ssh/plugin-sdk/docs` | Docs link and env var helpers |
|
|
892
|
+
| `@termix-ssh/plugin-sdk/ddl`, `@termix-ssh/plugin-sdk/table-builder` | Table to SQL and Drizzle mapping. You rarely need these |
|
|
853
893
|
|
|
854
894
|
## Capabilities
|
|
855
895
|
|
|
856
|
-
| Capability
|
|
857
|
-
|
|
|
858
|
-
| `credentials:read`
|
|
859
|
-
| `system:tls`
|
|
860
|
-
| `ssh:connect`
|
|
861
|
-
| `process:spawn`
|
|
862
|
-
| `users:write`
|
|
863
|
-
| `users:impersonate`
|
|
864
|
-
| `db:core-refs`
|
|
865
|
-
| `auth:provide`
|
|
866
|
-
| `
|
|
867
|
-
| `
|
|
868
|
-
| `
|
|
869
|
-
| `hosts:
|
|
870
|
-
| `
|
|
871
|
-
| `
|
|
872
|
-
| `
|
|
873
|
-
| `
|
|
874
|
-
| `
|
|
875
|
-
| `
|
|
876
|
-
| `
|
|
877
|
-
| `
|
|
878
|
-
| `
|
|
879
|
-
| `
|
|
880
|
-
| `
|
|
881
|
-
| `
|
|
882
|
-
| `
|
|
883
|
-
| `
|
|
884
|
-
| `
|
|
885
|
-
| `
|
|
886
|
-
| `
|
|
887
|
-
| `
|
|
888
|
-
| `
|
|
896
|
+
| Capability | Risk | What it allows |
|
|
897
|
+
| ------------------------ | -------- | ------------------------------------------------------- |
|
|
898
|
+
| `credentials:read` | critical | Read stored secrets for hosts the user can reach |
|
|
899
|
+
| `system:tls` | critical | Replace the HTTPS certificate, answer CA domain checks |
|
|
900
|
+
| `ssh:connect` | high | Run any command on hosts, with the user's access |
|
|
901
|
+
| `process:spawn` | high | Run programs on the Termix server |
|
|
902
|
+
| `users:write` | high | Add users and change their roles |
|
|
903
|
+
| `users:impersonate` | high | Act as another user, or get a session for them, audited |
|
|
904
|
+
| `db:core-refs` | high | Query core users, roles and hosts tables (read only) |
|
|
905
|
+
| `auth:provide` | high | Add login methods, second factors, SSH auth types |
|
|
906
|
+
| `auth:policy` | high | Set login rules: idle timeout, session length, 2FA |
|
|
907
|
+
| `device:serial` | high | Open serial and USB ports on the server |
|
|
908
|
+
| `desktop:local` | high | Use the user's own computer, desktop app only |
|
|
909
|
+
| `hosts:export` | high | Export hosts with their saved logins |
|
|
910
|
+
| `notify:hub` | high | Receive every alert (the alerts hub only) |
|
|
911
|
+
| `ui:layout` | high | Replace the whole app layout |
|
|
912
|
+
| `hosts:write` | medium | Add and edit hosts |
|
|
913
|
+
| `hosts:status-provide` | medium | Be the source of host status dots |
|
|
914
|
+
| `hosts:activity-provide` | medium | Be the source of the recent activity list |
|
|
915
|
+
| `hosts:lock` | medium | Make hosts it manages read only for everyone else |
|
|
916
|
+
| `network:probe` | medium | Check that a host answers on a TCP port |
|
|
917
|
+
| `credentials:use` | medium | Connect with saved credentials without seeing them |
|
|
918
|
+
| `credentials:write` | medium | Save new credentials |
|
|
919
|
+
| `network:outbound` | medium | Outbound HTTP through `ctx.fetch` |
|
|
920
|
+
| `network:serve` | medium | HTTP routes and sockets |
|
|
921
|
+
| `network:broadcast` | medium | Local network broadcasts, like Wake-on-LAN |
|
|
922
|
+
| `users:read` | medium | Usernames, roles and UI language |
|
|
923
|
+
| `events:core` | medium | Listen to core events |
|
|
924
|
+
| `notify:send` | medium | Send alerts |
|
|
925
|
+
| `audit:read` | medium | Read the audit log |
|
|
926
|
+
| `desktop:window` | medium | Open windows in the desktop app |
|
|
927
|
+
| `hosts:read` | low | Read hosts the user can see |
|
|
928
|
+
| `db:own` | low | Your own tables |
|
|
929
|
+
| `kv:own` | low | Small key value state |
|
|
930
|
+
| `files:own` | low | Your own folder on disk |
|
|
931
|
+
| `secrets:own` | low | Your own encrypted secrets |
|
|
932
|
+
| `settings:read-core` | low | Read Termix server settings |
|
|
933
|
+
| `plugins:read` | low | See installed plugins |
|
|
934
|
+
| `ui:surface` | low | Add tabs, panels and settings |
|
|
935
|
+
| `ui:theme` | low | Add color themes, CSS only |
|
|
889
936
|
|
|
890
937
|
An update that adds a capability waits for an admin to approve it.
|
|
891
938
|
|