windmill-components 1.434.1 → 1.444.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 (285) hide show
  1. package/package/components/ArgInput.svelte +12 -16
  2. package/package/components/ArgInput.svelte.d.ts +1 -0
  3. package/package/components/AssignableTags.svelte +3 -1
  4. package/package/components/AssignableTags.svelte.d.ts +1 -0
  5. package/package/components/AuthSettings.svelte +248 -0
  6. package/package/components/AuthSettings.svelte.d.ts +19 -0
  7. package/package/components/AutoscalingConfigEditor.svelte +2 -2
  8. package/package/components/CronInput.svelte +2 -2
  9. package/package/components/DeployWorkspace.svelte +1 -1
  10. package/package/components/Description.svelte +9 -0
  11. package/package/components/Description.svelte.d.ts +18 -0
  12. package/package/components/Dev.svelte +18 -3
  13. package/package/components/DisplayResult.svelte +7 -4
  14. package/package/components/DisplayResult.svelte.d.ts +1 -0
  15. package/package/components/DropdownV2.svelte +2 -1
  16. package/package/components/DropdownV2.svelte.d.ts +1 -0
  17. package/package/components/EditableSchemaForm.svelte +2 -2
  18. package/package/components/Editor.svelte +9 -6
  19. package/package/components/Editor.svelte.d.ts +4 -2
  20. package/package/components/EditorBar.svelte +51 -6
  21. package/package/components/ErrorOrRecoveryHandler.svelte +4 -3
  22. package/package/components/ExecutionDuration.svelte +2 -1
  23. package/package/components/FieldHeader.svelte +9 -1
  24. package/package/components/FieldHeader.svelte.d.ts +1 -0
  25. package/package/components/FlowBuilder.svelte +16 -3
  26. package/package/components/FlowGraphViewer.svelte +2 -0
  27. package/package/components/FlowPreviewContent.svelte +6 -15
  28. package/package/components/FlowStatusViewerInner.svelte +14 -10
  29. package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -0
  30. package/package/components/HighlightCode.svelte +3 -0
  31. package/package/components/InputTransformSchemaForm.svelte +1 -1
  32. package/package/components/InstanceSetting.svelte +774 -0
  33. package/package/components/InstanceSetting.svelte.d.ts +27 -0
  34. package/package/components/InstanceSettings.svelte +68 -1005
  35. package/package/components/InstanceSettings.svelte.d.ts +0 -4
  36. package/package/components/Label.svelte +16 -6
  37. package/package/components/Label.svelte.d.ts +3 -0
  38. package/package/components/Login.svelte +17 -9
  39. package/package/components/OAuthSetting.svelte +4 -3
  40. package/package/components/OauthExtraParams.svelte +1 -1
  41. package/package/components/OauthScopes.svelte +2 -2
  42. package/package/components/ObjectStoreConfigSettings.svelte +141 -128
  43. package/package/components/QueueMetricsDrawer.svelte +5 -5
  44. package/package/components/ResourceEditor.svelte +4 -0
  45. package/package/components/ResourceEditor.svelte.d.ts +1 -0
  46. package/package/components/ResourceEditorDrawer.svelte +15 -3
  47. package/package/components/ResourceEditorDrawer.svelte.d.ts +2 -2
  48. package/package/components/ResourcePicker.svelte +16 -5
  49. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  50. package/package/components/ResultJobLoader.svelte.d.ts +1 -1
  51. package/package/components/RunPageSchedules.svelte +15 -10
  52. package/package/components/SavedInputs.svelte +1 -1
  53. package/package/components/ScheduleEditorInner.svelte +58 -27
  54. package/package/components/SchemaForm.svelte +7 -5
  55. package/package/components/SchemaForm.svelte.d.ts +1 -0
  56. package/package/components/ScriptBuilder.svelte +58 -5
  57. package/package/components/ScriptEditor.svelte +78 -40
  58. package/package/components/ScriptEditor.svelte.d.ts +17 -2
  59. package/package/components/ScriptPicker.svelte +41 -34
  60. package/package/components/ScriptPicker.svelte.d.ts +1 -0
  61. package/package/components/ScriptVersionHistory.svelte +1 -1
  62. package/package/components/Section.svelte +38 -35
  63. package/package/components/Section.svelte.d.ts +2 -0
  64. package/package/components/ServiceLogsInner.svelte +1 -1
  65. package/package/components/SimpleEditor.svelte +2 -0
  66. package/package/components/Subsection.svelte +52 -0
  67. package/package/components/Subsection.svelte.d.ts +27 -0
  68. package/package/components/SuperadminSettings.svelte +23 -13
  69. package/package/components/TemplateEditor.svelte +4 -3
  70. package/package/components/TestConnection.svelte +5 -0
  71. package/package/components/TestJobLoader.svelte +2 -1
  72. package/package/components/TestJobLoader.svelte.d.ts +1 -1
  73. package/package/components/Toggle.svelte +2 -4
  74. package/package/components/UserSettings.svelte +1 -1
  75. package/package/components/WorkerGroup.svelte +4 -4
  76. package/package/components/WorkerTagPicker.svelte +4 -2
  77. package/package/components/WorkerTagPicker.svelte.d.ts +1 -0
  78. package/package/components/WorkerTagSelect.svelte +2 -0
  79. package/package/components/WorkerTagSelect.svelte.d.ts +1 -0
  80. package/package/components/apps/components/display/AppDisplayComponent.svelte +2 -1
  81. package/package/components/apps/components/display/dbtable/utils.js +26 -1
  82. package/package/components/apps/components/helpers/RunnableComponent.svelte +8 -2
  83. package/package/components/apps/components/inputs/AppDateInput.svelte +7 -1
  84. package/package/components/apps/components/inputs/AppS3FileInput.svelte +1 -1
  85. package/package/components/apps/editor/AppEditor.svelte +5 -34
  86. package/package/components/apps/editor/AppEditor.svelte.d.ts +1 -0
  87. package/package/components/apps/editor/AppEditorBottomPanel.svelte +4 -7
  88. package/package/components/apps/editor/AppEditorBottomPanel.svelte.d.ts +1 -3
  89. package/package/components/apps/editor/AppEditorHeader.svelte +148 -58
  90. package/package/components/apps/editor/AppEditorHeader.svelte.d.ts +1 -0
  91. package/package/components/apps/editor/DeploymentHistory.svelte +1 -1
  92. package/package/components/apps/editor/RunnableJobPanel.svelte +6 -2
  93. package/package/components/apps/editor/RunnableJobPanel.svelte.d.ts +1 -0
  94. package/package/components/apps/editor/appUtils.d.ts +1 -0
  95. package/package/components/apps/editor/appUtils.js +17 -0
  96. package/package/components/apps/editor/component/components.d.ts +82 -81
  97. package/package/components/apps/editor/component/components.js +4 -3
  98. package/package/components/apps/editor/componentsPanel/ComponentList.svelte +1 -1
  99. package/package/components/apps/editor/componentsPanel/GroupList.svelte +12 -2
  100. package/package/components/apps/editor/contextPanel/ContextPanel.svelte +1 -1
  101. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte +1 -1
  102. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +53 -56
  103. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +1 -1
  104. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +3 -2
  105. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +1 -1
  106. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +16 -9
  107. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte.d.ts +1 -0
  108. package/package/components/apps/inputType.d.ts +2 -2
  109. package/package/components/apps/types.d.ts +2 -0
  110. package/package/components/common/alert/ConnectionIndicator.svelte +30 -0
  111. package/package/components/common/alert/ConnectionIndicator.svelte.d.ts +20 -0
  112. package/package/components/common/alert/Notification.svelte +15 -0
  113. package/package/components/common/alert/Notification.svelte.d.ts +17 -0
  114. package/package/components/common/button/AnimatedButton.svelte +1 -1
  115. package/package/components/common/button/RefreshButton.svelte +30 -0
  116. package/package/components/common/button/RefreshButton.svelte.d.ts +18 -0
  117. package/package/components/common/fileDownload/FileDownload.svelte +4 -3
  118. package/package/components/common/fileDownload/FileDownload.svelte.d.ts +1 -0
  119. package/package/components/common/fileUpload/FileUpload.svelte +3 -3
  120. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  121. package/package/components/common/layout/List.svelte +35 -0
  122. package/package/components/common/layout/List.svelte.d.ts +21 -0
  123. package/package/components/common/layout/ListElement.svelte +3 -0
  124. package/package/components/common/layout/ListElement.svelte.d.ts +27 -0
  125. package/package/components/common/menu/MenuV2.svelte +3 -2
  126. package/package/components/common/menu/MenuV2.svelte.d.ts +1 -0
  127. package/package/components/common/modal/Modal.svelte +6 -4
  128. package/package/components/common/modal/Modal.svelte.d.ts +1 -0
  129. package/package/components/common/modal/Modal2.svelte +101 -0
  130. package/package/components/common/modal/Modal2.svelte.d.ts +28 -0
  131. package/package/components/common/popup/Popup.svelte +5 -1
  132. package/package/components/common/popup/Popup.svelte.d.ts +2 -0
  133. package/package/components/common/toggleButton-v2/ToggleButton.svelte +1 -1
  134. package/package/components/copilot/FlowCopilotStatus.svelte +1 -1
  135. package/package/components/details/ClipboardPanel.svelte +12 -2
  136. package/package/components/details/ClipboardPanel.svelte.d.ts +2 -0
  137. package/package/components/details/CopyableCodeBlock.svelte +24 -0
  138. package/package/components/details/CopyableCodeBlock.svelte.d.ts +19 -0
  139. package/package/components/details/DetailPageLayout.svelte +3 -1
  140. package/package/components/details/EmailTriggerConfigSection.svelte +119 -0
  141. package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +38 -0
  142. package/package/components/details/EmailTriggerPanel.svelte +27 -74
  143. package/package/components/details/EmailTriggerPanel.svelte.d.ts +7 -1
  144. package/package/components/flows/FlowEditor.svelte +1 -1
  145. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  146. package/package/components/flows/FlowHistoryInner.svelte +1 -1
  147. package/package/components/flows/content/BranchPredicateEditor.svelte +1 -1
  148. package/package/components/flows/content/FlowEditorPanel.svelte +30 -1
  149. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -0
  150. package/package/components/flows/content/FlowInput.svelte +2 -15
  151. package/package/components/flows/content/FlowInputs.svelte +1 -1
  152. package/package/components/flows/content/FlowInputsQuick.svelte +2 -2
  153. package/package/components/flows/content/FlowModuleComponent.svelte +9 -5
  154. package/package/components/flows/content/FlowModuleEarlyStop.svelte +2 -2
  155. package/package/components/flows/content/FlowModuleHeader.svelte +4 -1
  156. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  157. package/package/components/flows/content/FlowPathViewer.svelte +3 -1
  158. package/package/components/flows/content/FlowRetries.svelte +32 -5
  159. package/package/components/flows/content/FlowSettings.svelte +56 -48
  160. package/package/components/flows/flowStateUtils.d.ts +10 -1
  161. package/package/components/flows/flowStateUtils.js +23 -0
  162. package/package/components/flows/map/FlowModuleSchemaMap.svelte +9 -19
  163. package/package/components/flows/map/InsertModuleButton.svelte +3 -3
  164. package/package/components/flows/map/VirtualItem.svelte +29 -1
  165. package/package/components/flows/map/VirtualItem.svelte.d.ts +2 -0
  166. package/package/components/flows/pickers/TopLevelNode.svelte +2 -2
  167. package/package/components/flows/previousResults.js +8 -2
  168. package/package/components/flows/types.d.ts +1 -0
  169. package/package/components/graph/FlowGraphV2.svelte +5 -1
  170. package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -0
  171. package/package/components/graph/renderers/nodes/InputNode.svelte +2 -0
  172. package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +2 -0
  173. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +1 -1
  174. package/package/components/icons/CSharpIcon.svelte +14 -0
  175. package/package/components/icons/CSharpIcon.svelte.d.ts +25 -0
  176. package/package/components/icons/GitIcon.svelte +5 -2
  177. package/package/components/icons/XeroIcon.svelte +24 -0
  178. package/package/components/icons/XeroIcon.svelte.d.ts +17 -0
  179. package/package/components/icons/index.d.ts +3 -1
  180. package/package/components/icons/index.js +4 -2
  181. package/package/components/instanceSettings.d.ts +3 -1
  182. package/package/components/instanceSettings.js +77 -69
  183. package/package/components/meltComponents/Popover.svelte +82 -0
  184. package/package/components/meltComponents/Popover.svelte.d.ts +21 -0
  185. package/package/components/propertyPicker/PropPicker.svelte +5 -3
  186. package/package/components/runs/JobLoader.svelte +5 -2
  187. package/package/components/runs/JobPreview.svelte +5 -5
  188. package/package/components/runs/RunRow.svelte +3 -4
  189. package/package/components/runs/RunsFilter.svelte +4 -4
  190. package/package/components/schema/EditableSchemaDrawer.svelte +4 -4
  191. package/package/components/schema/PropertyEditor.svelte +1 -1
  192. package/package/components/schema/SchemaFormDND.svelte +2 -0
  193. package/package/components/schema/SchemaFormDND.svelte.d.ts +1 -0
  194. package/package/components/scriptEditor/LogPanel.svelte +176 -164
  195. package/package/components/scriptEditor/LogPanel.svelte.d.ts +2 -0
  196. package/package/components/search/GlobalSearchModal.svelte +3 -3
  197. package/package/components/sidebar/CriticalAlertModal.svelte +155 -9
  198. package/package/components/sidebar/CriticalAlertModalInner.svelte +65 -212
  199. package/package/components/sidebar/CriticalAlertModalInner.svelte.d.ts +2 -4
  200. package/package/components/sidebar/CriticalAlertTable.svelte +142 -0
  201. package/package/components/sidebar/CriticalAlertTable.svelte.d.ts +25 -0
  202. package/package/components/sidebar/OperatorMenu.svelte +30 -8
  203. package/package/components/sidebar/SideBarNotification.svelte +3 -6
  204. package/package/components/sidebar/SidebarContent.svelte +5 -5
  205. package/package/components/sidebar/WorkspaceMenu.svelte +9 -5
  206. package/package/components/sidebar/WorkspaceMenu.svelte.d.ts +1 -0
  207. package/package/components/sidebar/changelogs.js +82 -17
  208. package/package/components/splitPanes/SplitPanesOrColumnOnMobile.svelte +21 -21
  209. package/package/components/table/AutoDataTable.svelte +1 -1
  210. package/package/components/table/Cell.svelte +5 -3
  211. package/package/components/table/Cell.svelte.d.ts +1 -0
  212. package/package/components/table/DataTable.svelte +65 -58
  213. package/package/components/table/DataTable.svelte.d.ts +2 -0
  214. package/package/components/table/Head.svelte +1 -1
  215. package/package/components/table/Row.svelte +3 -1
  216. package/package/components/table/Row.svelte.d.ts +1 -0
  217. package/package/components/toast.js +3 -1
  218. package/package/components/triggers/CaptureButton.svelte +77 -0
  219. package/package/components/triggers/CaptureButton.svelte.d.ts +16 -0
  220. package/package/components/triggers/CaptureIcon.svelte +17 -0
  221. package/package/components/triggers/CaptureIcon.svelte.d.ts +23 -0
  222. package/package/components/triggers/CaptureSection.svelte +76 -0
  223. package/package/components/triggers/CaptureSection.svelte.d.ts +42 -0
  224. package/package/components/triggers/CaptureTable.svelte +224 -0
  225. package/package/components/triggers/CaptureTable.svelte.d.ts +43 -0
  226. package/package/components/triggers/CaptureWrapper.svelte +237 -0
  227. package/package/components/triggers/CaptureWrapper.svelte.d.ts +35 -0
  228. package/package/components/triggers/KafkaTriggerEditor.svelte +2 -2
  229. package/package/components/triggers/KafkaTriggerEditor.svelte.d.ts +2 -2
  230. package/package/components/triggers/KafkaTriggerEditorInner.svelte +47 -119
  231. package/package/components/triggers/KafkaTriggerEditorInner.svelte.d.ts +2 -2
  232. package/package/components/triggers/KafkaTriggersConfigSection.svelte +215 -0
  233. package/package/components/triggers/KafkaTriggersConfigSection.svelte.d.ts +36 -0
  234. package/package/components/triggers/KafkaTriggersPanel.svelte +73 -45
  235. package/package/components/triggers/KafkaTriggersPanel.svelte.d.ts +6 -0
  236. package/package/components/triggers/RouteEditor.svelte +2 -2
  237. package/package/components/triggers/RouteEditor.svelte.d.ts +2 -2
  238. package/package/components/triggers/RouteEditorConfigSection.svelte +162 -0
  239. package/package/components/triggers/RouteEditorConfigSection.svelte.d.ts +43 -0
  240. package/package/components/triggers/RouteEditorInner.svelte +98 -163
  241. package/package/components/triggers/RouteEditorInner.svelte.d.ts +2 -2
  242. package/package/components/triggers/RoutesPanel.svelte +69 -54
  243. package/package/components/triggers/RoutesPanel.svelte.d.ts +5 -0
  244. package/package/components/triggers/ScheduledPollPanel.svelte +5 -9
  245. package/package/components/triggers/TriggersEditor.svelte +119 -89
  246. package/package/components/triggers/TriggersEditor.svelte.d.ts +7 -0
  247. package/package/components/triggers/TriggersEditorSection.svelte +109 -0
  248. package/package/components/triggers/TriggersEditorSection.svelte.d.ts +29 -0
  249. package/package/components/triggers/TriggersWrapper.svelte +60 -0
  250. package/package/components/triggers/TriggersWrapper.svelte.d.ts +21 -0
  251. package/package/components/triggers/WebhooksConfigSection.svelte +382 -0
  252. package/package/components/triggers/WebhooksConfigSection.svelte.d.ts +39 -0
  253. package/package/components/triggers/WebhooksPanel.svelte +32 -331
  254. package/package/components/triggers/WebhooksPanel.svelte.d.ts +7 -1
  255. package/package/components/triggers/WebsocketEditorConfigSection.svelte +176 -0
  256. package/package/components/triggers/WebsocketEditorConfigSection.svelte.d.ts +37 -0
  257. package/package/components/triggers/WebsocketTriggerEditor.svelte +2 -2
  258. package/package/components/triggers/WebsocketTriggerEditor.svelte.d.ts +2 -2
  259. package/package/components/triggers/WebsocketTriggerEditorInner.svelte +29 -150
  260. package/package/components/triggers/WebsocketTriggerEditorInner.svelte.d.ts +2 -2
  261. package/package/components/triggers/WebsocketTriggersPanel.svelte +70 -45
  262. package/package/components/triggers/WebsocketTriggersPanel.svelte.d.ts +6 -0
  263. package/package/components/triggers.d.ts +6 -2
  264. package/package/components/triggers.js +16 -0
  265. package/package/components/wizards/AgGridWizard.svelte +4 -4
  266. package/package/editorUtils.d.ts +2 -0
  267. package/package/editorUtils.js +6 -3
  268. package/package/gen/core/OpenAPI.js +1 -1
  269. package/package/gen/schemas.gen.d.ts +17 -8
  270. package/package/gen/schemas.gen.js +17 -8
  271. package/package/gen/services.gen.d.ts +55 -5
  272. package/package/gen/services.gen.js +108 -5
  273. package/package/gen/types.gen.d.ts +180 -13
  274. package/package/hubPaths.json +6 -3
  275. package/package/infer.js +9 -0
  276. package/package/script_helpers.d.ts +5 -0
  277. package/package/script_helpers.js +68 -8
  278. package/package/scripts.d.ts +1 -1
  279. package/package/scripts.js +5 -1
  280. package/package/stores.d.ts +1 -0
  281. package/package/utils.d.ts +3 -1
  282. package/package/utils.js +20 -4
  283. package/package.json +11 -8
  284. package/package/components/flows/content/CapturePayload.svelte +0 -114
  285. package/package/components/flows/content/CapturePayload.svelte.d.ts +0 -17
