windmill-components 1.504.5 → 1.510.1

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 (202) hide show
  1. package/package/ata/index.js +1 -1
  2. package/package/components/AppConnectInner.svelte +161 -29
  3. package/package/components/ArgInput.svelte +33 -103
  4. package/package/components/AuthSettings.svelte +45 -1
  5. package/package/components/Dev.svelte +31 -24
  6. package/package/components/DisplayResult.svelte +53 -26
  7. package/package/components/DisplayResult.svelte.d.ts +1 -1
  8. package/package/components/DynSelect.svelte +3 -3
  9. package/package/components/Editor.svelte +7 -4
  10. package/package/components/EditorBar.svelte +2 -2
  11. package/package/components/ErrorOrRecoveryHandler.svelte +73 -67
  12. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +8 -24
  13. package/package/components/FlowBuilder.svelte +11 -2
  14. package/package/components/FlowJobResult.svelte +12 -17
  15. package/package/components/FlowJobResult.svelte.d.ts +5 -18
  16. package/package/components/FlowPreviewContent.svelte +13 -10
  17. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  18. package/package/components/FlowPreviewResult.svelte +14 -6
  19. package/package/components/FlowStatusViewer.svelte +11 -24
  20. package/package/components/FlowStatusViewer.svelte.d.ts +19 -18
  21. package/package/components/FlowStatusViewerInner.svelte +110 -131
  22. package/package/components/FlowStatusViewerInner.svelte.d.ts +20 -18
  23. package/package/components/GitDiffPreview.svelte +55 -0
  24. package/package/components/GitDiffPreview.svelte.d.ts +13 -0
  25. package/package/components/HistoricInputs.svelte +2 -2
  26. package/package/components/InitGitRepoPopover.svelte +410 -0
  27. package/package/components/InitGitRepoPopover.svelte.d.ts +13 -0
  28. package/package/components/InstanceSetting.svelte +21 -9
  29. package/package/components/InstanceSettings.svelte +16 -3
  30. package/package/components/JobLoader.svelte +567 -0
  31. package/package/components/JobLoader.svelte.d.ts +53 -0
  32. package/package/components/JobLogs.svelte +6 -4
  33. package/package/components/JobLogs.svelte.d.ts +5 -18
  34. package/package/components/LightweightResourcePicker.svelte +18 -39
  35. package/package/components/LightweightResourcePicker.svelte.d.ts +6 -22
  36. package/package/components/LogViewer.svelte +35 -41
  37. package/package/components/LogViewer.svelte.d.ts +6 -20
  38. package/package/components/ModulePreviewResultViewer.svelte +3 -1
  39. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -0
  40. package/package/components/ModuleTest.svelte +16 -11
  41. package/package/components/PullGitRepoPopover.svelte +355 -0
  42. package/package/components/PullGitRepoPopover.svelte.d.ts +18 -0
  43. package/package/components/S3FilePicker.svelte +5 -3
  44. package/package/components/SavedInputs.svelte +2 -2
  45. package/package/components/ScriptBuilder.svelte +4 -3
  46. package/package/components/ScriptEditor.svelte +34 -31
  47. package/package/components/ScriptEditor.svelte.d.ts +3 -3
  48. package/package/components/ServiceLogsInner.svelte +2 -1
  49. package/package/components/ServiceLogsInner.svelte.d.ts +1 -0
  50. package/package/components/UserSettings.svelte +1 -1
  51. package/package/components/WorkerTagSelect.svelte +32 -3
  52. package/package/components/apps/components/buttons/AppButton.svelte +7 -1
  53. package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  54. package/package/components/apps/components/display/AppCustomComponent.svelte +1 -1
  55. package/package/components/apps/components/display/AppDisplayComponentByJobId.svelte +16 -11
  56. package/package/components/apps/components/display/AppJobIdLogComponent.svelte +13 -10
  57. package/package/components/apps/components/display/AppMenu.svelte +5 -0
  58. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +3 -3
  59. package/package/components/apps/components/display/dbtable/DeleteRow.svelte +3 -3
  60. package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +3 -3
  61. package/package/components/apps/components/display/dbtable/UpdateCell.svelte +3 -3
  62. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +3 -3
  63. package/package/components/apps/components/helpers/RunnableComponent.svelte +65 -54
  64. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +5 -5
  65. package/package/components/apps/components/inputs/AppUserResource.svelte +26 -8
  66. package/package/components/apps/editor/AppEditorHeader.svelte +11 -5
  67. package/package/components/apps/editor/AppJobsDrawer.svelte +5 -5
  68. package/package/components/apps/editor/RunnableJobPanel.svelte +4 -4
  69. package/package/components/apps/editor/component/components.d.ts +12 -0
  70. package/package/components/apps/editor/component/components.js +19 -7
  71. package/package/components/assets/AssetButtons.svelte +38 -0
  72. package/package/components/assets/AssetButtons.svelte.d.ts +15 -0
  73. package/package/components/assets/AssetsDropdownButton.svelte +60 -72
  74. package/package/components/assets/AssetsDropdownButton.svelte.d.ts +3 -4
  75. package/package/components/assets/AssetsUsageDrawer.svelte +10 -10
  76. package/package/components/assets/JobAssetsViewer.svelte +79 -0
  77. package/package/components/assets/JobAssetsViewer.svelte.d.ts +7 -0
  78. package/package/components/assets/README_DEV.md +0 -0
  79. package/package/components/assets/lib.d.ts +9 -1
  80. package/package/components/assets/lib.js +48 -7
  81. package/package/components/common/fileUpload/FileUpload.svelte +126 -84
  82. package/package/components/common/fileUpload/FileUpload.svelte.d.ts +13 -3
  83. package/package/components/common/fileUpload/S3ArgInput.svelte +111 -0
  84. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +21 -0
  85. package/package/components/common/table/ScriptRow.svelte +3 -1
  86. package/package/components/copilot/autocomplete/Autocompletor.js +23 -5
  87. package/package/components/copilot/chat/AIChatDisplay.svelte +8 -0
  88. package/package/components/copilot/chat/AIChatManager.svelte.js +13 -8
  89. package/package/components/copilot/chat/flow/ModuleAcceptReject.svelte +5 -5
  90. package/package/components/copilot/chat/flow/core.d.ts +1 -1
  91. package/package/components/copilot/chat/flow/core.js +2 -38
  92. package/package/components/copilot/chat/navigator/apiTools.d.ts +8 -0
  93. package/package/components/copilot/chat/navigator/apiTools.js +95 -15
  94. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  95. package/package/components/copilot/chat/navigator/core.js +2 -1
  96. package/package/components/copilot/chat/script/core.d.ts +11 -2
  97. package/package/components/copilot/chat/script/core.js +135 -1
  98. package/package/components/copilot/chat/shared.d.ts +10 -0
  99. package/package/components/copilot/chat/shared.js +56 -0
  100. package/package/components/copilot/lib.d.ts +1 -0
  101. package/package/components/copilot/lib.js +27 -9
  102. package/package/components/custom_ui.d.ts +1 -0
  103. package/package/components/flows/FlowAssetsHandler.svelte +133 -0
  104. package/package/components/flows/FlowAssetsHandler.svelte.d.ts +14 -0
  105. package/package/components/flows/content/FlowModuleComponent.svelte +16 -18
  106. package/package/components/flows/flowStore.d.ts +1 -1
  107. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -0
  108. package/package/components/flows/propPicker/OutputPicker.svelte +9 -4
  109. package/package/components/flows/scheduleUtils.js +1 -1
  110. package/package/components/flows/types.d.ts +2 -1
  111. package/package/components/graph/FlowGraphV2.svelte +8 -104
  112. package/package/components/graph/FlowGraphV2.svelte.d.ts +0 -2
  113. package/package/components/graph/graphBuilder.svelte.d.ts +6 -3
  114. package/package/components/graph/graphBuilder.svelte.js +35 -9
  115. package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -5
  116. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +1 -0
  117. package/package/components/graph/renderers/nodes/AssetNode.svelte +23 -20
  118. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +5 -10
  119. package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +1 -1
  120. package/package/components/graph/util.js +1 -1
  121. package/package/components/home/ItemsList.svelte +2 -0
  122. package/package/components/icons/AssetGenericIcon.svelte +0 -3
  123. package/package/components/jobs/JobPreview.svelte +10 -6
  124. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +13 -12
  125. package/package/components/runs/BatchReRunOptionsPane.svelte +5 -1
  126. package/package/components/runs/JobPreview.svelte +26 -16
  127. package/package/components/runs/{JobLoader.svelte.d.ts → JobsLoader.svelte.d.ts} +3 -3
  128. package/package/components/runs/NoWorkerWithTagWarning.svelte +2 -2
  129. package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -0
  130. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  131. package/package/components/schema/AddPropertyFormV2.svelte +42 -33
  132. package/package/components/schema/AddPropertyFormV2.svelte.d.ts +1 -0
  133. package/package/components/schema/AddPropertyV2.svelte +2 -1
  134. package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -0
  135. package/package/components/schema/EditableSchemaWrapper.svelte +3 -1
  136. package/package/components/schema/editable_schema_wrapper.d.ts +3 -0
  137. package/package/components/scriptEditor/LogPanel.svelte +3 -2
  138. package/package/components/script_builder.d.ts +2 -2
  139. package/package/components/settings/CreateToken.svelte +76 -41
  140. package/package/components/settings/CreateToken.svelte.d.ts +1 -1
  141. package/package/components/settings/ScopeSelector.svelte +613 -0
  142. package/package/components/settings/ScopeSelector.svelte.d.ts +8 -0
  143. package/package/components/settings/TokenDisplay.svelte +103 -0
  144. package/package/components/settings/TokenDisplay.svelte.d.ts +10 -0
  145. package/package/components/settings/TokensTable.svelte +70 -349
  146. package/package/components/sidebar/CriticalAlertModal.svelte +3 -0
  147. package/package/components/triggers/DeleteTriggerButton.svelte +1 -1
  148. package/package/components/triggers/TriggerEditorToolbar.svelte +3 -3
  149. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte +55 -0
  150. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +13 -0
  151. package/package/components/triggers/TriggersEditor.svelte +45 -3
  152. package/package/components/triggers/TriggersWrapper.svelte +2 -2
  153. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +43 -2
  154. package/package/components/triggers/gcp/utils.js +9 -1
  155. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +1 -0
  156. package/package/components/triggers/http/RouteEditorInner.svelte +208 -164
  157. package/package/components/triggers/http/RouteEditorInner.svelte.d.ts +6 -2
  158. package/package/components/triggers/http/utils.js +9 -3
  159. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +43 -2
  160. package/package/components/triggers/kafka/utils.js +9 -1
  161. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte +4 -132
  162. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +2 -5
  163. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +178 -9
  164. package/package/components/triggers/mqtt/utils.js +9 -1
  165. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +43 -2
  166. package/package/components/triggers/nats/utils.js +9 -1
  167. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +41 -2
  168. package/package/components/triggers/postgres/utils.js +9 -1
  169. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +34 -88
  170. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +43 -2
  171. package/package/components/triggers/sqs/utils.js +9 -1
  172. package/package/components/triggers/utils.js +12 -0
  173. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +43 -2
  174. package/package/components/triggers/websocket/utils.js +11 -1
  175. package/package/components/workspaceSettings/AISettings.svelte +0 -2
  176. package/package/components/workspaceSettings/FilterList.svelte +56 -0
  177. package/package/components/workspaceSettings/FilterList.svelte.d.ts +8 -0
  178. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +785 -0
  179. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +18 -0
  180. package/package/gen/core/OpenAPI.js +1 -1
  181. package/package/gen/schemas.gen.d.ts +305 -23
  182. package/package/gen/schemas.gen.js +305 -23
  183. package/package/gen/services.gen.d.ts +33 -1
  184. package/package/gen/services.gen.js +66 -2
  185. package/package/gen/types.gen.d.ts +216 -11
  186. package/package/history.svelte.js +0 -2
  187. package/package/hub.d.ts +1 -0
  188. package/package/hubPaths.json +5 -2
  189. package/package/infer.js +16 -10
  190. package/package/svelte5Utils.svelte.d.ts +1 -0
  191. package/package/svelte5Utils.svelte.js +25 -18
  192. package/package/toast.js +10 -0
  193. package/package/utils.d.ts +3 -2
  194. package/package/utils.js +20 -5
  195. package/package.json +11 -11
  196. package/package/components/ResultJobLoader.svelte +0 -219
  197. package/package/components/ResultJobLoader.svelte.d.ts +0 -52
  198. package/package/components/TestJobLoader.svelte +0 -274
  199. package/package/components/TestJobLoader.svelte.d.ts +0 -43
  200. package/package/components/icons/AssetVarIcon.svelte +0 -31
  201. package/package/components/icons/AssetVarIcon.svelte.d.ts +0 -9
  202. /package/package/components/runs/{JobLoader.svelte → JobsLoader.svelte} +0 -0
