@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
|
@@ -103,15 +103,14 @@ export { ConnectionGate, useConnectionGate, type ConnectionGateController, type
|
|
|
103
103
|
export { type ConnectionUnavailable } from "../components/connection/ConnectionScreen";
|
|
104
104
|
export { APP_VERSION } from "../lib/app-version";
|
|
105
105
|
export { Command as CommandPrimitive } from "cmdk";
|
|
106
|
-
export { buildExportPayload, hostKey, maskSecrets, pluginSecretKeys, type ExportPayload, type FieldGroup, } from "../sidebar/host-export-payload";
|
|
107
106
|
export { type AuthOverrideProtocol, SSH_AUTH_PROTOCOL, } from "../../types/auth-protocols";
|
|
108
107
|
export { CREDENTIAL_ROW_FIELD_KEYS, type CredentialDensity, type CredentialRowFields, type CredentialSidebarFilterState, type CredentialSidebarPreferences, type CredentialSortKey, type CredentialTrayTrigger, defaultCredentialRowFields, defaultCredentialSidebarPreferences, sanitizeCredentialSidebarPreferences, } from "../../types/credential-sidebar-preferences";
|
|
109
108
|
export { CORE_HOST_DEFAULTS, CORE_NAMESPACE, type DefaultOverrides, defaultValuesEqual, findCoreHostDefault, type HostDefaultsLevel, type ResolvedHostDefault, splitDefaultKey, } from "../../types/host-defaults";
|
|
110
109
|
export { defaultHostRowFields, defaultHostSidebarPreferences, type HostClickBehavior, type HostDensity, type HostGroupKey, type HostRowFields, type HostSidebarFilterState, type HostSidebarPreferences, type HostTrayTrigger, sanitizeHostSidebarPreferences, type SortKey, } from "../../types/host-sidebar-preferences";
|
|
111
|
-
export type { HostData, HostProtocolAuthInput, ProxyNode, SSHHost, SSHHostData, } from "../../types";
|
|
112
|
-
export { UI_AREA_KEYS, type UiAreaKey, type UiPreset, } from "../../types/ui-preferences";
|
|
110
|
+
export type { HostData, HostLock, HostProtocolAuthInput, ProxyNode, SSHHost, SSHHostData, } from "../../types";
|
|
111
|
+
export { PRESETS, UI_AREA_KEYS, type UiAreaKey, type UiPreset, } from "../../types/ui-preferences";
|
|
113
112
|
export type { AdminSection, Credential, DashboardCardId, FontSizeId, Host, HostFolder, SharePermissionLevel, Tab, TabType, ThemeId, ToolsTab, UiFontId, } from "../../types/ui-types";
|
|
114
|
-
export { type AuditLog, type AuditLogFilters,
|
|
113
|
+
export { type AuditLog, type AuditLogFilters, getAuditLogActions, getAuditLogs, } from "../api/audit-log-api";
|
|
115
114
|
export { getUserSecondFactors, resetUserSecondFactors, type UserSecondFactorSummary, } from "../api/auth-methods-api";
|
|
116
115
|
export { getCredentials } from "../api/credentials-api";
|
|
117
116
|
export { getFolderDefaultsId, getHostDefaultsLevel, type HostDefaultsChange, type HostDefaultsTarget, previewHostDefaultsLevel, resetHostToDefaults, resolveHostDefaults, saveHostDefaultsLevel, waitForDefaultsJob, } from "../api/host-defaults-api";
|
|
@@ -120,7 +119,7 @@ export { getSessionTimeoutMinutes, getUserPreferences, parseCustomKeybindings, s
|
|
|
120
119
|
export { getDeveloperMode, getPluginAdminSettings, getPluginHostSettings, getPlugins, getPluginUserSettings, type PluginSettingsErrors, type PluginSettingsField, PluginSettingsValidationError, type PluginSummary, setAllPluginChannels, setDeveloperMode, setPluginOptions, updatePluginAdminSettings, updatePluginHostSettings, updatePluginUserSettings, } from "../api/plugins-api";
|
|
121
120
|
export { getNotificationPrivateEndpoints, setNotificationPrivateEndpoints, } from "../api/private-endpoints-api";
|
|
122
121
|
export { type CredentialPermissionLevel, type FolderAccessRule, getCredentialAccess, getFolderAccess, getRoles, revokeCredentialAccess, revokeFolderAccess, shareCredential, type ShareTarget, } from "../api/rbac-api";
|
|
123
|
-
export { type BrandingSettings, getBranding
|
|
122
|
+
export { type BrandingSettings, getBranding } from "../api/settings-api";
|
|
124
123
|
export { getSyncConflicts, getSyncErrors, retrySyncErrors, settleSyncConflict, type SyncBasicAuth, type SyncConflictItem, type SyncEntityInfo, type SyncErrorItem, syncNow, type SyncProxyHeader, type SyncStatus, unlinkServer, updateSyncSettings, } from "../api/sync-api";
|
|
125
124
|
export { getChannelReleases, getUpdateChannel, type ReleaseInfo, setUpdateChannel, type UpdateChannelState, } from "../api/system-status-api";
|
|
126
125
|
export { getTlsStatus, type TlsStatus, uploadTlsCertificate, } from "../api/tls-api";
|
|
@@ -166,7 +165,7 @@ export { tabJumpHotkeyKeys } from "../lib/tab-jump-hotkey";
|
|
|
166
165
|
export { ACCENT_PRESET_COLORS, applyAccentColor, applyFontSize, applyUiFont, DASHBOARD_CARDS, FONT_SIZES, UI_FONTS, } from "../lib/theme";
|
|
167
166
|
export { registerLayout } from "../look/layout-registry";
|
|
168
167
|
export { useChooseTheme } from "../look/use-look-theme";
|
|
169
|
-
export { type AccessRecord, type ActiveSessionInfo, adminCreateUser, adminCreateUserCredential, adminCreateUserHost, adminDeleteUserCredential, adminDeleteUserHost, adminExportUserData, adminGetHostPassword, adminGetUserCredentials, adminGetUserHosts, adminResetUserPassword, adminUpdateUserCredential, adminUpdateUserHost, type ApiKey, assignRoleToUser,
|
|
168
|
+
export { type AccessRecord, type ActiveSessionInfo, adminCreateUser, adminCreateUserCredential, adminCreateUserHost, adminDeleteUserCredential, adminDeleteUserHost, adminExportUserData, adminGetHostPassword, adminGetUserCredentials, adminGetUserHosts, adminResetUserPassword, adminUpdateUserCredential, adminUpdateUserHost, type ApiKey, assignRoleToUser, bulkUpdateSSHHosts, changePassword, createApiKey, createCredential, type CreatedApiKey, createRole, createSSHHost, deleteAccount, deleteAllHostsInFolder, deleteApiKey, deleteCredential, deleteOpenTab, deleteRole, deleteSSHHost, deleteUser, duplicateCredential, getActiveSessions, getApiKeys, getCredentialDetails, getCredentialSidebarPreferences, getExternalAutoProvision, getHostAccess, getHostAuthOverride, getHostPassword, getHostPolicy, type HostPolicy, getHostSidebarPreferences, getHttpsSettings, type HttpsSettings, getLogLevel, getPasswordLoginAllowed, getPasswordResetAllowed, getPermissionsCatalog, getRegistrationAllowed, getSecondFactorAfterExternalLogin, getSessions, getSessionTimeout, getSSHFolders, getSSHHosts, getStatusCheckSettings, getUserInfo, getUserList, getUserRoles, type LinkedAccountInfo, linkExternalToPasswordAccount, logoutUser, makeUserAdmin, type OpenTabRecord, type PermissionCatalogEntry, releaseUrlFrom, removeAdminStatus, removeRoleFromUser, renameCredentialFolder, renameFolder, reorderCredentials, reorderFolders, reorderSSHHosts, resetRecentActivity, revokeAllUserSessions, revokeHostAccess, revokeSession, type Role, saveCredentialSidebarPreferences, saveHostSidebarPreferences, setHostAuthOverride, shareFolder, shareHost, type SSHHostWithStatus, unlinkExternalFromPasswordAccount, updateCredential, updateExternalAutoProvision, updateFolderMetadata, updateHostAccess, updateHttpsSettings, updateLogLevel, updatePasswordLoginAllowed, updatePasswordResetAllowed, updateRegistrationAllowed, updateRole, updateSecondFactorAfterExternalLogin, updateSessionTimeout, updateSSHHost, updateStatusCheckSettings, type UserPreferences, type UserRole, } from "../main-axios";
|
|
170
169
|
export { MANAGE_REQUEST_EVENT, type ManageMode, type ManageRequest, requestFromLegacyEvent, requestManage, takePendingManageRequest, } from "../manage/manage-requests";
|
|
171
170
|
export { useSshAuthEditors } from "./auth-registry";
|
|
172
171
|
export { usePluginStore } from "./plugin-store";
|
|
@@ -196,7 +195,7 @@ export { markTabSurfaceUsed, preloadTabSurface, tabIcon, } from "../shell/tabUti
|
|
|
196
195
|
export { AuthEnrollmentSections } from "../sidebar/AuthEnrollmentSections";
|
|
197
196
|
export { mapCredentials, sshHostToHost } from "../sidebar/HostManagerData";
|
|
198
197
|
export { getHostEditorSection, makeHostSshSubTabs, makeHostTabs, useHostEditorSections, } from "../sidebar/HostManagerTabs";
|
|
199
|
-
export { actionOrder, defaultConnectAction, type HostActionDef, hostActionsFor, hostBadgesFor, hostMenuItemsFor, listHostActions, runHostAction, useHostActions, useHostBadges, useHostContextMenuItems, } from "../sidebar/host-contributions";
|
|
198
|
+
export { actionOrder, defaultConnectAction, type HostActionDef, hostActionsFor, hostBadgesFor, hostEditorToolbarItemsFor, hostMenuItemsFor, hostStatusIndicatorsFor, listHostActions, runHostAction, useHostActions, useHostBadges, useHostContextMenuItems, useHostEditorToolbarItems, useHostStatusIndicators, } from "../sidebar/host-contributions";
|
|
200
199
|
export { useEditorDefaultKeys } from "../sidebar/host-defaults/catalog";
|
|
201
200
|
export { enabledHostProtocols, type HostProtocolDef, hostProtocolFlags, type HostProtocols, listHostProtocols, protocolEnabled, protocolPort, useHostProtocols, withProtocolSettings, } from "../sidebar/host-protocols";
|
|
202
201
|
export { quickConnectTargets } from "../sidebar/quick-connect-host";
|
|
@@ -49,6 +49,12 @@ export interface PluginEntry {
|
|
|
49
49
|
managedByServer: boolean;
|
|
50
50
|
/** The app is drawn with it by default, so it can be swapped but not uninstalled. */
|
|
51
51
|
defaultLook: boolean;
|
|
52
|
+
/** Contribution keys from the manifest or the registry, like layouts. */
|
|
53
|
+
kinds: string[];
|
|
54
|
+
/** Listed, but no release runs on this build. */
|
|
55
|
+
unsupported: boolean;
|
|
56
|
+
/** The Termix range the newest release needs, when this build is too old. */
|
|
57
|
+
needsTermix: string | null;
|
|
52
58
|
}
|
|
53
59
|
export type PluginSource = "bundled" | "official" | "community" | "custom" | "unverified";
|
|
54
60
|
export declare function isPrerelease(version: string | null | undefined): boolean;
|
|
@@ -64,6 +70,20 @@ export type SortKey = "popular" | "name" | "updated" | "category";
|
|
|
64
70
|
export declare function sortPlugins(rows: PluginEntry[], key: SortKey): PluginEntry[];
|
|
65
71
|
export declare function matchesQuery(row: PluginEntry, query: string): boolean;
|
|
66
72
|
export declare function categoriesOf(rows: PluginEntry[]): string[];
|
|
73
|
+
/** Contribution keys worth filtering by, in the order the filter lists them. */
|
|
74
|
+
export declare const PLUGIN_KINDS: readonly ["layouts", "themes", "tabs", "panels", "dashboardCards", "protocols", "auth", "actions", "hostCapability"];
|
|
75
|
+
export type PluginKind = (typeof PLUGIN_KINDS)[number];
|
|
76
|
+
/** The filterable kinds present in a set of rows, with how many have each. */
|
|
77
|
+
export declare function kindsOf(rows: PluginEntry[]): Array<{
|
|
78
|
+
kind: PluginKind;
|
|
79
|
+
count: number;
|
|
80
|
+
}>;
|
|
81
|
+
/** One page of rows, with the page clamped to what exists. */
|
|
82
|
+
export declare function pageOf<T>(rows: T[], page: number, size: number): {
|
|
83
|
+
items: T[];
|
|
84
|
+
page: number;
|
|
85
|
+
pages: number;
|
|
86
|
+
};
|
|
67
87
|
export declare function capabilityRisk(capability: string): CapabilityRisk;
|
|
68
88
|
/** Worst first, the order the consent copy is read in. */
|
|
69
89
|
export declare function orderByRisk(capabilities: string[]): string[];
|
|
@@ -40,6 +40,9 @@ export declare function usePluginsManager(): {
|
|
|
40
40
|
registryName: string | null;
|
|
41
41
|
managedByServer: boolean;
|
|
42
42
|
defaultLook: boolean;
|
|
43
|
+
kinds: string[];
|
|
44
|
+
unsupported: boolean;
|
|
45
|
+
needsTermix: string | null;
|
|
43
46
|
}[];
|
|
44
47
|
loading: boolean;
|
|
45
48
|
refreshing: boolean;
|
|
@@ -2,4 +2,7 @@
|
|
|
2
2
|
* Enrolment sections login methods and second factors register, such as
|
|
3
3
|
* adding a passkey or setting up an authenticator app.
|
|
4
4
|
*/
|
|
5
|
-
export declare function AuthEnrollmentSections(
|
|
5
|
+
export declare function AuthEnrollmentSections({ factorsOnly, }?: {
|
|
6
|
+
/** Only second factors, for a login policy that requires one. */
|
|
7
|
+
factorsOnly?: boolean;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
@@ -45,6 +45,10 @@ export interface HostBadgeDef {
|
|
|
45
45
|
}>;
|
|
46
46
|
order?: number;
|
|
47
47
|
}
|
|
48
|
+
/** The dot or stripe on a host row that shows its status. */
|
|
49
|
+
export type HostStatusIndicatorDef = HostBadgeDef;
|
|
50
|
+
/** A button in the host editor's toolbar. */
|
|
51
|
+
export type HostEditorToolbarItemDef = HostBadgeDef;
|
|
48
52
|
export interface HostContextMenuItemDef {
|
|
49
53
|
id: string;
|
|
50
54
|
pluginId?: string;
|
|
@@ -61,12 +65,18 @@ export declare function actionOrder(action: HostActionDef): number;
|
|
|
61
65
|
export declare const listHostActions: () => HostActionDef[];
|
|
62
66
|
export declare const registerHostBadge: (item: HostBadgeDef) => () => void;
|
|
63
67
|
export declare const useHostBadges: () => HostBadgeDef[];
|
|
68
|
+
export declare const registerHostStatusIndicator: (item: HostBadgeDef) => () => void;
|
|
69
|
+
export declare const useHostStatusIndicators: () => HostBadgeDef[];
|
|
70
|
+
export declare const registerHostEditorToolbarItem: (item: HostBadgeDef) => () => void;
|
|
71
|
+
export declare const useHostEditorToolbarItems: () => HostBadgeDef[];
|
|
64
72
|
export declare const registerHostContextMenuItem: (item: HostContextMenuItemDef) => () => void;
|
|
65
73
|
export declare const useHostContextMenuItems: () => HostContextMenuItemDef[];
|
|
66
74
|
export declare function hostActionsFor(all: HostActionDef[], host: Host, kind?: HostActionDef["kind"]): HostActionDef[];
|
|
67
75
|
/** The connect action a click on the host should run, by priority. */
|
|
68
76
|
export declare function defaultConnectAction(all: HostActionDef[], host: Host): HostActionDef | undefined;
|
|
69
77
|
export declare function hostBadgesFor(all: HostBadgeDef[], host: Host): HostBadgeDef[];
|
|
78
|
+
export declare function hostStatusIndicatorsFor(all: HostStatusIndicatorDef[], host: Host): HostStatusIndicatorDef[];
|
|
79
|
+
export declare function hostEditorToolbarItemsFor(all: HostEditorToolbarItemDef[], host: Host): HostEditorToolbarItemDef[];
|
|
70
80
|
export declare function hostMenuItemsFor(all: HostContextMenuItemDef[], host: Host): HostContextMenuItemDef[];
|
|
71
81
|
/** Runs an action, falling back to opening its tab type. */
|
|
72
82
|
export declare function runHostAction(action: HostActionDef, host: Host, shell: TabShellCallbacks): void;
|
package/dist/host/ui.js
CHANGED
|
@@ -52,6 +52,7 @@ import {
|
|
|
52
52
|
getPollingEnvironmentMultiplier,
|
|
53
53
|
getPreferredHostAction,
|
|
54
54
|
getRegisteredDashboardCard,
|
|
55
|
+
getRememberDeviceAllowed,
|
|
55
56
|
getStatusClasses,
|
|
56
57
|
getSyncConflicts,
|
|
57
58
|
getSyncErrors,
|
|
@@ -61,8 +62,10 @@ import {
|
|
|
61
62
|
hostActionsFor,
|
|
62
63
|
hostBadgesFor,
|
|
63
64
|
hostEditorSectionList,
|
|
65
|
+
hostEditorToolbarItemsFor,
|
|
64
66
|
hostMenuItemsFor,
|
|
65
67
|
hostProtocolFlags,
|
|
68
|
+
hostStatusIndicatorsFor,
|
|
66
69
|
i18n_default,
|
|
67
70
|
installPluginHostBridge,
|
|
68
71
|
isCoreRailView,
|
|
@@ -139,8 +142,10 @@ import {
|
|
|
139
142
|
useHostBadges,
|
|
140
143
|
useHostContextMenuItems,
|
|
141
144
|
useHostEditorSections,
|
|
145
|
+
useHostEditorToolbarItems,
|
|
142
146
|
useHostProtocols,
|
|
143
147
|
useHostStatus,
|
|
148
|
+
useHostStatusIndicators,
|
|
144
149
|
useInstalledPlugins,
|
|
145
150
|
useIsMobile,
|
|
146
151
|
useKeybindingActions,
|
|
@@ -169,10 +174,10 @@ import {
|
|
|
169
174
|
useThemes,
|
|
170
175
|
verifySecondFactor,
|
|
171
176
|
withProtocolSettings
|
|
172
|
-
} from "./chunk-
|
|
177
|
+
} from "./chunk-V44FCJBQ.js";
|
|
173
178
|
import {
|
|
174
179
|
usePermissions
|
|
175
|
-
} from "./chunk-
|
|
180
|
+
} from "./chunk-57DJU2ZA.js";
|
|
176
181
|
import {
|
|
177
182
|
AddButton,
|
|
178
183
|
Card,
|
|
@@ -193,7 +198,7 @@ import {
|
|
|
193
198
|
isPrerelease,
|
|
194
199
|
reportBetaFeedbackUrl,
|
|
195
200
|
reportCoreIssueUrl
|
|
196
|
-
} from "./chunk-
|
|
201
|
+
} from "./chunk-VFTB2RDP.js";
|
|
197
202
|
import {
|
|
198
203
|
Action,
|
|
199
204
|
Activity,
|
|
@@ -383,7 +388,7 @@ import {
|
|
|
383
388
|
useSurfaceKind,
|
|
384
389
|
useUiPreference,
|
|
385
390
|
useUiPreferencesContext
|
|
386
|
-
} from "./chunk-
|
|
391
|
+
} from "./chunk-2IV3VX7F.js";
|
|
387
392
|
import {
|
|
388
393
|
CREDENTIAL_ROW_FIELD_KEYS,
|
|
389
394
|
PRESETS,
|
|
@@ -404,7 +409,6 @@ import {
|
|
|
404
409
|
assignRoleToUser,
|
|
405
410
|
authApi,
|
|
406
411
|
buildOriginWsUrl,
|
|
407
|
-
bulkImportSSHHosts,
|
|
408
412
|
bulkUpdateSSHHosts,
|
|
409
413
|
changePassword,
|
|
410
414
|
completePasswordReset,
|
|
@@ -426,11 +430,7 @@ import {
|
|
|
426
430
|
deleteRole,
|
|
427
431
|
deleteSSHHost,
|
|
428
432
|
deleteUser,
|
|
429
|
-
deployCredentialToHost,
|
|
430
433
|
duplicateCredential,
|
|
431
|
-
exportAllSSHHosts,
|
|
432
|
-
generateKeyPair,
|
|
433
|
-
generatePublicKeyFromPrivate,
|
|
434
434
|
getActiveSessions,
|
|
435
435
|
getApiKeys,
|
|
436
436
|
getBackendUrl,
|
|
@@ -451,7 +451,9 @@ import {
|
|
|
451
451
|
getHostAccess,
|
|
452
452
|
getHostAuthOverride,
|
|
453
453
|
getHostPassword,
|
|
454
|
+
getHostPolicy,
|
|
454
455
|
getHostSidebarPreferences,
|
|
456
|
+
getHttpsSettings,
|
|
455
457
|
getLogLevel,
|
|
456
458
|
getPasswordLoginAllowed,
|
|
457
459
|
getPasswordResetAllowed,
|
|
@@ -480,7 +482,6 @@ import {
|
|
|
480
482
|
handleApiError,
|
|
481
483
|
hostApi,
|
|
482
484
|
hydrateLocalSharedHostAuth,
|
|
483
|
-
importSSHConfigHosts,
|
|
484
485
|
initiatePasswordReset,
|
|
485
486
|
invalidateHostsAndStatusCaches,
|
|
486
487
|
invalidateServerStatusCache,
|
|
@@ -529,11 +530,11 @@ import {
|
|
|
529
530
|
sshHostApi,
|
|
530
531
|
tabTypeForActivity,
|
|
531
532
|
unlinkExternalFromPasswordAccount,
|
|
532
|
-
updateBranding,
|
|
533
533
|
updateCredential,
|
|
534
534
|
updateExternalAutoProvision,
|
|
535
535
|
updateFolderMetadata,
|
|
536
536
|
updateHostAccess,
|
|
537
|
+
updateHttpsSettings,
|
|
537
538
|
updateLogLevel,
|
|
538
539
|
updatePasswordLoginAllowed,
|
|
539
540
|
updatePasswordResetAllowed,
|
|
@@ -547,7 +548,7 @@ import {
|
|
|
547
548
|
useTabs,
|
|
548
549
|
useTabsSafe,
|
|
549
550
|
verifyPasswordResetCode
|
|
550
|
-
} from "./chunk-
|
|
551
|
+
} from "./chunk-3L45NNT5.js";
|
|
551
552
|
import {
|
|
552
553
|
define_import_meta_env_default,
|
|
553
554
|
init_define_import_meta_env
|
|
@@ -4346,6 +4347,7 @@ function Auth({ onLogin }) {
|
|
|
4346
4347
|
const [username, setUsername] = useState7("");
|
|
4347
4348
|
const [password, setPassword] = useState7("");
|
|
4348
4349
|
const [confirmPassword, setConfirmPassword] = useState7("");
|
|
4350
|
+
const [rememberAllowed, setRememberAllowed] = useState7(true);
|
|
4349
4351
|
const [rememberMe, setRememberMe] = useState7(() => {
|
|
4350
4352
|
try {
|
|
4351
4353
|
return localStorage.getItem("rememberMe") === "true";
|
|
@@ -4466,6 +4468,11 @@ function Auth({ onLogin }) {
|
|
|
4466
4468
|
getPasswordResetAllowed().then((allowed) => setPasswordResetAllowed(allowed)).catch(() => setPasswordResetAllowed(false));
|
|
4467
4469
|
void startPreLoginPlugins().catch(() => {
|
|
4468
4470
|
}).finally(() => setAuthPluginsLoading(false));
|
|
4471
|
+
getRememberDeviceAllowed().then((allowed) => {
|
|
4472
|
+
setRememberAllowed(allowed);
|
|
4473
|
+
if (!allowed) setRememberMe(false);
|
|
4474
|
+
}).catch(() => {
|
|
4475
|
+
});
|
|
4469
4476
|
getLoginMethods().then((methods) => setAuthMethods(methods)).catch(() => setAuthMethods([])).finally(() => setAuthMethodsLoaded(true));
|
|
4470
4477
|
}, [localDesktopAuth]);
|
|
4471
4478
|
useEffect6(() => {
|
|
@@ -5361,7 +5368,7 @@ function Auth({ onLogin }) {
|
|
|
5361
5368
|
/* @__PURE__ */ jsx28("p", { className: "text-xs text-muted-foreground", children: view === "login" ? t3("auth.loginSubtitle", "") : view === "register" ? t3("auth.registerSubtitle", "") : t3("auth.loginWithExternalDesc") })
|
|
5362
5369
|
] }),
|
|
5363
5370
|
view === "external" && /* @__PURE__ */ jsxs20("div", { className: "flex flex-col gap-4", children: [
|
|
5364
|
-
/* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2", children: [
|
|
5371
|
+
rememberAllowed && /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2", children: [
|
|
5365
5372
|
/* @__PURE__ */ jsx28(
|
|
5366
5373
|
Checkbox,
|
|
5367
5374
|
{
|
|
@@ -5412,7 +5419,7 @@ function Auth({ onLogin }) {
|
|
|
5412
5419
|
}
|
|
5413
5420
|
) }),
|
|
5414
5421
|
/* @__PURE__ */ jsxs20("div", { className: "flex items-center justify-between", children: [
|
|
5415
|
-
/* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2", children: [
|
|
5422
|
+
rememberAllowed ? /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2", children: [
|
|
5416
5423
|
/* @__PURE__ */ jsx28(
|
|
5417
5424
|
Checkbox,
|
|
5418
5425
|
{
|
|
@@ -5430,7 +5437,7 @@ function Auth({ onLogin }) {
|
|
|
5430
5437
|
children: t3("auth.rememberMe")
|
|
5431
5438
|
}
|
|
5432
5439
|
)
|
|
5433
|
-
] }),
|
|
5440
|
+
] }) : /* @__PURE__ */ jsx28("span", {}),
|
|
5434
5441
|
passwordResetAllowed && /* @__PURE__ */ jsx28(
|
|
5435
5442
|
"button",
|
|
5436
5443
|
{
|
|
@@ -32199,167 +32206,6 @@ function B2({ asChild: r, children: o }, n) {
|
|
|
32199
32206
|
}
|
|
32200
32207
|
var Te = { position: "absolute", width: "1px", height: "1px", padding: "0", margin: "-1px", overflow: "hidden", clip: "rect(0, 0, 0, 0)", whiteSpace: "nowrap", borderWidth: "0" };
|
|
32201
32208
|
|
|
32202
|
-
// src/ui/sidebar/host-export-payload.ts
|
|
32203
|
-
init_define_import_meta_env();
|
|
32204
|
-
var FIELD_GROUP_KEYS = {
|
|
32205
|
-
connection: [
|
|
32206
|
-
"connectionType",
|
|
32207
|
-
"name",
|
|
32208
|
-
"ip",
|
|
32209
|
-
"port",
|
|
32210
|
-
"username",
|
|
32211
|
-
"folder",
|
|
32212
|
-
"domain",
|
|
32213
|
-
"security",
|
|
32214
|
-
"ignoreCert"
|
|
32215
|
-
],
|
|
32216
|
-
notes: ["notes"],
|
|
32217
|
-
tags: ["tags", "pin"],
|
|
32218
|
-
proxy: [
|
|
32219
|
-
"useSocks5",
|
|
32220
|
-
"socks5Host",
|
|
32221
|
-
"socks5Port",
|
|
32222
|
-
"socks5Username",
|
|
32223
|
-
"socks5ProxyChain"
|
|
32224
|
-
],
|
|
32225
|
-
jumpHosts: ["jumpHosts"],
|
|
32226
|
-
// Every plugin's host settings, enable switches included.
|
|
32227
|
-
featureFlags: ["pluginSettings", "forceKeyboardInteractive"],
|
|
32228
|
-
advanced: [
|
|
32229
|
-
"statusCheckEnabled",
|
|
32230
|
-
"statusCheckInterval",
|
|
32231
|
-
"terminalConfig",
|
|
32232
|
-
"sshOptions"
|
|
32233
|
-
]
|
|
32234
|
-
};
|
|
32235
|
-
var SECRET_KEYS = [
|
|
32236
|
-
"password",
|
|
32237
|
-
"key",
|
|
32238
|
-
"keyPassword",
|
|
32239
|
-
"sudoPassword",
|
|
32240
|
-
"socks5Password"
|
|
32241
|
-
];
|
|
32242
|
-
var CREDENTIAL_KEYS = [
|
|
32243
|
-
...SECRET_KEYS,
|
|
32244
|
-
"authType",
|
|
32245
|
-
"keyType",
|
|
32246
|
-
"credentialAlias",
|
|
32247
|
-
"credentialId",
|
|
32248
|
-
"overrideCredentialUsername"
|
|
32249
|
-
];
|
|
32250
|
-
var TUPLE_KEYS = ["name", "ip", "port", "username", "connectionType"];
|
|
32251
|
-
function pluginSecretKeys(summaries) {
|
|
32252
|
-
const result = {};
|
|
32253
|
-
for (const summary of summaries) {
|
|
32254
|
-
for (const field of summary.contributes?.settings?.host?.fields ?? []) {
|
|
32255
|
-
if (!field.secretKeys?.length) continue;
|
|
32256
|
-
(result[summary.id] ??= {})[field.key] = field.secretKeys;
|
|
32257
|
-
}
|
|
32258
|
-
}
|
|
32259
|
-
return result;
|
|
32260
|
-
}
|
|
32261
|
-
var NESTED_SECRET_ARRAYS = [
|
|
32262
|
-
{ container: "socks5ProxyChain", field: "password" }
|
|
32263
|
-
];
|
|
32264
|
-
function mapPluginSecrets(pluginSettings, secrets, replace2) {
|
|
32265
|
-
if (!pluginSettings || typeof pluginSettings !== "object") {
|
|
32266
|
-
return pluginSettings;
|
|
32267
|
-
}
|
|
32268
|
-
const perPlugin = {};
|
|
32269
|
-
for (const [pluginId, values] of Object.entries(
|
|
32270
|
-
pluginSettings
|
|
32271
|
-
)) {
|
|
32272
|
-
const copy = { ...values };
|
|
32273
|
-
for (const [field, keys2] of Object.entries(secrets[pluginId] ?? {})) {
|
|
32274
|
-
const blob = copy[field];
|
|
32275
|
-
if (!blob || typeof blob !== "object") continue;
|
|
32276
|
-
const record = { ...blob };
|
|
32277
|
-
for (const key of keys2) {
|
|
32278
|
-
if (key in record) record[key] = replace2(record[key]);
|
|
32279
|
-
}
|
|
32280
|
-
copy[field] = record;
|
|
32281
|
-
}
|
|
32282
|
-
perPlugin[pluginId] = copy;
|
|
32283
|
-
}
|
|
32284
|
-
return perPlugin;
|
|
32285
|
-
}
|
|
32286
|
-
function hostKey(host) {
|
|
32287
|
-
return JSON.stringify(TUPLE_KEYS.map((k3) => String(host[k3] ?? "")));
|
|
32288
|
-
}
|
|
32289
|
-
function buildExportPayload(raw, selected, groups, withCredentials, pluginSecrets = {}) {
|
|
32290
|
-
const allowed = /* @__PURE__ */ new Set([
|
|
32291
|
-
"exportId",
|
|
32292
|
-
...CREDENTIAL_KEYS,
|
|
32293
|
-
...FIELD_GROUP_KEYS.connection
|
|
32294
|
-
]);
|
|
32295
|
-
for (const group of groups) {
|
|
32296
|
-
for (const key of FIELD_GROUP_KEYS[group]) allowed.add(key);
|
|
32297
|
-
}
|
|
32298
|
-
const hosts = (raw.hosts ?? []).filter((host) => selected === null || selected.has(hostKey(host))).map((host) => {
|
|
32299
|
-
const shaped = {};
|
|
32300
|
-
for (const [key, value] of Object.entries(host)) {
|
|
32301
|
-
if (allowed.has(key)) shaped[key] = value;
|
|
32302
|
-
}
|
|
32303
|
-
if (!withCredentials) {
|
|
32304
|
-
shaped.pluginSettings = mapPluginSecrets(
|
|
32305
|
-
shaped.pluginSettings,
|
|
32306
|
-
pluginSecrets,
|
|
32307
|
-
() => null
|
|
32308
|
-
);
|
|
32309
|
-
for (const { container, field } of NESTED_SECRET_ARRAYS) {
|
|
32310
|
-
const arr = shaped[container];
|
|
32311
|
-
if (Array.isArray(arr)) {
|
|
32312
|
-
shaped[container] = arr.map(
|
|
32313
|
-
(entry) => entry && typeof entry === "object" ? { ...entry, [field]: null } : entry
|
|
32314
|
-
);
|
|
32315
|
-
}
|
|
32316
|
-
}
|
|
32317
|
-
}
|
|
32318
|
-
return shaped;
|
|
32319
|
-
});
|
|
32320
|
-
const result = { ...raw, hosts };
|
|
32321
|
-
if (raw.credentials) {
|
|
32322
|
-
const used = new Set(
|
|
32323
|
-
hosts.map((host) => host.credentialAlias).filter(Boolean)
|
|
32324
|
-
);
|
|
32325
|
-
result.credentials = raw.credentials.filter(
|
|
32326
|
-
(entry) => used.has(entry.alias)
|
|
32327
|
-
);
|
|
32328
|
-
}
|
|
32329
|
-
return result;
|
|
32330
|
-
}
|
|
32331
|
-
function maskSecrets(payload, pluginSecrets = {}) {
|
|
32332
|
-
return {
|
|
32333
|
-
...payload,
|
|
32334
|
-
hosts: payload.hosts.map((host) => {
|
|
32335
|
-
const masked = { ...host };
|
|
32336
|
-
for (const key of SECRET_KEYS) {
|
|
32337
|
-
if (masked[key] !== void 0 && masked[key] !== null && masked[key] !== "") {
|
|
32338
|
-
masked[key] = "<included>";
|
|
32339
|
-
}
|
|
32340
|
-
}
|
|
32341
|
-
masked.pluginSettings = mapPluginSecrets(
|
|
32342
|
-
masked.pluginSettings,
|
|
32343
|
-
pluginSecrets,
|
|
32344
|
-
(value) => value ? "<included>" : value
|
|
32345
|
-
);
|
|
32346
|
-
for (const { container, field } of NESTED_SECRET_ARRAYS) {
|
|
32347
|
-
const arr = masked[container];
|
|
32348
|
-
if (Array.isArray(arr)) {
|
|
32349
|
-
masked[container] = arr.map((entry) => {
|
|
32350
|
-
if (entry && typeof entry === "object") {
|
|
32351
|
-
const record = entry;
|
|
32352
|
-
if (record[field]) return { ...record, [field]: "<included>" };
|
|
32353
|
-
}
|
|
32354
|
-
return entry;
|
|
32355
|
-
});
|
|
32356
|
-
}
|
|
32357
|
-
}
|
|
32358
|
-
return masked;
|
|
32359
|
-
})
|
|
32360
|
-
};
|
|
32361
|
-
}
|
|
32362
|
-
|
|
32363
32209
|
// src/types/auth-protocols.ts
|
|
32364
32210
|
init_define_import_meta_env();
|
|
32365
32211
|
var SSH_AUTH_PROTOCOL = "ssh";
|
|
@@ -32428,25 +32274,6 @@ async function getAuditLogActions() {
|
|
|
32428
32274
|
handleApiError(error, "fetch audit log actions");
|
|
32429
32275
|
}
|
|
32430
32276
|
}
|
|
32431
|
-
async function getAuditForwarding() {
|
|
32432
|
-
try {
|
|
32433
|
-
const response = await authApi.get("/users/audit-forwarding");
|
|
32434
|
-
return response.data;
|
|
32435
|
-
} catch (error) {
|
|
32436
|
-
throw handleApiError(error, "get audit forwarding settings");
|
|
32437
|
-
}
|
|
32438
|
-
}
|
|
32439
|
-
async function updateAuditForwarding(url, token) {
|
|
32440
|
-
try {
|
|
32441
|
-
const response = await authApi.patch("/users/audit-forwarding", {
|
|
32442
|
-
url,
|
|
32443
|
-
token
|
|
32444
|
-
});
|
|
32445
|
-
return response.data;
|
|
32446
|
-
} catch (error) {
|
|
32447
|
-
throw handleApiError(error, "update audit forwarding settings");
|
|
32448
|
-
}
|
|
32449
|
-
}
|
|
32450
32277
|
|
|
32451
32278
|
// src/ui/api/host-defaults-api.ts
|
|
32452
32279
|
init_define_import_meta_env();
|
|
@@ -34081,9 +33908,13 @@ function SplitLayoutMenu({
|
|
|
34081
33908
|
init_define_import_meta_env();
|
|
34082
33909
|
import { useTranslation as useTranslation28 } from "react-i18next";
|
|
34083
33910
|
import { jsx as jsx57, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
34084
|
-
function AuthEnrollmentSections(
|
|
33911
|
+
function AuthEnrollmentSections({
|
|
33912
|
+
factorsOnly = false
|
|
33913
|
+
} = {}) {
|
|
34085
33914
|
const { t: t3 } = useTranslation28();
|
|
34086
|
-
const
|
|
33915
|
+
const methods = useLoginMethods();
|
|
33916
|
+
const factors = useSecondFactors();
|
|
33917
|
+
const sections = [...factorsOnly ? [] : methods, ...factors].filter(
|
|
34087
33918
|
(entry) => entry.enrollment
|
|
34088
33919
|
);
|
|
34089
33920
|
if (sections.length === 0) return null;
|
|
@@ -34226,6 +34057,7 @@ export {
|
|
|
34226
34057
|
NumberField,
|
|
34227
34058
|
OPEN_PLUGINS_EVENT,
|
|
34228
34059
|
PANEL,
|
|
34060
|
+
PRESETS,
|
|
34229
34061
|
PROMPT_BUTTON,
|
|
34230
34062
|
PROMPT_DESTRUCTIVE_BUTTON,
|
|
34231
34063
|
PROMPT_PRIMARY_BUTTON,
|
|
@@ -34323,9 +34155,7 @@ export {
|
|
|
34323
34155
|
applyUiFont,
|
|
34324
34156
|
assignRoleToUser,
|
|
34325
34157
|
beginSplitDrag,
|
|
34326
|
-
buildExportPayload,
|
|
34327
34158
|
buildOriginWsUrl,
|
|
34328
|
-
bulkImportSSHHosts,
|
|
34329
34159
|
bulkUpdateSSHHosts,
|
|
34330
34160
|
canConfigureUpdates,
|
|
34331
34161
|
canJoinSplit,
|
|
@@ -34354,22 +34184,17 @@ export {
|
|
|
34354
34184
|
deleteRole,
|
|
34355
34185
|
deleteSSHHost,
|
|
34356
34186
|
deleteUser,
|
|
34357
|
-
deployCredentialToHost,
|
|
34358
34187
|
desktopUpdates,
|
|
34359
34188
|
docsUrl,
|
|
34360
34189
|
duplicateCredential,
|
|
34361
34190
|
enabledHostProtocols,
|
|
34362
34191
|
endSplitDrag,
|
|
34363
|
-
exportAllSSHHosts,
|
|
34364
34192
|
filterPaletteItems,
|
|
34365
34193
|
findCoreHostDefault,
|
|
34366
34194
|
findMatchingKeybinding,
|
|
34367
|
-
generateKeyPair,
|
|
34368
|
-
generatePublicKeyFromPrivate,
|
|
34369
34195
|
getActiveSessions,
|
|
34370
34196
|
getAdaptiveResourceBudget,
|
|
34371
34197
|
getApiKeys,
|
|
34372
|
-
getAuditForwarding,
|
|
34373
34198
|
getAuditLogActions,
|
|
34374
34199
|
getAuditLogs,
|
|
34375
34200
|
getBasePath,
|
|
@@ -34394,8 +34219,10 @@ export {
|
|
|
34394
34219
|
getHostDefaultsLevel,
|
|
34395
34220
|
getHostEditorSection,
|
|
34396
34221
|
getHostPassword,
|
|
34222
|
+
getHostPolicy,
|
|
34397
34223
|
getHostSidebarPreferences,
|
|
34398
34224
|
getHostTags,
|
|
34225
|
+
getHttpsSettings,
|
|
34399
34226
|
getLiveHostStatus,
|
|
34400
34227
|
getLogLevel,
|
|
34401
34228
|
getNotificationPrivateEndpoints,
|
|
@@ -34438,11 +34265,11 @@ export {
|
|
|
34438
34265
|
hasVisibleFields,
|
|
34439
34266
|
hostActionsFor,
|
|
34440
34267
|
hostBadgesFor,
|
|
34441
|
-
|
|
34268
|
+
hostEditorToolbarItemsFor,
|
|
34442
34269
|
hostMenuItemsFor,
|
|
34443
34270
|
hostProtocolFlags,
|
|
34271
|
+
hostStatusIndicatorsFor,
|
|
34444
34272
|
hydrateLocalSharedHostAuth,
|
|
34445
|
-
importSSHConfigHosts,
|
|
34446
34273
|
invalidateHostsAndStatusCaches,
|
|
34447
34274
|
invalidateServerStatusCache,
|
|
34448
34275
|
isCoreRailView,
|
|
@@ -34467,7 +34294,6 @@ export {
|
|
|
34467
34294
|
mapCredentials,
|
|
34468
34295
|
markAdaptiveResourceUsed,
|
|
34469
34296
|
markTabSurfaceUsed,
|
|
34470
|
-
maskSecrets,
|
|
34471
34297
|
moveRailItem,
|
|
34472
34298
|
moveSplitDrag,
|
|
34473
34299
|
normalizeLanguageCode,
|
|
@@ -34478,7 +34304,6 @@ export {
|
|
|
34478
34304
|
parseServerTime,
|
|
34479
34305
|
pluginKey,
|
|
34480
34306
|
pluginName,
|
|
34481
|
-
pluginSecretKeys,
|
|
34482
34307
|
pluginWsUrl,
|
|
34483
34308
|
preloadTabSurface,
|
|
34484
34309
|
previewHostDefaultsLevel,
|
|
@@ -34551,12 +34376,11 @@ export {
|
|
|
34551
34376
|
takePendingManageRequest,
|
|
34552
34377
|
unlinkExternalFromPasswordAccount,
|
|
34553
34378
|
unlinkServer,
|
|
34554
|
-
updateAuditForwarding,
|
|
34555
|
-
updateBranding,
|
|
34556
34379
|
updateCredential,
|
|
34557
34380
|
updateExternalAutoProvision,
|
|
34558
34381
|
updateFolderMetadata,
|
|
34559
34382
|
updateHostAccess,
|
|
34383
|
+
updateHttpsSettings,
|
|
34560
34384
|
updateLogLevel,
|
|
34561
34385
|
updatePasswordLoginAllowed,
|
|
34562
34386
|
updatePasswordResetAllowed,
|
|
@@ -34588,8 +34412,10 @@ export {
|
|
|
34588
34412
|
useHostBadges,
|
|
34589
34413
|
useHostContextMenuItems,
|
|
34590
34414
|
useHostEditorSections,
|
|
34415
|
+
useHostEditorToolbarItems,
|
|
34591
34416
|
useHostProtocols,
|
|
34592
34417
|
useHostStatus,
|
|
34418
|
+
useHostStatusIndicators,
|
|
34593
34419
|
useInstalledPlugins,
|
|
34594
34420
|
useIsDefaultsEditor,
|
|
34595
34421
|
useIsMobile,
|
package/dist/manifest.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export { ENV_NAME_PATTERN, MAX_ENV_DESCRIPTION_LENGTH, pluginDocsPage, pluginDoc
|
|
|
20
20
|
* "^1.2" needs 1.2 or later). engine.termix is checked against the core
|
|
21
21
|
* version by the server.
|
|
22
22
|
*/
|
|
23
|
-
export declare const PLUGIN_API_VERSION = "1.
|
|
23
|
+
export declare const PLUGIN_API_VERSION = "1.7.0";
|
|
24
24
|
/** The API major, the default engine.api for a new plugin. */
|
|
25
25
|
export declare const SUPPORTED_PLUGIN_API_VERSION: string;
|
|
26
26
|
/** Whether this build's plugin API satisfies a manifest's engine.api. */
|
|
@@ -500,7 +500,16 @@ export interface PluginManifest {
|
|
|
500
500
|
nativeDependencies?: string[];
|
|
501
501
|
/** How a linked desktop treats this plugin. Defaults to "mirror". */
|
|
502
502
|
desktop?: PluginDesktopMode;
|
|
503
|
+
/**
|
|
504
|
+
* "desktop": the plugin only loads on a desktop app's own embedded backend,
|
|
505
|
+
* never on a server. It implies desktop "local" and may declare desktop:local.
|
|
506
|
+
*/
|
|
507
|
+
runtime?: PluginRuntime;
|
|
503
508
|
}
|
|
509
|
+
export type PluginRuntime = "desktop";
|
|
510
|
+
export declare const PLUGIN_RUNTIMES: readonly PluginRuntime[];
|
|
511
|
+
/** The desktop mode a manifest resolves to. */
|
|
512
|
+
export declare function resolvePluginDesktopMode(m: Pick<PluginManifest, "desktop" | "runtime">): PluginDesktopMode;
|
|
504
513
|
export declare const DEFAULT_BACKEND_ENTRY = "dist/backend.js";
|
|
505
514
|
export declare const DEFAULT_FRONTEND_ENTRY = "dist/frontend.js";
|
|
506
515
|
export declare const DEFAULT_LOCALES_DIR = "locales";
|