windmill-components 1.687.0 → 1.695.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 (264) hide show
  1. package/package/components/ArgInput.svelte +2 -0
  2. package/package/components/AutoscalingConfigEditor.svelte +18 -4
  3. package/package/components/CompareWorkspaces.svelte +206 -157
  4. package/package/components/DatatableSchemaDiff.svelte +2 -2
  5. package/package/components/Dev.svelte +401 -85
  6. package/package/components/EditableSchemaForm.svelte +4 -0
  7. package/package/components/ErrorOrRecoveryHandler.svelte +2 -2
  8. package/package/components/FlowPreviewContent.svelte +32 -30
  9. package/package/components/FlowRestartButton.svelte +143 -61
  10. package/package/components/FlowRestartButton.svelte.d.ts +37 -0
  11. package/package/components/FlowStatusViewer.svelte +15 -1
  12. package/package/components/FlowStatusViewer.svelte.d.ts +10 -2
  13. package/package/components/FlowStatusViewerInner.svelte +1 -2
  14. package/package/components/FlowStatusViewerInner.svelte.d.ts +6 -2
  15. package/package/components/ForkConflictModal.svelte +57 -0
  16. package/package/components/ForkConflictModal.svelte.d.ts +3 -0
  17. package/package/components/GitRepoViewer.svelte +251 -97
  18. package/package/components/InputTransformSchemaForm.svelte +1 -1
  19. package/package/components/InstanceSettings.svelte +36 -16
  20. package/package/components/Login.svelte +113 -28
  21. package/package/components/Login.svelte.d.ts +1 -0
  22. package/package/components/Path.svelte +7 -1
  23. package/package/components/Path.svelte.d.ts +1 -1
  24. package/package/components/RunsPage.svelte +2 -1
  25. package/package/components/S3FilePickerInner.svelte +89 -89
  26. package/package/components/ScriptEditor.svelte +18 -5
  27. package/package/components/ShareModal.svelte.d.ts +1 -1
  28. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +3 -0
  29. package/package/components/apps/components/helpers/executeRunnable.js +2 -1
  30. package/package/components/apps/editor/AppReportsDrawerInner.svelte +1 -1
  31. package/package/components/apps/editor/appPolicy.js +2 -1
  32. package/package/components/apps/editor/commonAppUtils.d.ts +3 -0
  33. package/package/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte +1 -1
  34. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +7 -0
  35. package/package/components/apps/editor/inlineScriptsPanel/TagPopup.svelte +49 -0
  36. package/package/components/apps/editor/inlineScriptsPanel/TagPopup.svelte.d.ts +9 -0
  37. package/package/components/apps/inputType.d.ts +1 -0
  38. package/package/components/apps/sharedTypes.d.ts +1 -0
  39. package/package/components/auditLogs/AuditLogsFilters.svelte +8 -3
  40. package/package/components/common/fileUpload/S3ArgInput.svelte +12 -10
  41. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +2 -0
  42. package/package/components/copilot/chat/AIChatDisplay.svelte +5 -36
  43. package/package/components/copilot/chat/AIChatInput.svelte +56 -47
  44. package/package/components/copilot/chat/AIChatManager.svelte.js +48 -46
  45. package/package/components/copilot/chat/ContextElementBadge.svelte +6 -4
  46. package/package/components/copilot/chat/app/core.d.ts +12 -20
  47. package/package/components/copilot/chat/app/core.js +103 -160
  48. package/package/components/copilot/chat/app/core.test.js +234 -9
  49. package/package/components/copilot/chat/context.js +44 -0
  50. package/package/components/copilot/chat/flow/FlowAIChat.svelte +5 -3
  51. package/package/components/copilot/chat/flow/core.d.ts +2 -1
  52. package/package/components/copilot/chat/flow/core.js +48 -21
  53. package/package/components/copilot/chat/flow/helperUtils.d.ts +5 -2
  54. package/package/components/copilot/chat/flow/helperUtils.js +33 -1
  55. package/package/components/copilot/chat/flow/helperUtils.test.js +116 -1
  56. package/package/components/copilot/chat/flow/openFlow.json +1 -1
  57. package/package/components/copilot/chat/flow/openFlowZod.gen.js +24 -0
  58. package/package/components/copilot/chat/script/core.js +3 -0
  59. package/package/components/copilot/chat/shared.d.ts +6 -0
  60. package/package/components/copilot/chat/shared.js +22 -1
  61. package/package/components/copilot/chat/shared.test.d.ts +1 -0
  62. package/package/components/copilot/chat/shared.test.js +412 -0
  63. package/package/components/copilot/chat/workspaceTools.d.ts +7 -0
  64. package/package/components/copilot/chat/workspaceTools.js +239 -0
  65. package/package/components/copilot/chat/workspaceToolsZod.gen.d.ts +1295 -0
  66. package/package/components/copilot/chat/workspaceToolsZod.gen.js +424 -0
  67. package/package/components/copilot/lib.js +3 -1
  68. package/package/components/copilot/lib.test.d.ts +1 -0
  69. package/package/components/copilot/lib.test.js +19 -0
  70. package/package/components/copilot/modelConfig.d.ts +3 -0
  71. package/package/components/copilot/modelConfig.js +10 -0
  72. package/package/components/flows/FlowProgressBar.svelte +5 -2
  73. package/package/components/flows/content/FlowModuleComponent.svelte +636 -599
  74. package/package/components/flows/conversations/FlowChatManager.svelte.js +21 -10
  75. package/package/components/flows/flowStateUtils.svelte.js +5 -1
  76. package/package/components/flows/map/FlowModuleSchemaMap.svelte +3 -2
  77. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +1 -0
  78. package/package/components/git_sync/GitSyncContext.svelte.js +0 -2
  79. package/package/components/graph/FlowGraphV2.svelte +7 -3
  80. package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
  81. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -0
  82. package/package/components/home/deploy_ui.js +1 -1
  83. package/package/components/icons/AzureIcon.svelte +12 -25
  84. package/package/components/icons/AzureIcon.svelte.d.ts +3 -2
  85. package/package/components/instanceSettings.js +24 -0
  86. package/package/components/mcp/McpScopeSelector.svelte +119 -9
  87. package/package/components/mcp/McpScopeSelector.svelte.d.ts +1 -0
  88. package/package/components/offboarding-utils.js +2 -0
  89. package/package/components/progressBar/ProgressBar.svelte +9 -5
  90. package/package/components/progressBar/ProgressBar.svelte.d.ts +1 -0
  91. package/package/components/raw_apps/DeleteAfterUsePopup.svelte +52 -0
  92. package/package/components/raw_apps/DeleteAfterUsePopup.svelte.d.ts +9 -0
  93. package/package/components/raw_apps/RawAppBackgroundRunner.svelte +5 -1
  94. package/package/components/raw_apps/RawAppEditor.svelte +159 -102
  95. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +9 -3
  96. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +2 -1
  97. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +1 -0
  98. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte.d.ts +1 -0
  99. package/package/components/raw_apps/RawAppInputsSpecEditor.svelte +48 -5
  100. package/package/components/raw_apps/RawAppSharedUiDrawer.svelte +129 -0
  101. package/package/components/raw_apps/RawAppSharedUiDrawer.svelte.d.ts +5 -0
  102. package/package/components/raw_apps/RawAppSidebar.svelte +12 -0
  103. package/package/components/raw_apps/dataTableRefUtils.d.ts +7 -0
  104. package/package/components/raw_apps/dataTableRefUtils.js +34 -0
  105. package/package/components/raw_apps/dataTableRefUtils.test.d.ts +1 -0
  106. package/package/components/raw_apps/dataTableRefUtils.test.js +29 -0
  107. package/package/components/raw_apps/rawAppPolicy.d.ts +1 -0
  108. package/package/components/raw_apps/rawAppPolicy.js +17 -2
  109. package/package/components/resources/resourceTypesFilter.d.ts +19 -0
  110. package/package/components/resources/resourceTypesFilter.js +21 -0
  111. package/package/components/restartFromStepPath.d.ts +39 -0
  112. package/package/components/restartFromStepPath.js +89 -0
  113. package/package/components/runs/JobDetailFieldConfig.d.ts +1 -0
  114. package/package/components/runs/JobDetailFieldConfig.js +57 -10
  115. package/package/components/runs/JobDetailHeader.svelte +24 -3
  116. package/package/components/runs/runsFilter.d.ts +1 -1
  117. package/package/components/schema/FlowPropertyEditor.svelte +30 -1
  118. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +5 -2
  119. package/package/components/search/GlobalSearchModal.svelte +8 -1
  120. package/package/components/select/Select.svelte +1 -1
  121. package/package/components/settings/CreateToken.svelte +48 -77
  122. package/package/components/settings/EditTokenScopesModal.svelte +57 -0
  123. package/package/components/settings/EditTokenScopesModal.svelte.d.ts +10 -0
  124. package/package/components/settings/ScopesPicker.svelte +43 -0
  125. package/package/components/settings/ScopesPicker.svelte.d.ts +11 -0
  126. package/package/components/settings/TokensTable.svelte +51 -15
  127. package/package/components/sidebar/OperatorMenu.svelte +6 -0
  128. package/package/components/sidebar/SidebarContent.svelte +11 -1
  129. package/package/components/triggers/AddTriggersButton.svelte +6 -0
  130. package/package/components/triggers/CaptureWrapper.svelte +19 -1
  131. package/package/components/triggers/TriggerEditorToolbar.svelte.d.ts +1 -1
  132. package/package/components/triggers/TriggerModeToggle.svelte +36 -7
  133. package/package/components/triggers/TriggerModeToggle.svelte.d.ts +1 -1
  134. package/package/components/triggers/TriggerSuspendedJobsModal.svelte.d.ts +1 -1
  135. package/package/components/triggers/TriggersEditor.svelte +5 -1
  136. package/package/components/triggers/TriggersWrapper.svelte +10 -0
  137. package/package/components/triggers/azure/AzureCapture.svelte +41 -0
  138. package/package/components/triggers/azure/AzureCapture.svelte.d.ts +44 -0
  139. package/package/components/triggers/azure/AzureTriggerEditor.svelte +20 -0
  140. package/package/components/triggers/azure/AzureTriggerEditor.svelte.d.ts +9 -0
  141. package/package/components/triggers/azure/AzureTriggerEditorConfigSection.svelte +301 -0
  142. package/package/components/triggers/azure/AzureTriggerEditorConfigSection.svelte.d.ts +16 -0
  143. package/package/components/triggers/azure/AzureTriggerEditorInner.svelte +422 -0
  144. package/package/components/triggers/azure/AzureTriggerEditorInner.svelte.d.ts +25 -0
  145. package/package/components/triggers/azure/AzureTriggerPanel.svelte +55 -0
  146. package/package/components/triggers/azure/AzureTriggerPanel.svelte.d.ts +10 -0
  147. package/{dist/sharedUtils/components/triggers/kafka → package/components/triggers/azure}/utils.d.ts +1 -1
  148. package/package/components/triggers/azure/utils.js +56 -0
  149. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +2 -0
  150. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +9 -3
  151. package/package/components/triggers/http/RouteEditorInner.svelte +2 -0
  152. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +9 -3
  153. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +9 -3
  154. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +9 -3
  155. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +9 -3
  156. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +9 -3
  157. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +9 -3
  158. package/package/components/triggers/triggers.svelte.d.ts +1 -0
  159. package/package/components/triggers/triggers.svelte.js +23 -1
  160. package/package/components/triggers/utils.js +20 -0
  161. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +9 -3
  162. package/package/components/triggers.d.ts +1 -1
  163. package/package/components/useNestedRestartState.svelte.d.ts +56 -0
  164. package/package/components/useNestedRestartState.svelte.js +320 -0
  165. package/package/components/workspaceSettings/SharedUiSettings.svelte +175 -0
  166. package/package/components/workspaceSettings/SharedUiSettings.svelte.d.ts +3 -0
  167. package/package/gen/core/OpenAPI.js +1 -1
  168. package/package/gen/schemas.gen.d.ts +294 -24
  169. package/package/gen/schemas.gen.js +297 -25
  170. package/package/gen/services.gen.d.ts +247 -4
  171. package/package/gen/services.gen.js +498 -7
  172. package/package/gen/types.gen.d.ts +990 -37
  173. package/package/hubPaths.json +2 -5
  174. package/package/infer.d.ts +1 -1
  175. package/package/infer.js +37 -51
  176. package/package/mcpEndpointTools.js +60 -4
  177. package/package/script_helpers.js +17 -0
  178. package/package/stores.d.ts +7 -0
  179. package/package/stores.js +6 -1
  180. package/package/system_prompts/index.d.ts +1 -0
  181. package/package/system_prompts/index.js +8 -0
  182. package/package/system_prompts/prompts.d.ts +16 -13
  183. package/package/system_prompts/prompts.js +653 -43
  184. package/package/templates/ci_test_bun.ts.template +8 -0
  185. package/package/templates/ci_test_python.py.template +8 -0
  186. package/package/utils/forkConflict.d.ts +26 -0
  187. package/package/utils/forkConflict.js +56 -0
  188. package/package/utils_deployable.d.ts +164 -121
  189. package/package/utils_deployable.js +61 -11
  190. package/package/utils_workspace_deploy.js +3 -1
  191. package/package.json +29 -5
  192. package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +0 -2
  193. package/dist/sharedUtils/base.d.ts +0 -1
  194. package/dist/sharedUtils/cloud.d.ts +0 -1
  195. package/dist/sharedUtils/common.d.ts +0 -111
  196. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +0 -5
  197. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +0 -5
  198. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +0 -5
  199. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +0 -13
  200. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +0 -11
  201. package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +0 -95
  202. package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +0 -6
  203. package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +0 -7
  204. package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +0 -33
  205. package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +0 -10
  206. package/dist/sharedUtils/components/apps/editor/component/components.d.ts +0 -5371
  207. package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +0 -3
  208. package/dist/sharedUtils/components/apps/editor/component/index.d.ts +0 -3
  209. package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +0 -7
  210. package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +0 -3
  211. package/dist/sharedUtils/components/apps/gridUtils.d.ts +0 -14
  212. package/dist/sharedUtils/components/apps/inputType.d.ts +0 -178
  213. package/dist/sharedUtils/components/apps/rx.d.ts +0 -29
  214. package/dist/sharedUtils/components/apps/sharedTypes.d.ts +0 -21
  215. package/dist/sharedUtils/components/apps/types.d.ts +0 -274
  216. package/dist/sharedUtils/components/assets/lib.d.ts +0 -25
  217. package/dist/sharedUtils/components/common/alert/model.d.ts +0 -2
  218. package/dist/sharedUtils/components/common/badge/model.d.ts +0 -8
  219. package/dist/sharedUtils/components/common/button/model.d.ts +0 -45
  220. package/dist/sharedUtils/components/common/fileInput/model.d.ts +0 -1
  221. package/dist/sharedUtils/components/common/index.d.ts +0 -24
  222. package/dist/sharedUtils/components/common/skeleton/model.d.ts +0 -21
  223. package/dist/sharedUtils/components/dbTypes.d.ts +0 -14
  224. package/dist/sharedUtils/components/diff_drawer.d.ts +0 -26
  225. package/dist/sharedUtils/components/ducklake.d.ts +0 -1
  226. package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +0 -7
  227. package/dist/sharedUtils/components/icons/index.d.ts +0 -101
  228. package/dist/sharedUtils/components/random_positive_adjetive.d.ts +0 -1
  229. package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +0 -10
  230. package/dist/sharedUtils/components/raw_apps/utils.d.ts +0 -15
  231. package/dist/sharedUtils/components/triggers/email/utils.d.ts +0 -4
  232. package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +0 -2
  233. package/dist/sharedUtils/components/triggers/http/utils.d.ts +0 -11
  234. package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +0 -2
  235. package/dist/sharedUtils/components/triggers/nats/utils.d.ts +0 -2
  236. package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +0 -8
  237. package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +0 -2
  238. package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +0 -32
  239. package/dist/sharedUtils/components/triggers/utils.d.ts +0 -80
  240. package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +0 -2
  241. package/dist/sharedUtils/components/triggers.d.ts +0 -20
  242. package/dist/sharedUtils/gen/core/ApiError.d.ts +0 -10
  243. package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +0 -13
  244. package/dist/sharedUtils/gen/core/ApiResult.d.ts +0 -7
  245. package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +0 -26
  246. package/dist/sharedUtils/gen/core/OpenAPI.d.ts +0 -27
  247. package/dist/sharedUtils/gen/core/request.d.ts +0 -29
  248. package/dist/sharedUtils/gen/index.d.ts +0 -6
  249. package/dist/sharedUtils/gen/schemas.gen.d.ts +0 -7036
  250. package/dist/sharedUtils/gen/services.gen.d.ts +0 -6047
  251. package/dist/sharedUtils/gen/types.gen.d.ts +0 -21881
  252. package/dist/sharedUtils/history.svelte.d.ts +0 -9
  253. package/dist/sharedUtils/hub.d.ts +0 -49
  254. package/dist/sharedUtils/jsr.json +0 -6
  255. package/dist/sharedUtils/lib.d.ts +0 -5
  256. package/dist/sharedUtils/lib.es.js +0 -1588
  257. package/dist/sharedUtils/package.json +0 -12
  258. package/dist/sharedUtils/schema.d.ts +0 -3
  259. package/dist/sharedUtils/stores.d.ts +0 -97
  260. package/dist/sharedUtils/svelte5Utils.svelte.d.ts +0 -80
  261. package/dist/sharedUtils/toast.d.ts +0 -8
  262. package/dist/sharedUtils/utils.d.ts +0 -265
  263. package/package/components/copilot/chat/flow/openFlowZod.js +0 -24
  264. /package/package/components/copilot/chat/flow/{openFlowZod.d.ts → openFlowZod.gen.d.ts} +0 -0