@@ -1,351 +1,52 @@
1
- <script>import Tooltip from '../Tooltip.svelte';
2
- import { userStore, workspaceStore } from '../../stores';
3
- import bash from 'svelte-highlight/languages/bash';
4
- import { Tabs, Tab, TabContent, Button, Alert } from '../common';
5
- import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
6
- import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
7
- import { DEFAULT_WEBHOOK_TYPE, SCRIPT_VIEW_SHOW_EXAMPLE_CURL, SCRIPT_VIEW_SHOW_CREATE_TOKEN_BUTTON } from '../../consts';
8
- import { ArrowDownRight, ArrowUpRight, Clipboard } from 'lucide-svelte';
9
- import UserSettings from '../UserSettings.svelte';
10
- import { Highlight } from 'svelte-highlight';
11
- import { typescript } from 'svelte-highlight/languages';
12
- import ClipboardPanel from '../details/ClipboardPanel.svelte';
13
- import { copyToClipboard, generateRandomString } from '../../utils';
1
+ <script>import { Alert } from '../common';
2
+ import Description from '../Description.svelte';
14
3
  import HighlightTheme from '../HighlightTheme.svelte';
15
- import { base } from '../../base';
16
- import Label from '../Label.svelte';
17
- import TriggerTokens from './TriggerTokens.svelte';
18
- let userSettings;
4
+ import TriggersEditorSection from './TriggersEditorSection.svelte';
19
5
  export let token;
