windmill-components 1.531.1 → 1.537.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/components/ArgInput.svelte +69 -19
- package/package/components/Auth0Setting.svelte +8 -3
- package/package/components/Dev.svelte +5 -4
- package/package/components/DiffDrawer.svelte +2 -2
- package/package/components/DiffEditor.svelte +34 -37
- package/package/components/DiffEditor.svelte.d.ts +23 -39
- package/package/components/EditableSchemaForm.svelte +67 -67
- package/package/components/EditableSchemaForm.svelte.d.ts +3 -3
- package/package/components/Editor.svelte +32 -11
- package/package/components/Editor.svelte.d.ts +6 -0
- package/package/components/EditorBar.svelte +2 -2
- package/package/components/EditorBar.svelte.d.ts +1 -0
- package/package/components/FieldHeader.svelte +1 -1
- package/package/components/FlowBuilder.svelte +7 -4
- package/package/components/FlowPreviewContent.svelte +3 -3
- package/package/components/FlowStatusViewer.svelte +28 -0
- package/package/components/FlowStatusViewerInner.svelte +72 -20
- package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
- package/package/components/ModulePreview.svelte +2 -1
- package/package/components/ModulePreview.svelte.d.ts +1 -0
- package/package/components/ModulePreviewForm.svelte +72 -65
- package/package/components/ModulePreviewResultViewer.svelte +13 -18
- package/package/components/ModuleTest.svelte +10 -6
- package/package/components/ModuleTest.svelte.d.ts +1 -0
- package/package/components/OktaSetting.svelte +8 -3
- package/package/components/Portal.svelte +11 -7
- package/package/components/Portal.svelte.d.ts +19 -39
- package/package/components/ResourceEditor.svelte +4 -0
- package/package/components/RunForm.svelte +2 -2
- package/package/components/RunForm.svelte.d.ts +1 -1
- package/package/components/RunFormAdvancedPopup.svelte +13 -1
- package/package/components/SchemaForm.svelte +1 -2
- package/package/components/ScriptBuilder.svelte +1 -1
- package/package/components/ScriptEditor.svelte +22 -7
- package/package/components/SimpleEditor.svelte +0 -1
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/apps/components/layout/AppModal.svelte +2 -2
- package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
- package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
- package/package/components/common/button/model.d.ts +1 -1
- package/package/components/common/drawer/Disposable.svelte +51 -30
- package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
- package/package/components/common/drawer/Drawer.svelte +15 -11
- package/package/components/copilot/FlowInlineScriptAIButton.svelte +4 -2
- package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +4 -1
- package/package/components/copilot/MetadataGen.svelte +14 -3
- package/package/components/copilot/autocomplete/Autocompletor.js +0 -2
- package/package/components/copilot/chat/AIChat.svelte +2 -4
- package/package/components/copilot/chat/AIChatInput.svelte +3 -3
- package/package/components/copilot/chat/AIChatManager.svelte.js +24 -12
- package/package/components/copilot/chat/AvailableContextList.svelte +243 -26
- package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -1
- package/package/components/copilot/chat/ContextElementBadge.svelte +31 -15
- package/package/components/copilot/chat/ContextElementBadge.svelte.d.ts +5 -20
- package/package/components/copilot/chat/ContextManager.svelte.d.ts +15 -2
- package/package/components/copilot/chat/ContextManager.svelte.js +134 -24
- package/package/components/copilot/chat/ContextTextarea.svelte +22 -49
- package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
- package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
- package/package/components/copilot/chat/context.d.ts +19 -1
- package/package/components/copilot/chat/context.js +1 -0
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +109 -7
- package/package/components/copilot/chat/flow/core.d.ts +13 -1
- package/package/components/copilot/chat/flow/core.js +171 -19
- package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
- package/package/components/copilot/chat/flow/uiIntents.js +5 -0
- package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
- package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
- package/package/components/copilot/chat/monaco-adapter.d.ts +22 -4
- package/package/components/copilot/chat/monaco-adapter.js +55 -16
- package/package/components/copilot/chat/script/core.d.ts +2 -2
- package/package/components/copilot/chat/script/core.js +54 -124
- package/package/components/copilot/chat/shared.d.ts +14 -2
- package/package/components/copilot/chat/shared.js +170 -7
- package/package/components/copilot/lib.js +12 -7
- package/package/components/copilot/shared.d.ts +1 -1
- package/package/components/copilot/shared.js +16 -10
- package/package/components/flows/FlowEditor.svelte +15 -1
- package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
- package/package/components/flows/FlowModuleIcon.svelte +39 -0
- package/package/components/flows/FlowModuleIcon.svelte.d.ts +10 -0
- package/package/components/flows/common/FlowCardHeader.svelte +4 -1
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
- package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
- package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowInput.svelte +31 -34
- package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowLoop.svelte +7 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +39 -44
- package/package/components/flows/content/FlowModuleScript.svelte +1 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +16 -18
- package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
- package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
- package/package/components/flows/dfs.d.ts +1 -1
- package/package/components/flows/dfs.js +6 -6
- package/package/components/flows/flowInfers.js +7 -7
- package/package/components/flows/flowStateUtils.svelte.js +1 -2
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -26
- package/package/components/flows/map/MapItem.svelte +12 -39
- package/package/components/flows/map/VirtualItem.svelte +1 -1
- package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
- package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
- package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
- package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
- package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
- package/package/components/flows/types.d.ts +16 -3
- package/package/components/flows/utils.js +3 -0
- package/package/components/graph/FlowGraphV2.svelte +1 -1
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
- package/package/components/propertyPicker/ObjectViewer.svelte +11 -3
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
- package/package/components/schema/AddPropertyV2.svelte +2 -7
- package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
- package/package/components/schema/EditableSchemaDrawer.svelte +109 -115
- package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
- package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
- package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
- package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
- package/package/components/schema/FlowPropertyEditor.svelte +83 -57
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/SchemaFormDND.svelte +11 -10
- package/package/components/schema/SchemaFormDND.svelte.d.ts +3 -2
- package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
- package/package/components/schema/jsonSchemaResource.svelte.d.ts +2 -0
- package/package/components/schema/jsonSchemaResource.svelte.js +40 -0
- package/package/components/settings/PremiumInfo.svelte +7 -2
- package/package/components/triggers/CaptureWrapper.svelte +2 -13
- package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
- package/package/components/triggers/TriggersWrapper.svelte +1 -0
- package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
- package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
- package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
- package/package/hubPaths.json +3 -1
- package/package/script_helpers.d.ts +2 -2
- package/package/script_helpers.js +2 -0
- package/package/stores.d.ts +1 -0
- package/package/stores.js +8 -1
- package/package/utils.d.ts +1 -1
- package/package.json +14 -14
- package/package/components/ModulePreviewResultViewer.svelte.d.ts +0 -28
|
@@ -13,8 +13,10 @@ import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
|
|
|
13
13
|
import Button from '../common/button/Button.svelte';
|
|
14
14
|
import { Pen, Plus, Trash2 } from 'lucide-svelte';
|
|
15
15
|
import Popover from '../meltComponents/Popover.svelte';
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
import ResourcePicker from '../ResourcePicker.svelte';
|
|
17
|
+
import Tooltip from '../Tooltip.svelte';
|
|
18
|
+
let { format = $bindable(undefined), contentEncoding = undefined, type = undefined, oneOf = $bindable(undefined), required = false, pattern = undefined, password = undefined, variableEditor = undefined, itemPicker = undefined, nullable = $bindable(undefined), disabled = $bindable(undefined), defaultValue = $bindable(undefined), propsNames = [], showExpr = $bindable(undefined), extra = {}, customErrorMessage = undefined, itemsType = undefined, properties = $bindable(undefined), order = $bindable(undefined), requiredProperty = $bindable(undefined), displayWebhookWarning = true, onDrawerClose = undefined } = $props();
|
|
19
|
+
let oneOfSelected = $state(oneOf?.[0]?.title);
|
|
18
20
|
const dispatch = createEventDispatcher();
|
|
19
21
|
function getResourceTypesFromFormat(format) {
|
|
20
22
|
if (format?.startsWith('resource-')) {
|
|
@@ -56,8 +58,15 @@ function renameVariant(name, selected) {
|
|
|
56
58
|
variantName = '';
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
|
-
let initialObjectSelected = $state(
|
|
61
|
+
let initialObjectSelected = $state(format === 'json-schema'
|
|
62
|
+
? 'json-schema'
|
|
63
|
+
: format?.startsWith('jsonschema-')
|
|
64
|
+
? 'custom-object'
|
|
65
|
+
: Object.keys(properties ?? {}).length == 0
|
|
66
|
+
? 'resource'
|
|
67
|
+
: 'custom-object');
|
|
60
68
|
let isDynSelect = $derived(format?.startsWith('dynselect-') ?? false);
|
|
69
|
+
let customObjectSelected = $state(format?.startsWith('jsonschema-') ? 'json-schema-resource' : 'editor');
|
|
61
70
|
</script>
|
|
62
71
|
|
|
63
72
|
<div class="flex flex-col gap-2">
|
|
@@ -180,81 +189,98 @@ let isDynSelect = $derived(format?.startsWith('dynselect-') ?? false);
|
|
|
180
189
|
{#if oneOfSelected && oneOf}
|
|
181
190
|
{@const idx = oneOf.findIndex((obj) => obj.title === oneOfSelected)}
|
|
182
191
|
<EditableSchemaDrawer
|
|
183
|
-
|
|
184
|
-
()
|
|
185
|
-
if (oneOf?.[idx]) {
|
|
186
|
-
let properties = Object.fromEntries(
|
|
187
|
-
Object.entries(oneOf[idx].properties ?? {}).filter(
|
|
188
|
-
([k]) => k !== 'label' && k !== 'kind'
|
|
189
|
-
)
|
|
190
|
-
)
|
|
191
|
-
return {
|
|
192
|
-
...oneOf[idx],
|
|
193
|
-
properties: properties,
|
|
194
|
-
order: Object.keys(properties),
|
|
195
|
-
required: oneOf[idx].required ?? []
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
(v) => {
|
|
200
|
-
if (oneOf?.[idx]) {
|
|
201
|
-
const tagKey = oneOf?.find((o) => Object.keys(o.properties ?? {}).includes('kind'))
|
|
202
|
-
? 'kind'
|
|
203
|
-
: 'label'
|
|
204
|
-
oneOf[idx] = {
|
|
205
|
-
...(v ?? {}),
|
|
206
|
-
type: 'object',
|
|
207
|
-
properties: {
|
|
208
|
-
...(v?.properties ?? {}),
|
|
209
|
-
[tagKey]: {
|
|
210
|
-
type: 'string',
|
|
211
|
-
enum: [v?.title ?? '']
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
on:change={() => {
|
|
219
|
-
dispatch('schemaChange')
|
|
192
|
+
onClose={() => {
|
|
193
|
+
onDrawerClose?.()
|
|
220
194
|
}}
|
|
195
|
+
bind:schema={oneOf[idx]}
|
|
196
|
+
hiddenArgs={[
|
|
197
|
+
oneOf?.find((o) => Object.keys(o.properties ?? {}).includes('kind')) ? 'kind' : 'label'
|
|
198
|
+
]}
|
|
221
199
|
/>
|
|
222
200
|
{/if}
|
|
223
201
|
{:else if type === 'object' && format !== 'resource-s3_object' && !isDynSelect}
|
|
224
202
|
<Tabs
|
|
225
203
|
bind:selected={initialObjectSelected}
|
|
226
204
|
on:selected={(e) => {
|
|
227
|
-
if (e.detail === '
|
|
205
|
+
if (e.detail === 'json-schema') {
|
|
206
|
+
format = 'json-schema'
|
|
207
|
+
} else {
|
|
228
208
|
format = ''
|
|
229
209
|
}
|
|
230
210
|
}}
|
|
231
211
|
>
|
|
232
212
|
<Tab value="resource">Resource</Tab>
|
|
233
213
|
<Tab value="custom-object">Custom Object</Tab>
|
|
214
|
+
<Tab value="json-schema">
|
|
215
|
+
JSON Schema
|
|
216
|
+
<Tooltip>
|
|
217
|
+
This displays a JSON schema editor, useful when a JSON schema input is expected.
|
|
218
|
+
</Tooltip>
|
|
219
|
+
</Tab>
|
|
234
220
|
{#snippet content()}
|
|
235
221
|
<div class="pt-2">
|
|
236
222
|
<TabContent value="custom-object">
|
|
237
|
-
<
|
|
238
|
-
bind:
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
223
|
+
<ToggleButtonGroup
|
|
224
|
+
bind:selected={customObjectSelected}
|
|
225
|
+
class="mb-2"
|
|
226
|
+
on:selected={(e) => {
|
|
227
|
+
if (e.detail === 'editor') {
|
|
228
|
+
format = undefined
|
|
229
|
+
} else {
|
|
230
|
+
properties = undefined
|
|
231
|
+
order = undefined
|
|
232
|
+
requiredProperty = undefined
|
|
233
|
+
}
|
|
234
|
+
}}
|
|
235
|
+
>
|
|
236
|
+
{#snippet children({ item })}
|
|
237
|
+
<ToggleButton value="editor" label="Editor" {item} />
|
|
238
|
+
<ToggleButton
|
|
239
|
+
value="json-schema-resource"
|
|
240
|
+
label="JSON Schema Resource"
|
|
241
|
+
{item}
|
|
242
|
+
tooltip="Select a JSON schema resource to specify the object's properties"
|
|
243
|
+
showTooltipIcon
|
|
244
|
+
/>
|
|
245
|
+
{/snippet}
|
|
246
|
+
</ToggleButtonGroup>
|
|
247
|
+
{#if customObjectSelected === 'editor'}
|
|
248
|
+
<EditableSchemaDrawer
|
|
249
|
+
bind:schema={
|
|
250
|
+
() => {
|
|
251
|
+
return {
|
|
252
|
+
properties: properties,
|
|
253
|
+
order: order,
|
|
254
|
+
required: requiredProperty
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
(v) => {
|
|
258
|
+
properties = v.properties
|
|
259
|
+
order = v.order
|
|
260
|
+
requiredProperty = v.required
|
|
244
261
|
}
|
|
245
|
-
},
|
|
246
|
-
(v) => {
|
|
247
|
-
properties = v.properties
|
|
248
|
-
order = v.order
|
|
249
|
-
requiredProperty = v.required
|
|
250
|
-
dispatch('schemaChange')
|
|
251
262
|
}
|
|
252
|
-
|
|
253
|
-
|
|
263
|
+
/>
|
|
264
|
+
{:else if customObjectSelected === 'json-schema-resource'}
|
|
265
|
+
<ResourcePicker
|
|
266
|
+
resourceType="json_schema"
|
|
267
|
+
bind:value={
|
|
268
|
+
() => {
|
|
269
|
+
if (format?.startsWith('jsonschema-')) {
|
|
270
|
+
return format.substring('jsonschema-'.length)
|
|
271
|
+
}
|
|
272
|
+
return undefined
|
|
273
|
+
},
|
|
274
|
+
(v) => {
|
|
275
|
+
format = 'jsonschema-' + v
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/>
|
|
279
|
+
{/if}
|
|
254
280
|
</TabContent>
|
|
255
281
|
|
|
256
282
|
<TabContent value="resource">
|
|
257
|
-
<ObjectTypeNarrowing
|
|
283
|
+
<ObjectTypeNarrowing bind:format />
|
|
258
284
|
</TabContent>
|
|
259
285
|
</div>
|
|
260
286
|
{/snippet}
|
|
@@ -28,6 +28,7 @@ interface Props {
|
|
|
28
28
|
order?: string[] | undefined;
|
|
29
29
|
requiredProperty?: string[] | undefined;
|
|
30
30
|
displayWebhookWarning?: boolean;
|
|
31
|
+
onDrawerClose?: () => void;
|
|
31
32
|
}
|
|
32
33
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
33
34
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -43,7 +44,6 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
|
|
|
43
44
|
z_$$bindings?: Bindings;
|
|
44
45
|
}
|
|
45
46
|
declare const FlowPropertyEditor: $$__sveltets_2_IsomorphicComponent<Props, {
|
|
46
|
-
schemaChange: CustomEvent<any>;
|
|
47
47
|
requiredChange: CustomEvent<any>;
|
|
48
48
|
} & {
|
|
49
49
|
[evt: string]: CustomEvent<any>;
|
|
@@ -46,6 +46,6 @@ declare const PropertyEditor: $$__sveltets_2_IsomorphicComponent<Props, {
|
|
|
46
46
|
[evt: string]: CustomEvent<any>;
|
|
47
47
|
}, {}, {
|
|
48
48
|
focus: () => void;
|
|
49
|
-
}, "description" | "title" | "properties" | "placeholder" | "pattern" | "extra" | "oneOf" | "format" | "order" | "enum_" | "contentEncoding" | "
|
|
49
|
+
}, "description" | "title" | "properties" | "placeholder" | "pattern" | "extra" | "oneOf" | "format" | "order" | "enum_" | "contentEncoding" | "customErrorMessage" | "itemsType">;
|
|
50
50
|
type PropertyEditor = InstanceType<typeof PropertyEditor>;
|
|
51
51
|
export default PropertyEditor;
|
|
@@ -3,7 +3,8 @@ import { dragHandle } from '@windmill-labs/svelte-dnd-action';
|
|
|
3
3
|
import SchemaForm from '../SchemaForm.svelte';
|
|
4
4
|
import { GripVertical } from 'lucide-svelte';
|
|
5
5
|
import { deepEqual } from 'fast-equals';
|
|
6
|
-
|
|
6
|
+
import { generateRandomString } from '../../utils';
|
|
7
|
+
let { schema = $bindable(), args = $bindable(undefined), prettifyHeader = false, onlyMaskPassword = false, disablePortal = false, disabled = false, hiddenArgs = [], nestedParent = undefined, disableDnd = false, shouldDispatchChanges = false, helperScript = undefined, diff = {}, nestedClasses = '', isValid = $bindable(true), noVariablePicker = false, className = '', dndType = generateRandomString() } = $props();
|
|
7
8
|
$effect.pre(() => {
|
|
8
9
|
if (args == undefined) {
|
|
9
10
|
args = {};
|
|
@@ -12,9 +13,9 @@ $effect.pre(() => {
|
|
|
12
13
|
const dispatch = createEventDispatcher();
|
|
13
14
|
const flipDurationMs = 200;
|
|
14
15
|
let items = $state(computeItems());
|
|
15
|
-
let
|
|
16
|
+
let dragDisabledState = $state(true);
|
|
16
17
|
function computeItems() {
|
|
17
|
-
return ((schema?.order ?? Object.keys(schema?.properties ?? {}) ?? []).map((key) => ({
|
|
18
|
+
return (($state.snapshot(schema?.order) ?? Object.keys(schema?.properties ?? {}) ?? []).map((key) => ({
|
|
18
19
|
id: key,
|
|
19
20
|
value: key
|
|
20
21
|
})) ?? []);
|
|
@@ -26,20 +27,19 @@ function updateItems() {
|
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
function handleConsider(e) {
|
|
29
|
-
|
|
30
|
+
dragDisabledState = false;
|
|
30
31
|
const { items: newItems } = e.detail;
|
|
31
|
-
items = newItems;
|
|
32
|
+
items = $state.snapshot(newItems);
|
|
32
33
|
}
|
|
33
34
|
function handleFinalize(e) {
|
|
34
35
|
const { items: newItems } = e.detail;
|
|
35
|
-
|
|
36
|
-
items = newItems;
|
|
36
|
+
dragDisabledState = true;
|
|
37
|
+
items = $state.snapshot(newItems);
|
|
37
38
|
const newOrder = items.map((item) => item.value);
|
|
38
|
-
// console.log('handleFinalize', newOrder, e.detail)
|
|
39
39
|
dispatch('reorder', newOrder);
|
|
40
40
|
}
|
|
41
41
|
$effect(() => {
|
|
42
|
-
schema &&
|
|
42
|
+
schema && dragDisabledState && untrack(() => updateItems());
|
|
43
43
|
});
|
|
44
44
|
</script>
|
|
45
45
|
|
|
@@ -67,6 +67,7 @@ $effect(() => {
|
|
|
67
67
|
{disablePortal}
|
|
68
68
|
{disabled}
|
|
69
69
|
{helperScript}
|
|
70
|
+
{className}
|
|
70
71
|
bind:schema
|
|
71
72
|
dndConfig={disableDnd
|
|
72
73
|
? undefined
|
|
@@ -74,7 +75,7 @@ $effect(() => {
|
|
|
74
75
|
items,
|
|
75
76
|
flipDurationMs,
|
|
76
77
|
dropTargetStyle: {},
|
|
77
|
-
type: dndType
|
|
78
|
+
type: dndType
|
|
78
79
|
}}
|
|
79
80
|
{items}
|
|
80
81
|
{diff}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { Schema } from '../../common';
|
|
2
2
|
import type { SchemaDiff } from './schemaUtils.svelte';
|
|
3
|
-
import type
|
|
3
|
+
import { type DynamicSelect } from '../../utils';
|
|
4
4
|
interface Props {
|
|
5
|
-
dndType?: string | undefined;
|
|
6
5
|
schema: Schema;
|
|
7
6
|
args?: Record<string, any>;
|
|
8
7
|
prettifyHeader?: boolean;
|
|
@@ -21,6 +20,8 @@ interface Props {
|
|
|
21
20
|
isValid?: boolean;
|
|
22
21
|
noVariablePicker?: boolean;
|
|
23
22
|
helperScript?: DynamicSelect.HelperScript;
|
|
23
|
+
className?: string;
|
|
24
|
+
dndType?: string;
|
|
24
25
|
}
|
|
25
26
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
26
27
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { AppService } from '../../gen';
|
|
3
|
+
import { sendUserToast } from '../../utils';
|
|
4
|
+
let loadedJsonSchemaResources = $state({});
|
|
5
|
+
const jsonSchemaResourceSchema = z.object({
|
|
6
|
+
schema: z.record(z.string(), z.any())
|
|
7
|
+
});
|
|
8
|
+
export async function getJsonSchemaFromResource(path, workspace) {
|
|
9
|
+
if (loadedJsonSchemaResources[workspace]?.[path]) {
|
|
10
|
+
return loadedJsonSchemaResources[workspace][path];
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
const resourceValue = await AppService.getPublicResource({
|
|
14
|
+
path,
|
|
15
|
+
workspace
|
|
16
|
+
});
|
|
17
|
+
const parsedResource = jsonSchemaResourceSchema.safeParse(resourceValue);
|
|
18
|
+
if (parsedResource.success) {
|
|
19
|
+
const workspaceResources = loadedJsonSchemaResources[workspace];
|
|
20
|
+
if (!workspaceResources) {
|
|
21
|
+
loadedJsonSchemaResources[workspace] = {};
|
|
22
|
+
}
|
|
23
|
+
loadedJsonSchemaResources[workspace][path] = parsedResource.data.schema;
|
|
24
|
+
return parsedResource.data.schema;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
console.error('Invalid JSON schema resource:', parsedResource.error);
|
|
28
|
+
sendUserToast('Invalid JSON schema resource: ' + parsedResource.error, true);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
console.error(err);
|
|
33
|
+
sendUserToast('Could not load JSON schema resource: ' + err, true);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export async function clearJsonSchemaResourceCache(path, workspace) {
|
|
37
|
+
if (loadedJsonSchemaResources[workspace]?.[path]) {
|
|
38
|
+
delete loadedJsonSchemaResources[workspace][path];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -126,8 +126,13 @@ $: estimatedSeats && updateExecs();
|
|
|
126
126
|
</div>
|
|
127
127
|
{#if premiumInfo?.status === 'past_due'}
|
|
128
128
|
<p class="text-red-500 text-base">
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
{#if premiumInfo.max_tolerated_executions === undefined || premiumInfo.usage > premiumInfo.max_tolerated_executions}
|
|
130
|
+
Your last invoice is unpaid, you cannot run any more jobs. Please update your payment
|
|
131
|
+
method in the customer portal to continue running jobs.
|
|
132
|
+
{:else}
|
|
133
|
+
Your last invoice is unpaid. Please update your payment method in the customer portal to
|
|
134
|
+
prevent the interruption of your job executions.
|
|
135
|
+
{/if}
|
|
131
136
|
</p>
|
|
132
137
|
{/if}
|
|
133
138
|
</div>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">import { workspaceStore } from '../../stores';
|
|
2
2
|
import { CaptureService } from '../../gen';
|
|
3
3
|
import { onDestroy, untrack } from 'svelte';
|
|
4
|
-
import {
|
|
4
|
+
import { sendUserToast, sleep } from '../../utils';
|
|
5
5
|
import RouteCapture from './http/RouteCapture.svelte';
|
|
6
6
|
import WebhooksCapture from './webhook/WebhooksCapture.svelte';
|
|
7
7
|
import EmailTriggerCaptures from '../details/EmailTriggerCaptures.svelte';
|
|
@@ -12,7 +12,7 @@ import NatsCapture from './nats/NatsCapture.svelte';
|
|
|
12
12
|
import MqttCapture from './mqtt/MqttCapture.svelte';
|
|
13
13
|
import SqsCapture from './sqs/SqsCapture.svelte';
|
|
14
14
|
import GcpCapture from './gcp/GcpCapture.svelte';
|
|
15
|
-
let { isFlow, path, hasPreprocessor, canHavePreprocessor, captureType = 'webhook', data = {}, connectionInfo = $bindable(undefined), args =
|
|
15
|
+
let { isFlow, path, hasPreprocessor, canHavePreprocessor, captureType = 'webhook', data = {}, connectionInfo = $bindable(undefined), args = {}, isValid = false, triggerDeployed = false } = $props();
|
|
16
16
|
let captureLoading = $state(false);
|
|
17
17
|
let captureActive = $state(false);
|
|
18
18
|
let captureConfigs = $state({});
|
|
@@ -64,7 +64,6 @@ async function getCaptureConfigs() {
|
|
|
64
64
|
}
|
|
65
65
|
return captureConfigs;
|
|
66
66
|
}
|
|
67
|
-
getCaptureConfigs().then((captureConfigs) => setDefaultArgs(captureConfigs));
|
|
68
67
|
async function capture() {
|
|
69
68
|
let i = 0;
|
|
70
69
|
captureActive = true;
|
|
@@ -82,16 +81,6 @@ async function capture() {
|
|
|
82
81
|
await sleep(1000);
|
|
83
82
|
}
|
|
84
83
|
}
|
|
85
|
-
function setDefaultArgs(captureConfigs) {
|
|
86
|
-
if (captureType in captureConfigs) {
|
|
87
|
-
const triggerConfig = captureConfigs[captureType].trigger_config;
|
|
88
|
-
args = isObject(triggerConfig) ? triggerConfig : {};
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
args = {};
|
|
92
|
-
}
|
|
93
|
-
ready = true;
|
|
94
|
-
}
|
|
95
84
|
onDestroy(() => {
|
|
96
85
|
captureActive = false;
|
|
97
86
|
});
|
|
@@ -37,6 +37,6 @@ declare const CaptureWrapper: $$__sveltets_2_IsomorphicComponent<Props, {
|
|
|
37
37
|
handleCapture: (e: CustomEvent<{
|
|
38
38
|
disableOnly?: boolean;
|
|
39
39
|
}>) => Promise<void>;
|
|
40
|
-
}, "
|
|
40
|
+
}, "connectionInfo">;
|
|
41
41
|
type CaptureWrapper = InstanceType<typeof CaptureWrapper>;
|
|
42
42
|
export default CaptureWrapper;
|
|
@@ -43,6 +43,7 @@ let { selectedTrigger, isFlow = false, initialPath, fakeInitialPath, currentPath
|
|
|
43
43
|
scopes={isFlow ? [`jobs:run:flows:${currentPath}`] : [`jobs:run:scripts:${currentPath}`]}
|
|
44
44
|
path={initialPath || fakeInitialPath}
|
|
45
45
|
{isFlow}
|
|
46
|
+
{hash}
|
|
46
47
|
on:email-domain
|
|
47
48
|
/>
|
|
48
49
|
{:else if selectedTrigger.type === 'schedule'}
|
|
@@ -36,11 +36,11 @@ let drawerLoading = $state(true);
|
|
|
36
36
|
let showLoading = $state(false);
|
|
37
37
|
let defaultValues = $state(undefined);
|
|
38
38
|
let natsResourcePath = $state('');
|
|
39
|
-
let subjects = $state(['']);
|
|
40
|
-
let useJetstream = $state(false);
|
|
41
|
-
let streamName = $state('');
|
|
42
|
-
let consumerName = $state('');
|
|
43
39
|
let initialConfig = undefined;
|
|
40
|
+
let natsCfg = $state({
|
|
41
|
+
subjects: [],
|
|
42
|
+
use_jetstream: false
|
|
43
|
+
});
|
|
44
44
|
let deploymentLoading = $state(false);
|
|
45
45
|
let isValid = $state(false);
|
|
46
46
|
let optionTabSelected = $state('error_handler');
|
|
@@ -90,10 +90,13 @@ export async function openNew(nis_flow, fixedScriptPath_, nDefaultValues) {
|
|
|
90
90
|
edit = false;
|
|
91
91
|
itemKind = nis_flow ? 'flow' : 'script';
|
|
92
92
|
natsResourcePath = nDefaultValues?.nats_resource_path ?? '';
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
const useJetstream = nDefaultValues?.use_jetstream ?? false;
|
|
94
|
+
natsCfg = {
|
|
95
|
+
subjects: nDefaultValues?.subjects ?? [''],
|
|
96
|
+
use_jetstream: useJetstream,
|
|
97
|
+
stream_name: useJetstream ? (nDefaultValues?.stream_name ?? '') : undefined,
|
|
98
|
+
consumer_name: useJetstream ? (nDefaultValues?.consumer_name ?? '') : undefined
|
|
99
|
+
};
|
|
97
100
|
initialScriptPath = '';
|
|
98
101
|
fixedScriptPath = fixedScriptPath_ ?? '';
|
|
99
102
|
script_path = fixedScriptPath;
|
|
@@ -119,10 +122,13 @@ async function loadTriggerConfig(cfg) {
|
|
|
119
122
|
is_flow = cfg?.is_flow;
|
|
120
123
|
path = cfg?.path;
|
|
121
124
|
natsResourcePath = cfg?.nats_resource_path;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
125
|
+
const useJetstream = cfg?.use_jetstream || false;
|
|
126
|
+
natsCfg = {
|
|
127
|
+
subjects: cfg?.subjects || [''],
|
|
128
|
+
use_jetstream: useJetstream,
|
|
129
|
+
stream_name: useJetstream ? cfg?.stream_name || '' : undefined,
|
|
130
|
+
consumer_name: useJetstream ? cfg?.consumer_name || '' : undefined
|
|
131
|
+
};
|
|
126
132
|
enabled = cfg?.enabled;
|
|
127
133
|
can_write = canWrite(cfg?.path, cfg?.extra_perms, $userStore);
|
|
128
134
|
error_handler_path = cfg?.error_handler_path;
|
|
@@ -150,10 +156,10 @@ function getSaveCfg() {
|
|
|
150
156
|
is_flow,
|
|
151
157
|
enabled,
|
|
152
158
|
nats_resource_path: natsResourcePath,
|
|
153
|
-
stream_name:
|
|
154
|
-
consumer_name:
|
|
155
|
-
subjects,
|
|
156
|
-
use_jetstream:
|
|
159
|
+
stream_name: natsCfg.stream_name,
|
|
160
|
+
consumer_name: natsCfg.consumer_name,
|
|
161
|
+
subjects: natsCfg.subjects,
|
|
162
|
+
use_jetstream: natsCfg.use_jetstream,
|
|
157
163
|
error_handler_path,
|
|
158
164
|
error_handler_args,
|
|
159
165
|
retry
|
|
@@ -325,10 +331,7 @@ $effect(() => {
|
|
|
325
331
|
<NatsTriggersConfigSection
|
|
326
332
|
{path}
|
|
327
333
|
bind:natsResourcePath
|
|
328
|
-
bind:
|
|
329
|
-
bind:useJetstream
|
|
330
|
-
bind:streamName
|
|
331
|
-
bind:consumerName
|
|
334
|
+
bind:natsCfg
|
|
332
335
|
on:valid-config={({ detail }) => {
|
|
333
336
|
isValid = detail
|
|
334
337
|
}}
|
|
@@ -5,11 +5,11 @@ import ResourcePicker from '../../ResourcePicker.svelte';
|
|
|
5
5
|
import SchemaForm from '../../SchemaForm.svelte';
|
|
6
6
|
import TestTriggerConnection from '../TestTriggerConnection.svelte';
|
|
7
7
|
import TestingBadge from '../testingBadge.svelte';
|
|
8
|
-
import { createEventDispatcher } from 'svelte';
|
|
8
|
+
import { createEventDispatcher, untrack } from 'svelte';
|
|
9
9
|
const dispatch = createEventDispatcher();
|
|
10
|
-
let { defaultValues = undefined, headless = false, natsResourcePath = $bindable(),
|
|
10
|
+
let { defaultValues = undefined, headless = false, natsResourcePath = $bindable(), natsCfg = $bindable(), path, can_write = true, showTestingBadge = false } = $props();
|
|
11
11
|
let otherArgsValid = $state(false);
|
|
12
|
-
let globalError = $derived(!
|
|
12
|
+
let globalError = $derived(!natsCfg.use_jetstream && natsCfg.subjects && natsCfg.subjects.length > 1
|
|
13
13
|
? 'Only one subject is supported if not using JetStream.'
|
|
14
14
|
: '');
|
|
15
15
|
let isConnectionValid = $derived(!!natsResourcePath);
|
|
@@ -55,37 +55,25 @@ const argsSchema = {
|
|
|
55
55
|
$effect(() => {
|
|
56
56
|
const valid = isConnectionValid &&
|
|
57
57
|
otherArgsValid &&
|
|
58
|
-
!!subjects &&
|
|
59
|
-
subjects.length > 0 &&
|
|
60
|
-
subjects.every((b) => /^[a-zA-Z0-9-_.*>]+$/.test(b)) &&
|
|
58
|
+
!!natsCfg.subjects &&
|
|
59
|
+
natsCfg.subjects.length > 0 &&
|
|
60
|
+
natsCfg.subjects.every((b) => /^[a-zA-Z0-9-_.*>]+$/.test(b)) &&
|
|
61
61
|
globalError === '';
|
|
62
62
|
dispatch('valid-config', valid);
|
|
63
63
|
});
|
|
64
64
|
function setStreamAndConsumerNames() {
|
|
65
|
-
if (!
|
|
66
|
-
|
|
65
|
+
if (!natsCfg.stream_name) {
|
|
66
|
+
natsCfg.stream_name = `windmill_stream-${$workspaceStore}-${path.replaceAll('/', '__')}`;
|
|
67
67
|
}
|
|
68
|
-
if (!
|
|
69
|
-
|
|
68
|
+
if (!natsCfg.consumer_name) {
|
|
69
|
+
natsCfg.consumer_name = `windmill_consumer-${$workspaceStore}-${path.replaceAll('/', '__')}`;
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
streamName = args.stream_name;
|
|
76
|
-
consumerName = args.consumer_name;
|
|
77
|
-
if (args.use_jetstream) {
|
|
78
|
-
setStreamAndConsumerNames();
|
|
72
|
+
$effect(() => {
|
|
73
|
+
if (natsCfg.use_jetstream) {
|
|
74
|
+
untrack(() => setStreamAndConsumerNames());
|
|
79
75
|
}
|
|
80
|
-
}
|
|
81
|
-
function getNatsArgsCfg() {
|
|
82
|
-
return {
|
|
83
|
-
subjects,
|
|
84
|
-
use_jetstream: useJetstream,
|
|
85
|
-
stream_name: streamName,
|
|
86
|
-
consumer_name: consumerName
|
|
87
|
-
};
|
|
88
|
-
}
|
|
76
|
+
});
|
|
89
77
|
</script>
|
|
90
78
|
|
|
91
79
|
<div>
|
|
@@ -121,7 +109,7 @@ function getNatsArgsCfg() {
|
|
|
121
109
|
<Subsection headless={true}>
|
|
122
110
|
<SchemaForm
|
|
123
111
|
schema={argsSchema}
|
|
124
|
-
bind:args={
|
|
112
|
+
bind:args={natsCfg}
|
|
125
113
|
bind:isValid={otherArgsValid}
|
|
126
114
|
lightHeader={true}
|
|
127
115
|
disabled={!can_write}
|
|
@@ -2,10 +2,12 @@ interface Props {
|
|
|
2
2
|
defaultValues?: Record<string, any> | undefined;
|
|
3
3
|
headless?: boolean;
|
|
4
4
|
natsResourcePath: string;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
natsCfg: {
|
|
6
|
+
subjects: string[];
|
|
7
|
+
use_jetstream: boolean;
|
|
8
|
+
stream_name?: string;
|
|
9
|
+
consumer_name?: string;
|
|
10
|
+
};
|
|
9
11
|
path: string;
|
|
10
12
|
can_write?: boolean;
|
|
11
13
|
showTestingBadge?: boolean;
|
|
@@ -27,6 +29,6 @@ declare const NatsTriggersConfigSection: $$__sveltets_2_IsomorphicComponent<Prop
|
|
|
27
29
|
'valid-config': CustomEvent<any>;
|
|
28
30
|
} & {
|
|
29
31
|
[evt: string]: CustomEvent<any>;
|
|
30
|
-
}, {}, {}, "
|
|
32
|
+
}, {}, {}, "natsResourcePath" | "natsCfg">;
|
|
31
33
|
type NatsTriggersConfigSection = InstanceType<typeof NatsTriggersConfigSection>;
|
|
32
34
|
export default NatsTriggersConfigSection;
|
|
@@ -331,8 +331,8 @@ $effect(() => {
|
|
|
331
331
|
</Label>
|
|
332
332
|
</div>
|
|
333
333
|
|
|
334
|
-
{
|
|
335
|
-
|
|
334
|
+
<Section label={hideTarget ? 'Runnable options' : 'Runnable'} class="flex flex-col gap-4">
|
|
335
|
+
{#if !hideTarget}
|
|
336
336
|
<div>
|
|
337
337
|
<p class="text-xs mb-1 text-tertiary">
|
|
338
338
|
Pick a script or flow to be triggered<Required required={true} />
|
|
@@ -363,21 +363,21 @@ $effect(() => {
|
|
|
363
363
|
{/if}
|
|
364
364
|
</div>
|
|
365
365
|
</div>
|
|
366
|
+
{/if}
|
|
366
367
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
{/if}
|
|
368
|
+
<Toggle
|
|
369
|
+
checked={can_return_message}
|
|
370
|
+
on:change={() => {
|
|
371
|
+
can_return_message = !can_return_message
|
|
372
|
+
}}
|
|
373
|
+
options={{
|
|
374
|
+
right: 'Send runnable result',
|
|
375
|
+
rightTooltip:
|
|
376
|
+
'Whether the runnable result should be sent as a message to the websocket server when not null.'
|
|
377
|
+
}}
|
|
378
|
+
disabled={!can_write}
|
|
379
|
+
/>
|
|
380
|
+
</Section>
|
|
381
381
|
|
|
382
382
|
<WebsocketEditorConfigSection
|
|
383
383
|
bind:url
|