@@ -7,6 +7,7 @@ import ScriptPicker from '../../ScriptPicker.svelte';
7
7
  import { NatsTriggerService } from '../../../gen';
8
8
  import { usedTriggerKinds, userStore, workspaceStore } from '../../../stores';
9
9
  import { canWrite, capitalize, emptyString, sendUserToast } from '../../../utils';
10
+ import { withForkConflictRetry } from '../../../utils/forkConflict';
10
11
  import Section from '../../Section.svelte';
11
12
  import { Loader2 } from 'lucide-svelte';
12
13
  import Label from '../../Label.svelte';
@@ -213,13 +214,18 @@ function useDefaultValues() {
213
214
  defaultValues.servers.some((broker) => broker.trim() !== ''));
214
215
  }
215
216
  async function handleToggleMode(newMode) {
217
+ const previousMode = mode;
216
218
  mode = newMode;
217
219
  if (!trigger?.draftConfig) {
218
- await NatsTriggerService.setNatsTriggerMode({
220
+ const ok = await withForkConflictRetry((force) => NatsTriggerService.setNatsTriggerMode({
219
221
  path: initialPath,
220
222
  workspace: $workspaceStore ?? '',
221
- requestBody: { mode: newMode }
222
- });
223
+ requestBody: { mode: newMode, force }
224
+ }), 'NATS trigger');
225
+ if (!ok) {
226
+ mode = previousMode;
227
+ return;
228
+ }
223
229
  sendUserToast(`${capitalize(newMode)} NATS trigger ${initialPath}`);
224
230
  onUpdate?.(initialPath);
225
231
  }
@@ -7,6 +7,7 @@ import ScriptPicker from '../../ScriptPicker.svelte';
7
7
  import { PostgresTriggerService } from '../../../gen';
8
8
  import { usedTriggerKinds, userStore, workspaceStore } from '../../../stores';
9
9
  import { canWrite, emptyString, emptyStringTrimmed, sendUserToast } from '../../../utils';
10
+ import { withForkConflictRetry } from '../../../utils/forkConflict';
10
11
  import Section from '../../Section.svelte';
11
12
  import { Loader2 } from 'lucide-svelte';
12
13
  import Label from '../../Label.svelte';
@@ -362,13 +363,18 @@ const getTemplateScript = async () => {
362
363
  }
363
364
  };