@@ -3,7 +3,7 @@ import { Button } from '../common';
3
3
  import { CornerDownLeft } from 'lucide-svelte';
4
4
  import Popover from '../meltComponents/Popover.svelte';
5
5
  let name = $state('');
6
- let { customName = undefined, disabled = false, trigger } = $props();
6
+ let { customName = undefined, disabled = false, trigger, noPopover } = $props();
7
7
  const dispatch = createEventDispatcher();
8
8
  function addField() {
9
9
  dispatch('add', { name });
@@ -12,37 +12,46 @@ function addField() {
12
12
  const trigger_render = $derived(trigger);
13
13
  </script>
14
14
 
15
- <Popover closeButton={false} class="w-full" {disabled}>
16
- {#snippet trigger()}
17
- {@render trigger_render?.()}
18
- {/snippet}
19
- {#snippet content({ close })}
20
- <div class="flex flex-row gap-2 p-2 rounded-md">
21
- <input
22
- bind:value={name}
23
- placeholder={`${customName ?? 'Field'} name`}
24
- onkeydown={(event) => {
25
- if (event.key === 'Enter') {
26
- addField()
27
- close()
28
- }
29
- }}
30
- {disabled}
31
- />
32
- <Button
33
- variant="contained"
34
- color="dark"
35
- size="xs"
36
- id="flow-editor-add-property"
37
- on:click={() => {
15
+ {#snippet form({ close })}
16
+ <div class="flex flex-row gap-2 p-2 rounded-md">
17
+ <input
18
+ bind:value={name}
19
+ class="max-w-80"
20
+ placeholder={`${customName ?? 'Field'} name`}
21
+ onkeydown={(event) => {
22
+ if (event.key === 'Enter') {
38
23
  addField()
39
24
  close()
40
- }}
41
- disabled={!name || disabled}
42
- shortCut={{ Icon: CornerDownLeft, withoutModifier: true }}
43
- >
44
- Add {customName ? customName.toLowerCase() : 'field'}
45
- </Button>
46
- </div>
47
- {/snippet}
48
- </Popover>
25
+ }
26
+ }}
27
+ {disabled}
28
+ />
29
+ <Button
30
+ variant="contained"
31
+ color="dark"
32
+ size="xs"
33
+ id="flow-editor-add-property"
34
+ on:click={() => {
35
+ addField()
36
+ close()
37
+ }}
38
+ disabled={!name || disabled}
39
+ shortCut={{ Icon: CornerDownLeft, withoutModifier: true }}
40
+ >
41
+ Add {customName ? customName.toLowerCase() : 'field'}
42
+ </Button>
43
+ </div>
44
+ {/snippet}
45
+
46
+ {#if noPopover}
47
+ {@render form({ close: () => {} })}
48
+ {:else}
49
+ <Popover closeButton={false} class="w-full" {disabled}>
50
+ {#snippet trigger()}
51
+ {@render trigger_render?.()}
52
+ {/snippet}
53
+ {#snippet content({ close })}
54
+ {@render form({ close })}
55
+ {/snippet}
56
+ </Popover>
57
+ {/if}
@@ -2,6 +2,7 @@ interface Props {
2
2
  customName?: string | undefined;
3
3
  disabled?: boolean;
4
4
  trigger?: import('svelte').Snippet;
5
+ noPopover?: boolean;
5
6
  }
6
7
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
7
8
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
@@ -2,7 +2,7 @@
2
2
  import { emptySchema, sendUserToast } from '../../utils';
3
3
  import { createEventDispatcher } from 'svelte';
4
4
  import AddPropertyFormV2 from './AddPropertyFormV2.svelte';
5
- let { schema = $bindable(emptySchema()), trigger } = $props();
5
+ let { schema = $bindable(emptySchema()), trigger, noPopover } = $props();
6
6
  export const DEFAULT_PROPERTY = {
7
7
  selectedType: 'string',
8
8
  description: '',
@@ -130,6 +130,7 @@ const trigger_render = $derived(trigger);
130
130
  </script>
131
131
 
132
132
  <AddPropertyFormV2
133
+ {noPopover}
133
134
  on:add={(e) => {
134
135
  try {
135
136
  handleAddOrEditArgument({
@@ -2,6 +2,7 @@ import { type Schema, type ModalSchemaProperty } from '../../common';
2
2
  interface Props {
3
3
  schema?: Schema | any;
4
4
  trigger?: import('svelte').Snippet;
5
+ noPopover?: boolean;
5
6
  }
6
7
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
7
8
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
@@ -7,7 +7,7 @@ import AddPropertyV2 from './AddPropertyV2.svelte';
7
7
  import { Plus } from 'lucide-svelte';
8
8
  import Select from '../select/Select.svelte';
9
9
  import { safeSelectItems } from '../select/utils.svelte';
10
- let { schema = $bindable(), uiOnly = false, noPreview = false, fullHeight = true, formatExtension = $bindable(undefined), onSchemaChange } = $props();
10
+ let { schema = $bindable(), uiOnly = false, noPreview = false, fullHeight = true, formatExtension = $bindable(undefined), onSchemaChange, customUi } = $props();
11
11
  let resourceIsTextFile = $state(false);
12
12
  let addPropertyComponent = $state(undefined);
13
13
  let editableSchemaForm = $state(undefined);
@@ -61,6 +61,7 @@ let suggestedFileExtensions = $state([
61
61
  >
62
62
  {#if noPreview}
63
63
  <AddPropertyV2
64
+ noPopover={customUi?.noAddPopover}
64
65
  bind:schema
65
66
  bind:this={addPropertyComponent}
66
67
  on:change={() => onSchemaChange?.({ schema: $state.snapshot(schema) })}
@@ -96,6 +97,7 @@ let suggestedFileExtensions = $state([
96
97
  {#snippet addProperty()}
97
98
  {#if !noPreview}
98
99
  <AddPropertyV2
100
+ noPopover={customUi?.noAddPopover}
99
101
  bind:schema
100
102
  bind:this={addPropertyComponent}
101
103
  on:change={() => onSchemaChange?.({ schema })}
@@ -5,6 +5,9 @@ export type EditableSchemaWrapperProps = {
5
5
  noPreview?: boolean;
6
6
  fullHeight?: boolean;
7
7
  formatExtension?: string | undefined;
8
+ customUi?: {
9
+ noAddPopover?: boolean;
10
+ };
8
11
  onSchemaChange?: ({ schema }: {
9
12
  schema: Schema;
10
13
  }) => void;
@@ -76,10 +76,10 @@ let forceJson = $state(false);
76
76
  {#if selectedTab === 'logs'}
77
77
  <SplitPanesWrapper>
78
78
  <Splitpanes horizontal>
79
- {#if previewJob?.is_flow_step == false && previewJob?.flow_status && !(typeof previewJob.flow_status == 'object' && '_metadata' in previewJob.flow_status)}
79
+ {#if previewJob?.workflow_as_code_status}
80
80
  <Pane class="relative">
81
81
  <WorkflowTimeline
82
- flow_status={asWorkflowStatus(previewJob.flow_status)}
82
+ flow_status={asWorkflowStatus(previewJob.workflow_as_code_status)}
83
83
  flowDone={previewJob.type == 'CompletedJob'}
84
84
  />
85
85
  </Pane>
@@ -93,6 +93,7 @@ let forceJson = $state(false);
93
93
  isLoading={previewJob?.['running'] == false && previewIsLoading}
94
94
  tag={previewJob?.tag}
95
95
  download={customUi?.disableDownload !== true}
96
+ tagLabel={customUi?.tagLabel}
96
97
  />
97
98
  </Pane>
98
99
  <Pane>
@@ -1,5 +1,5 @@
1
1
  import type { NewScript } from '../gen';
2
- import type { AssetWithAccessType } from './assets/lib';
2
+ import type { AssetWithAltAccessType } from './assets/lib';
3
3
  import type { ScriptBuilderWhitelabelCustomUi } from './custom_ui';
4
4
  import type { DiffDrawerI } from './diff_drawer';
5
5
  import type { ScriptBuilderFunctionExports } from './scriptBuilder';
@@ -8,7 +8,7 @@ import type { NewScriptWithDraftAndDraftTriggers, Trigger } from './triggers/uti
8
8
  export interface ScriptBuilderProps {
9
9
  script: NewScript & {
10
10
  draft_triggers?: Trigger[];
11
- fallback_access_types?: AssetWithAccessType[];
11
+ assets?: AssetWithAltAccessType[];
12
12
  };
13
13
  disableAi?: boolean;
14
14
  fullyLoaded?: boolean;
@@ -4,12 +4,13 @@ import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
4
4
  import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
5
5
  import { triggerableByAI } from '../../actions/triggerableByAI.svelte';
6
6
  import Toggle from '../Toggle.svelte';
7
- import { UserService } from '../../gen';
8
- import { copyToClipboard } from '../../utils';
9
- import { Clipboard } from 'lucide-svelte';
10
- import ClipboardPanel from '../details/ClipboardPanel.svelte';
7
+ import { IntegrationService, UserService } from '../../gen';
11
8
  import { createEventDispatcher } from 'svelte';
12
- let { showMcpMode = false, defaultNewTokenWorkspace, scopes, actions, newTokenLabel = $bindable(undefined) } = $props();
9
+ import MultiSelect from '../select/MultiSelect.svelte';
10
+ import { safeSelectItems } from '../select/utils.svelte';
11
+ import TokenDisplay from './TokenDisplay.svelte';
12
+ import ScopeSelector from './ScopeSelector.svelte';
13
+ let { showMcpMode = false, defaultNewTokenWorkspace, scopes, onTokenCreated, newTokenLabel = $bindable(undefined) } = $props();
13
14
  let newToken = $state(undefined);
14
15
  let newMcpToken = $state(undefined);
15
16
  let newTokenExpiration = $state(undefined);
@@ -19,10 +20,9 @@ let mcpCreationMode = $state(false);
19
20
  let newMcpScope = $state('favorites');
20
21
  let loadingApps = $state(false);
21
22
  let errorFetchApps = $state(false);
22
- // let allApps = $state<string[]>([])
23
- function handleCopyClick() {
24
- copyToClipboard(newToken ?? '');
25
- }
23
+ let allApps = $state([]);
24
+ let customScopes = $state([]);
25
+ let showCustomScopes = $state(false);
26
26
  const dispatch = createEventDispatcher();
27
27
  function ensureCurrentWorkspaceIncluded(workspacesList, currentWorkspace) {
28
28
  if (!currentWorkspace) {
@@ -47,6 +47,9 @@ async function createToken(mcpMode = false) {
47
47
  tokenScopes.push(`mcp:hub:${newMcpApps.join(',')}`);
48
48
  }
49
49
  }
50
+ else if (showCustomScopes && customScopes.length > 0) {
51
+ tokenScopes = customScopes;
52
+ }
50
53
  const createdToken = await UserService.createToken({
51
54
  requestBody: {
52
55
  label: newTokenLabel,
@@ -62,8 +65,8 @@ async function createToken(mcpMode = false) {
62
65
  newToken = `${createdToken}`;
63
66
  }
64
67
  dispatch('tokenCreated', newToken ?? newMcpToken);
65
- if (actions) {
66
- actions();
68
+ if (onTokenCreated) {
69
+ onTokenCreated(newToken ?? newMcpToken ?? '');
67
70
  }
68
71
  mcpCreationMode = false;
69
72
  }
@@ -73,37 +76,36 @@ async function createToken(mcpMode = false) {
73
76
  }
74
77
  const workspaces = $derived(ensureCurrentWorkspaceIncluded($userWorkspaces, $workspaceStore));
75
78
  const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorkspace}/sse?token=`);
79
+ $effect(() => {
80
+ if (mcpCreationMode) {
81
+ getAllApps();
82
+ }
83
+ else {
84
+ newMcpApps = [];
85
+ }
86
+ });
87
+ async function getAllApps() {
88
+ if (allApps.length > 0) {
89
+ return;
90
+ }
91
+ try {
92
+ loadingApps = true;
93
+ allApps = (await IntegrationService.listHubIntegrations({
94
+ kind: 'script'
95
+ })).map((x) => x.name);
96
+ }
97
+ catch (err) {
98
+ console.error('Hub is not available');
99
+ allApps = [];
100
+ errorFetchApps = true;
101
+ }
102
+ finally {
103
+ loadingApps = false;
104
+ }
105
+ }
76
106
  </script>
77
107
 
78
108
  <div>
79
- {#if newToken}
80
- <div
81
- class="border rounded-md mb-6 px-2 py-2 bg-green-50 dark:bg-green-200 dark:text-green-800 flex flex-row flex-wrap"
82
- >
83
- <div>
84
- Added token: <button onclick={handleCopyClick} class="inline-flex gap-2 items-center">
85
- {newToken}
86
- <Clipboard size={12} />
87
- </button>
88
- </div>
89
- <div class="pt-1 text-xs ml-2">
90
- Make sure to copy your personal access token now. You won't be able to see it again!
91
- </div>
92
- </div>
93
- {/if}
94
-
95
- {#if newMcpToken}
96
- <div
97
- class="border rounded-md mb-6 px-2 py-2 bg-green-50 dark:bg-green-200 dark:text-green-800 flex flex-row flex-wrap"
98
- >
99
- <p class="text-sm mb-2">New MCP URL:</p>
100
- <ClipboardPanel content={`${mcpBaseUrl}${newMcpToken}`} />
101
- <p class="pt-1 text-xs">
102
- Make sure to copy this URL now. You won't be able to see it again!
103
- </p>
104
- </div>
105
- {/if}
106
-
107
109
  <div class="py-3 px-3 border rounded-md mb-6 bg-surface-secondary min-w-min">
108
110
  <h3 class="pb-3 font-semibold">Add a new token</h3>
109
111
 
@@ -149,7 +151,27 @@ const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorks
149
151
  </div>
150
152
  {/if}
151
153
 
152
- <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
154
+ {#if !mcpCreationMode && (!scopes || scopes.length === 0)}
155
+ <div class="flex flex-col gap-2">
156
+ <Toggle
157
+ checked={showCustomScopes}
158
+ on:change={(e) => {
159
+ showCustomScopes = e.detail
160
+ }}
161
+ options={{
162
+ right: 'Limit token permissions',
163
+ rightTooltip:
164
+ 'By default, tokens have full API access. Enable this to restrict the token to specific scopes.'
165
+ }}
166
+ size="xs"
167
+ />
168
+ {#if showCustomScopes}
169
+ <ScopeSelector bind:selectedScopes={customScopes} />
170
+ {/if}
171
+ </div>
172
+ {/if}
173
+
174
+ <div class="mt-2 grid grid-cols-1 md:grid-cols-2 gap-4">
153
175
  {#if mcpCreationMode}
154
176
  <div>
155
177
  <span class="block mb-1">Scope</span>
@@ -178,7 +200,12 @@ const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorks
178
200
  {:else if errorFetchApps}
179
201
  <div>Error fetching apps</div>
180
202
  {:else}
181
- <!-- MultiSelectWrapper was confirmed not to be necessary : deleted -->
203
+ <MultiSelect
204
+ items={safeSelectItems(allApps)}
205
+ placeholder="Select apps"
206
+ bind:value={newMcpApps}
207
+ class="!bg-surface"
208
+ />
182
209
  {/if}
183
210
  </div>
184
211
 
@@ -232,4 +259,12 @@ const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorks
232
259
  </Button>
233
260
  </div>
234
261
  </div>
262
+
263
+ {#if newToken}
264
+ <TokenDisplay token={newToken} type="token" />
265
+ {/if}
266
+
267
+ {#if newMcpToken}
268
+ <TokenDisplay token={newMcpToken} type="mcp" mcpUrl={`${mcpBaseUrl}${newMcpToken}`} />
269
+ {/if}
235
270
  </div>
@@ -4,7 +4,7 @@ interface Props {
4
4
  newTokenLabel?: string;
5
5
  defaultNewTokenWorkspace?: string;
6
6
  scopes?: string[];
7
- actions?: () => void;
7
+ onTokenCreated?: (token: string) => void;
8
8
  displayCreateToken?: boolean;
9
9
  }
10
10
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {