@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.
Files changed (40) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/PLUGIN-GUIDE.md +91 -59
  3. package/dist/backend.d.ts +404 -0
  4. package/dist/capabilities.js +5 -0
  5. package/dist/db.js +1 -0
  6. package/dist/desktop.d.ts +0 -243
  7. package/dist/frontend.d.ts +23 -2
  8. package/dist/host/{PluginsTab-EV4MSGY6.js → PluginsTab-OXQQ7M4I.js} +511 -178
  9. package/dist/host/{chunk-X4QZKO5G.js → chunk-54KCK6IZ.js} +52 -5
  10. package/dist/host/{chunk-XKA3DBB2.js → chunk-CALNJCHN.js} +114 -54
  11. package/dist/host/{chunk-RUPLD6RF.js → chunk-CN5UBTBP.js} +2 -86
  12. package/dist/host/{chunk-AWR6FYDO.js → chunk-ERGN4YW6.js} +5552 -5550
  13. package/dist/host/{chunk-VEWOYAMZ.js → chunk-T2PZWXFJ.js} +1 -1
  14. package/dist/host/core-classes.json +1 -1
  15. package/dist/host/{linked-server-B4NEG4MA.js → linked-server-5VFO4XQB.js} +1 -1
  16. package/dist/host/{rbac-api-OUO3LUOC.js → rbac-api-5YMBJAO5.js} +1 -1
  17. package/dist/host/testing-host.js +4 -4
  18. package/dist/host/types/src/types/onboarding.d.ts +0 -2
  19. package/dist/host/types/src/ui/api/audit-log-api.d.ts +0 -10
  20. package/dist/host/types/src/ui/api/credentials-api.d.ts +0 -22
  21. package/dist/host/types/src/ui/api/plugins-api.d.ts +4 -0
  22. package/dist/host/types/src/ui/api/settings-api.d.ts +0 -6
  23. package/dist/host/types/src/ui/api/ssh-host-management-api.d.ts +0 -28
  24. package/dist/host/types/src/ui/main-axios.d.ts +2 -2
  25. package/dist/host/types/src/ui/onboarding/onboarding-registry.d.ts +3 -1
  26. package/dist/host/types/src/ui/plugin-host/sdk-ui.d.ts +5 -6
  27. package/dist/host/types/src/ui/plugins/plugin-model.d.ts +20 -0
  28. package/dist/host/types/src/ui/plugins/use-plugins-manager.d.ts +3 -0
  29. package/dist/host/types/src/ui/sidebar/host-contributions.d.ts +10 -0
  30. package/dist/host/ui.js +14 -205
  31. package/dist/host/{use-permissions-6VSHHUMB.js → use-permissions-ISEDRY3J.js} +1 -1
  32. package/dist/manifest.d.ts +10 -1
  33. package/dist/manifest.js +16 -1
  34. package/dist/ssh-keys.d.ts +29 -0
  35. package/dist/ssh-keys.js +85 -0
  36. package/dist/testing.d.ts +32 -15
  37. package/dist/testing.js +218 -1
  38. package/package.json +5 -1
  39. package/schema/manifest.schema.json +10 -0
  40. 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-AWR6FYDO.js";
10
+ } from "./chunk-ERGN4YW6.js";
11
11
  import {
12
12
  isElectron
13
- } from "./chunk-RUPLD6RF.js";
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-VEWOYAMZ.js";
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-AWR6FYDO.js";
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-RUPLD6RF.js";
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-EV4MSGY6.js").then((m) => ({ default: m.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-6VSHHUMB.js");
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-B4NEG4MA.js");
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,