@termix-ssh/plugin-sdk 1.0.12 → 1.0.13
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 +16 -0
- package/PLUGIN-GUIDE.md +91 -59
- package/dist/backend.d.ts +404 -0
- package/dist/capabilities.js +5 -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-OXQQ7M4I.js} +511 -178
- package/dist/host/{chunk-X4QZKO5G.js → chunk-54KCK6IZ.js} +52 -5
- package/dist/host/{chunk-XKA3DBB2.js → chunk-CALNJCHN.js} +114 -54
- package/dist/host/{chunk-RUPLD6RF.js → chunk-CN5UBTBP.js} +2 -86
- package/dist/host/{chunk-AWR6FYDO.js → chunk-ERGN4YW6.js} +5552 -5550
- package/dist/host/{chunk-VEWOYAMZ.js → chunk-T2PZWXFJ.js} +1 -1
- package/dist/host/core-classes.json +1 -1
- package/dist/host/{linked-server-B4NEG4MA.js → linked-server-5VFO4XQB.js} +1 -1
- package/dist/host/{rbac-api-OUO3LUOC.js → rbac-api-5YMBJAO5.js} +1 -1
- package/dist/host/testing-host.js +4 -4
- package/dist/host/types/src/types/onboarding.d.ts +0 -2
- package/dist/host/types/src/ui/api/audit-log-api.d.ts +0 -10
- 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 +0 -6
- package/dist/host/types/src/ui/api/ssh-host-management-api.d.ts +0 -28
- package/dist/host/types/src/ui/main-axios.d.ts +2 -2
- 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 +5 -6
- 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/host-contributions.d.ts +10 -0
- package/dist/host/ui.js +14 -205
- package/dist/host/{use-permissions-6VSHHUMB.js → use-permissions-ISEDRY3J.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 +32 -15
- package/dist/testing.js +218 -1
- package/package.json +5 -1
- package/schema/manifest.schema.json +10 -0
- package/dist/host/types/src/ui/sidebar/host-export-payload.d.ts +0 -30
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
Trash,
|
|
8
8
|
cn,
|
|
9
9
|
useAreaPreferences
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-ERGN4YW6.js";
|
|
11
11
|
import {
|
|
12
12
|
isElectron
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-CN5UBTBP.js";
|
|
14
14
|
import {
|
|
15
15
|
__commonJS,
|
|
16
16
|
__toESM,
|
|
@@ -2386,16 +2386,21 @@ var CAPABILITY_CATALOG = [
|
|
|
2386
2386
|
entry("notify:hub", "high"),
|
|
2387
2387
|
entry("ui:layout", "high"),
|
|
2388
2388
|
entry("hosts:write", "medium"),
|
|
2389
|
+
entry("hosts:export", "high"),
|
|
2389
2390
|
entry("credentials:use", "medium"),
|
|
2390
2391
|
entry("credentials:write", "medium"),
|
|
2391
2392
|
entry("network:outbound", "medium"),
|
|
2392
2393
|
entry("network:serve", "medium"),
|
|
2393
2394
|
entry("network:broadcast", "medium"),
|
|
2395
|
+
entry("network:probe", "medium"),
|
|
2396
|
+
entry("hosts:status-provide", "medium"),
|
|
2397
|
+
entry("hosts:activity-provide", "medium"),
|
|
2394
2398
|
entry("users:read", "medium"),
|
|
2395
2399
|
entry("events:core", "medium"),
|
|
2396
2400
|
entry("notify:send", "medium"),
|
|
2397
2401
|
entry("audit:read", "medium"),
|
|
2398
2402
|
entry("desktop:window", "medium"),
|
|
2403
|
+
entry("desktop:local", "high"),
|
|
2399
2404
|
entry("hosts:read", "low"),
|
|
2400
2405
|
entry("db:own", "low"),
|
|
2401
2406
|
entry("kv:own", "low"),
|
|
@@ -2508,7 +2513,15 @@ function mergePlugins(installed, registry) {
|
|
|
2508
2513
|
registryId: entry2?.registryId ?? summary.registryId ?? null,
|
|
2509
2514
|
registryName: entry2?.registryName ?? null,
|
|
2510
2515
|
managedByServer: summary.managedByServer ?? false,
|
|
2511
|
-
defaultLook: summary.defaultLook ?? false
|
|
2516
|
+
defaultLook: summary.defaultLook ?? false,
|
|
2517
|
+
kinds: [
|
|
2518
|
+
.../* @__PURE__ */ new Set([
|
|
2519
|
+
...Object.keys(summary.contributes ?? {}),
|
|
2520
|
+
...entry2?.contributes ?? []
|
|
2521
|
+
])
|
|
2522
|
+
],
|
|
2523
|
+
unsupported: false,
|
|
2524
|
+
needsTermix: null
|
|
2512
2525
|
});
|
|
2513
2526
|
}
|
|
2514
2527
|
for (const entry2 of byId.values()) {
|
|
@@ -2550,7 +2563,10 @@ function mergePlugins(installed, registry) {
|
|
|
2550
2563
|
registryId: entry2.registryId ?? "official",
|
|
2551
2564
|
registryName: entry2.registryName ?? null,
|
|
2552
2565
|
managedByServer: false,
|
|
2553
|
-
defaultLook: false
|
|
2566
|
+
defaultLook: false,
|
|
2567
|
+
kinds: entry2.contributes ?? [],
|
|
2568
|
+
unsupported: entry2.latestVersion === null,
|
|
2569
|
+
needsTermix: entry2.latestVersion === null ? entry2.versions.find((v) => v.needsTermix)?.needsTermix ?? null : null
|
|
2554
2570
|
});
|
|
2555
2571
|
}
|
|
2556
2572
|
return rows;
|
|
@@ -2589,7 +2605,10 @@ function uploadEntry(preview) {
|
|
|
2589
2605
|
registryId: null,
|
|
2590
2606
|
registryName: null,
|
|
2591
2607
|
managedByServer: false,
|
|
2592
|
-
defaultLook: false
|
|
2608
|
+
defaultLook: false,
|
|
2609
|
+
kinds: [],
|
|
2610
|
+
unsupported: false,
|
|
2611
|
+
needsTermix: null
|
|
2593
2612
|
};
|
|
2594
2613
|
}
|
|
2595
2614
|
function latestPublished(versions) {
|
|
@@ -2623,6 +2642,32 @@ function matchesQuery(row, query) {
|
|
|
2623
2642
|
function categoriesOf(rows) {
|
|
2624
2643
|
return [...new Set(rows.map((row) => row.category).filter(Boolean))].sort();
|
|
2625
2644
|
}
|
|
2645
|
+
var PLUGIN_KINDS = [
|
|
2646
|
+
"layouts",
|
|
2647
|
+
"themes",
|
|
2648
|
+
"tabs",
|
|
2649
|
+
"panels",
|
|
2650
|
+
"dashboardCards",
|
|
2651
|
+
"protocols",
|
|
2652
|
+
"auth",
|
|
2653
|
+
"actions",
|
|
2654
|
+
"hostCapability"
|
|
2655
|
+
];
|
|
2656
|
+
function kindsOf(rows) {
|
|
2657
|
+
return PLUGIN_KINDS.map((kind) => ({
|
|
2658
|
+
kind,
|
|
2659
|
+
count: rows.filter((row) => row.kinds.includes(kind)).length
|
|
2660
|
+
})).filter((entry2) => entry2.count > 0);
|
|
2661
|
+
}
|
|
2662
|
+
function pageOf(rows, page, size) {
|
|
2663
|
+
const pages = Math.max(1, Math.ceil(rows.length / size));
|
|
2664
|
+
const current = Math.min(Math.max(1, page), pages);
|
|
2665
|
+
return {
|
|
2666
|
+
items: rows.slice((current - 1) * size, current * size),
|
|
2667
|
+
page: current,
|
|
2668
|
+
pages
|
|
2669
|
+
};
|
|
2670
|
+
}
|
|
2626
2671
|
function capabilityRisk(capability) {
|
|
2627
2672
|
return getCapabilityInfo(capability)?.risk ?? "medium";
|
|
2628
2673
|
}
|
|
@@ -3098,6 +3143,8 @@ export {
|
|
|
3098
3143
|
sortPlugins,
|
|
3099
3144
|
matchesQuery,
|
|
3100
3145
|
categoriesOf,
|
|
3146
|
+
kindsOf,
|
|
3147
|
+
pageOf,
|
|
3101
3148
|
capabilityRisk,
|
|
3102
3149
|
orderByRisk,
|
|
3103
3150
|
isSevere,
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
hasPermission,
|
|
4
4
|
resetPermissionsCache,
|
|
5
5
|
usePermissions
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-T2PZWXFJ.js";
|
|
7
7
|
import {
|
|
8
8
|
Button,
|
|
9
9
|
Check,
|
|
@@ -80,7 +80,7 @@ import {
|
|
|
80
80
|
withIconBoundary,
|
|
81
81
|
withPluginContext,
|
|
82
82
|
withPluginScope
|
|
83
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-ERGN4YW6.js";
|
|
84
84
|
import {
|
|
85
85
|
SYNC_CHANGED_EVENT,
|
|
86
86
|
TRUST_TOKEN_KEY,
|
|
@@ -130,7 +130,7 @@ import {
|
|
|
130
130
|
usePluginStore,
|
|
131
131
|
useTabTypes,
|
|
132
132
|
websocketAuthProtocols
|
|
133
|
-
} from "./chunk-
|
|
133
|
+
} from "./chunk-CN5UBTBP.js";
|
|
134
134
|
import {
|
|
135
135
|
define_import_meta_env_default,
|
|
136
136
|
init_define_import_meta_env
|
|
@@ -1112,11 +1112,6 @@ var en_default = {
|
|
|
1112
1112
|
pluginsSomeFailed: "Some plugins could not be changed. You can fix them later from the Plugins tab. Press Next to continue.",
|
|
1113
1113
|
pluginsApplyFailed: "Your choices could not be saved. Try again, or continue and change them later from the Plugins tab.",
|
|
1114
1114
|
pluginsLoadFailed: "The plugin list could not be loaded. You can choose plugins later from the Plugins tab.",
|
|
1115
|
-
presetTitle: "How much do you want on screen?",
|
|
1116
|
-
presetIntro: "Choose how much shows on screen.",
|
|
1117
|
-
presetChangeLater: "You can switch presets or change any single setting later in Settings, under Interface.",
|
|
1118
|
-
appearanceTitle: "Make it yours",
|
|
1119
|
-
appearanceIntro: "Pick a theme, an accent color, a font and your language. Changes show right away, and you can change them later in Settings.",
|
|
1120
1115
|
securityTitle: "Secure your account",
|
|
1121
1116
|
securityIntro: "Add a passkey or an authenticator app to your account. You can also do this later in Settings, under Security.",
|
|
1122
1117
|
desktopTitle: "How do you want to use Termix?",
|
|
@@ -1178,10 +1173,7 @@ var en_default = {
|
|
|
1178
1173
|
retry: "Retry",
|
|
1179
1174
|
refresh: "Refresh",
|
|
1180
1175
|
optional: "Optional",
|
|
1181
|
-
downloadSample: "Download Sample",
|
|
1182
1176
|
failedToDeleteHost: "Failed to delete {{name}}",
|
|
1183
|
-
importSkipExisting: "Import (skip existing)",
|
|
1184
|
-
importSSHConfig: "Import from SSH config",
|
|
1185
1177
|
connectionDetails: "Connection Details",
|
|
1186
1178
|
ssh: "SSH",
|
|
1187
1179
|
telnet: "Telnet",
|
|
@@ -1400,10 +1392,7 @@ var en_default = {
|
|
|
1400
1392
|
noFolder: "(No folder)",
|
|
1401
1393
|
deleteSelected: "Delete",
|
|
1402
1394
|
exitSelection: "Exit selection",
|
|
1403
|
-
importSkip: "Import (skip existing)",
|
|
1404
|
-
importOverwrite: "Import (overwrite)",
|
|
1405
1395
|
collapseBtn: "Collapse",
|
|
1406
|
-
importExportBtn: "Import / Export",
|
|
1407
1396
|
hostStatusesRefreshed: "Host statuses refreshed",
|
|
1408
1397
|
failedToRefreshHosts: "Failed to refresh hosts",
|
|
1409
1398
|
movedHostTo: 'Moved {{host}} to "{{folder}}"',
|
|
@@ -1568,35 +1557,6 @@ var en_default = {
|
|
|
1568
1557
|
addCredentialBtn2: "Add Credential",
|
|
1569
1558
|
checkingHostStatuses: "Checking host statuses...",
|
|
1570
1559
|
pinnedSection: "Pinned",
|
|
1571
|
-
hostsExported: "Hosts exported successfully",
|
|
1572
|
-
export: {
|
|
1573
|
-
menuItem: "Export...",
|
|
1574
|
-
title: "Export hosts",
|
|
1575
|
-
scope: "Scope",
|
|
1576
|
-
scopeAll: "All",
|
|
1577
|
-
scopeSelected: "Selected",
|
|
1578
|
-
searchHosts: "Search hosts...",
|
|
1579
|
-
include: "Include",
|
|
1580
|
-
groupConnection: "Connection",
|
|
1581
|
-
groupCredentials: "Credentials",
|
|
1582
|
-
groupNotes: "Notes",
|
|
1583
|
-
groupTags: "Tags & pin",
|
|
1584
|
-
groupProxy: "Proxy",
|
|
1585
|
-
groupJumpHosts: "Jump hosts",
|
|
1586
|
-
groupFeatureFlags: "Plugin settings",
|
|
1587
|
-
groupAdvanced: "Advanced config",
|
|
1588
|
-
preview: "Preview",
|
|
1589
|
-
moreHosts_one: "... {{count}} more host",
|
|
1590
|
-
moreHosts_other: "... {{count}} more hosts",
|
|
1591
|
-
summary: "{{selected}} of {{total}} hosts",
|
|
1592
|
-
credentialsIncluded: "credentials included",
|
|
1593
|
-
credentialsExcluded: "credentials excluded",
|
|
1594
|
-
noneSelected: "No hosts selected",
|
|
1595
|
-
cancel: "Cancel",
|
|
1596
|
-
confirm: "Export",
|
|
1597
|
-
fetchFailed: "Failed to load hosts for export",
|
|
1598
|
-
bulkButton: "Export"
|
|
1599
|
-
},
|
|
1600
1560
|
sampleDownloaded: "Sample file downloaded",
|
|
1601
1561
|
failedToDeleteCredential2: "Failed to delete credential",
|
|
1602
1562
|
noFolderOption: "(No folder)",
|
|
@@ -1759,11 +1719,7 @@ var en_default = {
|
|
|
1759
1719
|
editorUpdate: "Update Host",
|
|
1760
1720
|
editorAdd: "Add Host",
|
|
1761
1721
|
speedSearch: "Search hosts. Arrow keys to select, Enter to connect, Esc to close",
|
|
1762
|
-
speedSearchList: "Host list. Type or press / to search."
|
|
1763
|
-
importNoHosts: "No hosts found in the file",
|
|
1764
|
-
importTooMany: "You can import up to {{max}} hosts at once",
|
|
1765
|
-
importSummary: "Import done: {{imported}} imported, {{updated}} updated, {{failed}} failed",
|
|
1766
|
-
importHostsFailed: "Failed to import hosts"
|
|
1722
|
+
speedSearchList: "Host list. Type or press / to search."
|
|
1767
1723
|
},
|
|
1768
1724
|
splitScreen: {
|
|
1769
1725
|
title: "Split screen",
|
|
@@ -2095,6 +2051,10 @@ var en_default = {
|
|
|
2095
2051
|
title: "Access serial and USB devices",
|
|
2096
2052
|
consequence: "It can open a physical serial port on the machine running Termix."
|
|
2097
2053
|
},
|
|
2054
|
+
"hosts:export": {
|
|
2055
|
+
title: "Export hosts with their secrets",
|
|
2056
|
+
consequence: "Can read your hosts in full, including saved passwords and keys, and hand them out. Every export is written to the audit log."
|
|
2057
|
+
},
|
|
2098
2058
|
"hosts:write": {
|
|
2099
2059
|
title: "Create and change hosts",
|
|
2100
2060
|
consequence: "It can add hosts and edit the ones you already have."
|
|
@@ -2139,10 +2099,26 @@ var en_default = {
|
|
|
2139
2099
|
title: "Read the audit log",
|
|
2140
2100
|
consequence: "It can see who did what and when."
|
|
2141
2101
|
},
|
|
2102
|
+
"network:probe": {
|
|
2103
|
+
title: "Check if ports answer",
|
|
2104
|
+
consequence: "Can open a plain connection to any address from the server, to see if it is reachable."
|
|
2105
|
+
},
|
|
2106
|
+
"hosts:status-provide": {
|
|
2107
|
+
title: "Provide host status",
|
|
2108
|
+
consequence: "Becomes the source of the online and offline dots for every host."
|
|
2109
|
+
},
|
|
2110
|
+
"hosts:activity-provide": {
|
|
2111
|
+
title: "Store recent activity",
|
|
2112
|
+
consequence: "Becomes the store for the recent activity list of every user."
|
|
2113
|
+
},
|
|
2142
2114
|
"desktop:window": {
|
|
2143
2115
|
title: "Open desktop windows",
|
|
2144
2116
|
consequence: "Only in the Termix desktop app."
|
|
2145
2117
|
},
|
|
2118
|
+
"desktop:local": {
|
|
2119
|
+
title: "Use this computer",
|
|
2120
|
+
consequence: "Can read and change files, run a shell and open local ports on this computer. Only in the Termix desktop app."
|
|
2121
|
+
},
|
|
2146
2122
|
"users:impersonate": {
|
|
2147
2123
|
title: "Act as other users",
|
|
2148
2124
|
consequence: "Runs background work with another user's access, such as scheduled jobs. Every use is written to the audit log."
|
|
@@ -2389,7 +2365,6 @@ var en_default = {
|
|
|
2389
2365
|
noServerAccess: "No access to your servers",
|
|
2390
2366
|
searchInstalled: "Search installed",
|
|
2391
2367
|
searchPlugins: "Search plugins",
|
|
2392
|
-
allCategories: "All",
|
|
2393
2368
|
nothingMatches: "Nothing matches that.",
|
|
2394
2369
|
noneInstalled: "No plugins installed yet. Browse to add some.",
|
|
2395
2370
|
nothingHere: "Nothing here.",
|
|
@@ -2479,7 +2454,44 @@ var en_default = {
|
|
|
2479
2454
|
documentation: "Documentation",
|
|
2480
2455
|
envVars: "Environment variables",
|
|
2481
2456
|
envRequired: "Required",
|
|
2482
|
-
envDefault: "Default: {{value}}"
|
|
2457
|
+
envDefault: "Default: {{value}}",
|
|
2458
|
+
kinds: {
|
|
2459
|
+
layouts: "Layouts",
|
|
2460
|
+
themes: "Themes",
|
|
2461
|
+
tabs: "Tabs",
|
|
2462
|
+
panels: "Sidebar panels",
|
|
2463
|
+
dashboardCards: "Dashboard cards",
|
|
2464
|
+
protocols: "Connection types",
|
|
2465
|
+
auth: "Sign in methods",
|
|
2466
|
+
actions: "Actions",
|
|
2467
|
+
hostCapability: "Host settings"
|
|
2468
|
+
},
|
|
2469
|
+
filters: {
|
|
2470
|
+
type: "Type",
|
|
2471
|
+
allTypes: "All types",
|
|
2472
|
+
category: "Category",
|
|
2473
|
+
allCategories: "All categories",
|
|
2474
|
+
results_one: "{{count}} plugin",
|
|
2475
|
+
results_other: "{{count}} plugins",
|
|
2476
|
+
remove: "Remove filter {{name}}",
|
|
2477
|
+
clear: "Clear filters",
|
|
2478
|
+
button: "Filters",
|
|
2479
|
+
buttonCount: "Filters ({{count}})"
|
|
2480
|
+
},
|
|
2481
|
+
pager: {
|
|
2482
|
+
range: "{{from}}-{{to}} of {{total}}",
|
|
2483
|
+
page: "Page {{page}} of {{pages}}",
|
|
2484
|
+
previous: "Previous page",
|
|
2485
|
+
next: "Next page",
|
|
2486
|
+
perPage: "{{count}} per page",
|
|
2487
|
+
perPageLabel: "Plugins per page"
|
|
2488
|
+
},
|
|
2489
|
+
showUnsupportedHint: "These are listed but no release runs on this version yet. Update Termix to install them.",
|
|
2490
|
+
unsupported: "Needs a newer Termix",
|
|
2491
|
+
unsupportedHint: "No release of this plugin runs on this version of Termix. Update Termix to install it.",
|
|
2492
|
+
needsTermix: "Needs Termix {{range}}",
|
|
2493
|
+
showUnsupported: "Show unsupported ({{count}})",
|
|
2494
|
+
showMore: "Show {{count}} more ({{total}} left)"
|
|
2483
2495
|
}
|
|
2484
2496
|
},
|
|
2485
2497
|
settings: {
|
|
@@ -3104,6 +3116,8 @@ function makeHostSshSubTabs(t, protocols2, defaultsMode = false) {
|
|
|
3104
3116
|
init_define_import_meta_env();
|
|
3105
3117
|
var actions = createRegistry(byOrderThenId);
|
|
3106
3118
|
var badges = createRegistry(byOrderThenId);
|
|
3119
|
+
var statusIndicators = createRegistry(byOrderThenId);
|
|
3120
|
+
var editorToolbarItems = createRegistry(byOrderThenId);
|
|
3107
3121
|
var menuItems = createRegistry(byOrderThenId);
|
|
3108
3122
|
var registerHostAction = actions.register;
|
|
3109
3123
|
var useHostActions = actions.useList;
|
|
@@ -3113,6 +3127,10 @@ function actionOrder(action) {
|
|
|
3113
3127
|
var listHostActions = actions.list;
|
|
3114
3128
|
var registerHostBadge = badges.register;
|
|
3115
3129
|
var useHostBadges = badges.useList;
|
|
3130
|
+
var registerHostStatusIndicator = statusIndicators.register;
|
|
3131
|
+
var useHostStatusIndicators = statusIndicators.useList;
|
|
3132
|
+
var registerHostEditorToolbarItem = editorToolbarItems.register;
|
|
3133
|
+
var useHostEditorToolbarItems = editorToolbarItems.useList;
|
|
3116
3134
|
var registerHostContextMenuItem = menuItems.register;
|
|
3117
3135
|
var useHostContextMenuItems = menuItems.useList;
|
|
3118
3136
|
function safeWhen(predicate, host) {
|
|
@@ -3135,6 +3153,12 @@ function defaultConnectAction(all, host) {
|
|
|
3135
3153
|
function hostBadgesFor(all, host) {
|
|
3136
3154
|
return all.filter((badge) => safeWhen(badge.when, host));
|
|
3137
3155
|
}
|
|
3156
|
+
function hostStatusIndicatorsFor(all, host) {
|
|
3157
|
+
return all.filter((item) => safeWhen(item.when, host));
|
|
3158
|
+
}
|
|
3159
|
+
function hostEditorToolbarItemsFor(all, host) {
|
|
3160
|
+
return all.filter((item) => safeWhen(item.when, host));
|
|
3161
|
+
}
|
|
3138
3162
|
function hostMenuItemsFor(all, host) {
|
|
3139
3163
|
return all.filter((item) => safeWhen(item.when, host));
|
|
3140
3164
|
}
|
|
@@ -3145,6 +3169,8 @@ function runHostAction(action, host, shell2) {
|
|
|
3145
3169
|
function resetHostContributions() {
|
|
3146
3170
|
actions.reset();
|
|
3147
3171
|
badges.reset();
|
|
3172
|
+
statusIndicators.reset();
|
|
3173
|
+
editorToolbarItems.reset();
|
|
3148
3174
|
menuItems.reset();
|
|
3149
3175
|
}
|
|
3150
3176
|
|
|
@@ -3607,12 +3633,18 @@ function PluginComponent({
|
|
|
3607
3633
|
// src/ui/onboarding/onboarding-registry.ts
|
|
3608
3634
|
init_define_import_meta_env();
|
|
3609
3635
|
var SECTION_POSITION = {
|
|
3636
|
+
start: 25,
|
|
3610
3637
|
setup: 50,
|
|
3611
3638
|
explore: 80,
|
|
3612
3639
|
security: 95
|
|
3613
3640
|
};
|
|
3641
|
+
var MIN_POSITION = 1;
|
|
3642
|
+
var MAX_POSITION = 99;
|
|
3614
3643
|
var onboardingSteps = createRegistry();
|
|
3615
|
-
function sectionPosition(section, order2 = 0) {
|
|
3644
|
+
function sectionPosition(section, order2 = 0, position) {
|
|
3645
|
+
if (typeof position === "number" && Number.isFinite(position)) {
|
|
3646
|
+
return Math.max(MIN_POSITION, Math.min(MAX_POSITION, position));
|
|
3647
|
+
}
|
|
3616
3648
|
const base = SECTION_POSITION[section ?? "explore"];
|
|
3617
3649
|
return base + Math.max(-1, Math.min(1, order2 / 1e3)) * 0.4;
|
|
3618
3650
|
}
|
|
@@ -8749,7 +8781,30 @@ function createPluginApp(pluginId, manifest, contributes, options = {}) {
|
|
|
8749
8781
|
id: badge.id,
|
|
8750
8782
|
pluginId,
|
|
8751
8783
|
when: hostCallback(badge.when),
|
|
8752
|
-
component: scoped(badge.component)
|
|
8784
|
+
component: scoped(badge.component),
|
|
8785
|
+
order: badge.order
|
|
8786
|
+
})
|
|
8787
|
+
);
|
|
8788
|
+
},
|
|
8789
|
+
registerHostStatusIndicator(indicator) {
|
|
8790
|
+
return track(
|
|
8791
|
+
registerHostStatusIndicator({
|
|
8792
|
+
id: indicator.id,
|
|
8793
|
+
pluginId,
|
|
8794
|
+
when: hostCallback(indicator.when),
|
|
8795
|
+
component: scoped(indicator.component),
|
|
8796
|
+
order: indicator.order
|
|
8797
|
+
})
|
|
8798
|
+
);
|
|
8799
|
+
},
|
|
8800
|
+
registerHostEditorToolbarItem(item) {
|
|
8801
|
+
return track(
|
|
8802
|
+
registerHostEditorToolbarItem({
|
|
8803
|
+
id: item.id,
|
|
8804
|
+
pluginId,
|
|
8805
|
+
when: hostCallback(item.when),
|
|
8806
|
+
component: scoped(item.component),
|
|
8807
|
+
order: item.order
|
|
8753
8808
|
})
|
|
8754
8809
|
);
|
|
8755
8810
|
},
|
|
@@ -8903,7 +8958,8 @@ function createPluginApp(pluginId, manifest, contributes, options = {}) {
|
|
|
8903
8958
|
Component: scoped(step.component),
|
|
8904
8959
|
audience: step.audience ?? "all",
|
|
8905
8960
|
permission: step.permission ? resolvePluginPermission(pluginId, step.permission) : void 0,
|
|
8906
|
-
position: sectionPosition(step.section, step.order),
|
|
8961
|
+
position: sectionPosition(step.section, step.order, step.position),
|
|
8962
|
+
replaces: step.replaces,
|
|
8907
8963
|
isRelevant: when ? (ctx) => when({
|
|
8908
8964
|
isAdmin: ctx.isAdmin,
|
|
8909
8965
|
isDesktop: ctx.isDesktop,
|
|
@@ -9984,7 +10040,7 @@ function hostToSSHHost(h) {
|
|
|
9984
10040
|
// src/ui/shell/tabUtils.tsx
|
|
9985
10041
|
import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
9986
10042
|
var PluginsTab = lazy(
|
|
9987
|
-
() => import("./PluginsTab-
|
|
10043
|
+
() => import("./PluginsTab-OXQQ7M4I.js").then((m) => ({ default: m.PluginsTab }))
|
|
9988
10044
|
);
|
|
9989
10045
|
function preloadTabSurface(type) {
|
|
9990
10046
|
const loader = getTabType(type)?.preload;
|
|
@@ -10228,10 +10284,14 @@ export {
|
|
|
10228
10284
|
actionOrder,
|
|
10229
10285
|
listHostActions,
|
|
10230
10286
|
useHostBadges,
|
|
10287
|
+
useHostStatusIndicators,
|
|
10288
|
+
useHostEditorToolbarItems,
|
|
10231
10289
|
useHostContextMenuItems,
|
|
10232
10290
|
hostActionsFor,
|
|
10233
10291
|
defaultConnectAction,
|
|
10234
10292
|
hostBadgesFor,
|
|
10293
|
+
hostStatusIndicatorsFor,
|
|
10294
|
+
hostEditorToolbarItemsFor,
|
|
10235
10295
|
hostMenuItemsFor,
|
|
10236
10296
|
runHostAction,
|
|
10237
10297
|
resetHostContributions,
|
|
@@ -4920,31 +4920,6 @@ async function updateSSHHost(hostId, hostData) {
|
|
|
4920
4920
|
throw handleApiError(error, "update SSH host");
|
|
4921
4921
|
}
|
|
4922
4922
|
}
|
|
4923
|
-
async function bulkImportSSHHosts(hosts, overwrite = false, credentials) {
|
|
4924
|
-
try {
|
|
4925
|
-
const response = await sshHostApi.post("/bulk-import", {
|
|
4926
|
-
hosts,
|
|
4927
|
-
overwrite,
|
|
4928
|
-
...credentials ? { credentials } : {}
|
|
4929
|
-
});
|
|
4930
|
-
invalidateHostsAndStatusCaches();
|
|
4931
|
-
return response.data;
|
|
4932
|
-
} catch (error) {
|
|
4933
|
-
handleApiError(error, "bulk import SSH hosts");
|
|
4934
|
-
}
|
|
4935
|
-
}
|
|
4936
|
-
async function importSSHConfigHosts(content, overwrite = false) {
|
|
4937
|
-
try {
|
|
4938
|
-
const response = await sshHostApi.post("/ssh-config-import", {
|
|
4939
|
-
content,
|
|
4940
|
-
overwrite
|
|
4941
|
-
});
|
|
4942
|
-
invalidateHostsAndStatusCaches();
|
|
4943
|
-
return response.data;
|
|
4944
|
-
} catch (error) {
|
|
4945
|
-
handleApiError(error, "import SSH config hosts");
|
|
4946
|
-
}
|
|
4947
|
-
}
|
|
4948
4923
|
async function bulkUpdateSSHHosts(hostIds, updates) {
|
|
4949
4924
|
try {
|
|
4950
4925
|
const response = await sshHostApi.patch("/bulk-update", {
|
|
@@ -4975,16 +4950,6 @@ async function deleteSSHHost(hostId) {
|
|
|
4975
4950
|
handleApiError(error, "delete SSH host");
|
|
4976
4951
|
}
|
|
4977
4952
|
}
|
|
4978
|
-
async function exportAllSSHHosts(options) {
|
|
4979
|
-
try {
|
|
4980
|
-
const response = await sshHostApi.get(
|
|
4981
|
-
options?.share ? "/db/hosts/export?share=1" : "/db/hosts/export"
|
|
4982
|
-
);
|
|
4983
|
-
return response.data;
|
|
4984
|
-
} catch (error) {
|
|
4985
|
-
handleApiError(error, "export all SSH hosts");
|
|
4986
|
-
}
|
|
4987
|
-
}
|
|
4988
4953
|
|
|
4989
4954
|
// src/ui/api/host-status-api.ts
|
|
4990
4955
|
init_define_import_meta_env();
|
|
@@ -5631,14 +5596,6 @@ async function getBranding() {
|
|
|
5631
5596
|
handleApiError(error, "fetch branding settings");
|
|
5632
5597
|
}
|
|
5633
5598
|
}
|
|
5634
|
-
async function updateBranding(update) {
|
|
5635
|
-
try {
|
|
5636
|
-
const response = await authApi.patch("/users/branding", update);
|
|
5637
|
-
return response.data;
|
|
5638
|
-
} catch (error) {
|
|
5639
|
-
handleApiError(error, "update branding settings");
|
|
5640
|
-
}
|
|
5641
|
-
}
|
|
5642
5599
|
|
|
5643
5600
|
// src/ui/api/user-management-api.ts
|
|
5644
5601
|
init_define_import_meta_env();
|
|
@@ -6221,40 +6178,6 @@ async function reorderCredentials(positions) {
|
|
|
6221
6178
|
throw error;
|
|
6222
6179
|
}
|
|
6223
6180
|
}
|
|
6224
|
-
async function generatePublicKeyFromPrivate(privateKey, keyPassword) {
|
|
6225
|
-
try {
|
|
6226
|
-
const response = await authApi.post("/credentials/generate-public-key", {
|
|
6227
|
-
privateKey,
|
|
6228
|
-
keyPassword
|
|
6229
|
-
});
|
|
6230
|
-
return response.data;
|
|
6231
|
-
} catch (error) {
|
|
6232
|
-
throw handleApiError(error, "generate public key from private key");
|
|
6233
|
-
}
|
|
6234
|
-
}
|
|
6235
|
-
async function generateKeyPair(keyType, keySize, passphrase) {
|
|
6236
|
-
try {
|
|
6237
|
-
const response = await authApi.post("/credentials/generate-key-pair", {
|
|
6238
|
-
keyType,
|
|
6239
|
-
keySize,
|
|
6240
|
-
passphrase
|
|
6241
|
-
});
|
|
6242
|
-
return response.data;
|
|
6243
|
-
} catch (error) {
|
|
6244
|
-
throw handleApiError(error, "generate SSH key pair");
|
|
6245
|
-
}
|
|
6246
|
-
}
|
|
6247
|
-
async function deployCredentialToHost(credentialId, targetHostId) {
|
|
6248
|
-
try {
|
|
6249
|
-
const response = await authApi.post(
|
|
6250
|
-
`/credentials/${credentialId}/deploy-to-host`,
|
|
6251
|
-
{ targetHostId }
|
|
6252
|
-
);
|
|
6253
|
-
return response.data;
|
|
6254
|
-
} catch (error) {
|
|
6255
|
-
throw handleApiError(error, "deploy credential to host");
|
|
6256
|
-
}
|
|
6257
|
-
}
|
|
6258
6181
|
|
|
6259
6182
|
// src/ui/api/dashboard-api.ts
|
|
6260
6183
|
init_define_import_meta_env();
|
|
@@ -6367,7 +6290,7 @@ async function updateRole(roleId, roleData) {
|
|
|
6367
6290
|
try {
|
|
6368
6291
|
const response = await rbacApi.put(`/rbac/roles/${roleId}`, roleData);
|
|
6369
6292
|
if (roleData.permissions) {
|
|
6370
|
-
const { notifyPermissionsChanged } = await import("./use-permissions-
|
|
6293
|
+
const { notifyPermissionsChanged } = await import("./use-permissions-ISEDRY3J.js");
|
|
6371
6294
|
notifyPermissionsChanged();
|
|
6372
6295
|
}
|
|
6373
6296
|
return response.data;
|
|
@@ -6949,7 +6872,7 @@ function createRemoteOriginApiInstance(path) {
|
|
|
6949
6872
|
});
|
|
6950
6873
|
instance.interceptors.request.use(
|
|
6951
6874
|
async (config) => {
|
|
6952
|
-
const { getLinkedSession: getLinkedSession2 } = await import("./linked-server-
|
|
6875
|
+
const { getLinkedSession: getLinkedSession2 } = await import("./linked-server-5VFO4XQB.js");
|
|
6953
6876
|
const linked = await getLinkedSession2();
|
|
6954
6877
|
config.baseURL = linked ? `${linked.serverUrl}${path}` : "http://no-server-configured";
|
|
6955
6878
|
if (config.headers.set) {
|
|
@@ -7376,12 +7299,9 @@ export {
|
|
|
7376
7299
|
getSSHHosts,
|
|
7377
7300
|
createSSHHost,
|
|
7378
7301
|
updateSSHHost,
|
|
7379
|
-
bulkImportSSHHosts,
|
|
7380
|
-
importSSHConfigHosts,
|
|
7381
7302
|
bulkUpdateSSHHosts,
|
|
7382
7303
|
reorderSSHHosts,
|
|
7383
7304
|
deleteSSHHost,
|
|
7384
|
-
exportAllSSHHosts,
|
|
7385
7305
|
websocketAuthProtocols,
|
|
7386
7306
|
getLinkedSession,
|
|
7387
7307
|
notifySyncChanged,
|
|
@@ -7409,7 +7329,6 @@ export {
|
|
|
7409
7329
|
getSessionTimeout,
|
|
7410
7330
|
updateSessionTimeout,
|
|
7411
7331
|
getBranding,
|
|
7412
|
-
updateBranding,
|
|
7413
7332
|
hydrateLocalSharedHostAuth,
|
|
7414
7333
|
getConnectedRemoteApi,
|
|
7415
7334
|
resolveRemoteHostId,
|
|
@@ -7463,9 +7382,6 @@ export {
|
|
|
7463
7382
|
deleteAllHostsInFolder,
|
|
7464
7383
|
renameCredentialFolder,
|
|
7465
7384
|
reorderCredentials,
|
|
7466
|
-
generatePublicKeyFromPrivate,
|
|
7467
|
-
generateKeyPair,
|
|
7468
|
-
deployCredentialToHost,
|
|
7469
7385
|
getUptime,
|
|
7470
7386
|
getRecentActivity,
|
|
7471
7387
|
logActivity,
|