364
365
  async function handleToggleMode(newMode) {
366
+ const previousMode = mode;
365
367
  mode = newMode;
366
368
  if (!trigger?.draftConfig) {
367
- await PostgresTriggerService.setPostgresTriggerMode({
369
+ const ok = await withForkConflictRetry((force) => PostgresTriggerService.setPostgresTriggerMode({
368
370
  path: initialPath,
369
371
  workspace: $workspaceStore ?? '',
370
- requestBody: { mode: newMode }
371
- });
372
+ requestBody: { mode: newMode, force }
373
+ }), 'postgres trigger');
374
+ if (!ok) {
375
+ mode = previousMode;
376
+ return;
377
+ }
372
378
  sendUserToast(`${capitalize(newMode)} postgres trigger ${initialPath}`);
373
379
  onUpdate?.(initialPath);
374
380
  }
@@ -26,6 +26,7 @@ import Label from '../../Label.svelte';
26
26
  import WorkerTagPicker from '../../WorkerTagPicker.svelte';
27
27
  import { runScheduleNow } from '../scheduled/utils';
28
28
  import { handleConfigChange } from '../utils';
29
+ import { withForkConflictRetry } from '../../../utils/forkConflict';
29
30
  import TextInput from '../../text_input/TextInput.svelte';
30
31
  import { twMerge } from 'tailwind-merge';
31
32
  import PermissionedAsLine from '../PermissionedAsLine.svelte';
@@ -575,13 +576,18 @@ function getScheduleCfg() {
575
576
  };
576
577
  }
