You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|**description**|`string`| optional | Human-readable description of what this hook does |
40
+
|**retryPolicy**|`{ maxRetries?: number; backoffMs?: number }`| optional | Retry policy for failed hook executions |
41
+
|**timeoutMs**|`number`| optional | Maximum execution time in milliseconds before the hook is aborted |
42
+
|**timeout**|`never`| optional |[REMOVED]`hook.timeout` was removed in @objectstack/spec 17 — its unit (milliseconds) lived only in the description, beside a body-level `timeoutMs` and a `retryPolicy.backoffMs` that spell theirs, so the same number read as two conventions on one surface. Rename the key to `timeoutMs`; the value (milliseconds) is unchanged. Run `os migrate meta --from 17` to list the mechanical edits for existing sources; apply them by hand. |
|**runAs**|`Enum<'system' \| 'user' \| 'inherit'>`| optional (default: `"inherit"`) | Execution identity for the hook's ctx.api data operations: system = elevated (bypasses RLS), user = the triggering user (RLS-respecting), inherit = the context of the write that fired the hook (the pre-runAs behaviour; the default). A hook with no trigger user has no identity to scope to, so under user its ctx.api data operations are REFUSED — declare system to make the elevation explicit. This covers any hook fired by a write that carried no user (an isSystem plugin/service write; a system-elevated flow node). Scope: ctx.api only — condition evaluation, the readonly strip on ctx.input, ctx.session and async are unchanged. |
|[Automation Protocol](/docs/references/automation)| 13 | 73 | Flows and their nodes, approvals, ETL pipelines, webhooks, state machines, execution records. |
0 commit comments