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
@@ -1,10 +1,18 @@
1
1
  // test: script/u/user/script_to_test
2
2
  //
3
+ // Wildcards: `*` matches one path segment, `**` matches any depth.
4
+ // // test: script/u/user/*
5
+ // // test: flow/u/team/**
6
+ //
3
7
  // To test multiple items, list them on separate lines:
4
8
  // // test:
5
9
  // // script/u/user/script_a
6
10
  // // script/u/user/script_b
7
11
  // // flow/u/user/my_flow
12
+ //
13
+ // The triggering item is exposed as process.env.WM_TESTED_RUNNABLE
14
+ // (e.g. "script/u/user/script_to_test"), useful for branching inside a
15
+ // single test script that covers multiple targets.
8
16
  import * as wmill from "windmill-client";
9
17
 
10
18
  export async function main() {
@@ -1,10 +1,18 @@
1
1
  # test: script/u/user/script_to_test
2
2
  #
3
+ # Wildcards: `*` matches one path segment, `**` matches any depth.
4
+ # # test: script/u/user/*
5
+ # # test: flow/u/team/**
6
+ #
3
7
  # To test multiple items, list them on separate lines:
4
8
  # # test:
5
9
  # # script/u/user/script_a
6
10
  # # script/u/user/script_b
7
11
  # # flow/u/user/my_flow
12
+ #
13
+ # The triggering item is exposed as os.environ["WM_TESTED_RUNNABLE"]
14
+ # (e.g. "script/u/user/script_to_test"), useful for branching inside a
15
+ # single test script that covers multiple targets.
8
16
  import wmill
9
17
 
10
18
 
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The backend rejects "enable" requests on triggers/schedules in a fork when
3
+ * the parent workspace has the same path enabled. The error body is shaped as
4
+ * `fork-conflict:<kind>:<parent_workspace_id>`
5
+ * so the UI can show a tailored confirm-to-proceed dialog and re-issue the
6
+ * call with `force: true` if the user agrees.
7
+ */
8
+ export interface ForkConflict {
9
+ kind: string;
10
+ parentWorkspaceId: string;
11
+ }
12
+ export declare function detectForkConflict(e: unknown): ForkConflict | null;
13
+ /**
14
+ * Catches a fork-conflict error from `fn(false)`, shows the confirmation
15
+ * dialog, and retries with `fn(true)` when the user accepts. Re-throws every
16
+ * other error.
17
+ *
18
+ * Returns `true` when the call committed (no conflict, or user confirmed and
19
+ * retry succeeded) and `false` when the user dismissed the modal. Callers
20
+ * should bail on `false` to skip success toasts and revert any optimistic UI
21
+ * state.
22
+ *
23
+ * `kindLabel` is shown to the user — pass a friendly name like "kafka trigger"
24
+ * or "schedule" so the dialog reads naturally.
25
+ */
26
+ export declare function withForkConflictRetry(fn: (force: boolean) => Promise<unknown>, kindLabel: string): Promise<boolean>;
@@ -0,0 +1,56 @@
1
+ import { forkConflictModal } from '../stores';
2
+ export function detectForkConflict(e) {
3
+ const body = e?.body;
4
+ const raw = typeof body === 'string'
5
+ ? body
6
+ : (body?.error?.message ?? body?.message ?? e?.message ?? '');
7
+ const m = String(raw).match(/fork-conflict:([^:]+):(.+)/);
8
+ if (!m)
9
+ return null;
10
+ return { kind: m[1], parentWorkspaceId: m[2].trim() };
11
+ }
12
+ /**
13
+ * Opens the global ForkConflictModal and awaits the user's choice. Resolves
14
+ * to true when the user clicks "Enable anyway", false when they cancel or
15
+ * dismiss. If a previous modal is still pending (e.g. user clicked toggles
16
+ * on two rows in quick succession), resolve the older promise to false so
17
+ * the prior caller doesn't hang.
18
+ */
19
+ function askForkConflictConfirm(kind, kindLabel, parentWorkspaceId) {
20
+ return new Promise((resolve) => {
21
+ const previous = forkConflictModal.val;
22
+ previous?.resolve(false);
23
+ forkConflictModal.val = { kind, kindLabel, parentWorkspaceId, resolve };
24
+ });
25
+ }
26
+ /**
27
+ * Catches a fork-conflict error from `fn(false)`, shows the confirmation
28
+ * dialog, and retries with `fn(true)` when the user accepts. Re-throws every
29
+ * other error.
30
+ *
31
+ * Returns `true` when the call committed (no conflict, or user confirmed and
32
+ * retry succeeded) and `false` when the user dismissed the modal. Callers
33
+ * should bail on `false` to skip success toasts and revert any optimistic UI
34
+ * state.
35
+ *
36
+ * `kindLabel` is shown to the user — pass a friendly name like "kafka trigger"
37
+ * or "schedule" so the dialog reads naturally.
38
+ */
39
+ export async function withForkConflictRetry(fn, kindLabel) {
40
+ try {
41
+ await fn(false);
42
+ return true;
43
+ }
44
+ catch (e) {
45
+ const conflict = detectForkConflict(e);
46
+ if (!conflict)
47
+ throw e;
48
+ const proceed = await askForkConflictConfirm(conflict.kind, kindLabel, conflict.parentWorkspaceId);
49
+ // User explicitly dismissed the modal — treat as a silent no-op so the
50
+ // caller's catch block doesn't pop a redundant error toast.
51
+ if (!proceed)
52
+ return false;
53
+ await fn(true);
54
+ return true;
55
+ }
56
+ }
@@ -1,4 +1,4 @@
1
- import { GcpTriggerService, HttpTriggerService, KafkaTriggerService, MqttTriggerService, NatsTriggerService, PostgresTriggerService, ScheduleService, SqsTriggerService, WebsocketTriggerService, type GcpTriggerData, type WorkspaceDeployUISettings } from './gen';
1
+ import { AzureTriggerService, EmailTriggerService, GcpTriggerService, HttpTriggerService, KafkaTriggerService, MqttTriggerService, NatsTriggerService, PostgresTriggerService, ScheduleService, SqsTriggerService, WebsocketTriggerService, type GcpTriggerData, type WorkspaceDeployUISettings } from './gen';
2
2
  import type { TriggerKind } from './components/triggers';
3
3
  type DeployUIType = 'script' | 'flow' | 'app' | 'resource' | 'variable' | 'secret' | 'trigger';
4
4
  export type Kind = 'script' | 'resource' | 'schedule' | 'variable' | 'flow' | 'app' | 'raw_app' | 'resource_type' | 'folder' | 'trigger';
@@ -22,26 +22,25 @@ export declare function getTriggersDeployData(kind: TriggerKind, path: string, w
22
22
  permissioned_as: string | undefined;
23
23
  preserve_permissioned_as: boolean;
24
24
  path: string;
25
- script_path: string;
25
+ workspace_id: string;
26
+ error?: string | undefined;
26
27
  extra_perms: {
27
28
  [key: string]: (boolean);
28
29
  };
29
- workspace_id: string;
30
30
  edited_by: string;
31
31
  edited_at: string;
32
+ script_path: string;
32
33
  is_flow: boolean;
33
- mode: import("./gen").TriggerMode;
34
- labels?: Array<(string)>;
35
34
  queue_url: string;
36
- aws_auth_resource_type: import("./gen").AwsAuthResourceType;
37
35
  aws_resource_path: string;
38
- message_attributes?: Array<(string)> | null;
39
- server_id?: string;
40
- last_server_ping?: string;
41
- error?: string;
42
- error_handler_path?: string;
43
- error_handler_args?: import("./gen").ScriptArgs;
44
- retry?: import("./gen").Retry;
36
+ aws_auth_resource_type: import("./gen").AwsAuthResourceType;
37
+ labels?: Array<(string)> | undefined;
38
+ retry?: import("./gen").Retry | undefined;
39
+ error_handler_path?: string | undefined;
40
+ error_handler_args?: import("./gen").ScriptArgs | undefined;
41
+ message_attributes?: (Array<(string)> | null) | undefined;
42
+ server_id?: string | undefined;
43
+ last_server_ping?: string | undefined;
45
44
  };
46
45
  createFn: typeof SqsTriggerService.createSqsTrigger;
47
46
  updateFn: typeof SqsTriggerService.updateSqsTrigger;
@@ -50,32 +49,31 @@ export declare function getTriggersDeployData(kind: TriggerKind, path: string, w
50
49
  permissioned_as: string | undefined;
51
50
  preserve_permissioned_as: boolean;
52
51
  path: string;
53
- script_path: string;
52
+ workspace_id: string;
53
+ error?: string | undefined;
54
54
  extra_perms: {
55
55
  [key: string]: (boolean);
56
56
  };
57
- workspace_id: string;
58
57
  edited_by: string;
59
58
  edited_at: string;
59
+ script_path: string;
60
60
  is_flow: boolean;
61
- mode: import("./gen").TriggerMode;
62
- labels?: Array<(string)>;
63
- kafka_resource_path: string;
64
- group_id: string;
65
- topics: Array<(string)>;
66
61
  filters: Array<{
67
62
  key: string;
68
63
  value: unknown;
69
64
  }>;
70
- filter_logic?: "and" | "or";
71
- auto_offset_reset?: "latest" | "earliest";
72
- auto_commit?: boolean;
73
- server_id?: string;
74
- last_server_ping?: string;
75
- error?: string;
76
- error_handler_path?: string;
77
- error_handler_args?: import("./gen").ScriptArgs;
78
- retry?: import("./gen").Retry;
65
+ kafka_resource_path: string;
66
+ group_id: string;
67
+ topics: Array<(string)>;
68
+ labels?: Array<(string)> | undefined;
69
+ retry?: import("./gen").Retry | undefined;
70
+ error_handler_path?: string | undefined;
71
+ error_handler_args?: import("./gen").ScriptArgs | undefined;
72
+ filter_logic?: "and" | "or" | undefined;
73
+ auto_offset_reset?: "latest" | "earliest" | undefined;
74
+ auto_commit?: boolean | undefined;
75
+ server_id?: string | undefined;
76
+ last_server_ping?: string | undefined;
79
77
  };
80
78
  createFn: typeof KafkaTriggerService.createKafkaTrigger;
81
79
  updateFn: typeof KafkaTriggerService.updateKafkaTrigger;
@@ -84,28 +82,27 @@ export declare function getTriggersDeployData(kind: TriggerKind, path: string, w
84
82
  permissioned_as: string | undefined;
85
83
  preserve_permissioned_as: boolean;
86
84
  path: string;
87
- script_path: string;
85
+ client_id?: string | null | undefined;
86
+ workspace_id: string;
87
+ error?: string | undefined;
88
88
  extra_perms: {
89
89
  [key: string]: (boolean);
90
90
  };
91
- workspace_id: string;
92
91
  edited_by: string;
93
92
  edited_at: string;
93
+ script_path: string;
94
94
  is_flow: boolean;
95
- mode: import("./gen").TriggerMode;
96
- labels?: Array<(string)>;
97
- mqtt_resource_path: string;
98
95
  subscribe_topics: Array<import("./gen").MqttSubscribeTopic>;
99
- v3_config?: import("./gen").MqttV3Config | null;
100
- v5_config?: import("./gen").MqttV5Config | null;
101
- client_id?: string | null;
102
- client_version?: import("./gen").MqttClientVersion | null;
103
- server_id?: string;
104
- last_server_ping?: string;
105
- error?: string;
106
- error_handler_path?: string;
107
- error_handler_args?: import("./gen").ScriptArgs;
108
- retry?: import("./gen").Retry;
96
+ mqtt_resource_path: string;
97
+ labels?: Array<(string)> | undefined;
98
+ retry?: import("./gen").Retry | undefined;
99
+ error_handler_path?: string | undefined;
100
+ error_handler_args?: import("./gen").ScriptArgs | undefined;
101
+ client_version?: (import("./gen").MqttClientVersion | null) | undefined;
102
+ v3_config?: (import("./gen").MqttV3Config | null) | undefined;
103
+ v5_config?: (import("./gen").MqttV5Config | null) | undefined;
104
+ server_id?: string | undefined;
105
+ last_server_ping?: string | undefined;
109
106
  };
110
107
  createFn: typeof MqttTriggerService.createMqttTrigger;
111
108
  updateFn: typeof MqttTriggerService.updateMqttTrigger;
@@ -114,27 +111,26 @@ export declare function getTriggersDeployData(kind: TriggerKind, path: string, w
114
111
  permissioned_as: string | undefined;
115
112
  preserve_permissioned_as: boolean;
116
113
  path: string;
117
- script_path: string;
114
+ workspace_id: string;
115
+ error?: string | undefined;
118
116
  extra_perms: {
119
117
  [key: string]: (boolean);
120
118
  };
121
- workspace_id: string;
122
119
  edited_by: string;
123
120
  edited_at: string;
121
+ script_path: string;
124
122
  is_flow: boolean;
125
- mode: import("./gen").TriggerMode;
126
- labels?: Array<(string)>;
127
123
  nats_resource_path: string;
128
124
  use_jetstream: boolean;
129
- stream_name?: string | null;
130
- consumer_name?: string | null;
131
125
  subjects: Array<(string)>;
132
- server_id?: string;
133
- last_server_ping?: string;
134
- error?: string;
135
- error_handler_path?: string;
136
- error_handler_args?: import("./gen").ScriptArgs;
137
- retry?: import("./gen").Retry;
126
+ labels?: Array<(string)> | undefined;
127
+ retry?: import("./gen").Retry | undefined;
128
+ error_handler_path?: string | undefined;
129
+ error_handler_args?: import("./gen").ScriptArgs | undefined;
130
+ stream_name?: string | null | undefined;
131
+ consumer_name?: string | null | undefined;
132
+ server_id?: string | undefined;
133
+ last_server_ping?: string | undefined;
138
134
  };
139
135
  createFn: typeof NatsTriggerService.createNatsTrigger;
140
136
  updateFn: typeof NatsTriggerService.updateNatsTrigger;
@@ -147,25 +143,24 @@ export declare function getTriggersDeployData(kind: TriggerKind, path: string, w
147
143
  permissioned_as: string | undefined;
148
144
  preserve_permissioned_as: boolean;
149
145
  path: string;
150
- script_path: string;
146
+ workspace_id: string;
147
+ error?: string | undefined;
151
148
  extra_perms: {
152
149
  [key: string]: (boolean);
153
150
  };
154
- workspace_id: string;
155
151
  edited_by: string;
156
152
  edited_at: string;
153
+ script_path: string;
157
154
  is_flow: boolean;
158
- mode: import("./gen").TriggerMode;
159
- labels?: Array<(string)>;
160
155
  postgres_resource_path: string;
161
- publication_name: string;
162
- server_id?: string;
163
156
  replication_slot_name: string;
164
- error?: string;
165
- last_server_ping?: string;
166
- error_handler_path?: string;
167
- error_handler_args?: import("./gen").ScriptArgs;
168
- retry?: import("./gen").Retry;
157
+ publication_name: string;
158
+ labels?: Array<(string)> | undefined;
159
+ retry?: import("./gen").Retry | undefined;
160
+ error_handler_path?: string | undefined;
161
+ error_handler_args?: import("./gen").ScriptArgs | undefined;
162
+ server_id?: string | undefined;
163
+ last_server_ping?: string | undefined;
169
164
  };
170
165
  createFn: typeof PostgresTriggerService.createPostgresTrigger;
171
166
  updateFn: typeof PostgresTriggerService.updatePostgresTrigger;
@@ -174,33 +169,32 @@ export declare function getTriggersDeployData(kind: TriggerKind, path: string, w
174
169
  permissioned_as: string | undefined;
175
170
  preserve_permissioned_as: boolean;
176
171
  path: string;
177
- script_path: string;
172
+ workspace_id: string;
173
+ error?: string | undefined;
178
174
  extra_perms: {
179
175
  [key: string]: (boolean);
180
176
  };
181
- workspace_id: string;
182
177
  edited_by: string;
183
178
  edited_at: string;
179
+ script_path: string;
184
180
  is_flow: boolean;
185
- mode: import("./gen").TriggerMode;
186
- labels?: Array<(string)>;
187
181
  url: string;
188
- server_id?: string;
189
- last_server_ping?: string;
190
- error?: string;
191
182
  filters: Array<{
192
183
  key: string;
193
184
  value: unknown;
194
185
  }>;
195
- filter_logic?: "and" | "or";
196
- initial_messages?: Array<import("./gen").WebsocketTriggerInitialMessage> | null;
197
- url_runnable_args?: import("./gen").ScriptArgs | null;
198
186
  can_return_message: boolean;
199
187
  can_return_error_result: boolean;
200
- heartbeat?: import("./gen").WebsocketHeartbeat | null;
201
- error_handler_path?: string;
202
- error_handler_args?: import("./gen").ScriptArgs;
203
- retry?: import("./gen").Retry;
188
+ labels?: Array<(string)> | undefined;
189
+ retry?: import("./gen").Retry | undefined;
190
+ error_handler_path?: string | undefined;
191
+ error_handler_args?: import("./gen").ScriptArgs | undefined;
192
+ filter_logic?: "and" | "or" | undefined;
193
+ initial_messages?: (Array<import("./gen").WebsocketTriggerInitialMessage> | null) | undefined;
194
+ url_runnable_args?: (import("./gen").ScriptArgs | null) | undefined;
195
+ heartbeat?: (import("./gen").WebsocketHeartbeat | null) | undefined;
196
+ server_id?: string | undefined;
197
+ last_server_ping?: string | undefined;
204
198
  };
205
199
  createFn: typeof WebsocketTriggerService.createWebsocketTrigger;
206
200
  updateFn: typeof WebsocketTriggerService.updateWebsocketTrigger;
@@ -208,36 +202,35 @@ export declare function getTriggersDeployData(kind: TriggerKind, path: string, w
208
202
  data: {
209
203
  permissioned_as: string | undefined;
210
204
  preserve_permissioned_as: boolean;
205
+ summary?: string | null | undefined;
211
206
  path: string;
212
- script_path: string;
207
+ workspace_id: string;
208
+ description?: string | null | undefined;
213
209
  extra_perms: {
214
210
  [key: string]: (boolean);
215
211
  };
216
- workspace_id: string;
217
212
  edited_by: string;
218
213
  edited_at: string;
214
+ script_path: string;
219
215
  is_flow: boolean;
220
- mode: import("./gen").TriggerMode;
221
- labels?: Array<(string)>;
222
216
  route_path: string;
223
- static_asset_config?: {
224
- s3: string;
225
- storage?: string;
226
- filename?: string;
227
- } | null;
228
- http_method: import("./gen").HttpMethod;
229
- authentication_resource_path?: string | null;
230
- summary?: string | null;
231
- description?: string | null;
232
217
  request_type: import("./gen").HttpRequestType;
233
218
  authentication_method: import("./gen").AuthenticationMethod;
219
+ http_method: import("./gen").HttpMethod;
234
220
  is_static_website: boolean;
235
221
  workspaced_route: boolean;
236
222
  wrap_body: boolean;
237
223
  raw_string: boolean;
238
- error_handler_path?: string;
239
- error_handler_args?: import("./gen").ScriptArgs;
240
- retry?: import("./gen").Retry;
224
+ labels?: Array<(string)> | undefined;
225
+ retry?: import("./gen").Retry | undefined;
226
+ static_asset_config?: {
227
+ s3: string;
228
+ storage?: string;
229
+ filename?: string;
230
+ } | null | undefined;
231
+ authentication_resource_path?: string | null | undefined;
232
+ error_handler_path?: string | undefined;
233
+ error_handler_args?: import("./gen").ScriptArgs | undefined;
241
234
  };
242
235
  createFn: typeof HttpTriggerService.createHttpTrigger;
243
236
  updateFn: typeof HttpTriggerService.updateHttpTrigger;
@@ -246,38 +239,88 @@ export declare function getTriggersDeployData(kind: TriggerKind, path: string, w
246
239
  permissioned_as: string | undefined;
247
240
  preserve_permissioned_as: boolean;
248
241
  path: string;
242
+ workspace_id: string;
243
+ error?: string | undefined;
244
+ extra_perms: {
245
+ [key: string]: (boolean);
246
+ };
249
247
  edited_by: string;
250
248
  edited_at: string;
251
- schedule: string;
252
- timezone: string;
253
- enabled: boolean;
254
249
  script_path: string;
255
250
  is_flow: boolean;
256
- args?: import("./gen").ScriptArgs | null;
251
+ azure_mode: import("./gen").AzureMode;
252
+ scope_resource_id: string;
253
+ subscription_name: string;
254
+ azure_resource_path: string;
255
+ topic_name?: string | null | undefined;
256
+ labels?: Array<(string)> | undefined;
257
+ retry?: import("./gen").Retry | undefined;
258
+ error_handler_path?: string | undefined;
259
+ error_handler_args?: import("./gen").ScriptArgs | undefined;
260
+ event_type_filters?: (Array<(string)> | null) | undefined;
261
+ server_id?: string | undefined;
262
+ last_server_ping?: string | undefined;
263
+ };
264
+ createFn: typeof AzureTriggerService.createAzureTrigger;
265
+ updateFn: typeof AzureTriggerService.updateAzureTrigger;
266
+ } | {
267
+ data: {
268
+ permissioned_as: string | undefined;
269
+ preserve_permissioned_as: boolean;
270
+ path: string;
271
+ workspace_id: string;
272
+ extra_perms: {
273
+ [key: string]: (boolean);
274
+ };
275
+ edited_by: string;
276
+ edited_at: string;
277
+ script_path: string;
278
+ is_flow: boolean;
279
+ local_part: string;
280
+ labels?: Array<(string)> | undefined;
281
+ retry?: import("./gen").Retry | undefined;
282
+ error_handler_path?: string | undefined;
283
+ error_handler_args?: import("./gen").ScriptArgs | undefined;
284
+ workspaced_local_part?: boolean | undefined;
285
+ };
286
+ createFn: typeof EmailTriggerService.createEmailTrigger;
287
+ updateFn: typeof EmailTriggerService.updateEmailTrigger;
288
+ } | {
289
+ data: {
290
+ permissioned_as: string | undefined;
291
+ preserve_permissioned_as: boolean;
292
+ summary?: string | null | undefined;
293
+ path: string;
294
+ error?: string | null | undefined;
295
+ description?: string | null | undefined;
296
+ schedule: string;
257
297
  extra_perms: {
258
298
  [key: string]: (boolean);
259
299
  };
300
+ args?: (import("./gen").ScriptArgs | null) | undefined;
260
301
  email: string;
261
- error?: string | null;
262
- on_failure?: string | null;
263
- on_failure_times?: number | null;
264
- on_failure_exact?: boolean | null;
265
- on_failure_extra_args?: import("./gen").ScriptArgs | null;
266
- on_recovery?: string | null;
267
- on_recovery_times?: number | null;
268
- on_recovery_extra_args?: import("./gen").ScriptArgs | null;
269
- on_success?: string | null;
270
- on_success_extra_args?: import("./gen").ScriptArgs | null;
271
- ws_error_handler_muted?: boolean;
272
- retry?: import("./gen").Retry | null;
273
- summary?: string | null;
274
- description?: string | null;
275
- no_flow_overlap?: boolean;
276
- tag?: string | null;
277
- paused_until?: string | null;
278
- cron_version?: string | null;
279
- dynamic_skip?: string | null;
280
- labels?: Array<(string)>;
302
+ tag?: string | null | undefined;
303
+ edited_by: string;
304
+ edited_at: string;
305
+ script_path: string;
306
+ timezone: string;
307
+ is_flow: boolean;
308
+ labels?: Array<(string)> | undefined;
309
+ on_failure?: string | null | undefined;
310
+ on_failure_times?: number | null | undefined;
311
+ on_failure_exact?: boolean | null | undefined;
312
+ on_failure_extra_args?: (import("./gen").ScriptArgs | null) | undefined;
313
+ on_recovery?: string | null | undefined;
314
+ on_recovery_times?: number | null | undefined;
315
+ on_recovery_extra_args?: (import("./gen").ScriptArgs | null) | undefined;
316
+ on_success?: string | null | undefined;
317
+ on_success_extra_args?: (import("./gen").ScriptArgs | null) | undefined;
318
+ ws_error_handler_muted?: boolean | undefined;
319
+ retry?: (import("./gen").Retry | null) | undefined;
320
+ no_flow_overlap?: boolean | undefined;
321
+ paused_until?: string | null | undefined;
322
+ cron_version?: string | null | undefined;
323
+ dynamic_skip?: string | null | undefined;
281
324
  };
282
325
  createFn: typeof ScheduleService.createSchedule;
283
326
  updateFn: typeof ScheduleService.updateSchedule;