577
578
  async function handleToggleEnabled(nEnabled) {
579
+ const previousEnabled = enabled;
578
580
  enabled = nEnabled;
579
581
  if (!trigger?.draftConfig) {
580
- await ScheduleService.setScheduleEnabled({
582
+ const ok = await withForkConflictRetry((force) => ScheduleService.setScheduleEnabled({
581
583
  path: initialPath,
582
584
  workspace: $workspaceStore ?? '',
583
- requestBody: { enabled: nEnabled }
584
- });
585
+ requestBody: { enabled: nEnabled, force }
586
+ }), 'schedule');
587
+ if (!ok) {
588
+ enabled = previousEnabled;
589
+ return;
590
+ }
585
591
  sendUserToast(`${nEnabled ? 'enabled' : 'disabled'} schedule ${initialPath}`);
586
592
  onUpdate?.(initialPath);
587
593
  }
@@ -4,6 +4,7 @@ import DrawerContent from '../../common/drawer/DrawerContent.svelte';
4
4
  import Path from '../../Path.svelte';
5
5
  import { usedTriggerKinds, userStore, workspaceStore } from '../../../stores';
6
6
  import { canWrite, capitalize, emptyString, sendUserToast } from '../../../utils';
7
+ import { withForkConflictRetry } from '../../../utils/forkConflict';
7
8
  import { Loader2 } from 'lucide-svelte';
8
9
  import Label from '../../Label.svelte';
9
10
  import { SqsTriggerService } from '../../../gen';
@@ -186,13 +187,18 @@ function getSaveCfg() {
186
187
  };
187
188
  }
