windmill-components 1.537.1 → 1.542.5
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/package/components/AIProviderPicker.svelte +181 -0
- package/package/components/AIProviderPicker.svelte.d.ts +15 -0
- package/package/components/ArgInfo.svelte +2 -2
- package/package/components/ArgInput.svelte +35 -9
- package/package/components/ArgInput.svelte.d.ts +3 -3
- package/package/components/AssignableTagsInner.svelte +89 -3
- package/package/components/ConcurrentJobsChart.svelte +36 -48
- package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
- package/package/components/CustomPopover.svelte.d.ts +1 -1
- package/package/components/DropdownSelect.svelte +26 -0
- package/package/components/DropdownSelect.svelte.d.ts +11 -0
- package/package/components/DropdownV2Inner.svelte +1 -1
- package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
- package/package/components/DynamicInput.svelte.d.ts +11 -0
- package/package/components/EditableSchemaForm.svelte +119 -95
- package/package/components/EditableSchemaForm.svelte.d.ts +4 -4
- package/package/components/Editor.svelte +86 -93
- package/package/components/Editor.svelte.d.ts +4 -3
- package/package/components/EditorBar.svelte +2 -5
- package/package/components/EditorSettings.svelte +11 -9
- package/package/components/FlowBuilder.svelte +3 -3
- package/package/components/FlowLogRow.svelte +64 -0
- package/package/components/FlowLogRow.svelte.d.ts +15 -0
- package/package/components/FlowLogViewer.svelte +406 -373
- package/package/components/FlowLogViewer.svelte.d.ts +5 -1
- package/package/components/FlowLogViewerWrapper.svelte +44 -1
- package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
- package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
- package/package/components/FlowStatusViewerInner.svelte +34 -3
- package/package/components/FolderPicker.svelte +1 -1
- package/package/components/InputTransformForm.svelte +20 -10
- package/package/components/JobArgs.svelte +1 -1
- package/package/components/JobLoader.svelte.d.ts +1 -1
- package/package/components/JobStatus.svelte +2 -0
- package/package/components/LogSnippetViewer.svelte +3 -3
- package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
- package/package/components/LogViewer.svelte +87 -71
- package/package/components/LogViewer.svelte.d.ts +1 -0
- package/package/components/Path.svelte +7 -1
- package/package/components/Path.svelte.d.ts +1 -1
- package/package/components/PrefixedInput.svelte +120 -0
- package/package/components/PrefixedInput.svelte.d.ts +8 -0
- package/package/components/QueuePosition.svelte +81 -0
- package/package/components/QueuePosition.svelte.d.ts +8 -0
- package/package/components/ResourceNarrowing.svelte +13 -0
- package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
- package/package/components/ResourceTypePicker.svelte +49 -74
- package/package/components/RunChart.svelte +74 -89
- package/package/components/RunChart.svelte.d.ts +10 -22
- package/package/components/S3FilePicker.svelte +1 -1
- package/package/components/SchemaForm.svelte.d.ts +2 -2
- package/package/components/ScriptBuilder.svelte +2 -1
- package/package/components/ScriptEditor.svelte +4 -3
- package/package/components/ScriptEditor.svelte.d.ts +2 -1
- package/package/components/ServiceLogsInner.svelte +1 -1
- package/package/components/ShareModal.svelte.d.ts +1 -1
- package/package/components/SimpleEditor.svelte +4 -67
- package/package/components/StringTypeNarrowing.svelte +5 -10
- package/package/components/TemplateEditor.svelte +2 -16
- package/package/components/TimeAgo.svelte +1 -1
- package/package/components/TimeAgo.svelte.d.ts +1 -0
- package/package/components/Toggle.svelte +2 -1
- package/package/components/Toggle.svelte.d.ts +2 -1
- package/package/components/WorkerRepl.svelte +1 -1
- package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
- package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
- package/package/components/apps/components/display/table/utils.js +36 -5
- package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
- package/package/components/apps/editor/AppEditor.svelte +4 -3
- package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
- package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
- package/package/components/apps/editor/SettingsPanel.svelte +2 -2
- package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +26 -3
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
- package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
- package/package/components/assets/JobAssetsViewer.svelte +28 -24
- package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
- package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
- package/package/components/common/OnChange.svelte.d.ts +11 -4
- package/package/components/common/badge/Badge.svelte +9 -2
- package/package/components/common/badge/Badge.svelte.d.ts +2 -1
- package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
- package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
- package/package/components/common/drawer/Disposable.svelte +9 -11
- package/package/components/common/drawer/Drawer.svelte +3 -4
- package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
- package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
- package/package/components/common/modal/Modal.svelte.d.ts +1 -1
- package/package/components/common/tabs/TabContent.svelte +2 -7
- package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
- package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
- package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
- package/package/components/copilot/MetadataGen.svelte +1 -1
- package/package/components/copilot/chat/AIChatManager.svelte.js +24 -102
- package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
- package/package/components/copilot/chat/anthropic.d.ts +15 -0
- package/package/components/copilot/chat/anthropic.js +208 -0
- package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
- package/package/components/copilot/chat/api/apiTools.js +10 -7
- package/package/components/copilot/chat/api/core.d.ts +1 -1
- package/package/components/copilot/chat/api/core.js +7 -2
- package/package/components/copilot/chat/ask/core.d.ts +1 -1
- package/package/components/copilot/chat/ask/core.js +7 -2
- package/package/components/copilot/chat/flow/core.d.ts +1 -1
- package/package/components/copilot/chat/flow/core.js +14 -4
- package/package/components/copilot/chat/monaco-adapter.d.ts +6 -5
- package/package/components/copilot/chat/navigator/core.d.ts +1 -1
- package/package/components/copilot/chat/navigator/core.js +7 -2
- package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
- package/package/components/copilot/chat/script/core.d.ts +5 -4
- package/package/components/copilot/chat/script/core.js +131 -19
- package/package/components/copilot/chat/shared.d.ts +7 -7
- package/package/components/copilot/lib.d.ts +29 -8
- package/package/components/copilot/lib.js +199 -24
- package/package/components/custom_ui.d.ts +1 -0
- package/package/components/flows/content/FlowInput.svelte +5 -5
- package/package/components/flows/content/FlowModuleComponent.svelte +5 -2
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
- package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +0 -1
- package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
- package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowRetries.svelte +108 -3
- package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
- package/package/components/flows/flowInfers.js +8 -35
- package/package/components/flows/flowStore.d.ts +45 -1
- package/package/components/flows/flowStore.js +1 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +61 -54
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
- package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
- package/package/components/flows/map/InsertModuleButton.svelte +1 -0
- package/package/components/flows/map/InsertModuleInner.svelte +12 -15
- package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
- package/package/components/git_sync/DetectionFlow.svelte +15 -17
- package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
- package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
- package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
- package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
- package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
- package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
- package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
- package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
- package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
- package/package/components/home/ItemsList.svelte +17 -13
- package/package/components/home/TreeView.svelte +21 -27
- package/package/components/home/TreeView.svelte.d.ts +2 -29
- package/package/components/home/TreeViewRoot.svelte +11 -23
- package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
- package/package/components/icons/GitIcon.svelte +10 -2
- package/package/components/icons/GitIcon.svelte.d.ts +1 -0
- package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
- package/package/components/meltComponents/Popover.svelte +23 -3
- package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
- package/package/components/monacoLanguagesOptions.d.ts +3 -0
- package/package/components/monacoLanguagesOptions.js +109 -0
- package/package/components/propertyPicker/ObjectViewer.svelte +7 -2
- package/package/components/propertyPicker/PropPicker.svelte +1 -1
- package/package/components/propertyPicker/utils.js +14 -7
- package/package/components/runs/JobRunsPreview.svelte +212 -177
- package/package/components/runs/JobsLoader.svelte +2 -2
- package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
- package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
- package/package/components/runs/RunBadges.svelte +100 -0
- package/package/components/runs/RunBadges.svelte.d.ts +12 -0
- package/package/components/runs/RunLabels.svelte +86 -0
- package/package/components/runs/RunLabels.svelte.d.ts +10 -0
- package/package/components/runs/RunOption.svelte +20 -0
- package/package/components/runs/RunOption.svelte.d.ts +10 -0
- package/package/components/runs/RunRow.svelte +239 -151
- package/package/components/runs/RunRow.svelte.d.ts +12 -9
- package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
- package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
- package/package/components/runs/RunsFilter.svelte +369 -243
- package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
- package/package/components/runs/RunsQueue.svelte +96 -25
- package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
- package/package/components/runs/RunsTable.svelte +62 -71
- package/package/components/runs/RunsTable.svelte.d.ts +2 -1
- package/package/components/runs/runs-grid.css +95 -0
- package/package/components/schema/EditableSchemaDrawer.svelte +12 -12
- package/package/components/schema/FlowPropertyEditor.svelte +197 -206
- package/package/components/schema/PropertyEditor.svelte +33 -35
- package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -2
- package/package/components/search/GlobalSearchModal.svelte +8 -1
- package/package/components/select/DraggableTags.svelte.d.ts +17 -7
- package/package/components/select/MultiSelect.svelte.d.ts +21 -11
- package/package/components/select/Select.svelte +2 -1
- package/package/components/select/Select.svelte.d.ts +25 -13
- package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
- package/package/components/settings/TokenDisplay.svelte +1 -1
- package/package/components/sidebar/OperatorMenu.svelte +5 -0
- package/package/components/sidebar/SidebarContent.svelte +48 -2
- package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
- package/package/components/toast.js +6 -3
- package/package/components/triggers/AddTriggersButton.svelte +7 -6
- package/package/components/triggers/CaptureWrapper.svelte +19 -3
- package/package/components/triggers/TriggerLabel.svelte +8 -0
- package/package/components/triggers/TriggerTokens.svelte +1 -1
- package/package/components/triggers/TriggersEditor.svelte +9 -5
- package/package/components/triggers/TriggersTable.svelte +2 -2
- package/package/components/triggers/TriggersWrapper.svelte +16 -5
- package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
- package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
- package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
- package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
- package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
- package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
- package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
- package/package/components/triggers/email/EmailCapture.svelte +39 -0
- package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
- package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
- package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
- package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
- package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
- package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
- package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
- package/package/components/triggers/email/utils.d.ts +4 -0
- package/package/components/triggers/email/utils.js +52 -0
- package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
- package/package/components/triggers/http/utils.js +1 -1
- package/package/components/triggers/triggers.svelte.d.ts +1 -0
- package/package/components/triggers/triggers.svelte.js +24 -2
- package/package/components/triggers/utils.js +19 -5
- package/package/components/triggers.d.ts +1 -1
- package/package/components/triggers.js +2 -0
- package/package/components/wizards/AgGridWizard.svelte +85 -80
- package/package/components/workspaceSettings/AISettings.svelte +74 -22
- package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
- package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
- package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
- package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
- package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +142 -3
- package/package/gen/schemas.gen.js +144 -3
- package/package/gen/services.gen.d.ts +129 -1
- package/package/gen/services.gen.js +267 -1
- package/package/gen/types.gen.d.ts +434 -8
- package/package/hubPaths.json +4 -2
- package/package/infer.js +1 -1
- package/package/keyboardChain.d.ts +5 -0
- package/package/keyboardChain.js +40 -0
- package/package/services/JobManager.js +2 -2
- package/package/stores.d.ts +3 -1
- package/package/stores.js +8 -5
- package/package/utils/workspaceHierarchy.d.ts +27 -0
- package/package/utils/workspaceHierarchy.js +101 -0
- package/package/utils.d.ts +6 -3
- package/package/utils.js +30 -15
- package/package/workspace_settings.js +2 -3
- package/package.json +9 -11
- package/package/components/DynSelect.svelte.d.ts +0 -11
- package/package/components/ObjectTypeNarrowing.svelte +0 -18
- package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
- package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
- package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
- package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
- package/package/components/details/EmailTriggerPanel.svelte +0 -76
- package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
<script lang="ts">import { run } from 'svelte/legacy';
|
|
2
|
+
import { goto } from '../../navigation';
|
|
3
|
+
import { base } from '../../base';
|
|
4
|
+
import { ResourceService, SettingService, UserService, VariableService, WorkspaceService } from '../../gen';
|
|
5
|
+
import { validateUsername } from '../../utils';
|
|
6
|
+
import { logoutWithRedirect } from '../../logout';
|
|
7
|
+
import { page } from '$app/stores';
|
|
8
|
+
import { usersWorkspaceStore, workspaceStore } from '../../stores';
|
|
9
|
+
import CenteredModal from '../CenteredModal.svelte';
|
|
10
|
+
import { Button } from '../common';
|
|
11
|
+
import Toggle from '../Toggle.svelte';
|
|
12
|
+
import Tooltip from '../Tooltip.svelte';
|
|
13
|
+
import { onMount } from 'svelte';
|
|
14
|
+
import { sendUserToast } from '../../toast';
|
|
15
|
+
import TestAIKey from '../copilot/TestAIKey.svelte';
|
|
16
|
+
import { switchWorkspace } from '../../storeUtils';
|
|
17
|
+
import { isCloudHosted } from '../../cloud';
|
|
18
|
+
import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
|
|
19
|
+
import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
|
|
20
|
+
import { AI_PROVIDERS } from '../copilot/lib';
|
|
21
|
+
import { GitFork } from 'lucide-svelte';
|
|
22
|
+
import PrefixedInput from '../PrefixedInput.svelte';
|
|
23
|
+
let { isFork = false } = $props();
|
|
24
|
+
const rd = $page.url.searchParams.get('rd');
|
|
25
|
+
let id = $state('');
|
|
26
|
+
let name = $state('');
|
|
27
|
+
let username = $state('');
|
|
28
|
+
let errorId = $state('');
|
|
29
|
+
let errorUser = $state('');
|
|
30
|
+
let aiKey = $state('');
|
|
31
|
+
let codeCompletionEnabled = $state(true);
|
|
32
|
+
let checking = $state(false);
|
|
33
|
+
let workspaceColor = $state(null);
|
|
34
|
+
let colorEnabled = $state(false);
|
|
35
|
+
function generateRandomColor() {
|
|
36
|
+
const randomColor = '#' +
|
|
37
|
+
Math.floor(Math.random() * 16777215)
|
|
38
|
+
.toString(16)
|
|
39
|
+
.padStart(6, '0');
|
|
40
|
+
workspaceColor = randomColor;
|
|
41
|
+
}
|
|
42
|
+
async function validateName(id) {
|
|
43
|
+
checking = true;
|
|
44
|
+
let exists = await WorkspaceService.existsWorkspace({ requestBody: { id } });
|
|
45
|
+
if (exists) {
|
|
46
|
+
errorId = 'ID already exists';
|
|
47
|
+
}
|
|
48
|
+
else if (id != '' && !/^\w+(-\w+)*$/.test(id)) {
|
|
49
|
+
errorId = 'ID can only contain letters, numbers and dashes and must not finish by a dash';
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
errorId = '';
|
|
53
|
+
}
|
|
54
|
+
checking = false;
|
|
55
|
+
}
|
|
56
|
+
const WM_FORK_PREFIX = 'wm-fork-';
|
|
57
|
+
async function createOrForkWorkspace() {
|
|
58
|
+
const prefixed_id = `${WM_FORK_PREFIX}${id}`;
|
|
59
|
+
if (isFork) {
|
|
60
|
+
if ($workspaceStore) {
|
|
61
|
+
await WorkspaceService.createWorkspaceFork({
|
|
62
|
+
requestBody: {
|
|
63
|
+
id: prefixed_id,
|
|
64
|
+
name,
|
|
65
|
+
color: colorEnabled && workspaceColor ? workspaceColor : undefined,
|
|
66
|
+
username: automateUsernameCreation ? undefined : username,
|
|
67
|
+
parent_workspace_id: $workspaceStore
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
sendUserToast(`Successfully forked workspace ${$workspaceStore} as: wm-fork-${id}`);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
sendUserToast('No workspace selected, cannot fork non-existent workspace', true);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
await createWorkspace();
|
|
78
|
+
}
|
|
79
|
+
usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
|
|
80
|
+
switchWorkspace(isFork ? prefixed_id : id);
|
|
81
|
+
goto(rd ?? '/');
|
|
82
|
+
}
|
|
83
|
+
async function createWorkspace() {
|
|
84
|
+
await WorkspaceService.createWorkspace({
|
|
85
|
+
requestBody: {
|
|
86
|
+
id,
|
|
87
|
+
name,
|
|
88
|
+
color: colorEnabled && workspaceColor ? workspaceColor : undefined,
|
|
89
|
+
username: automateUsernameCreation ? undefined : username
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
if (auto_invite) {
|
|
93
|
+
await WorkspaceService.editAutoInvite({
|
|
94
|
+
workspace: id,
|
|
95
|
+
requestBody: { operator: operatorOnly, invite_all: !isCloudHosted(), auto_add: true }
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
if (aiKey != '') {
|
|
99
|
+
let actualUsername = username;
|
|
100
|
+
if (automateUsernameCreation) {
|
|
101
|
+
const user = await UserService.whoami({
|
|
102
|
+
workspace: id
|
|
103
|
+
});
|
|
104
|
+
actualUsername = user.username;
|
|
105
|
+
}
|
|
106
|
+
let path = `u/${actualUsername}/${selected}_windmill_codegen`;
|
|
107
|
+
await VariableService.createVariable({
|
|
108
|
+
workspace: id,
|
|
109
|
+
requestBody: {
|
|
110
|
+
path,
|
|
111
|
+
value: aiKey,
|
|
112
|
+
is_secret: true,
|
|
113
|
+
description: 'Ai token'
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
await ResourceService.createResource({
|
|
117
|
+
workspace: id,
|
|
118
|
+
requestBody: {
|
|
119
|
+
path,
|
|
120
|
+
value: {
|
|
121
|
+
api_key: '$var:' + path
|
|
122
|
+
},
|
|
123
|
+
resource_type: selected
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
await WorkspaceService.editCopilotConfig({
|
|
127
|
+
workspace: id,
|
|
128
|
+
requestBody: aiKey
|
|
129
|
+
? {
|
|
130
|
+
providers: {
|
|
131
|
+
[selected]: {
|
|
132
|
+
resource_path: path,
|
|
133
|
+
models: [AI_PROVIDERS[selected].defaultModels[0]]
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
default_model: {
|
|
137
|
+
model: AI_PROVIDERS[selected].defaultModels[0],
|
|
138
|
+
provider: selected
|
|
139
|
+
},
|
|
140
|
+
code_completion_model: codeCompletionEnabled
|
|
141
|
+
? { model: AI_PROVIDERS[selected].defaultModels[0], provider: selected }
|
|
142
|
+
: undefined
|
|
143
|
+
}
|
|
144
|
+
: {}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
sendUserToast(`Created workspace id: ${id}`);
|
|
148
|
+
usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
|
|
149
|
+
switchWorkspace(id);
|
|
150
|
+
goto(rd ?? '/');
|
|
151
|
+
}
|
|
152
|
+
function handleKeyUp(event) {
|
|
153
|
+
const key = event.key;
|
|
154
|
+
if (key === 'Enter') {
|
|
155
|
+
event.preventDefault();
|
|
156
|
+
createWorkspace();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async function loadWorkspaces() {
|
|
160
|
+
if (!$usersWorkspaceStore) {
|
|
161
|
+
try {
|
|
162
|
+
usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
|
|
163
|
+
}
|
|
164
|
+
catch { }
|
|
165
|
+
}
|
|
166
|
+
if (!$usersWorkspaceStore) {
|
|
167
|
+
const url = $page.url;
|
|
168
|
+
console.log('logout 2');
|
|
169
|
+
await logoutWithRedirect(url.href.replace(url.origin, ''));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
let automateUsernameCreation = $state(false);
|
|
173
|
+
async function getAutomateUsernameCreationSetting() {
|
|
174
|
+
automateUsernameCreation =
|
|
175
|
+
(await SettingService.getGlobal({ key: 'automate_username_creation' })) ?? false;
|
|
176
|
+
if (!automateUsernameCreation) {
|
|
177
|
+
UserService.globalWhoami().then((x) => {
|
|
178
|
+
let uname = '';
|
|
179
|
+
if (x.name) {
|
|
180
|
+
uname = x.name.split(' ')[0];
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
uname = x.email.split('@')[0];
|
|
184
|
+
}
|
|
185
|
+
uname = uname.replace(/\./gi, '');
|
|
186
|
+
username = uname.toLowerCase();
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
getAutomateUsernameCreationSetting();
|
|
191
|
+
onMount(() => {
|
|
192
|
+
loadWorkspaces();
|
|
193
|
+
WorkspaceService.isDomainAllowed().then((x) => {
|
|
194
|
+
isDomainAllowed = x;
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
let isDomainAllowed = $state(undefined);
|
|
198
|
+
let auto_invite = $state(false);
|
|
199
|
+
let operatorOnly = $state(false);
|
|
200
|
+
let selected = $state('openai');
|
|
201
|
+
run(() => {
|
|
202
|
+
id = name.toLowerCase().replace(/\s/gi, '-');
|
|
203
|
+
});
|
|
204
|
+
run(() => {
|
|
205
|
+
validateName(id);
|
|
206
|
+
});
|
|
207
|
+
run(() => {
|
|
208
|
+
errorUser = validateUsername(username);
|
|
209
|
+
});
|
|
210
|
+
run(() => {
|
|
211
|
+
colorEnabled && !workspaceColor && generateRandomColor();
|
|
212
|
+
});
|
|
213
|
+
let domain = $derived($usersWorkspaceStore?.email.split('@')[1]);
|
|
214
|
+
</script>
|
|
215
|
+
|
|
216
|
+
<CenteredModal title="{isFork ? 'Forking' : 'New'} Workspace">
|
|
217
|
+
{#if isFork}
|
|
218
|
+
<div class="flex flex-block gap-2">
|
|
219
|
+
<GitFork />
|
|
220
|
+
<span class="text-secondary text-l"> Forking </span>
|
|
221
|
+
<span class="text-secondary font-bold text-l">
|
|
222
|
+
{$workspaceStore}
|
|
223
|
+
</span>
|
|
224
|
+
</div>
|
|
225
|
+
{/if}
|
|
226
|
+
<label class="block pb-4 pt-4">
|
|
227
|
+
{#if isFork}
|
|
228
|
+
<span class="text-secondary text-sm">Fork name</span>
|
|
229
|
+
<span class="ml-4 text-tertiary text-xs">Displayable name of the forked workspace</span>
|
|
230
|
+
{:else}
|
|
231
|
+
<span class="text-secondary text-sm">Workspace name</span>
|
|
232
|
+
<span class="ml-4 text-tertiary text-xs">Displayable name</span>
|
|
233
|
+
{/if}
|
|
234
|
+
<!-- svelte-ignore a11y_autofocus -->
|
|
235
|
+
<input autofocus type="text" bind:value={name} />
|
|
236
|
+
</label>
|
|
237
|
+
<label class="block pb-4">
|
|
238
|
+
<span class="text-secondary text-sm">Workspace ID</span>
|
|
239
|
+
{#if isFork}
|
|
240
|
+
<span class="ml-10 text-tertiary text-xs"
|
|
241
|
+
>Slug to uniquely identify your fork (this will also set the branch name)</span
|
|
242
|
+
>
|
|
243
|
+
{:else}
|
|
244
|
+
<span class="ml-10 text-tertiary text-xs">Slug to uniquely identify your workspace</span>
|
|
245
|
+
{/if}
|
|
246
|
+
{#if errorId}
|
|
247
|
+
<span class="text-red-500 text-xs">{errorId}</span>
|
|
248
|
+
{/if}
|
|
249
|
+
|
|
250
|
+
{#if isFork}
|
|
251
|
+
<PrefixedInput
|
|
252
|
+
prefix={WM_FORK_PREFIX}
|
|
253
|
+
type="text"
|
|
254
|
+
bind:value={id}
|
|
255
|
+
placeholder="example.com"
|
|
256
|
+
class={errorId != '' ? 'input-error' : ''}
|
|
257
|
+
/>
|
|
258
|
+
{:else}
|
|
259
|
+
<input type="text" bind:value={id} class:input-error={errorId != ''} />
|
|
260
|
+
{/if}
|
|
261
|
+
</label>
|
|
262
|
+
<label class="block pb-4">
|
|
263
|
+
<span class="text-secondary text-sm">Workspace color</span>
|
|
264
|
+
<span class="ml-5 text-tertiary text-xs"
|
|
265
|
+
>Color to identify the current workspace in the list of workspaces</span
|
|
266
|
+
>
|
|
267
|
+
<div class="flex items-center gap-2">
|
|
268
|
+
<Toggle bind:checked={colorEnabled} options={{ right: 'Enable' }} />
|
|
269
|
+
{#if colorEnabled}<input
|
|
270
|
+
class="w-10"
|
|
271
|
+
type="color"
|
|
272
|
+
bind:value={workspaceColor}
|
|
273
|
+
disabled={!colorEnabled}
|
|
274
|
+
/>{/if}
|
|
275
|
+
<input
|
|
276
|
+
type="text"
|
|
277
|
+
class="w-24 text-sm"
|
|
278
|
+
bind:value={workspaceColor}
|
|
279
|
+
disabled={!colorEnabled}
|
|
280
|
+
/>
|
|
281
|
+
<Button on:click={generateRandomColor} size="xs" disabled={!colorEnabled}>Random</Button>
|
|
282
|
+
</div>
|
|
283
|
+
</label>
|
|
284
|
+
{#if !automateUsernameCreation}
|
|
285
|
+
<label class="block pb-4">
|
|
286
|
+
<span class="text-secondary text-sm">Your username in that workspace</span>
|
|
287
|
+
<input type="text" bind:value={username} onkeyup={handleKeyUp} />
|
|
288
|
+
{#if errorUser}
|
|
289
|
+
<span class="text-red-500 text-xs">{errorUser}</span>
|
|
290
|
+
{/if}
|
|
291
|
+
</label>
|
|
292
|
+
{/if}
|
|
293
|
+
{#if !isFork}
|
|
294
|
+
<div class="block pb-4">
|
|
295
|
+
<label for="ai-key" class="flex flex-col gap-1">
|
|
296
|
+
<span class="text-secondary text-sm">
|
|
297
|
+
AI key for Windmill AI
|
|
298
|
+
<Tooltip>
|
|
299
|
+
Find out how it can help you <a
|
|
300
|
+
href="https://www.windmill.dev/docs/core_concepts/ai_generation"
|
|
301
|
+
target="_blank"
|
|
302
|
+
rel="noopener noreferrer">in the docs</a
|
|
303
|
+
>
|
|
304
|
+
</Tooltip>
|
|
305
|
+
<span class="text-2xs text-tertiary ml-2">(optional but recommended)</span>
|
|
306
|
+
</span>
|
|
307
|
+
|
|
308
|
+
<div class="pb-2">
|
|
309
|
+
<ToggleButtonGroup bind:selected>
|
|
310
|
+
{#snippet children({ item })}
|
|
311
|
+
<ToggleButton value="openai" label="OpenAI" {item} />
|
|
312
|
+
<ToggleButton value="anthropic" label="Anthropic" {item} />
|
|
313
|
+
<ToggleButton value="mistral" label="Mistral" {item} />
|
|
314
|
+
<ToggleButton value="deepseek" label="DeepSeek" {item} />
|
|
315
|
+
{/snippet}
|
|
316
|
+
</ToggleButtonGroup>
|
|
317
|
+
</div>
|
|
318
|
+
</label>
|
|
319
|
+
|
|
320
|
+
<div class="flex flex-row gap-1 pb-4">
|
|
321
|
+
<input
|
|
322
|
+
id="ai-key"
|
|
323
|
+
type="password"
|
|
324
|
+
autocomplete="new-password"
|
|
325
|
+
bind:value={aiKey}
|
|
326
|
+
onkeyup={handleKeyUp}
|
|
327
|
+
/>
|
|
328
|
+
<TestAIKey
|
|
329
|
+
apiKey={aiKey}
|
|
330
|
+
disabled={!aiKey}
|
|
331
|
+
aiProvider={selected}
|
|
332
|
+
model={AI_PROVIDERS[selected].defaultModels[0]}
|
|
333
|
+
/>
|
|
334
|
+
</div>
|
|
335
|
+
{#if aiKey}
|
|
336
|
+
<Toggle
|
|
337
|
+
disabled={!aiKey}
|
|
338
|
+
bind:checked={codeCompletionEnabled}
|
|
339
|
+
options={{ right: 'Enable code completion' }}
|
|
340
|
+
/>
|
|
341
|
+
{/if}
|
|
342
|
+
</div>
|
|
343
|
+
<Toggle
|
|
344
|
+
disabled={isCloudHosted() && !isDomainAllowed}
|
|
345
|
+
bind:checked={auto_invite}
|
|
346
|
+
options={{
|
|
347
|
+
right: isCloudHosted()
|
|
348
|
+
? `Auto-invite anyone from ${domain}`
|
|
349
|
+
: `Auto-invite anyone joining the instance`
|
|
350
|
+
}}
|
|
351
|
+
/>
|
|
352
|
+
{#if isCloudHosted() && isDomainAllowed == false}
|
|
353
|
+
<div class="text-tertiary text-sm mb-4 mt-2">{domain} domain not allowed for auto-invite</div>
|
|
354
|
+
{/if}
|
|
355
|
+
<div class={'overflow-hidden transition-all ' + (auto_invite ? 'h-36' : 'h-0')}>
|
|
356
|
+
<div class="text-xs mb-1 leading-6 pt-2">
|
|
357
|
+
Mode <Tooltip>Whether to invite or add users directly to the workspace.</Tooltip>
|
|
358
|
+
</div>
|
|
359
|
+
|
|
360
|
+
<div class="text-xs mb-1 leading-6 pt-2"
|
|
361
|
+
>Role <Tooltip>Role of the auto-invited users</Tooltip></div
|
|
362
|
+
>
|
|
363
|
+
<ToggleButtonGroup
|
|
364
|
+
selected={operatorOnly ? 'operator' : 'developer'}
|
|
365
|
+
on:selected={(e) => {
|
|
366
|
+
operatorOnly = e.detail == 'operator'
|
|
367
|
+
}}
|
|
368
|
+
>
|
|
369
|
+
{#snippet children({ item })}
|
|
370
|
+
<ToggleButton value="operator" size="xs" label="Operator" {item} />
|
|
371
|
+
<ToggleButton value="developer" size="xs" label="Developer" {item} />
|
|
372
|
+
{/snippet}
|
|
373
|
+
</ToggleButtonGroup>
|
|
374
|
+
</div>
|
|
375
|
+
{/if}
|
|
376
|
+
<div class="flex flex-wrap flex-row justify-between pt-10 gap-1">
|
|
377
|
+
<Button variant="border" size="sm" href="{base}/user/workspaces"
|
|
378
|
+
>← Back to workspaces</Button
|
|
379
|
+
>
|
|
380
|
+
<Button
|
|
381
|
+
disabled={checking ||
|
|
382
|
+
errorId != '' ||
|
|
383
|
+
!name ||
|
|
384
|
+
(!automateUsernameCreation && (errorUser != '' || !username)) ||
|
|
385
|
+
!id}
|
|
386
|
+
on:click={createOrForkWorkspace}
|
|
387
|
+
>
|
|
388
|
+
{#if isFork}
|
|
389
|
+
Fork workspace
|
|
390
|
+
{:else}
|
|
391
|
+
Create workspace
|
|
392
|
+
{/if}
|
|
393
|
+
</Button>
|
|
394
|
+
</div>
|
|
395
|
+
</CenteredModal>
|
|
@@ -42,7 +42,9 @@ export function convertDucklakeSettingsToBackend(settings) {
|
|
|
42
42
|
import Select from '../select/Select.svelte'
|
|
43
43
|
import ResourcePicker from '../ResourcePicker.svelte'
|
|
44
44
|
import { usePromise } from '../../svelte5Utils.svelte'
|
|
45
|
-
import { SettingService, WorkspaceService
|
|
45
|
+
import { SettingService, WorkspaceService } from '../../gen'
|
|
46
|
+
import { type GetSettingsResponse } from '../../gen'
|
|
47
|
+
|
|
46
48
|
import { superadmin, workspaceStore } from '../../stores'
|
|
47
49
|
import { sendUserToast } from '../../toast'
|
|
48
50
|
import ExploreAssetButton from '../ExploreAssetButton.svelte'
|
|
@@ -4,7 +4,7 @@ import Tooltip from '../Tooltip.svelte';
|
|
|
4
4
|
import FilterList from './FilterList.svelte';
|
|
5
5
|
import { Tabs, Tab } from '../common';
|
|
6
6
|
import { workspaceStore } from '../../stores';
|
|
7
|
-
let { git_repo_resource_path = $bindable(''), include_path = $bindable(['f/**']), include_type = $bindable(['script', 'flow', 'app', 'folder']), exclude_types_override = $bindable([]), isLegacyRepo = false, excludes = $bindable([]), extraIncludes = $bindable([]), isInitialSetup = false, requiresMigration = false, actions = undefined, useIndividualBranch = false } = $props();
|
|
7
|
+
let { git_repo_resource_path = $bindable(''), include_path = $bindable(['f/**']), include_type = $bindable(['script', 'flow', 'app', 'folder']), exclude_types_override = $bindable([]), isLegacyRepo = false, excludes = $bindable([]), extraIncludes = $bindable([]), isInitialSetup = false, requiresMigration = false, actions = undefined, useIndividualBranch = false, } = $props();
|
|
8
8
|
// Component state
|
|
9
9
|
let collapsed = $state(false);
|
|
10
10
|
let showCliInstructions = $state(false);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">import { enterpriseLicense, workspaceStore } from '../../stores';
|
|
2
2
|
import { emptyString, sendUserToast } from '../../utils';
|
|
3
|
-
import { Plus, X } from 'lucide-svelte';
|
|
3
|
+
import { ChevronDown, Plus, Shield, X } from 'lucide-svelte';
|
|
4
4
|
import Alert from '../common/alert/Alert.svelte';
|
|
5
5
|
import Button from '../common/button/Button.svelte';
|
|
6
6
|
import Tab from '../common/tabs/Tab.svelte';
|
|
@@ -14,6 +14,7 @@ import { WorkspaceService } from '../../gen';
|
|
|
14
14
|
import S3FilePicker from '../S3FilePicker.svelte';
|
|
15
15
|
import Portal from '../Portal.svelte';
|
|
16
16
|
import { fade } from 'svelte/transition';
|
|
17
|
+
import Popover from '../meltComponents/Popover.svelte';
|
|
17
18
|
let { s3ResourceSettings = $bindable() } = $props();
|
|
18
19
|
let s3FileViewer = $state();
|
|
19
20
|
async function editWindmillLFSSettings() {
|
|
@@ -83,6 +84,7 @@ async function editWindmillLFSSettings() {
|
|
|
83
84
|
resourceType={s3ResourceSettings.resourceType}
|
|
84
85
|
bind:value={s3ResourceSettings.resourcePath}
|
|
85
86
|
/>
|
|
87
|
+
{@render permissionBtn(s3ResourceSettings)}
|
|
86
88
|
<Button
|
|
87
89
|
size="sm"
|
|
88
90
|
variant="contained"
|
|
@@ -96,55 +98,9 @@ async function editWindmillLFSSettings() {
|
|
|
96
98
|
>
|
|
97
99
|
</div>
|
|
98
100
|
</div>
|
|
99
|
-
{#if s3ResourceSettings.resourceType == 's3'}
|
|
100
|
-
<div class="flex flex-col mt-5 mb-1 gap-1">
|
|
101
|
-
<!-- this can be removed once parent moves to runes -->
|
|
102
|
-
<!-- svelte-ignore binding_property_non_reactive -->
|
|
103
|
-
<Toggle
|
|
104
|
-
disabled={emptyString(s3ResourceSettings.resourcePath)}
|
|
105
|
-
bind:checked={s3ResourceSettings.publicResource}
|
|
106
|
-
options={{
|
|
107
|
-
right: 'S3 resource details and content can be accessed by all users of this workspace',
|
|
108
|
-
rightTooltip:
|
|
109
|
-
'If set, all users of this workspace will have access the to entire content of the S3 bucket, as well as the resource details and the "open preview" button. This effectively by-pass the permissions set on the resource and makes it public to everyone.'
|
|
110
|
-
}}
|
|
111
|
-
/>
|
|
112
|
-
{#if s3ResourceSettings.publicResource === true}
|
|
113
|
-
<div class="pt-2"></div>
|
|
114
101
|
|
|
115
|
-
<Alert type="warning" title="S3 bucket content and resource details are shared">
|
|
116
|
-
S3 resource public access is ON, which means that the entire content of the S3 bucket will
|
|
117
|
-
be accessible to all the users of this workspace regardless of whether they have access
|
|
118
|
-
the resource or not. Similarly, certain Windmill SDK endpoints can be used in scripts to
|
|
119
|
-
access the resource details, including public and private keys.
|
|
120
|
-
</Alert>
|
|
121
|
-
{/if}
|
|
122
|
-
</div>
|
|
123
|
-
{:else}
|
|
124
|
-
<div class="flex flex-col mt-5 mb-1 gap-1">
|
|
125
|
-
<!-- this can be removed once parent moves to runes -->
|
|
126
|
-
<!-- svelte-ignore binding_property_non_reactive -->
|
|
127
|
-
<Toggle
|
|
128
|
-
disabled={emptyString(s3ResourceSettings.resourcePath)}
|
|
129
|
-
bind:checked={s3ResourceSettings.publicResource}
|
|
130
|
-
options={{
|
|
131
|
-
right: 'object storage content can be accessed by all users of this workspace',
|
|
132
|
-
rightTooltip:
|
|
133
|
-
'If set, all users of this workspace will have access the to entire content of the object storage.'
|
|
134
|
-
}}
|
|
135
|
-
/>
|
|
136
|
-
{#if s3ResourceSettings.publicResource === true}
|
|
137
|
-
<div class="pt-2"></div>
|
|
138
|
-
<Alert type="warning" title="object content">
|
|
139
|
-
object public access is ON, which means that the entire content of the object store will
|
|
140
|
-
be accessible to all the users of this workspace regardless of whether they have access
|
|
141
|
-
the resource or not.
|
|
142
|
-
</Alert>
|
|
143
|
-
{/if}
|
|
144
|
-
</div>
|
|
145
|
-
{/if}
|
|
146
102
|
<div class="mt-6">
|
|
147
|
-
<div class="flex mt-2 flex-col gap-y-4 max-w-
|
|
103
|
+
<div class="flex mt-2 flex-col gap-y-4 max-w-5xl">
|
|
148
104
|
{#each s3ResourceSettings.secondaryStorage ?? [] as _, idx}
|
|
149
105
|
<div class="flex gap-1 items-center">
|
|
150
106
|
<input
|
|
@@ -175,6 +131,7 @@ async function editWindmillLFSSettings() {
|
|
|
175
131
|
<option value="azure_blob">Azure Blob</option>
|
|
176
132
|
<option value="s3_aws_oidc">AWS OIDC</option>
|
|
177
133
|
<option value="azure_workload_identity">Azure Workload Identity</option>
|
|
134
|
+
<option value="gcloud_storage">Google Cloud Storage</option>
|
|
178
135
|
</select>
|
|
179
136
|
<!-- this can be removed once parent moves to runes -->
|
|
180
137
|
<!-- svelte-ignore binding_property_non_reactive -->
|
|
@@ -189,6 +146,7 @@ async function editWindmillLFSSettings() {
|
|
|
189
146
|
}
|
|
190
147
|
}
|
|
191
148
|
/>
|
|
149
|
+
{@render permissionBtn(s3ResourceSettings.secondaryStorage![idx][1])}
|
|
192
150
|
<Button
|
|
193
151
|
size="sm"
|
|
194
152
|
variant="contained"
|
|
@@ -250,3 +208,66 @@ async function editWindmillLFSSettings() {
|
|
|
250
208
|
>
|
|
251
209
|
</div>
|
|
252
210
|
{/if}
|
|
211
|
+
|
|
212
|
+
{#snippet permissionBtn(storage: NonNullable<S3ResourceSettings['secondaryStorage']>[number][1])}
|
|
213
|
+
<Popover closeOnOtherPopoverOpen>
|
|
214
|
+
<svelte:fragment slot="trigger">
|
|
215
|
+
<Button variant="border" btnClasses="px-2.5" color="dark" size="sm">
|
|
216
|
+
<Shield size={16} /> Permissions <ChevronDown size={14} />
|
|
217
|
+
</Button>
|
|
218
|
+
</svelte:fragment>
|
|
219
|
+
<svelte:fragment slot="content">
|
|
220
|
+
<div class="flex flex-col gap-3 mx-4 pb-4 w-[40rem]">
|
|
221
|
+
{#if storage.resourceType == 's3'}
|
|
222
|
+
<div class="flex flex-col mt-5 mb-1 gap-1">
|
|
223
|
+
<!-- this can be removed once parent moves to runes -->
|
|
224
|
+
<!-- svelte-ignore binding_property_non_reactive -->
|
|
225
|
+
<Toggle
|
|
226
|
+
disabled={emptyString(storage.resourcePath)}
|
|
227
|
+
bind:checked={storage.publicResource}
|
|
228
|
+
options={{
|
|
229
|
+
right:
|
|
230
|
+
'S3 resource details and content can be accessed by all users of this workspace',
|
|
231
|
+
rightTooltip:
|
|
232
|
+
'If set, all users of this workspace will have access the to entire content of the S3 bucket, as well as the resource details and the "open preview" button. This effectively by-pass the permissions set on the resource and makes it public to everyone.'
|
|
233
|
+
}}
|
|
234
|
+
/>
|
|
235
|
+
{#if storage.publicResource === true}
|
|
236
|
+
<div class="pt-2"></div>
|
|
237
|
+
|
|
238
|
+
<Alert type="warning" title="S3 bucket content and resource details are shared">
|
|
239
|
+
S3 resource public access is ON, which means that the entire content of the S3
|
|
240
|
+
bucket will be accessible to all the users of this workspace regardless of whether
|
|
241
|
+
they have access the resource or not. Similarly, certain Windmill SDK endpoints can
|
|
242
|
+
be used in scripts to access the resource details, including public and private
|
|
243
|
+
keys.
|
|
244
|
+
</Alert>
|
|
245
|
+
{/if}
|
|
246
|
+
</div>
|
|
247
|
+
{:else}
|
|
248
|
+
<div class="flex flex-col mt-5 mb-1 gap-1">
|
|
249
|
+
<!-- this can be removed once parent moves to runes -->
|
|
250
|
+
<!-- svelte-ignore binding_property_non_reactive -->
|
|
251
|
+
<Toggle
|
|
252
|
+
disabled={emptyString(storage.resourcePath)}
|
|
253
|
+
bind:checked={storage.publicResource}
|
|
254
|
+
options={{
|
|
255
|
+
right: 'object storage content can be accessed by all users of this workspace',
|
|
256
|
+
rightTooltip:
|
|
257
|
+
'If set, all users of this workspace will have access the to entire content of the object storage.'
|
|
258
|
+
}}
|
|
259
|
+
/>
|
|
260
|
+
{#if storage.publicResource === true}
|
|
261
|
+
<div class="pt-2"></div>
|
|
262
|
+
<Alert type="warning" title="object content">
|
|
263
|
+
object public access is ON, which means that the entire content of the object store
|
|
264
|
+
will be accessible to all the users of this workspace regardless of whether they
|
|
265
|
+
have access the resource or not.
|
|
266
|
+
</Alert>
|
|
267
|
+
{/if}
|
|
268
|
+
</div>
|
|
269
|
+
{/if}
|
|
270
|
+
</div>
|
|
271
|
+
</svelte:fragment>
|
|
272
|
+
</Popover>
|
|
273
|
+
{/snippet}
|