20
6
  export let args;
21
7
  export let scopes = [];
22
8
  export let isFlow = false;
23
9
  export let hash = undefined;
24
10
  export let path;
25
- export let url = '';
26
11
  export let newItem = false;
27
- let selectedTab = 'rest';
28
- let webhooks;
29
- $: webhooks = isFlow ? computeFlowWebhooks(path) : computeScriptWebhooks(hash, path);
30
- function computeScriptWebhooks(hash, path) {
31
- let webhookBase = `${window.location.origin}${base}/api/w/${$workspaceStore}/jobs`;
32
- return {
33
- async: {
34
- hash: `${webhookBase}/run/h/${hash}`,
35
- path: `${webhookBase}/run/p/${path}`
36
- },
37
- sync: {
38
- hash: `${webhookBase}/run_wait_result/h/${hash}`,
39
- path: `${webhookBase}/run_wait_result/p/${path}`,
40
- get_path: `${webhookBase}/run_wait_result/p/${path}`
41
- }
42
- };
43
- }
44
- function computeFlowWebhooks(path) {
45
- let webhooksBase = `${window.location.origin}${base}/api/w/${$workspaceStore}/jobs`;
46
- let urlAsync = `${webhooksBase}/run/f/${path}`;
47
- let urlSync = `${webhooksBase}/run_wait_result/f/${path}`;
48
- return {
49
- async: {
50
- path: urlAsync
51
- },
52
- sync: {
53
- path: urlSync,
54
- get_path: urlSync
55
- }
56
- };
57
- }
58
- let webhookType = DEFAULT_WEBHOOK_TYPE;
59
- let requestType = isFlow ? 'path' : 'path';
60
- let tokenType = 'headers';
61
- $: if (webhookType === 'async' && requestType === 'get_path') {
62
- // Request type is not supported for async webhooks
63
- requestType = 'hash';
64
- }
65
- $: url =
66
- webhooks[webhookType][requestType] +
67
- (tokenType === 'query'
68
- ? `?token=${token}${requestType === 'get_path'
69
- ? `&payload=${encodeURIComponent(btoa(JSON.stringify(args)))}`
70
- : ''}`
71
- : `${requestType === 'get_path'
72
- ? `?payload=${encodeURIComponent(btoa(JSON.stringify(args)))}`
73
- : ''}`);
74
- function headers() {
75
- const headers = {};
76
- if (requestType != 'get_path') {
77
- headers['Content-Type'] = 'application/json';
78
- }
79
- if (tokenType === 'headers') {
80
- headers['Authorization'] = `Bearer ${token}`;
81
- }
82
- return headers;
83
- }
84
- function fetchCode() {
85
- if (webhookType === 'sync') {
86
- return `
87
- export async function main() {
88
- const jobTriggerResponse = await triggerJob();
89
- const data = await jobTriggerResponse.json();
90
- return data;
91
- }
92
-
93
- async function triggerJob() {
94
- ${requestType === 'get_path'
95
- ? '// Payload is a base64 encoded string of the arguments'
96
- : `const body = JSON.stringify(${JSON.stringify(args, null, 2).replaceAll('\n', '\n\t')});`}
97
- const endpoint = \`${url}\`;
98
-
99
- return await fetch(endpoint, {
100
- method: '${requestType === 'get_path' ? 'GET' : 'POST'}',
101
- headers: ${JSON.stringify(headers(), null, 2).replaceAll('\n', '\n\t\t')}${requestType === 'get_path' ? '' : `,\n\t\tbody`}
102
- });
103
- }`;
104
- }
105
- // Main function
106
- let mainFunction = `
107
- export async function main() {
108
- const jobTriggerResponse = await triggerJob();
109
- const UUID = await jobTriggerResponse.text();
110
- const jobCompletionData = await waitForJobCompletion(UUID);
111
- return jobCompletionData;
112
- }`;
113
- // triggerJob function
114
- let triggerJobFunction = `
115
- async function triggerJob() {
116
- const body = JSON.stringify(${JSON.stringify(args, null, 2).replaceAll('\n', '\n\t')});
117
- const endpoint = \`${url}\`;
118
-
119
- return await fetch(endpoint, {
120
- method: '${requestType === 'get_path' ? 'GET' : 'POST'}',
121
- headers: ${JSON.stringify(headers(), null, 2).replaceAll('\n', '\n\t\t')},
122
- body
123
- });
124
- }`;
125
- // waitForJobCompletion function
126
- let waitForJobCompletionFunction = `
127
- function waitForJobCompletion(UUID) {
128
- return new Promise(async (resolve, reject) => {
129
- try {
130
- const endpoint = \`${window.location.origin}/api/w/${$workspaceStore}/jobs_u/completed/get_result_maybe/\${UUID}\`;
131
- const checkResponse = await fetch(endpoint, {
132
- method: 'GET',
133
- headers: ${JSON.stringify(headers(), null, 2).replaceAll('\n', '\n\t\t\t\t')}
134
- });
135
-
136
- const checkData = await checkResponse.json();
137
-
138
- if (checkData.completed) {
139
- resolve(checkData);
140
- } else {
141
- // If not completed, wait for a second then try again
142
- setTimeout(async () => {
143
- const result = await waitForJobCompletion(UUID);
144
- resolve(result);
145
- }, 1000);
146
- }
147
- } catch (error) {
148
- reject(error);
149
- }
150
- });
151
- }`;
152
- // Combine and return
153
- return `${mainFunction}\n\n${triggerJobFunction}\n\n${waitForJobCompletionFunction}`;
154
- }
155
- function curlCode() {
156
- return `TOKEN='${token}'
157
- ${requestType !== 'get_path' ? `BODY='${JSON.stringify(args)}'` : ''}
158
- URL='${url}'
159
- ${webhookType === 'sync' ? 'RESULT' : 'UUID'}=$(curl -s ${requestType != 'get_path' ? "-H 'Content-Type: application/json'" : ''} ${tokenType === 'headers' ? `-H "Authorization: Bearer $TOKEN"` : ''} -X ${requestType === 'get_path' ? 'GET' : 'POST'} ${requestType !== 'get_path' ? `-d "$BODY" ` : ''}$URL)
160
-
161
- ${webhookType === 'sync'
162
- ? 'echo -E $RESULT | jq'
163
- : `
164
- URL="${window.location.origin}/api/w/${$workspaceStore}/jobs_u/completed/get_result_maybe/$UUID"
165
- while true; do
166
- curl -s -H "Authorization: Bearer $TOKEN" $URL -o res.json
167
- COMPLETED=$(cat res.json | jq .completed)
168
- if [ "$COMPLETED" = "true" ]; then
169
- cat res.json | jq .result
170
- break
171
- else
172
- sleep 1
173
- fi
174
- done`}`;
175
- }
176
- let triggerTokens = undefined;
12
+ export let isEditor = false;
13
+ export let canHavePreprocessor = false;
14
+ export let hasPreprocessor = false;
15
+ let data = {
16
+ hash,
17
+ token,
18
+ scopes,
19
+ args
20
+ };
177
21
  </script>