188
189
  async function handleToggleMode(newMode) {
190
+ const previousMode = mode;
189
191
  mode = newMode;
190
192
  if (!trigger?.draftConfig) {
191
- await SqsTriggerService.setSqsTriggerMode({
193
+ const ok = await withForkConflictRetry((force) => SqsTriggerService.setSqsTriggerMode({
192
194
  path: initialPath,
193
195
  workspace: $workspaceStore ?? '',
194
- requestBody: { mode: newMode }
195
- });
196
+ requestBody: { mode: newMode, force }
197
+ }), 'SQS trigger');
198
+ if (!ok) {
199
+ mode = previousMode;
200
+ return;
201
+ }
196
202
  sendUserToast(`${capitalize(newMode)} SQS trigger ${initialPath}`);
197
203
  onUpdate?.(initialPath);
198
204
  }
@@ -26,6 +26,7 @@ export declare class Triggers {
26
26
  fetchMqttTriggers(triggersCountStore: Writable<TriggersCount | undefined>, workspaceId: string | undefined, path: string, isFlow: boolean, user?: UserExt | undefined): Promise<void>;
27
27
  fetchSqsTriggers(triggersCountStore: Writable<TriggersCount | undefined>, workspaceId: string | undefined, path: string, isFlow: boolean, user?: UserExt | undefined): Promise<void>;
28
28
  fetchGcpTriggers(triggersCountStore: Writable<TriggersCount | undefined>, workspaceId: string | undefined, path: string, isFlow: boolean, user?: UserExt | undefined): Promise<void>;
29
+ fetchAzureTriggers(triggersCountStore: Writable<TriggersCount | undefined>, workspaceId: string | undefined, path: string, isFlow: boolean, user?: UserExt | undefined): Promise<void>;
29
30
  fetchHttpTriggers(triggersCountStore: Writable<TriggersCount | undefined>, workspaceId: string | undefined, path: string, isFlow: boolean, user?: UserExt | undefined): Promise<void>;
30
31
  fetchEmailTriggers(triggersCountStore: Writable<TriggersCount | undefined>, workspaceId: string | undefined, path: string, isFlow: boolean, user?: UserExt | undefined): Promise<void>;
31
32
  fetchNativeTriggers(triggersCountStore: Writable<TriggersCount | undefined>, serviceName: NativeServiceName, workspaceId: string | undefined, path: string, isFlow: boolean, user?: UserExt | undefined): Promise<void>;
@@ -1,4 +1,4 @@
1
- import { KafkaTriggerService, MqttTriggerService, NatsTriggerService, PostgresTriggerService, ScheduleService, SqsTriggerService, WebsocketTriggerService, NativeTriggerService, HttpTriggerService, GcpTriggerService, EmailTriggerService } from '../../gen';
1
+ import { KafkaTriggerService, MqttTriggerService, NatsTriggerService, PostgresTriggerService, ScheduleService, SqsTriggerService, WebsocketTriggerService, NativeTriggerService, HttpTriggerService, GcpTriggerService, AzureTriggerService, EmailTriggerService } from '../../gen';
2
2
  import { enterpriseLicense } from '../../stores';
3
3
  import { getLightConfig, sortTriggers, updateTriggersCount } from './utils';
4
4
  import { get } from 'svelte/store';
@@ -298,6 +298,27 @@ export class Triggers {
298
298
  console.error('Failed to fetch GCP Pub/Sub triggers:', error);
299
299
  }
300
300
  }
301
+ async fetchAzureTriggers(triggersCountStore, workspaceId, path, isFlow, user = undefined) {
302
+ if (!workspaceId)
303
+ return;
304
+ try {
305
+ const azureTriggers = await AzureTriggerService.listAzureTriggers({
306
+ workspace: workspaceId,
307
+ path,
308
+ isFlow
309
+ });
310
+ const azureCount = this.updateTriggers(azureTriggers, 'azure', user);
311
+ triggersCountStore.update((triggersCount) => {
312
+ return {
313
+ ...(triggersCount ?? {}),
314
+ azure_count: azureCount
315
+ };
316
+ });
317
+ }
318
+ catch (error) {
319
+ console.error('Failed to fetch Azure triggers:', error);
320
+ }
321
+ }
301
322
  async fetchHttpTriggers(triggersCountStore, workspaceId, path, isFlow, user = undefined) {
302
323
  if (!workspaceId)
303
324
  return;
@@ -389,6 +410,7 @@ export class Triggers {
389
410
  this.fetchKafkaTriggers(triggersCountStore, workspaceId, path, isFlow, user),
390
411
  this.fetchSqsTriggers(triggersCountStore, workspaceId, path, isFlow, user),
391
412
  this.fetchGcpTriggers(triggersCountStore, workspaceId, path, isFlow, user),
413
+ this.fetchAzureTriggers(triggersCountStore, workspaceId, path, isFlow, user),
392
414
  this.fetchEmailTriggers(triggersCountStore, workspaceId, path, isFlow, user),
393
415
  this.fetchNatsTriggers(triggersCountStore, workspaceId, path, isFlow, user)
394
416
  ]
@@ -4,6 +4,7 @@ import NatsIcon from '../icons/NatsIcon.svelte';
4
4
  import MqttIcon from '../icons/MqttIcon.svelte';
5
5
  import AwsIcon from '../icons/AwsIcon.svelte';
6
6
  import GoogleCloudIcon from '../icons/GoogleCloudIcon.svelte';
7
+ import AzureIcon from '../icons/AzureIcon.svelte';
7
8
  import SchedulePollIcon from '../icons/SchedulePollIcon.svelte';
8
9
  import { saveScheduleFromCfg } from '../flows/scheduleUtils';
9
10
  import { saveHttpRouteFromCfg } from './http/utils';
@@ -14,6 +15,7 @@ import { saveSqsTriggerFromCfg } from './sqs/utils';
14
15
  import { saveNatsTriggerFromCfg } from './nats/utils';
15
16
  import { saveMqttTriggerFromCfg } from './mqtt/utils';
16
17
  import { saveGcpTriggerFromCfg } from './gcp/utils';
18
+ import { saveAzureTriggerFromCfg } from './azure/utils';
17
19
  import { emptyString } from '../../utils';
18
20
  import { saveEmailTriggerFromCfg } from './email/utils';
19
21
  import NextcloudIcon from '../icons/NextcloudIcon.svelte';
@@ -26,6 +28,7 @@ export const CLOUD_DISABLED_TRIGGER_TYPES = [
26
28
  'sqs',
27
29
  'mqtt',
28
30
  'gcp',
31
+ 'azure',
29
32
  'websocket',
30
33
  'postgres'
31
34
  ];
@@ -42,6 +45,7 @@ export const jobTriggerKinds = [
42
45
  'postgres',
43
46
  'schedule',
44
47
  'gcp',
48
+ 'azure',
45
49
  'google',
46
50
  'github'
47
51
  ];
@@ -59,6 +63,7 @@ export const triggerIconMap = {
59
63
  mqtt: MqttIcon,
60
64
  sqs: AwsIcon,
61
65
  gcp: GoogleCloudIcon,
66
+ azure: AzureIcon,
62
67
  primary_schedule: Calendar,
63
68
  poll: SchedulePollIcon,
64
69
  cli: Terminal,
@@ -76,6 +81,7 @@ export const triggerDisplayNamesMap = {
76
81
  mqtt: 'MQTT',
77
82
  sqs: 'SQS',
78
83
  gcp: 'GCP Pub/Sub',
84
+ azure: 'Azure Event Grid',
79
85
  email: 'Email',
80
86
  poll: 'Scheduled Poll',
81
87
  webhook: 'Webhook',
@@ -104,6 +110,7 @@ export function triggerTypeToCaptureKind(triggerType) {
104
110
  'mqtt',
105
111
  'sqs',
106
112
  'gcp',
113
+ 'azure',
107
114
  'cli'
108
115
  ];
109
116
  if (capturableTriggerTypes.includes(triggerType)) {
@@ -125,6 +132,7 @@ export function updateTriggersCount(triggersCountStore, type, action, primaryCfg
125
132
  mqtt: 'mqtt_count',
126
133
  sqs: 'sqs_count',
127
134
  gcp: 'gcp_count',
135
+ azure: 'azure_count',
128
136
  email: 'email_count',
129
137
  poll: undefined,
130
138
  cli: undefined,
@@ -194,6 +202,8 @@ export function triggerKindToTriggerType(kind) {
194
202
  return 'sqs';
195
203
  case 'gcp':
196
204
  return 'gcp';
205
+ case 'azure':
206
+ return 'azure';
197
207
  case 'scheduledPoll':
198
208
  return 'poll';
199
209
  default:
@@ -233,6 +243,7 @@ export async function deployTriggers(triggersToDeploy, workspaceId, isAdmin, use
233
243
  mqtt: (trigger) => saveMqttTriggerFromCfg(trigger.path ?? trigger.draftConfig?.path ?? '', trigger.draftConfig ?? {}, !trigger.isDraft, workspaceId, usedTriggerKinds),
234
244
  sqs: (trigger) => saveSqsTriggerFromCfg(trigger.path ?? trigger.draftConfig?.path ?? '', trigger.draftConfig ?? {}, !trigger.isDraft, workspaceId, usedTriggerKinds),
235
245
  gcp: (trigger) => saveGcpTriggerFromCfg(trigger.path ?? trigger.draftConfig?.path ?? '', trigger.draftConfig ?? {}, !trigger.isDraft, workspaceId, usedTriggerKinds),
246
+ azure: (trigger) => saveAzureTriggerFromCfg(trigger.path ?? trigger.draftConfig?.path ?? '', trigger.draftConfig ?? {}, !trigger.isDraft, workspaceId, usedTriggerKinds),
236
247
  email: (trigger) => saveEmailTriggerFromCfg(trigger.path ?? trigger.draftConfig?.path ?? '', trigger.draftConfig ?? {}, !trigger.isDraft, workspaceId, isAdmin, usedTriggerKinds),
237
248
  poll: undefined,
238
249
  cli: undefined,
@@ -316,6 +327,14 @@ export function getLightConfig(triggerType, trigger) {
316
327
  else if (triggerType === 'gcp') {
317
328
  return { gcp_resource_path: trigger.gcp_resource_path, topic: trigger.topic };
318
329
  }
330
+ else if (triggerType === 'azure') {
331
+ return {
332
+ azure_resource_path: trigger.azure_resource_path,
333
+ azure_mode: trigger.azure_mode,
334
+ scope_resource_id: trigger.scope_resource_id,
335
+ topic_name: trigger.topic_name
336
+ };
337
+ }
319
338
  else if (triggerType === 'email') {
320
339
  return { local_part: trigger.local_part };
321
340
  }
@@ -435,6 +454,7 @@ export function sortTriggers(triggers) {
435
454
  'mqtt',
436
455
  'sqs',
437
456
  'gcp',
457
+ 'azure',
438
458
  'email',
439
459
  'nextcloud',
440
460
  'google',
@@ -8,6 +8,7 @@ import ScriptPicker from '../../ScriptPicker.svelte';
8
8
  import { FlowService, ScriptService, WebsocketTriggerService } from '../../../gen';
9
9
  import { usedTriggerKinds, userStore, workspaceStore } from '../../../stores';
10
10
  import { canWrite, emptySchema, emptyString, sendUserToast } from '../../../utils';
11
+ import { withForkConflictRetry } from '../../../utils/forkConflict';
11
12
  import Section from '../../Section.svelte';
12
13
  import { Loader2, X, Plus } from 'lucide-svelte';
13
14
  import Label from '../../Label.svelte';
@@ -282,13 +283,18 @@ function getCaptureConfig() {
282
283
  };
283
284
  }
284
285
  async function handleToggleMode(newMode) {
286
+ const previousMode = mode;
285
287
  mode = newMode;
286
288
  if (!trigger?.draftConfig) {
287
- await WebsocketTriggerService.setWebsocketTriggerMode({
289
+ const ok = await withForkConflictRetry((force) => WebsocketTriggerService.setWebsocketTriggerMode({
288
290
  path: initialPath,
289
291
  workspace: $workspaceStore ?? '',
290
- requestBody: { mode: newMode }
291
- });
292
+ requestBody: { mode: newMode, force }
293
+ }), 'websocket trigger');
294
+ if (!ok) {
295
+ mode = previousMode;
296
+ return;
297
+ }
292
298
  sendUserToast(`${capitalize(newMode)} websocket trigger ${initialPath}`);
293
299
  onUpdate?.(initialPath);
294
300
  }
@@ -16,5 +16,5 @@ export type TriggerContext = {
16
16
  triggersState: Triggers;
17
17
  };
18
18
  export declare function setScheduledPollSchedule(triggersState: Triggers, triggersCount: Writable<TriggersCount | undefined>): void;
19
- export type TriggerKind = 'webhooks' | 'emails' | 'default_emails' | 'schedules' | 'cli' | 'routes' | 'websockets' | 'scheduledPoll' | 'kafka' | 'nats' | 'postgres' | 'mqtt' | 'sqs' | 'gcp' | 'nextcloud' | 'google' | 'github';
19
+ export type TriggerKind = 'webhooks' | 'emails' | 'default_emails' | 'schedules' | 'cli' | 'routes' | 'websockets' | 'scheduledPoll' | 'kafka' | 'nats' | 'postgres' | 'mqtt' | 'sqs' | 'gcp' | 'azure' | 'nextcloud' | 'google' | 'github';
20
20
  export declare function captureTriggerKindToTriggerKind(kind: CaptureTriggerKind): TriggerKind;
@@ -0,0 +1,56 @@
1
+ import type { FlowModule, Job } from '../gen';
2
+ import type { GraphModuleState } from './graph';
3
+ export type NestedRestartStep = {
4
+ step_id: string;
5
+ branch_or_iteration_n?: number;
6
+ };
7
+ /**
8
+ * Reactive state shared by the run page and the editor's flow preview to drive
9
+ * the "restart flow at step" UI. Given the currently selected step, the
10
+ * completed flow job, the graph's per-module display state, and any expanded
11
+ * subflow definitions, derives:
12
+ *
13
+ * - `selectedJobStepIsTopLevel` — whether the selected step appears in the
14
+ * parent flow's top-level `flow_status.modules`
15
+ * - `selectedJobStepType` — `single` / `forloop` / `branchall`, used by the
16
+ * popup to decide which controls to render for the OUTER container
17
+ * - `restartBranchNames` — for top-level BranchAll steps, the labels for the
18
+ * branch picker
19
+ * - `nestedRestartTopStepId` / `nestedRestartTopBranchOrIterationN` /
20
+ * `nestedRestartPath` — the API request shape when restarting at a nested
21
+ * step (single source of truth for both call sites)
22
+ * - `nestedRestartSupported` — gate for showing the button when the selected
23
+ * step is nested (subflow expansion or BranchOne / sequential ForLoop)
24
+ * - `topLevelLoopIteration` — when the selected step IS a top-level ForLoop,
25
+ * the iteration the user is currently viewing (pre-fills the popup input)
26
+ * - `iterationCounts` — map of step id → number of recorded iterations,
27
+ * so the popup can render an iteration `<select>` matching the graph's tabs
28
+ * instead of a free-form number input
29
+ *
30
+ * Inputs are passed as getters so the composable stays reactive in either
31
+ * caller's signal graph.
32
+ */
33
+ export declare function useNestedRestartState(opts: {
34
+ selectedJobStep: () => string | undefined;
35
+ job: () => Job | undefined;
36
+ graphModuleStates: () => Record<string, GraphModuleState>;
37
+ /** Subflow definitions cached when the user expands a subflow in the graph,
38
+ * keyed by the graph node id (i.e. the prefixed `subflow:...:<step_id>` for
39
+ * nested subflows). Lets us walk inside subflows when building the nested
40
+ * restart path. */
41
+ expandedSubflows?: () => Record<string, {
42
+ modules: FlowModule[];
43
+ }>;
44
+ }): {
45
+ readonly selectedJobStepIsTopLevel: boolean | undefined;
46
+ readonly selectedJobStepType: "branchall" | "forloop" | "single";
47
+ readonly restartBranchNames: [number, string][];
48
+ readonly nestedRestartTopStepId: string | undefined;
49
+ readonly nestedRestartTopBranchOrIterationN: number | undefined;
50
+ readonly nestedRestartPath: NestedRestartStep[] | undefined;
51
+ readonly nestedRestartSupported: boolean;
52
+ readonly topLevelLoopIteration: number | undefined;
53
+ readonly topLevelRestartable: boolean;
54
+ readonly iterationCounts: Record<string, number>;
55
+ readonly nestedPathIterationCounts: Record<string, number>;
56
+ };