mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-10-14 08:02:58 +00:00
* fix: strip the script/ prefix from trigger error handler paths Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix: strip the script/ prefix when collecting trigger handler refs Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix: relocate prefixed trigger error handlers on project retarget Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix: reject a prefixed error_handler_path on triggers instead of resolving it Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * docs: describe error_handler_path as a bare script path in the api schema Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
202 lines
5.7 KiB
YAML
202 lines
5.7 KiB
YAML
type: object
|
|
properties:
|
|
script_path:
|
|
type: string
|
|
description: Path to the script or flow to execute when triggered
|
|
is_flow:
|
|
type: boolean
|
|
description: True if script_path points to a flow, false if it points to a script
|
|
labels:
|
|
type: array
|
|
items:
|
|
type: string
|
|
draft_only:
|
|
type: boolean
|
|
description: 'True when this row is a per-user draft with no deployed
|
|
|
|
trigger at the same path. Set by list endpoints when
|
|
|
|
`include_draft_only=true` synthesizes the row from the
|
|
|
|
draft. Frontend renders a "Draft" badge.
|
|
|
|
'
|
|
is_draft:
|
|
type: boolean
|
|
description: 'True when the authed user has a per-user draft at this path
|
|
|
|
(over a deployed row or a synthesized draft-only row).
|
|
|
|
Frontend appends a `*` to the displayed name.
|
|
|
|
'
|
|
url:
|
|
type: string
|
|
description: The WebSocket URL to connect to (can be a static URL or computed
|
|
by a runnable)
|
|
filters:
|
|
type: array
|
|
items:
|
|
oneOf:
|
|
- type: object
|
|
properties:
|
|
key:
|
|
type: string
|
|
value: {}
|
|
required:
|
|
- key
|
|
- value
|
|
- type: object
|
|
properties:
|
|
path:
|
|
type: string
|
|
description: Dotted path into nested objects, e.g. `a.b.c`. Does not traverse
|
|
arrays.
|
|
value: {}
|
|
required:
|
|
- path
|
|
- value
|
|
- type: object
|
|
properties:
|
|
any_of:
|
|
type: array
|
|
items:
|
|
type: object
|
|
required:
|
|
- any_of
|
|
- type: object
|
|
properties:
|
|
all_of:
|
|
type: array
|
|
items:
|
|
type: object
|
|
required:
|
|
- all_of
|
|
- type: object
|
|
properties:
|
|
none_of:
|
|
type: array
|
|
items:
|
|
type: object
|
|
required:
|
|
- none_of
|
|
description: 'Filters to match incoming messages (only matching messages trigger
|
|
the script). Each entry is either a leaf `{key, value}` (top-level field) or
|
|
`{path, value}` (dotted path into nested objects), or a group `{any_of: [...]}`
|
|
/ `{all_of: [...]}` / `{none_of: [...]}` nesting more entries. Entries at the
|
|
top level are combined with `filter_logic`.'
|
|
filter_logic:
|
|
type: string
|
|
enum:
|
|
- and
|
|
- or
|
|
description: Logic to apply when evaluating the top-level filters. 'and' requires
|
|
all of them to match, 'or' requires any of them to match. Nested `any_of`/`all_of`/`none_of`
|
|
groups carry their own logic.
|
|
initial_messages:
|
|
type: array
|
|
items:
|
|
oneOf:
|
|
- type: object
|
|
properties:
|
|
raw_message:
|
|
type: string
|
|
required:
|
|
- raw_message
|
|
- type: object
|
|
properties:
|
|
runnable_result:
|
|
type: object
|
|
properties:
|
|
path:
|
|
type: string
|
|
args:
|
|
type: object
|
|
description: The arguments to pass to the script or flow
|
|
additionalProperties: true
|
|
is_flow:
|
|
type: boolean
|
|
required:
|
|
- path
|
|
- args
|
|
- is_flow
|
|
required:
|
|
- runnable_result
|
|
description: Messages to send immediately after connecting (can be raw strings
|
|
or computed by runnables)
|
|
url_runnable_args:
|
|
type: object
|
|
description: The arguments to pass to the script or flow
|
|
can_return_message:
|
|
type: boolean
|
|
description: If true, the script can return a message to send back through the
|
|
WebSocket
|
|
can_return_error_result:
|
|
type: boolean
|
|
description: If true, error results are sent back through the WebSocket
|
|
heartbeat:
|
|
type: object
|
|
properties:
|
|
interval_secs:
|
|
type: integer
|
|
minimum: 1
|
|
description: Interval in seconds between heartbeat messages
|
|
message:
|
|
type: string
|
|
description: Message to send as heartbeat. Use {{state}} as a placeholder
|
|
for a value extracted from incoming messages (see state_field).
|
|
state_field:
|
|
type: string
|
|
description: Optional. Top-level JSON field to extract from incoming messages.
|
|
The extracted value replaces {{state}} in the heartbeat message.
|
|
error_handler_path:
|
|
type: string
|
|
description: Path to a script to run when the triggered job fails. A bare path,
|
|
without the script/ or flow/ prefix a schedule error handler takes; it cannot
|
|
be a flow.
|
|
error_handler_args:
|
|
type: object
|
|
description: The arguments to pass to the script or flow
|
|
retry:
|
|
type: object
|
|
properties:
|
|
constant:
|
|
type: object
|
|
description: Retry with constant delay between attempts
|
|
properties:
|
|
attempts:
|
|
type: integer
|
|
description: Number of retry attempts
|
|
seconds:
|
|
type: integer
|
|
description: Seconds to wait between retries
|
|
exponential:
|
|
type: object
|
|
description: Retry with exponential backoff (delay doubles each time)
|
|
properties:
|
|
attempts:
|
|
type: integer
|
|
description: Number of retry attempts
|
|
multiplier:
|
|
type: integer
|
|
description: Multiplier for exponential backoff
|
|
seconds:
|
|
type: integer
|
|
minimum: 1
|
|
description: Initial delay in seconds
|
|
random_factor:
|
|
type: integer
|
|
minimum: 0
|
|
maximum: 100
|
|
description: Random jitter percentage (0-100) to avoid thundering herd
|
|
retry_if:
|
|
$ref: '#/components/schemas/RetryIf'
|
|
description: Retry configuration for failed module executions
|
|
required:
|
|
- script_path
|
|
- is_flow
|
|
- url
|
|
- filters
|
|
- can_return_message
|
|
- can_return_error_result
|