windmill-components 1.504.5 → 1.510.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/ata/index.js +1 -1
- package/package/components/AppConnectInner.svelte +161 -29
- package/package/components/ArgInput.svelte +33 -103
- package/package/components/AuthSettings.svelte +45 -1
- package/package/components/Dev.svelte +31 -24
- package/package/components/DisplayResult.svelte +53 -26
- package/package/components/DisplayResult.svelte.d.ts +1 -1
- package/package/components/DynSelect.svelte +3 -3
- package/package/components/Editor.svelte +7 -4
- package/package/components/EditorBar.svelte +2 -2
- package/package/components/ErrorOrRecoveryHandler.svelte +73 -67
- package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +8 -24
- package/package/components/FlowBuilder.svelte +11 -2
- package/package/components/FlowJobResult.svelte +12 -17
- package/package/components/FlowJobResult.svelte.d.ts +5 -18
- package/package/components/FlowPreviewContent.svelte +13 -10
- package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
- package/package/components/FlowPreviewResult.svelte +14 -6
- package/package/components/FlowStatusViewer.svelte +11 -24
- package/package/components/FlowStatusViewer.svelte.d.ts +19 -18
- package/package/components/FlowStatusViewerInner.svelte +110 -131
- package/package/components/FlowStatusViewerInner.svelte.d.ts +20 -18
- package/package/components/GitDiffPreview.svelte +55 -0
- package/package/components/GitDiffPreview.svelte.d.ts +13 -0
- package/package/components/HistoricInputs.svelte +2 -2
- package/package/components/InitGitRepoPopover.svelte +410 -0
- package/package/components/InitGitRepoPopover.svelte.d.ts +13 -0
- package/package/components/InstanceSetting.svelte +21 -9
- package/package/components/InstanceSettings.svelte +16 -3
- package/package/components/JobLoader.svelte +567 -0
- package/package/components/JobLoader.svelte.d.ts +53 -0
- package/package/components/JobLogs.svelte +6 -4
- package/package/components/JobLogs.svelte.d.ts +5 -18
- package/package/components/LightweightResourcePicker.svelte +18 -39
- package/package/components/LightweightResourcePicker.svelte.d.ts +6 -22
- package/package/components/LogViewer.svelte +35 -41
- package/package/components/LogViewer.svelte.d.ts +6 -20
- package/package/components/ModulePreviewResultViewer.svelte +3 -1
- package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -0
- package/package/components/ModuleTest.svelte +16 -11
- package/package/components/PullGitRepoPopover.svelte +355 -0
- package/package/components/PullGitRepoPopover.svelte.d.ts +18 -0
- package/package/components/S3FilePicker.svelte +5 -3
- package/package/components/SavedInputs.svelte +2 -2
- package/package/components/ScriptBuilder.svelte +4 -3
- package/package/components/ScriptEditor.svelte +34 -31
- package/package/components/ScriptEditor.svelte.d.ts +3 -3
- package/package/components/ServiceLogsInner.svelte +2 -1
- package/package/components/ServiceLogsInner.svelte.d.ts +1 -0
- package/package/components/UserSettings.svelte +1 -1
- package/package/components/WorkerTagSelect.svelte +32 -3
- package/package/components/apps/components/buttons/AppButton.svelte +7 -1
- package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
- package/package/components/apps/components/display/AppCustomComponent.svelte +1 -1
- package/package/components/apps/components/display/AppDisplayComponentByJobId.svelte +16 -11
- package/package/components/apps/components/display/AppJobIdLogComponent.svelte +13 -10
- package/package/components/apps/components/display/AppMenu.svelte +5 -0
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +3 -3
- package/package/components/apps/components/display/dbtable/DeleteRow.svelte +3 -3
- package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +3 -3
- package/package/components/apps/components/display/dbtable/UpdateCell.svelte +3 -3
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +3 -3
- package/package/components/apps/components/helpers/RunnableComponent.svelte +65 -54
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +5 -5
- package/package/components/apps/components/inputs/AppUserResource.svelte +26 -8
- package/package/components/apps/editor/AppEditorHeader.svelte +11 -5
- package/package/components/apps/editor/AppJobsDrawer.svelte +5 -5
- package/package/components/apps/editor/RunnableJobPanel.svelte +4 -4
- package/package/components/apps/editor/component/components.d.ts +12 -0
- package/package/components/apps/editor/component/components.js +19 -7
- package/package/components/assets/AssetButtons.svelte +38 -0
- package/package/components/assets/AssetButtons.svelte.d.ts +15 -0
- package/package/components/assets/AssetsDropdownButton.svelte +60 -72
- package/package/components/assets/AssetsDropdownButton.svelte.d.ts +3 -4
- package/package/components/assets/AssetsUsageDrawer.svelte +10 -10
- package/package/components/assets/JobAssetsViewer.svelte +79 -0
- package/package/components/assets/JobAssetsViewer.svelte.d.ts +7 -0
- package/package/components/assets/README_DEV.md +0 -0
- package/package/components/assets/lib.d.ts +9 -1
- package/package/components/assets/lib.js +48 -7
- package/package/components/common/fileUpload/FileUpload.svelte +126 -84
- package/package/components/common/fileUpload/FileUpload.svelte.d.ts +13 -3
- package/package/components/common/fileUpload/S3ArgInput.svelte +111 -0
- package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +21 -0
- package/package/components/common/table/ScriptRow.svelte +3 -1
- package/package/components/copilot/autocomplete/Autocompletor.js +23 -5
- package/package/components/copilot/chat/AIChatDisplay.svelte +8 -0
- package/package/components/copilot/chat/AIChatManager.svelte.js +13 -8
- package/package/components/copilot/chat/flow/ModuleAcceptReject.svelte +5 -5
- package/package/components/copilot/chat/flow/core.d.ts +1 -1
- package/package/components/copilot/chat/flow/core.js +2 -38
- package/package/components/copilot/chat/navigator/apiTools.d.ts +8 -0
- package/package/components/copilot/chat/navigator/apiTools.js +95 -15
- package/package/components/copilot/chat/navigator/core.d.ts +1 -1
- package/package/components/copilot/chat/navigator/core.js +2 -1
- package/package/components/copilot/chat/script/core.d.ts +11 -2
- package/package/components/copilot/chat/script/core.js +135 -1
- package/package/components/copilot/chat/shared.d.ts +10 -0
- package/package/components/copilot/chat/shared.js +56 -0
- package/package/components/copilot/lib.d.ts +1 -0
- package/package/components/copilot/lib.js +27 -9
- package/package/components/custom_ui.d.ts +1 -0
- package/package/components/flows/FlowAssetsHandler.svelte +133 -0
- package/package/components/flows/FlowAssetsHandler.svelte.d.ts +14 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +16 -18
- package/package/components/flows/flowStore.d.ts +1 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -0
- package/package/components/flows/propPicker/OutputPicker.svelte +9 -4
- package/package/components/flows/scheduleUtils.js +1 -1
- package/package/components/flows/types.d.ts +2 -1
- package/package/components/graph/FlowGraphV2.svelte +8 -104
- package/package/components/graph/FlowGraphV2.svelte.d.ts +0 -2
- package/package/components/graph/graphBuilder.svelte.d.ts +6 -3
- package/package/components/graph/graphBuilder.svelte.js +35 -9
- package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -5
- package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +1 -0
- package/package/components/graph/renderers/nodes/AssetNode.svelte +23 -20
- package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +5 -10
- package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +1 -1
- package/package/components/graph/util.js +1 -1
- package/package/components/home/ItemsList.svelte +2 -0
- package/package/components/icons/AssetGenericIcon.svelte +0 -3
- package/package/components/jobs/JobPreview.svelte +10 -6
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +13 -12
- package/package/components/runs/BatchReRunOptionsPane.svelte +5 -1
- package/package/components/runs/JobPreview.svelte +26 -16
- package/package/components/runs/{JobLoader.svelte.d.ts → JobsLoader.svelte.d.ts} +3 -3
- package/package/components/runs/NoWorkerWithTagWarning.svelte +2 -2
- package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -0
- package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
- package/package/components/schema/AddPropertyFormV2.svelte +42 -33
- package/package/components/schema/AddPropertyFormV2.svelte.d.ts +1 -0
- package/package/components/schema/AddPropertyV2.svelte +2 -1
- package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -0
- package/package/components/schema/EditableSchemaWrapper.svelte +3 -1
- package/package/components/schema/editable_schema_wrapper.d.ts +3 -0
- package/package/components/scriptEditor/LogPanel.svelte +3 -2
- package/package/components/script_builder.d.ts +2 -2
- package/package/components/settings/CreateToken.svelte +76 -41
- package/package/components/settings/CreateToken.svelte.d.ts +1 -1
- package/package/components/settings/ScopeSelector.svelte +613 -0
- package/package/components/settings/ScopeSelector.svelte.d.ts +8 -0
- package/package/components/settings/TokenDisplay.svelte +103 -0
- package/package/components/settings/TokenDisplay.svelte.d.ts +10 -0
- package/package/components/settings/TokensTable.svelte +70 -349
- package/package/components/sidebar/CriticalAlertModal.svelte +3 -0
- package/package/components/triggers/DeleteTriggerButton.svelte +1 -1
- package/package/components/triggers/TriggerEditorToolbar.svelte +3 -3
- package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte +55 -0
- package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +13 -0
- package/package/components/triggers/TriggersEditor.svelte +45 -3
- package/package/components/triggers/TriggersWrapper.svelte +2 -2
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +43 -2
- package/package/components/triggers/gcp/utils.js +9 -1
- package/package/components/triggers/http/OpenAPISpecGenerator.svelte +1 -0
- package/package/components/triggers/http/RouteEditorInner.svelte +208 -164
- package/package/components/triggers/http/RouteEditorInner.svelte.d.ts +6 -2
- package/package/components/triggers/http/utils.js +9 -3
- package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +43 -2
- package/package/components/triggers/kafka/utils.js +9 -1
- package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte +4 -132
- package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +2 -5
- package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +178 -9
- package/package/components/triggers/mqtt/utils.js +9 -1
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +43 -2
- package/package/components/triggers/nats/utils.js +9 -1
- package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +41 -2
- package/package/components/triggers/postgres/utils.js +9 -1
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +34 -88
- package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +43 -2
- package/package/components/triggers/sqs/utils.js +9 -1
- package/package/components/triggers/utils.js +12 -0
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +43 -2
- package/package/components/triggers/websocket/utils.js +11 -1
- package/package/components/workspaceSettings/AISettings.svelte +0 -2
- package/package/components/workspaceSettings/FilterList.svelte +56 -0
- package/package/components/workspaceSettings/FilterList.svelte.d.ts +8 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +785 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +18 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +305 -23
- package/package/gen/schemas.gen.js +305 -23
- package/package/gen/services.gen.d.ts +33 -1
- package/package/gen/services.gen.js +66 -2
- package/package/gen/types.gen.d.ts +216 -11
- package/package/history.svelte.js +0 -2
- package/package/hub.d.ts +1 -0
- package/package/hubPaths.json +5 -2
- package/package/infer.js +16 -10
- package/package/svelte5Utils.svelte.d.ts +1 -0
- package/package/svelte5Utils.svelte.js +25 -18
- package/package/toast.js +10 -0
- package/package/utils.d.ts +3 -2
- package/package/utils.js +20 -5
- package/package.json +11 -11
- package/package/components/ResultJobLoader.svelte +0 -219
- package/package/components/ResultJobLoader.svelte.d.ts +0 -52
- package/package/components/TestJobLoader.svelte +0 -274
- package/package/components/TestJobLoader.svelte.d.ts +0 -43
- package/package/components/icons/AssetVarIcon.svelte +0 -31
- package/package/components/icons/AssetVarIcon.svelte.d.ts +0 -9
- /package/package/components/runs/{JobLoader.svelte → JobsLoader.svelte} +0 -0
|
@@ -26,7 +26,6 @@ import { runScheduleNow } from '../scheduled/utils';
|
|
|
26
26
|
import { handleConfigChange } from '../utils';
|
|
27
27
|
let { useDrawer = true, hideTarget = false, docDescription = undefined, allowDraft = false, draftSchema = undefined, customLabel = undefined, isDeployed = false, onUpdate = undefined, onConfigChange = undefined, onDelete = undefined, onReset = undefined, trigger = undefined } = $props();
|
|
28
28
|
let optionTabSelected = $state('error_handler');
|
|
29
|
-
let is_flow = $state(false);
|
|
30
29
|
let initialPath = $state('');
|
|
31
30
|
let edit = $state(true);
|
|
32
31
|
let schedule = $state('0 0 12 * *');
|
|
@@ -37,19 +36,17 @@ let initialSchedule;
|
|
|
37
36
|
let timezone = $state(Intl.DateTimeFormat().resolvedOptions().timeZone);
|
|
38
37
|
let paused_until = $state(undefined);
|
|
39
38
|
let itemKind = $state('script');
|
|
39
|
+
let is_flow = $derived.by(() => itemKind === 'flow');
|
|
40
40
|
let errorHandleritemKind = $state('script');
|
|
41
41
|
let wsErrorHandlerMuted = $state(false);
|
|
42
42
|
let errorHandlerPath = $state(undefined);
|
|
43
|
-
let errorHandlerCustomInitialPath = $state(undefined);
|
|
44
43
|
let errorHandlerSelected = $state('slack');
|
|
45
44
|
let errorHandlerExtraArgs = $state({});
|
|
46
45
|
let recoveryHandlerPath = $state(undefined);
|
|
47
|
-
let recoveryHandlerCustomInitialPath = $state(undefined);
|
|
48
46
|
let recoveryHandlerSelected = $state('slack');
|
|
49
47
|
let recoveryHandlerItemKind = $state('script');
|
|
50
48
|
let recoveryHandlerExtraArgs = $state({});
|
|
51
49
|
let successHandlerPath = $state(undefined);
|
|
52
|
-
let successHandlerCustomInitialPath = $state(undefined);
|
|
53
50
|
let successHandlerSelected = $state('slack');
|
|
54
51
|
let successHandlerItemKind = $state('script');
|
|
55
52
|
let successHandlerExtraArgs = $state({});
|
|
@@ -94,9 +91,8 @@ export async function openEdit(ePath, isFlow, defaultCfg) {
|
|
|
94
91
|
drawerLoading = true;
|
|
95
92
|
try {
|
|
96
93
|
drawer?.openDrawer();
|
|
97
|
-
is_flow = isFlow;
|
|
98
94
|
initialPath = ePath;
|
|
99
|
-
itemKind =
|
|
95
|
+
itemKind = isFlow ? 'flow' : 'script';
|
|
100
96
|
path = defaultCfg?.path ?? ePath;
|
|
101
97
|
await loadSchedule(defaultCfg);
|
|
102
98
|
edit = true;
|
|
@@ -116,7 +112,6 @@ async function setScheduleHandler(s) {
|
|
|
116
112
|
let splitted = s.on_failure.split('/');
|
|
117
113
|
errorHandleritemKind = splitted[0];
|
|
118
114
|
errorHandlerPath = splitted.slice(1)?.join('/');
|
|
119
|
-
errorHandlerCustomInitialPath = errorHandlerPath;
|
|
120
115
|
failedTimes = s.on_failure_times ?? 1;
|
|
121
116
|
failedExact = s.on_failure_exact ?? false;
|
|
122
117
|
errorHandlerExtraArgs = s.on_failure_extra_args ?? {};
|
|
@@ -125,7 +120,6 @@ async function setScheduleHandler(s) {
|
|
|
125
120
|
else {
|
|
126
121
|
errorHandlerPath = undefined;
|
|
127
122
|
errorHandleritemKind = 'script';
|
|
128
|
-
errorHandlerCustomInitialPath = undefined;
|
|
129
123
|
errorHandlerExtraArgs = {};
|
|
130
124
|
failedExact = false;
|
|
131
125
|
failedTimes = 1;
|
|
@@ -135,7 +129,6 @@ async function setScheduleHandler(s) {
|
|
|
135
129
|
let splitted = s.on_recovery.split('/');
|
|
136
130
|
recoveryHandlerItemKind = splitted[0];
|
|
137
131
|
recoveryHandlerPath = splitted.slice(1)?.join('/');
|
|
138
|
-
recoveryHandlerCustomInitialPath = recoveryHandlerPath;
|
|
139
132
|
recoveredTimes = s.on_recovery_times ?? 1;
|
|
140
133
|
recoveryHandlerExtraArgs = s.on_recovery_extra_args ?? {};
|
|
141
134
|
recoveryHandlerSelected = getHandlerType('recovery', recoveryHandlerPath);
|
|
@@ -143,7 +136,6 @@ async function setScheduleHandler(s) {
|
|
|
143
136
|
else {
|
|
144
137
|
recoveryHandlerPath = undefined;
|
|
145
138
|
recoveryHandlerItemKind = 'script';
|
|
146
|
-
recoveryHandlerCustomInitialPath = undefined;
|
|
147
139
|
recoveredTimes = 1;
|
|
148
140
|
recoveryHandlerSelected = 'slack';
|
|
149
141
|
recoveryHandlerExtraArgs = {};
|
|
@@ -152,14 +144,12 @@ async function setScheduleHandler(s) {
|
|
|
152
144
|
let splitted = s.on_success.split('/');
|
|
153
145
|
successHandlerItemKind = splitted[0];
|
|
154
146
|
successHandlerPath = splitted.slice(1)?.join('/');
|
|
155
|
-
successHandlerCustomInitialPath = successHandlerPath;
|
|
156
147
|
successHandlerExtraArgs = s.on_success_extra_args ?? {};
|
|
157
148
|
successHandlerSelected = getHandlerType('success', successHandlerPath);
|
|
158
149
|
}
|
|
159
150
|
else {
|
|
160
151
|
successHandlerPath = undefined;
|
|
161
152
|
successHandlerItemKind = 'script';
|
|
162
|
-
successHandlerCustomInitialPath = undefined;
|
|
163
153
|
successHandlerSelected = 'slack';
|
|
164
154
|
successHandlerExtraArgs = {};
|
|
165
155
|
}
|
|
@@ -185,7 +175,6 @@ async function setScheduleHandler(s) {
|
|
|
185
175
|
errorHandleritemKind = splitted[0];
|
|
186
176
|
errorHandlerPath = splitted.slice(1)?.join('/');
|
|
187
177
|
errorHandlerExtraArgs = defaultErrorHandlerMaybe['errorHandlerExtraArgs'];
|
|
188
|
-
errorHandlerCustomInitialPath = errorHandlerPath;
|
|
189
178
|
errorHandlerSelected = getHandlerType('error', errorHandlerPath);
|
|
190
179
|
failedTimes = defaultErrorHandlerMaybe['failedTimes'];
|
|
191
180
|
failedExact = defaultErrorHandlerMaybe['failedExact'];
|
|
@@ -195,7 +184,6 @@ async function setScheduleHandler(s) {
|
|
|
195
184
|
errorHandlerPath = undefined;
|
|
196
185
|
errorHandleritemKind = 'script';
|
|
197
186
|
errorHandlerExtraArgs = {};
|
|
198
|
-
errorHandlerCustomInitialPath = undefined;
|
|
199
187
|
errorHandlerSelected = 'slack';
|
|
200
188
|
failedTimes = 1;
|
|
201
189
|
failedExact = false;
|
|
@@ -205,7 +193,6 @@ async function setScheduleHandler(s) {
|
|
|
205
193
|
recoveryHandlerItemKind = splitted[0];
|
|
206
194
|
recoveryHandlerPath = splitted.slice(1)?.join('/');
|
|
207
195
|
recoveryHandlerExtraArgs = defaultRecoveryHandlerMaybe['recoveryHandlerExtraArgs'];
|
|
208
|
-
recoveryHandlerCustomInitialPath = recoveryHandlerPath;
|
|
209
196
|
recoveryHandlerSelected = getHandlerType('recovery', recoveryHandlerPath);
|
|
210
197
|
recoveredTimes = defaultRecoveryHandlerMaybe['recoveredTimes'];
|
|
211
198
|
}
|
|
@@ -213,7 +200,6 @@ async function setScheduleHandler(s) {
|
|
|
213
200
|
recoveryHandlerPath = undefined;
|
|
214
201
|
recoveryHandlerItemKind = 'script';
|
|
215
202
|
recoveryHandlerExtraArgs = {};
|
|
216
|
-
recoveryHandlerCustomInitialPath = undefined;
|
|
217
203
|
recoveryHandlerSelected = 'slack';
|
|
218
204
|
recoveredTimes = 1;
|
|
219
205
|
}
|
|
@@ -222,7 +208,6 @@ async function setScheduleHandler(s) {
|
|
|
222
208
|
successHandlerItemKind = splitted[0];
|
|
223
209
|
successHandlerPath = splitted.slice(1)?.join('/');
|
|
224
210
|
successHandlerExtraArgs = defaultSuccessHandlerMaybe['successHandlerExtraArgs'];
|
|
225
|
-
successHandlerCustomInitialPath = successHandlerPath;
|
|
226
211
|
successHandlerSelected = getHandlerType('success', successHandlerPath);
|
|
227
212
|
recoveredTimes = defaultSuccessHandlerMaybe['recoveredTimes'];
|
|
228
213
|
}
|
|
@@ -230,7 +215,6 @@ async function setScheduleHandler(s) {
|
|
|
230
215
|
successHandlerPath = undefined;
|
|
231
216
|
successHandlerItemKind = 'script';
|
|
232
217
|
successHandlerExtraArgs = {};
|
|
233
|
-
successHandlerCustomInitialPath = undefined;
|
|
234
218
|
successHandlerSelected = 'slack';
|
|
235
219
|
}
|
|
236
220
|
}
|
|
@@ -254,9 +238,8 @@ export async function openNew(nis_flow, initial_script_path, defaultValues, sche
|
|
|
254
238
|
}
|
|
255
239
|
drawer?.openDrawer();
|
|
256
240
|
runnable = undefined;
|
|
257
|
-
is_flow = s?.is_flow ?? nis_flow;
|
|
258
241
|
edit = false;
|
|
259
|
-
itemKind = is_flow ? 'flow' : 'script';
|
|
242
|
+
itemKind = (s?.is_flow ?? nis_flow) ? 'flow' : 'script';
|
|
260
243
|
initialScriptPath = initial_script_path ?? '';
|
|
261
244
|
path = initNewPath
|
|
262
245
|
? ''
|
|
@@ -287,15 +270,6 @@ export async function openNew(nis_flow, initial_script_path, defaultValues, sche
|
|
|
287
270
|
showLoading = false;
|
|
288
271
|
}
|
|
289
272
|
}
|
|
290
|
-
async function resetRetries() {
|
|
291
|
-
if (itemKind === 'flow') {
|
|
292
|
-
retry = undefined;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
$effect(() => {
|
|
296
|
-
;
|
|
297
|
-
(is_flow = itemKind == 'flow') && resetRetries();
|
|
298
|
-
});
|
|
299
273
|
// set isValid to true when a script/flow without any properties is selected
|
|
300
274
|
$effect(() => {
|
|
301
275
|
setDefaultValid(draftSchema ?? runnable?.schema);
|
|
@@ -437,7 +411,7 @@ async function loadScheduleCfg(cfg) {
|
|
|
437
411
|
description = cfg.description ?? '';
|
|
438
412
|
script_path = cfg.script_path ?? '';
|
|
439
413
|
await loadScript(script_path);
|
|
440
|
-
|
|
414
|
+
itemKind = cfg.is_flow ? 'flow' : 'script';
|
|
441
415
|
no_flow_overlap = cfg.no_flow_overlap ?? false;
|
|
442
416
|
wsErrorHandlerMuted = cfg.ws_error_handler_muted ?? false;
|
|
443
417
|
retry = cfg.retry;
|
|
@@ -445,7 +419,6 @@ async function loadScheduleCfg(cfg) {
|
|
|
445
419
|
let splitted = cfg.on_failure.split('/');
|
|
446
420
|
errorHandleritemKind = splitted[0];
|
|
447
421
|
errorHandlerPath = splitted.slice(1)?.join('/');
|
|
448
|
-
errorHandlerCustomInitialPath = errorHandlerPath;
|
|
449
422
|
failedTimes = cfg.on_failure_times ?? 1;
|
|
450
423
|
failedExact = cfg.on_failure_exact ?? false;
|
|
451
424
|
errorHandlerExtraArgs = cfg.on_failure_extra_args ?? {};
|
|
@@ -454,7 +427,6 @@ async function loadScheduleCfg(cfg) {
|
|
|
454
427
|
else {
|
|
455
428
|
errorHandlerPath = undefined;
|
|
456
429
|
errorHandleritemKind = 'script';
|
|
457
|
-
errorHandlerCustomInitialPath = undefined;
|
|
458
430
|
errorHandlerExtraArgs = {};
|
|
459
431
|
failedExact = false;
|
|
460
432
|
failedTimes = 1;
|
|
@@ -464,7 +436,6 @@ async function loadScheduleCfg(cfg) {
|
|
|
464
436
|
let splitted = cfg.on_recovery.split('/');
|
|
465
437
|
recoveryHandlerItemKind = splitted[0];
|
|
466
438
|
recoveryHandlerPath = splitted.slice(1)?.join('/');
|
|
467
|
-
recoveryHandlerCustomInitialPath = recoveryHandlerPath;
|
|
468
439
|
recoveredTimes = cfg.on_recovery_times ?? 1;
|
|
469
440
|
recoveryHandlerExtraArgs = cfg.on_recovery_extra_args ?? {};
|
|
470
441
|
recoveryHandlerSelected = getHandlerType('recovery', recoveryHandlerPath ?? '');
|
|
@@ -472,7 +443,6 @@ async function loadScheduleCfg(cfg) {
|
|
|
472
443
|
else {
|
|
473
444
|
recoveryHandlerPath = undefined;
|
|
474
445
|
recoveryHandlerItemKind = 'script';
|
|
475
|
-
recoveryHandlerCustomInitialPath = undefined;
|
|
476
446
|
recoveredTimes = 1;
|
|
477
447
|
recoveryHandlerSelected = 'slack';
|
|
478
448
|
recoveryHandlerExtraArgs = {};
|
|
@@ -481,14 +451,12 @@ async function loadScheduleCfg(cfg) {
|
|
|
481
451
|
let splitted = cfg.on_success.split('/');
|
|
482
452
|
successHandlerItemKind = splitted[0];
|
|
483
453
|
successHandlerPath = splitted.slice(1)?.join('/');
|
|
484
|
-
successHandlerCustomInitialPath = successHandlerPath;
|
|
485
454
|
successHandlerExtraArgs = cfg.on_success_extra_args ?? {};
|
|
486
455
|
successHandlerSelected = getHandlerType('success', successHandlerPath ?? '');
|
|
487
456
|
}
|
|
488
457
|
else {
|
|
489
458
|
successHandlerPath = undefined;
|
|
490
459
|
successHandlerItemKind = 'script';
|
|
491
|
-
successHandlerCustomInitialPath = undefined;
|
|
492
460
|
successHandlerSelected = 'slack';
|
|
493
461
|
successHandlerExtraArgs = {};
|
|
494
462
|
}
|
|
@@ -530,18 +498,6 @@ function getHandlerType(isHandler, scriptPath) {
|
|
|
530
498
|
}
|
|
531
499
|
return 'custom';
|
|
532
500
|
}
|
|
533
|
-
function isSlackHandler(isSlackHandler, scriptPath) {
|
|
534
|
-
if (isSlackHandler == 'error') {
|
|
535
|
-
return (scriptPath.startsWith('hub/') &&
|
|
536
|
-
scriptPath.endsWith('/workspace-or-schedule-error-handler-slack'));
|
|
537
|
-
}
|
|
538
|
-
else if (isSlackHandler == 'recovery') {
|
|
539
|
-
return (scriptPath.startsWith('hub/') && scriptPath.endsWith('/schedule-recovery-handler-slack'));
|
|
540
|
-
}
|
|
541
|
-
else {
|
|
542
|
-
return scriptPath.startsWith('hub/') && scriptPath.endsWith('/schedule-success-handler-slack');
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
501
|
let drawer = $state();
|
|
546
502
|
let pathC = $state();
|
|
547
503
|
let dirtyPath = $state(false);
|
|
@@ -563,27 +519,6 @@ function onVersionChange() {
|
|
|
563
519
|
}
|
|
564
520
|
}
|
|
565
521
|
function getScheduleCfg() {
|
|
566
|
-
let errorHadlerExtraArgsDerived = structuredClone($state.snapshot(errorHandlerExtraArgs));
|
|
567
|
-
if (errorHandlerPath !== undefined && isSlackHandler('error', errorHandlerPath)) {
|
|
568
|
-
errorHadlerExtraArgsDerived['slack'] = '$res:f/slack_bot/bot_token';
|
|
569
|
-
}
|
|
570
|
-
else {
|
|
571
|
-
errorHadlerExtraArgsDerived['slack'] = undefined;
|
|
572
|
-
}
|
|
573
|
-
let recoveryHandlerExtraArgsDerived = structuredClone($state.snapshot(recoveryHandlerExtraArgs));
|
|
574
|
-
if (recoveryHandlerPath !== undefined && isSlackHandler('recovery', recoveryHandlerPath)) {
|
|
575
|
-
recoveryHandlerExtraArgsDerived['slack'] = '$res:f/slack_bot/bot_token';
|
|
576
|
-
}
|
|
577
|
-
else {
|
|
578
|
-
recoveryHandlerExtraArgsDerived['slack'] = undefined;
|
|
579
|
-
}
|
|
580
|
-
let successHandlerExtraArgsDerived = structuredClone($state.snapshot(successHandlerExtraArgs));
|
|
581
|
-
if (successHandlerPath !== undefined && isSlackHandler('success', successHandlerPath)) {
|
|
582
|
-
successHandlerExtraArgsDerived['slack'] = '$res:f/slack_bot/bot_token';
|
|
583
|
-
}
|
|
584
|
-
else {
|
|
585
|
-
successHandlerExtraArgsDerived['slack'] = undefined;
|
|
586
|
-
}
|
|
587
522
|
return {
|
|
588
523
|
path: path,
|
|
589
524
|
schedule: formatCron(schedule),
|
|
@@ -595,16 +530,16 @@ function getScheduleCfg() {
|
|
|
595
530
|
on_failure: errorHandlerPath ? `${errorHandleritemKind}/${errorHandlerPath}` : undefined,
|
|
596
531
|
on_failure_times: failedTimes,
|
|
597
532
|
on_failure_exact: failedExact,
|
|
598
|
-
on_failure_extra_args: errorHandlerPath ?
|
|
533
|
+
on_failure_extra_args: errorHandlerPath ? errorHandlerExtraArgs : undefined,
|
|
599
534
|
on_recovery: recoveryHandlerPath
|
|
600
535
|
? `${recoveryHandlerItemKind}/${recoveryHandlerPath}`
|
|
601
536
|
: undefined,
|
|
602
537
|
on_recovery_times: recoveredTimes,
|
|
603
|
-
on_recovery_extra_args: recoveryHandlerPath ?
|
|
538
|
+
on_recovery_extra_args: recoveryHandlerPath ? recoveryHandlerExtraArgs : {},
|
|
604
539
|
on_success: successHandlerPath
|
|
605
540
|
? `${successHandlerItemKind}/${successHandlerPath}`
|
|
606
541
|
: undefined,
|
|
607
|
-
on_success_extra_args: successHandlerPath ?
|
|
542
|
+
on_success_extra_args: successHandlerPath ? successHandlerExtraArgs : {},
|
|
608
543
|
ws_error_handler_muted: wsErrorHandlerMuted,
|
|
609
544
|
retry: retry,
|
|
610
545
|
summary: summary != '' ? summary : undefined,
|
|
@@ -909,14 +844,14 @@ $effect(() => {
|
|
|
909
844
|
{/snippet}
|
|
910
845
|
|
|
911
846
|
{#snippet errorHandler()}
|
|
912
|
-
<div class="flex flex-col gap-2">
|
|
847
|
+
<div class="flex flex-col gap-2 min-h-96">
|
|
913
848
|
{#if !loading}
|
|
914
849
|
<Tabs bind:selected={optionTabSelected}>
|
|
915
850
|
<Tab value="error_handler">Error Handler</Tab>
|
|
916
851
|
<Tab value="recovery_handler">Recovery Handler</Tab>
|
|
917
852
|
<Tab value="success_handler">Success Handler</Tab>
|
|
853
|
+
<Tab value="retries">Retries</Tab>
|
|
918
854
|
{#if itemKind === 'script'}
|
|
919
|
-
<Tab value="retries">Retries</Tab>
|
|
920
855
|
<Tab value="tag">Custom tag</Tab>
|
|
921
856
|
{/if}
|
|
922
857
|
</Tabs>
|
|
@@ -966,19 +901,21 @@ $effect(() => {
|
|
|
966
901
|
showScriptHelpText={true}
|
|
967
902
|
bind:handlerSelected={errorHandlerSelected}
|
|
968
903
|
bind:handlerPath={errorHandlerPath}
|
|
969
|
-
customInitialScriptPath={errorHandlerCustomInitialPath}
|
|
970
904
|
toggleText="Alert channel on error"
|
|
971
|
-
customScriptTemplate="/scripts/add?hub=hub%
|
|
905
|
+
customScriptTemplate="/scripts/add?hub=hub%2F19743%2Fwindmill%2Fschedule_error_handler_template"
|
|
972
906
|
bind:customHandlerKind={errorHandleritemKind}
|
|
973
907
|
bind:handlerExtraArgs={errorHandlerExtraArgs}
|
|
974
908
|
>
|
|
975
|
-
|
|
976
|
-
<svelte:fragment slot="custom-tab-tooltip">
|
|
909
|
+
{#snippet customTabTooltip()}
|
|
977
910
|
<Tooltip>
|
|
978
911
|
<div class="flex gap-20 items-start mt-3">
|
|
979
912
|
<div class="text-sm"
|
|
980
913
|
>The following args will be passed to the error handler:
|
|
981
914
|
<ul class="mt-1 ml-2">
|
|
915
|
+
<li
|
|
916
|
+
><b>workspace_id</b>: The ID of the workspace that the schedule belongs to.</li
|
|
917
|
+
>
|
|
918
|
+
<li><b>job_id</b>: The UUID of the job that errored.</li>
|
|
982
919
|
<li><b>path</b>: The path of the script or flow that failed.</li>
|
|
983
920
|
<li><b>is_flow</b>: Whether the runnable is a flow.</li>
|
|
984
921
|
<li><b>schedule_path</b>: The path of the schedule.</li>
|
|
@@ -992,7 +929,7 @@ $effect(() => {
|
|
|
992
929
|
</div>
|
|
993
930
|
</div>
|
|
994
931
|
</Tooltip>
|
|
995
|
-
|
|
932
|
+
{/snippet}
|
|
996
933
|
</ErrorOrRecoveryHandler>
|
|
997
934
|
<div class="flex flex-row items-center justify-between">
|
|
998
935
|
<div class="flex flex-row items-center mt-4 font-semibold text-sm gap-2">
|
|
@@ -1057,14 +994,12 @@ $effect(() => {
|
|
|
1057
994
|
errorOrRecovery="recovery"
|
|
1058
995
|
bind:handlerSelected={recoveryHandlerSelected}
|
|
1059
996
|
bind:handlerPath={recoveryHandlerPath}
|
|
1060
|
-
customInitialScriptPath={recoveryHandlerCustomInitialPath}
|
|
1061
997
|
toggleText="Alert channel when error recovered"
|
|
1062
998
|
customScriptTemplate="/scripts/add?hub=hub%2F9082%2Fwindmill%2Fschedule_recovery_handler_template"
|
|
1063
999
|
bind:customHandlerKind={recoveryHandlerItemKind}
|
|
1064
1000
|
bind:handlerExtraArgs={recoveryHandlerExtraArgs}
|
|
1065
1001
|
>
|
|
1066
|
-
|
|
1067
|
-
<svelte:fragment slot="custom-tab-tooltip">
|
|
1002
|
+
{#snippet customTabTooltip()}
|
|
1068
1003
|
<Tooltip>
|
|
1069
1004
|
<div class="flex gap-20 items-start mt-3">
|
|
1070
1005
|
<div class=" text-sm"
|
|
@@ -1089,7 +1024,7 @@ $effect(() => {
|
|
|
1089
1024
|
</div>
|
|
1090
1025
|
</div>
|
|
1091
1026
|
</Tooltip>
|
|
1092
|
-
|
|
1027
|
+
{/snippet}
|
|
1093
1028
|
</ErrorOrRecoveryHandler>
|
|
1094
1029
|
<div class="flex flex-row items-center justify-between">
|
|
1095
1030
|
<div
|
|
@@ -1148,14 +1083,12 @@ $effect(() => {
|
|
|
1148
1083
|
errorOrRecovery="success"
|
|
1149
1084
|
bind:handlerSelected={successHandlerSelected}
|
|
1150
1085
|
bind:handlerPath={successHandlerPath}
|
|
1151
|
-
customInitialScriptPath={successHandlerCustomInitialPath}
|
|
1152
1086
|
toggleText="Alert channel when successful"
|
|
1153
1087
|
customScriptTemplate="/scripts/add?hub=hub%2F9071%2Fwindmill%2Fschedule_success_handler_template"
|
|
1154
1088
|
bind:customHandlerKind={successHandlerItemKind}
|
|
1155
1089
|
bind:handlerExtraArgs={successHandlerExtraArgs}
|
|
1156
1090
|
>
|
|
1157
|
-
|
|
1158
|
-
<svelte:fragment slot="custom-tab-tooltip">
|
|
1091
|
+
{#snippet customTabTooltip()}
|
|
1159
1092
|
<Tooltip>
|
|
1160
1093
|
<div class="flex gap-20 items-start mt-3">
|
|
1161
1094
|
<div class=" text-sm"
|
|
@@ -1170,7 +1103,7 @@ $effect(() => {
|
|
|
1170
1103
|
</div>
|
|
1171
1104
|
</div>
|
|
1172
1105
|
</Tooltip>
|
|
1173
|
-
|
|
1106
|
+
{/snippet}
|
|
1174
1107
|
</ErrorOrRecoveryHandler>
|
|
1175
1108
|
</Section>
|
|
1176
1109
|
{:else if optionTabSelected === 'retries'}
|
|
@@ -1188,7 +1121,20 @@ $effect(() => {
|
|
|
1188
1121
|
step in the flow editor.
|
|
1189
1122
|
</Tooltip>
|
|
1190
1123
|
{/snippet}
|
|
1191
|
-
|
|
1124
|
+
{#if itemKind !== 'script'}
|
|
1125
|
+
<Alert type="info" title="Only available for scripts" class="mb-2">
|
|
1126
|
+
Error Handler and Retries are only available for scripts. For flows, use the built-in <a
|
|
1127
|
+
href="https://www.windmill.dev/docs/flows/flow_error_handler"
|
|
1128
|
+
target="_blank">error handler</a
|
|
1129
|
+
>
|
|
1130
|
+
and <a href="https://www.windmill.dev/docs/flows/retries" target="_blank">retries</a>.
|
|
1131
|
+
</Alert>
|
|
1132
|
+
{:else}
|
|
1133
|
+
<FlowRetries
|
|
1134
|
+
bind:flowModuleRetry={retry}
|
|
1135
|
+
disabled={itemKind !== 'script' || disabled}
|
|
1136
|
+
/>
|
|
1137
|
+
{/if}
|
|
1192
1138
|
</Section>
|
|
1193
1139
|
{:else if optionTabSelected === 'tag'}
|
|
1194
1140
|
<Section
|
|
@@ -14,7 +14,10 @@ import Required from '../../Required.svelte';
|
|
|
14
14
|
import { untrack } from 'svelte';
|
|
15
15
|
import TriggerEditorToolbar from '../TriggerEditorToolbar.svelte';
|
|
16
16
|
import { saveSqsTriggerFromCfg } from './utils';
|
|
17
|
-
import { handleConfigChange } from '../utils';
|
|
17
|
+
import { getHandlerType, handleConfigChange } from '../utils';
|
|
18
|
+
import Tabs from '../../common/tabs/Tabs.svelte';
|
|
19
|
+
import Tab from '../../common/tabs/Tab.svelte';
|
|
20
|
+
import TriggerRetriesAndErrorHandler from '../TriggerRetriesAndErrorHandler.svelte';
|
|
18
21
|
let { useDrawer = true, description = undefined, hideTarget = false, hideTooltips = false, allowDraft = false, trigger = undefined, isEditor = false, customLabel = undefined, isDeployed = false, cloudDisabled = false, onConfigChange = undefined, onCaptureConfigChange = undefined, onUpdate = undefined, onDelete = undefined, onReset = undefined } = $props();
|
|
19
22
|
let drawer = $state(undefined);
|
|
20
23
|
let is_flow = $state(false);
|
|
@@ -38,6 +41,11 @@ let aws_auth_resource_type = $state('credentials');
|
|
|
38
41
|
let isValid = $state(false);
|
|
39
42
|
let initialConfig = undefined;
|
|
40
43
|
let deploymentLoading = $state(false);
|
|
44
|
+
let optionTabSelected = $state('error_handler');
|
|
45
|
+
let errorHandlerSelected = $state('slack');
|
|
46
|
+
let error_handler_path = $state();
|
|
47
|
+
let error_handler_args = $state({});
|
|
48
|
+
let retry = $state();
|
|
41
49
|
const sqsConfig = $derived.by(getSaveCfg);
|
|
42
50
|
const captureConfig = $derived.by(getCaptureConfig);
|
|
43
51
|
const saveDisabled = $derived(pathError != '' || emptyString(script_path) || !isValid || !can_write);
|
|
@@ -87,6 +95,10 @@ export async function openNew(nis_flow, fixedScriptPath_, defaultValues) {
|
|
|
87
95
|
edit = false;
|
|
88
96
|
dirtyPath = false;
|
|
89
97
|
enabled = defaultValues?.enabled ?? false;
|
|
98
|
+
error_handler_path = defaultValues?.error_handler_path ?? undefined;
|
|
99
|
+
error_handler_args = defaultValues?.error_handler_args ?? {};
|
|
100
|
+
retry = defaultValues?.retry ?? undefined;
|
|
101
|
+
errorHandlerSelected = getHandlerType(error_handler_path ?? '');
|
|
90
102
|
}
|
|
91
103
|
finally {
|
|
92
104
|
initialConfig = structuredClone($state.snapshot(getSaveCfg()));
|
|
@@ -107,6 +119,10 @@ async function loadTriggerConfig(cfg) {
|
|
|
107
119
|
enabled = cfg?.enabled;
|
|
108
120
|
aws_auth_resource_type = cfg?.aws_auth_resource_type;
|
|
109
121
|
can_write = canWrite(cfg?.path, cfg?.extra_perms, $userStore);
|
|
122
|
+
error_handler_path = cfg?.error_handler_path;
|
|
123
|
+
error_handler_args = cfg?.error_handler_args ?? {};
|
|
124
|
+
retry = cfg?.retry;
|
|
125
|
+
errorHandlerSelected = getHandlerType(error_handler_path ?? '');
|
|
110
126
|
}
|
|
111
127
|
catch (error) {
|
|
112
128
|
sendUserToast(`Could not load SQS trigger config: ${error.body}`, true);
|
|
@@ -139,7 +155,10 @@ function getSaveCfg() {
|
|
|
139
155
|
queue_url,
|
|
140
156
|
message_attributes,
|
|
141
157
|
aws_auth_resource_type,
|
|
142
|
-
enabled
|
|
158
|
+
enabled,
|
|
159
|
+
error_handler_path,
|
|
160
|
+
error_handler_args,
|
|
161
|
+
retry
|
|
143
162
|
};
|
|
144
163
|
}
|
|
145
164
|
async function handleToggleEnabled(nEnabled) {
|
|
@@ -313,6 +332,28 @@ $effect(() => {
|
|
|
313
332
|
headless={true}
|
|
314
333
|
showTestingBadge={isEditor}
|
|
315
334
|
/>
|
|
335
|
+
|
|
336
|
+
<Section label="Advanced" collapsable>
|
|
337
|
+
<div class="flex flex-col gap-4">
|
|
338
|
+
<div class="min-h-96">
|
|
339
|
+
<Tabs bind:selected={optionTabSelected}>
|
|
340
|
+
<Tab value="error_handler">Error Handler</Tab>
|
|
341
|
+
<Tab value="retries">Retries</Tab>
|
|
342
|
+
</Tabs>
|
|
343
|
+
<div class="mt-4">
|
|
344
|
+
<TriggerRetriesAndErrorHandler
|
|
345
|
+
{optionTabSelected}
|
|
346
|
+
{itemKind}
|
|
347
|
+
{can_write}
|
|
348
|
+
bind:errorHandlerSelected
|
|
349
|
+
bind:error_handler_path
|
|
350
|
+
bind:error_handler_args
|
|
351
|
+
bind:retry
|
|
352
|
+
/>
|
|
353
|
+
</div>
|
|
354
|
+
</div>
|
|
355
|
+
</div>
|
|
356
|
+
</Section>
|
|
316
357
|
</div>
|
|
317
358
|
{/if}
|
|
318
359
|
{/snippet}
|
|
@@ -2,6 +2,13 @@ import { SqsTriggerService } from '../../../gen';
|
|
|
2
2
|
import { sendUserToast } from '../../../toast';
|
|
3
3
|
import { get } from 'svelte/store';
|
|
4
4
|
export async function saveSqsTriggerFromCfg(initialPath, cfg, edit, workspace, usedTriggerKinds) {
|
|
5
|
+
const errorHandlerAndRetries = !cfg.is_flow
|
|
6
|
+
? {
|
|
7
|
+
error_handler_path: cfg.error_handler_path,
|
|
8
|
+
error_handler_args: cfg.error_handler_path ? cfg.error_handler_args : undefined,
|
|
9
|
+
retry: cfg.retry
|
|
10
|
+
}
|
|
11
|
+
: {};
|
|
5
12
|
const requestBody = {
|
|
6
13
|
path: cfg.path,
|
|
7
14
|
script_path: cfg.script_path,
|
|
@@ -10,7 +17,8 @@ export async function saveSqsTriggerFromCfg(initialPath, cfg, edit, workspace, u
|
|
|
10
17
|
queue_url: cfg.queue_url,
|
|
11
18
|
message_attributes: cfg.message_attributes,
|
|
12
19
|
aws_auth_resource_type: cfg.aws_auth_resource_type,
|
|
13
|
-
enabled: cfg.enabled
|
|
20
|
+
enabled: cfg.enabled,
|
|
21
|
+
...errorHandlerAndRetries
|
|
14
22
|
};
|
|
15
23
|
try {
|
|
16
24
|
if (edit) {
|
|
@@ -395,3 +395,15 @@ export function filterDraftTriggers(savedValue, triggersState) {
|
|
|
395
395
|
}));
|
|
396
396
|
return newSavedValue;
|
|
397
397
|
}
|
|
398
|
+
export function getHandlerType(scriptPath) {
|
|
399
|
+
const handlerMap = {
|
|
400
|
+
teams: '/workspace-or-schedule-error-handler-teams',
|
|
401
|
+
slack: '/workspace-or-schedule-error-handler-slack'
|
|
402
|
+
};
|
|
403
|
+
for (const [type, suffix] of Object.entries(handlerMap)) {
|
|
404
|
+
if (scriptPath.startsWith('hub/') && scriptPath.endsWith(suffix)) {
|
|
405
|
+
return type;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
return 'custom';
|
|
409
|
+
}
|
|
@@ -17,7 +17,10 @@ import WebsocketEditorConfigSection from './WebsocketEditorConfigSection.svelte'
|
|
|
17
17
|
import { untrack } from 'svelte';
|
|
18
18
|
import TriggerEditorToolbar from '../TriggerEditorToolbar.svelte';
|
|
19
19
|
import { saveWebsocketTriggerFromCfg } from './utils';
|
|
20
|
-
import { handleConfigChange } from '../utils';
|
|
20
|
+
import { getHandlerType, handleConfigChange } from '../utils';
|
|
21
|
+
import Tabs from '../../common/tabs/Tabs.svelte';
|
|
22
|
+
import Tab from '../../common/tabs/Tab.svelte';
|
|
23
|
+
import TriggerRetriesAndErrorHandler from '../TriggerRetriesAndErrorHandler.svelte';
|
|
21
24
|
let { useDrawer = true, description = undefined, hideTarget = false, hideTooltips = false, isEditor = false, allowDraft = false, trigger = undefined, isDeployed = false, customLabel = undefined, onConfigChange = undefined, onCaptureConfigChange = undefined, onUpdate = undefined, onDelete = undefined, onReset = undefined, cloudDisabled = false } = $props();
|
|
22
25
|
let drawer = $state();
|
|
23
26
|
let is_flow = $state(false);
|
|
@@ -43,6 +46,11 @@ let showLoading = $state(false);
|
|
|
43
46
|
let initialConfig = undefined;
|
|
44
47
|
let deploymentLoading = $state(false);
|
|
45
48
|
let isValid = $state(false);
|
|
49
|
+
let optionTabSelected = $state('error_handler');
|
|
50
|
+
let errorHandlerSelected = $state('slack');
|
|
51
|
+
let error_handler_path = $state();
|
|
52
|
+
let error_handler_args = $state({});
|
|
53
|
+
let retry = $state();
|
|
46
54
|
const websocketCfg = $derived.by(getSaveCfg);
|
|
47
55
|
const captureConfig = $derived.by(isEditor ? getCaptureConfig : () => ({}));
|
|
48
56
|
const saveDisabled = $derived.by(() => {
|
|
@@ -110,6 +118,10 @@ export async function openNew(nis_flow, fixedScriptPath_, defaultValues) {
|
|
|
110
118
|
url_runnable_args = defaultValues?.url_runnable_args ?? {};
|
|
111
119
|
dirtyPath = false;
|
|
112
120
|
can_return_message = false;
|
|
121
|
+
error_handler_path = defaultValues?.error_handler_path ?? undefined;
|
|
122
|
+
error_handler_args = defaultValues?.error_handler_args ?? {};
|
|
123
|
+
retry = defaultValues?.retry ?? undefined;
|
|
124
|
+
errorHandlerSelected = getHandlerType(error_handler_path ?? '');
|
|
113
125
|
}
|
|
114
126
|
finally {
|
|
115
127
|
clearTimeout(loadingTimeout);
|
|
@@ -129,6 +141,10 @@ function loadTriggerConfig(cfg) {
|
|
|
129
141
|
url_runnable_args = cfg?.url_runnable_args;
|
|
130
142
|
can_return_message = cfg?.can_return_message;
|
|
131
143
|
can_write = canWrite(path, cfg?.extra_perms, $userStore);
|
|
144
|
+
error_handler_path = cfg?.error_handler_path;
|
|
145
|
+
error_handler_args = cfg?.error_handler_args ?? {};
|
|
146
|
+
retry = cfg?.retry;
|
|
147
|
+
errorHandlerSelected = getHandlerType(error_handler_path ?? '');
|
|
132
148
|
}
|
|
133
149
|
function getSaveCfg() {
|
|
134
150
|
return {
|
|
@@ -141,7 +157,10 @@ function getSaveCfg() {
|
|
|
141
157
|
initial_messages,
|
|
142
158
|
url_runnable_args,
|
|
143
159
|
can_return_message,
|
|
144
|
-
enabled
|
|
160
|
+
enabled,
|
|
161
|
+
error_handler_path,
|
|
162
|
+
error_handler_args,
|
|
163
|
+
retry
|
|
145
164
|
};
|
|
146
165
|
}
|
|
147
166
|
async function loadTrigger(defaultConfig) {
|
|
@@ -593,6 +612,28 @@ $effect(() => {
|
|
|
593
612
|
</div>
|
|
594
613
|
</div>
|
|
595
614
|
</Section>
|
|
615
|
+
|
|
616
|
+
<Section label="Advanced" collapsable>
|
|
617
|
+
<div class="flex flex-col gap-4">
|
|
618
|
+
<div class="min-h-96">
|
|
619
|
+
<Tabs bind:selected={optionTabSelected}>
|
|
620
|
+
<Tab value="error_handler">Error Handler</Tab>
|
|
621
|
+
<Tab value="retries">Retries</Tab>
|
|
622
|
+
</Tabs>
|
|
623
|
+
<div class="mt-4">
|
|
624
|
+
<TriggerRetriesAndErrorHandler
|
|
625
|
+
{optionTabSelected}
|
|
626
|
+
{itemKind}
|
|
627
|
+
{can_write}
|
|
628
|
+
bind:errorHandlerSelected
|
|
629
|
+
bind:error_handler_path
|
|
630
|
+
bind:error_handler_args
|
|
631
|
+
bind:retry
|
|
632
|
+
/>
|
|
633
|
+
</div>
|
|
634
|
+
</div>
|
|
635
|
+
</div>
|
|
636
|
+
</Section>
|
|
596
637
|
</div>
|
|
597
638
|
{/if}
|
|
598
639
|
{/snippet}
|
|
@@ -2,6 +2,15 @@ import { WebsocketTriggerService } from '../../../gen';
|
|
|
2
2
|
import { sendUserToast } from '../../../toast';
|
|
3
3
|
import { get } from 'svelte/store';
|
|
4
4
|
export async function saveWebsocketTriggerFromCfg(initialPath, triggerCfg, edit, workspace, usedTriggerKinds) {
|
|
5
|
+
const errorHandlerAndRetries = !triggerCfg.is_flow
|
|
6
|
+
? {
|
|
7
|
+
error_handler_path: triggerCfg.error_handler_path,
|
|
8
|
+
error_handler_args: triggerCfg.error_handler_path
|
|
9
|
+
? triggerCfg.error_handler_args
|
|
10
|
+
: undefined,
|
|
11
|
+
retry: triggerCfg.retry
|
|
12
|
+
}
|
|
13
|
+
: {};
|
|
5
14
|
const requestBody = {
|
|
6
15
|
path: triggerCfg.path,
|
|
7
16
|
script_path: triggerCfg.script_path,
|
|
@@ -10,7 +19,8 @@ export async function saveWebsocketTriggerFromCfg(initialPath, triggerCfg, edit,
|
|
|
10
19
|
filters: triggerCfg.filters,
|
|
11
20
|
initial_messages: triggerCfg.initial_messages,
|
|
12
21
|
url_runnable_args: triggerCfg.url_runnable_args,
|
|
13
|
-
can_return_message: triggerCfg.can_return_message
|
|
22
|
+
can_return_message: triggerCfg.can_return_message,
|
|
23
|
+
...errorHandlerAndRetries
|
|
14
24
|
};
|
|
15
25
|
try {
|
|
16
26
|
if (edit) {
|
|
@@ -160,8 +160,6 @@ async function onAiProviderChange(provider) {
|
|
|
160
160
|
{#if aiProviders[provider]}
|
|
161
161
|
<div class="mb-4 flex flex-col gap-2">
|
|
162
162
|
<div class="flex flex-row gap-1">
|
|
163
|
-
<!-- this can be removed once the parent component moves to runes -->
|
|
164
|
-
<!-- svelte-ignore binding_property_non_reactive -->
|
|
165
163
|
<ResourcePicker
|
|
166
164
|
selectFirst
|
|
167
165
|
resourceType={provider === 'openai' && usingOpenaiClientCredentialsOauth
|