178
22
 
179
23
  <HighlightTheme />
180
24
 
181
- <UserSettings
182
- bind:this={userSettings}
183
- on:tokenCreated={(e) => {
184
- token = e.detail
185
- triggerTokens?.listTokens()
186
- }}
187
- newTokenWorkspace={$workspaceStore}
188
- newTokenLabel={`webhook-${$userStore?.username ?? 'superadmin'}-${generateRandomString(4)}`}
189
- {scopes}
190
- />
191
-
192
25
  <div class="flex flex-col w-full gap-4">
193
- {#if SCRIPT_VIEW_SHOW_CREATE_TOKEN_BUTTON}
194
- <Label label="Token">
195
- <div class="flex flex-row justify-between gap-2">
196
- <input
197
- bind:value={token}
198
- placeholder="paste your token here once created to alter examples below"
199
- class="!text-xs !font-normal"
200
- />
201
- <Button size="xs" color="light" variant="border" on:click={userSettings.openDrawer}>
202
- Create a Webhook-specific Token
203
- <Tooltip light>
204
- The token will have a scope such that it can only be used to trigger this script. It is
205
- safe to share as it cannot be used to impersonate you.
206
- </Tooltip>
207
- </Button>
208
- </div>
209
- </Label>
210
- {/if}
211
-
212
- <div class="flex flex-col gap-2">
213
- <div class="flex flex-row justify-between">
214
- <div class="text-sm font-normal text-secondary flex flex-row items-center">Request type</div>
215
- <ToggleButtonGroup class="h-[30px] w-auto" bind:selected={webhookType}>
216
- <ToggleButton
217
- label="Async"
218
- value="async"
219
- tooltip="The returning value is the uuid of the job assigned to execute the job."
220
- />
221
- <ToggleButton
222
- label="Sync"
223
- value="sync"
224
- tooltip="Triggers the execution, wait for the job to complete and return it as a response."
225
- />
226
- </ToggleButtonGroup>
227
- </div>
228
- <div class="flex flex-row justify-between">
229
- <div class="text-sm font-normal text-secondary flex flex-row items-center">Call method</div>
230
- <ToggleButtonGroup class="h-[30px] w-auto" bind:selected={requestType}>
231
- <ToggleButton
232
- label="POST by path"
233
- value="path"
234
- icon={ArrowUpRight}
235
- selectedColor="#fb923c"
236
- />
237
- {#if !isFlow}
238
- <ToggleButton
239
- label="POST by hash"
240
- value="hash"
241
- icon={ArrowUpRight}
242
- selectedColor="#fb923c"
243
- />
244
- {/if}
245
-
246
- <ToggleButton
247
- label="GET by path"
248
- value="get_path"
249
- icon={ArrowDownRight}
250
- disabled={webhookType !== 'sync'}
251
- selectedColor="#14b8a6"
252
- />
253
- </ToggleButtonGroup>
254
- </div>
255
- <div class="flex flex-row justify-between">
256
- <div class="text-sm font-normal text-secondary flex flex-row items-center"
257
- >Token configuration</div
258
- >
259
- <ToggleButtonGroup class="h-[30px] w-auto" bind:selected={tokenType}>
260
- <ToggleButton label="Token in Headers" value="headers" />
261
- <ToggleButton label="Token in Query" value="query" />
262
- </ToggleButtonGroup>
263
- </div>
264
- </div>
265
- <!-- svelte-ignore a11y-click-events-have-key-events -->
266
- <!-- svelte-ignore a11y-no-static-element-interactions -->
267
- <Tabs bind:selected={selectedTab}>
268
- <Tab value="rest" size="xs">REST</Tab>
269
- {#if SCRIPT_VIEW_SHOW_EXAMPLE_CURL}
270
- <Tab value="curl" size="xs">Curl</Tab>
271
- {/if}
272
- <Tab value="fetch" size="xs">Fetch</Tab>
273
-
274
- <svelte:fragment slot="content">
275
- {#key token}
276
- <TabContent value="rest" class="flex flex-col flex-1 h-full ">
277
- <div class="flex flex-col gap-2">
278
- <Label label="Url">
279
- <ClipboardPanel content={url} />
280
- </Label>
281
-
282
- {#if requestType !== 'get_path'}
283
- <Label label="Body">
284
- <ClipboardPanel content={JSON.stringify(args, null, 2)} />
285
- </Label>
286
- {/if}
287
- {#key requestType}
288
- {#key tokenType}
289
- <Label label="Headers">
290
- <ClipboardPanel content={JSON.stringify(headers(), null, 2)} />
291
- </Label>
292
- {/key}
293
- {/key}
294
- </div>
295
- </TabContent>
296
- <TabContent value="curl" class="flex flex-col flex-1 h-full">
297
- <div class="relative">
298
- {#key args}
299
- {#key requestType}
300
- {#key webhookType}
301
- {#key tokenType}
302
- <div
303
- class="flex flex-row flex-1 h-full border p-2 rounded-md overflow-auto relative"
304
- on:click={(e) => {
305
- e.preventDefault()
306
- copyToClipboard(curlCode())
307
- }}
308
- >
309
- <Highlight language={bash} code={curlCode()} />
310
- <Clipboard size={14} class="w-8 top-2 right-2 absolute" />
311
- </div>
312
- {/key}
313
- {/key}
314
- {/key}
315
- {/key}
316
- </div>
317
- </TabContent>
318
- <TabContent value="fetch">
319
- {#key args}
320
- {#key requestType}
321
- {#key webhookType}
322
- {#key tokenType}
323
- {#key token}
324
- <div
325
- class="flex flex-row flex-1 h-full border p-2 rounded-md overflow-auto relative"
326
- on:click={(e) => {
327
- e.preventDefault()
328
- copyToClipboard(fetchCode())
329
- }}
330
- >
331
- <Highlight language={typescript} code={fetchCode()} />
332
- <Clipboard size={14} class="w-8 top-2 right-2 absolute" />
333
- </div>
334
- {/key}{/key}{/key}{/key}
335
- {/key}
336
- </TabContent>
337
- {/key}
338
- </svelte:fragment>
339
- </Tabs>
340
-
341
- <div class="mt-10" />
342
- <TriggerTokens bind:this={triggerTokens} {isFlow} {path} labelPrefix="webhook" />
343
-
26
+ <Description link="https://www.windmill.dev/docs/core_concepts/webhooks">
27
+ Webhooks trigger scripts or flows via HTTP requests. Each webhook can be configured to run
28
+ synchronously or asynchronously. You can secure webhooks using tokens with specific permissions.
29
+ </Description>
344
30
  {#if newItem}
345
- <div class="mt-10" />
346
31
  <Alert type="warning" title="Attached to a deployed path">
347
32
  The webhooks are only valid for a given path and will only trigger the deployed version of the
348
33
  {isFlow ? 'flow' : 'script'}.
349
34
  </Alert>
350
35
  {/if}
36
+
37
+ <TriggersEditorSection
38
+ on:applyArgs
39
+ on:addPreprocessor
40
+ on:refreshCaptures
41
+ cloudDisabled={false}
42
+ triggerType="webhook"
43
+ {isFlow}
44
+ {data}
45
+ noSave
46
+ {path}
47
+ {isEditor}
48
+ {canHavePreprocessor}
49
+ {hasPreprocessor}
50
+ {newItem}
51
+ />
351
52
  </div>
@@ -7,10 +7,16 @@ declare const __propDef: {
7
7
  isFlow?: boolean | undefined;
8
8
  hash?: string | undefined;
9
9
  path: string;
10
- url?: string | undefined;
11
10
  newItem?: boolean | undefined;
11
+ isEditor?: boolean | undefined;
12
+ canHavePreprocessor?: boolean | undefined;
13
+ hasPreprocessor?: boolean | undefined;
12
14
  };
13
15
  events: {
16
+ applyArgs: any;
17
+ addPreprocessor: any;
18
+ refreshCaptures: CustomEvent<any>;
19
+ } & {
14
20
  [evt: string]: CustomEvent<any>;
15
21
  };
16
22
  slots: {};
@@ -0,0 +1,176 @@
1
+ <script>import Section from '../Section.svelte';
2
+ import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
3
+ import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
4
+ import ScriptPicker from '../ScriptPicker.svelte';
5
+ import Required from '../Required.svelte';
6
+ import { Loader2 } from 'lucide-svelte';
7
+ import CaptureSection, {} from './CaptureSection.svelte';
8
+ import CaptureTable from './CaptureTable.svelte';
9
+ import { sendUserToast } from '../../utils';
10
+ import { FlowService, ScriptService } from '../../gen';
11
+ import { workspaceStore } from '../../stores';
12
+ export let url;
13
+ export let url_runnable_args;
14
+ export let dirtyUrl = false;
15
+ export let can_write = false;
16
+ export let headless = false;
17
+ export let showCapture = false;
18
+ export let captureTable = undefined;
19
+ export let captureInfo = undefined;
20
+ export let isValid = false;
21
+ let areRunnableArgsValid = true;
22
+ let urlRunnableSchema = undefined;
23
+ async function loadUrlRunnableSchema(url) {
24
+ if (url?.startsWith('$')) {
25
+ const path = url.split(':')[1];
26
+ if (path && path.length > 0) {
27
+ try {
28
+ let scriptOrFlow = url.startsWith('$flow:')
29
+ ? await FlowService.getFlowByPath({
30
+ workspace: $workspaceStore,
31
+ path: url.split(':')[1]
32
+ })
33
+ : await ScriptService.getScriptByPath({
34
+ workspace: $workspaceStore,
35
+ path: url.split(':')[1]
36
+ });
37
+ urlRunnableSchema = scriptOrFlow.schema;
38
+ }
39
+ catch (err) {
40
+ sendUserToast(`Could not query runnable schema for ${url.startsWith('$flow:') ? 'flow' : 'script'} ${url.split(':')[1]}: ${err}`, true);
41
+ }
42
+ }
43
+ }
44
+ }
45
+ $: loadUrlRunnableSchema(url);
46
+ let urlError = '';
47
+ let validateTimeout = undefined;
48
+ function validateUrl(url) {
49
+ if (validateTimeout) {
50
+ clearTimeout(validateTimeout);
51
+ }
52
+ validateTimeout = setTimeout(() => {
53
+ if (url?.startsWith('$')) {
54
+ if (/^(\$script|\$flow):[^\s]+$/.test(url) === false) {
55
+ urlError = 'Invalid runnable path';
56
+ }
57
+ else {
58
+ urlError = '';
59
+ }
60
+ }
61
+ else if (!url || /^(ws:|wss:)\/\/[^\s]+$/.test(url) === false) {
62
+ urlError = 'Invalid websocket URL';
63
+ }
64
+ else {
65
+ urlError = '';
66
+ }
67
+ validateTimeout = undefined;
68
+ }, 500);
69
+ }
70
+ $: validateUrl(url);
71
+ $: isValid = urlError === '' && (!url?.startsWith('$') || areRunnableArgsValid);
72
+ </script>
73
+
74
+ <div>
75
+ {#if showCapture && captureInfo}
76
+ <CaptureSection
77
+ disabled={!isValid}
78
+ on:captureToggle
79
+ captureType="websocket"
80
+ {captureInfo}
81
+ on:applyArgs
82
+ on:updateSchema
83
+ on:addPreprocessor
84
+ bind:captureTable
85
+ />
86
+ {/if}
87
+ <Section label="Websocket" {headless}>
88
+ <div class="mb-2">
89
+ <ToggleButtonGroup
90
+ selected={url?.startsWith('$') ? 'runnable' : 'static'}
91
+ on:selected={(ev) => {
92
+ url = ev.detail === 'runnable' ? '$script:' : ''
93
+ url_runnable_args = {}
94
+ }}
95
+ >
96
+ <ToggleButton value="static" label="Static URL" />
97
+ <ToggleButton value="runnable" label="Runnable result as URL" />
98
+ </ToggleButtonGroup>
99
+ </div>
100
+ {#if url?.startsWith('$')}
101
+ <div class="flex flex-col w-full gap-4">
102
+ <div class="block grow w-full">
103
+ <div class="text-secondary text-sm flex items-center gap-1 w-full justify-between">
104
+ <div>
105
+ Runnable
106
+ <Required required={true} />
107
+ </div>
108
+ </div>
109
+ <ScriptPicker
110
+ allowFlow={true}
111
+ itemKind={url.startsWith('$flow:') ? 'flow' : 'script'}
112
+ initialPath={url.split(':')[1] ?? ''}
113
+ on:select={(ev) => {
114
+ dirtyUrl = true
115
+ const { path, itemKind } = ev.detail
116
+ url = `$${itemKind}:${path ?? ''}`
117
+ }}
118
+ />
119
+ <div class="text-red-600 dark:text-red-400 text-2xs mt-1.5">
120
+ {dirtyUrl ? urlError : ''}
121
+ </div>
122
+ </div>
123
+ </div>
124
+
125
+ {#if url.split(':')[1]?.length > 0}
126
+ {#if urlRunnableSchema}
127
+ <p class="font-semibold text-sm mt-4 mb-2">Arguments</p>
128
+ {#await import('../SchemaForm.svelte')}
129
+ <Loader2 class="animate-spin mt-2" />
130
+ {:then Module}
131
+ {#key urlRunnableSchema}
132
+ <Module.default
133
+ schema={urlRunnableSchema}
134
+ bind:args={url_runnable_args}
135
+ bind:isValid={areRunnableArgsValid}
136
+ shouldHideNoInputs
137
+ class="text-xs"
138
+ />
139
+ {/key}
140
+ {/await}
141
+ {#if urlRunnableSchema.properties && Object.keys(urlRunnableSchema.properties).length === 0}
142
+ <div class="text-xs texg-gray-700">This runnable takes no arguments</div>
143
+ {/if}
144
+ {:else}
145
+ <Loader2 class="animate-spin mt-2" />
146
+ {/if}
147
+ {/if}
148
+ {:else}
149
+ <div class="flex flex-col w-full gap-4">
150
+ <label class="block grow w-full">
151
+ <div class="text-secondary text-sm flex items-center gap-1 w-full justify-between">
152
+ <div>
153
+ URL
154
+ <Required required={true} />
155
+ </div>
156
+ </div>
157
+ <input
158
+ type="text"
159
+ autocomplete="off"
160
+ bind:value={url}
161
+ disabled={!can_write}
162
+ on:input={() => {
163
+ dirtyUrl = true
164
+ }}
165
+ class={urlError === ''
166
+ ? ''
167
+ : 'border border-red-700 bg-red-100 border-opacity-30 focus:border-red-700 focus:border-opacity-30 focus-visible:ring-red-700 focus-visible:ring-opacity-25 focus-visible:border-red-700'}
168
+ />
169
+ <div class="text-red-600 dark:text-red-400 text-2xs mt-1.5">
170
+ {dirtyUrl ? urlError : ''}
171
+ </div>
172
+ </label>
173
+ </div>
174
+ {/if}
175
+ </Section>
176
+ </div>
@@ -0,0 +1,37 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import { type CaptureInfo } from './CaptureSection.svelte';
3
+ import CaptureTable from './CaptureTable.svelte';
4
+ declare const __propDef: {
5
+ props: {
6
+ url: string | undefined;
7
+ url_runnable_args: Record<string, unknown> | undefined;
8
+ dirtyUrl?: boolean | undefined;
9
+ can_write?: boolean | undefined;
10
+ headless?: boolean | undefined;
11
+ showCapture?: boolean | undefined;
12
+ captureTable?: CaptureTable | undefined;
13
+ captureInfo?: CaptureInfo | undefined;
14
+ isValid?: boolean | undefined;
15
+ };
16
+ events: {
17
+ captureToggle: CustomEvent<undefined>;
18
+ applyArgs: CustomEvent<{
19
+ kind: "main" | "preprocessor";
20
+ args: Record<string, any> | undefined;
21
+ }>;
22
+ updateSchema: CustomEvent<{
23
+ schema: any;
24
+ redirect: boolean;
25
+ }>;
26
+ addPreprocessor: CustomEvent<null>;
27
+ } & {
28
+ [evt: string]: CustomEvent<any>;
29
+ };
30
+ slots: {};
31
+ };
32
+ export type WebsocketEditorConfigSectionProps = typeof __propDef.props;
33
+ export type WebsocketEditorConfigSectionEvents = typeof __propDef.events;
34
+ export type WebsocketEditorConfigSectionSlots = typeof __propDef.slots;
35
+ export default class WebsocketEditorConfigSection extends SvelteComponent<WebsocketEditorConfigSectionProps, WebsocketEditorConfigSectionEvents, WebsocketEditorConfigSectionSlots> {
36
+ }
37
+ export {};
@@ -6,10 +6,10 @@ export async function openEdit(ePath, isFlow) {
6
6
  await tick();
7
7
  drawer?.openEdit(ePath, isFlow);
8
8
  }
9
- export async function openNew(is_flow, initial_script_path) {
9
+ export async function openNew(is_flow, initial_script_path, defaultValues) {
10
10
  open = true;
11
11
  await tick();
12
- drawer?.openNew(is_flow, initial_script_path);
12
+ drawer?.openNew(is_flow, initial_script_path, defaultValues);
13
13
  }
14
14
  let drawer;
15
15
  </script>
@@ -2,7 +2,7 @@ import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
4
  openEdit?: ((ePath: string, isFlow: boolean) => Promise<void>) | undefined;
5
- openNew?: ((is_flow: boolean, initial_script_path?: string) => Promise<void>) | undefined;
5
+ openNew?: ((is_flow: boolean, initial_script_path?: string, defaultValues?: Record<string, any>) => Promise<void>) | undefined;
6
6
  };
7
7
  events: {
8
8
  update: CustomEvent<any>;
@@ -16,6 +16,6 @@ export type WebsocketTriggerEditorEvents = typeof __propDef.events;
16
16
  export type WebsocketTriggerEditorSlots = typeof __propDef.slots;
17
17
  export default class WebsocketTriggerEditor extends SvelteComponent<WebsocketTriggerEditorProps, WebsocketTriggerEditorEvents, WebsocketTriggerEditorSlots> {
18
18
  get openEdit(): (ePath: string, isFlow: boolean) => Promise<void>;
19
- get openNew(): (is_flow: boolean, initial_script_path?: string | undefined) => Promise<void>;
19
+ get openNew(): (is_flow: boolean, initial_script_path?: string | undefined, defaultValues?: Record<string, any> | undefined) => Promise<void>;
20
20
  }
21
21
  export {};