@uipath/maestro-builder-sdk 6.18.9 → 6.19.0

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 (111) hide show
  1. package/dist/api-index.md +185 -184
  2. package/dist/api-members.md +504 -473
  3. package/dist/bpmn/uipath-moddle.v1.json +5 -0
  4. package/dist/case/decompile-cli.js +2 -8
  5. package/dist/check.js +177 -650
  6. package/dist/core/actions.d.ts +119 -760
  7. package/dist/core/actions.js +0 -306
  8. package/dist/core/error-port.d.ts +6 -0
  9. package/dist/core/error-port.js +9 -0
  10. package/dist/core/node-classes.d.ts +4 -63
  11. package/dist/core/node-classes.js +0 -112
  12. package/dist/core/nodes/family.d.ts +36 -0
  13. package/dist/core/nodes/family.js +1 -0
  14. package/dist/core/nodes/node-type.d.ts +136 -0
  15. package/dist/core/nodes/node-type.js +1 -0
  16. package/dist/core/nodes/registry.d.ts +57 -0
  17. package/dist/core/nodes/registry.js +122 -0
  18. package/dist/core/nodes/versioned.d.ts +50 -0
  19. package/dist/core/nodes/versioned.js +46 -0
  20. package/dist/core/typed-raw-node.d.ts +13 -62
  21. package/dist/core/typed-raw-node.js +40 -154
  22. package/dist/decompile-cli.js +2 -9
  23. package/dist/decompile.js +92 -271
  24. package/dist/flow-definitions.d.ts +10 -0
  25. package/dist/flow-definitions.js +35 -0
  26. package/dist/flow-node-registry.d.ts +13 -0
  27. package/dist/flow-node-registry.js +19 -0
  28. package/dist/flow-node-type.d.ts +192 -0
  29. package/dist/flow-node-type.js +1 -0
  30. package/dist/flow-sdk.d.ts +7 -0
  31. package/dist/flow-sdk.js +8 -0
  32. package/dist/nodes/data-fabric/flow/check.d.ts +13 -0
  33. package/dist/nodes/data-fabric/flow/check.js +164 -0
  34. package/dist/nodes/data-fabric/flow/factories.d.ts +113 -0
  35. package/dist/nodes/data-fabric/flow/factories.js +134 -0
  36. package/dist/nodes/data-fabric/flow/family.d.ts +7 -0
  37. package/dist/nodes/data-fabric/flow/family.js +9 -0
  38. package/dist/nodes/data-fabric/flow/index.d.ts +8 -0
  39. package/dist/nodes/data-fabric/flow/index.js +8 -0
  40. package/dist/nodes/data-fabric/flow/raw.d.ts +32 -0
  41. package/dist/nodes/data-fabric/flow/raw.js +100 -0
  42. package/dist/nodes/data-fabric/flow/shared.d.ts +77 -0
  43. package/dist/nodes/data-fabric/flow/shared.js +174 -0
  44. package/dist/nodes/data-fabric/flow/spec.d.ts +238 -0
  45. package/dist/nodes/data-fabric/flow/spec.js +1 -0
  46. package/dist/nodes/data-fabric/flow/verbs.d.ts +29 -0
  47. package/dist/nodes/data-fabric/flow/verbs.js +239 -0
  48. package/dist/nodes/delay/flow/check.d.ts +16 -0
  49. package/dist/nodes/delay/flow/check.js +86 -0
  50. package/dist/nodes/delay/flow/factories.d.ts +28 -0
  51. package/dist/nodes/delay/flow/factories.js +38 -0
  52. package/dist/nodes/delay/flow/family.d.ts +3 -0
  53. package/dist/nodes/delay/flow/family.js +8 -0
  54. package/dist/nodes/delay/flow/index.d.ts +3 -0
  55. package/dist/nodes/delay/flow/index.js +3 -0
  56. package/dist/nodes/delay/flow/node-type.d.ts +13 -0
  57. package/dist/nodes/delay/flow/node-type.js +71 -0
  58. package/dist/nodes/delay/flow/spec.d.ts +43 -0
  59. package/dist/nodes/delay/flow/spec.js +16 -0
  60. package/dist/nodes/document/flow/factories.d.ts +27 -0
  61. package/dist/nodes/document/flow/factories.js +30 -0
  62. package/dist/nodes/document/flow/family.d.ts +3 -0
  63. package/dist/nodes/document/flow/family.js +7 -0
  64. package/dist/nodes/document/flow/index.d.ts +3 -0
  65. package/dist/nodes/document/flow/index.js +3 -0
  66. package/dist/nodes/document/flow/node-type.d.ts +14 -0
  67. package/dist/nodes/document/flow/node-type.js +150 -0
  68. package/dist/nodes/document/flow/spec.d.ts +65 -0
  69. package/dist/nodes/document/flow/spec.js +1 -0
  70. package/dist/nodes/mock/flow/factories.d.ts +51 -0
  71. package/dist/nodes/mock/flow/factories.js +47 -0
  72. package/dist/nodes/mock/flow/family.d.ts +3 -0
  73. package/dist/nodes/mock/flow/family.js +7 -0
  74. package/dist/nodes/mock/flow/index.d.ts +2 -0
  75. package/dist/nodes/mock/flow/index.js +2 -0
  76. package/dist/nodes/mock/flow/node-type.d.ts +11 -0
  77. package/dist/nodes/mock/flow/node-type.js +51 -0
  78. package/dist/nodes/script/flow/check.d.ts +19 -0
  79. package/dist/nodes/script/flow/check.js +49 -0
  80. package/dist/nodes/script/flow/factories.d.ts +14 -0
  81. package/dist/nodes/script/flow/factories.js +15 -0
  82. package/dist/nodes/script/flow/family.d.ts +3 -0
  83. package/dist/nodes/script/flow/family.js +8 -0
  84. package/dist/nodes/script/flow/index.d.ts +3 -0
  85. package/dist/nodes/script/flow/index.js +3 -0
  86. package/dist/nodes/script/flow/node-type.d.ts +7 -0
  87. package/dist/nodes/script/flow/node-type.js +125 -0
  88. package/dist/nodes/script/flow/spec.d.ts +52 -0
  89. package/dist/nodes/script/flow/spec.js +1 -0
  90. package/dist/nodes/transform/flow/check.d.ts +6 -0
  91. package/dist/nodes/transform/flow/check.js +229 -0
  92. package/dist/nodes/transform/flow/factories.d.ts +52 -0
  93. package/dist/nodes/transform/flow/factories.js +53 -0
  94. package/dist/nodes/transform/flow/family.d.ts +3 -0
  95. package/dist/nodes/transform/flow/family.js +8 -0
  96. package/dist/nodes/transform/flow/index.d.ts +3 -0
  97. package/dist/nodes/transform/flow/index.js +3 -0
  98. package/dist/nodes/transform/flow/node-type.d.ts +7 -0
  99. package/dist/nodes/transform/flow/node-type.js +244 -0
  100. package/dist/nodes/transform/flow/spec.d.ts +116 -0
  101. package/dist/nodes/transform/flow/spec.js +10 -0
  102. package/dist/raw-node-advice.d.ts +16 -0
  103. package/dist/raw-node-advice.js +36 -0
  104. package/dist/raw-node.d.ts +71 -0
  105. package/dist/raw-node.js +116 -0
  106. package/dist/registry/uip/launch.d.ts +11 -1
  107. package/dist/registry/uip/launch.js +50 -43
  108. package/dist/registry/uip/pipeline-front-door.d.ts +2 -0
  109. package/dist/registry/uip/pipeline-front-door.js +88 -0
  110. package/dist/serialize.js +138 -492
  111. package/package.json +2 -2
@@ -10,7 +10,6 @@
10
10
  import type { Expr } from './expr.js';
11
11
  import type { LookupToken } from './lookups.js';
12
12
  import { type ConnectorDescriptor, type TriggerDescriptor } from './connectors.js';
13
- import type { ScriptReturns } from './script-return.js';
14
13
  /** One conditional response branch on an HTTP node — a designer-visible side exit. */
15
14
  export interface HttpBranch {
16
15
  /**
@@ -146,44 +145,6 @@ export type HttpInputs = HttpInputsBase & ({
146
145
  */
147
146
  targetConnector?: string;
148
147
  });
149
- export interface ScriptInputs {
150
- /** JavaScript body. Must `return` its result. Referenced via out('<step>'). */
151
- code: string;
152
- /**
153
- * What the body RETURNS — the type of `out('<step>')`.
154
- *
155
- * The platform's definition can only say `output: {type: 'object'}` (a node
156
- * type cannot know what a particular body returns), so the designer types
157
- * every script read as `Record<string, any>` and reports mapping one into a
158
- * `string` output as `Type 'Record<string, any>' is not assignable to type
159
- * 'string'` — on a flow that is correct and runs.
160
- *
161
- * **Usually you do not need this.** The compiler reads the body and declares
162
- * what it plainly returns, so `return "pending-approval"` is already a
163
- * `string`. Reach for `returns` when the body does not say so syntactically —
164
- * a value that comes back from a runtime read, or an object assembled
165
- * dynamically:
166
- *
167
- * ```ts
168
- * .step('policyLimit', script({
169
- * code: 'return $vars.fetchPolicy.output.body.limit;',
170
- * returns: 'number',
171
- * }))
172
- * ```
173
- *
174
- * For an object return, name the FIELDS instead — the spelling every other
175
- * action's `returns` uses, and what licenses `out('<step>', '<field>')`:
176
- *
177
- * ```ts
178
- * returns: { total: 'number', currency: 'string' }
179
- * ```
180
- *
181
- * An explicit `returns` always wins over what the body looks like. Nothing is
182
- * inferred when the body does not plainly agree with itself, and an unknown
183
- * shape stays the definition's open object rather than being guessed at.
184
- */
185
- returns?: ScriptReturns;
186
- }
187
148
  export interface ConnectorOpts {
188
149
  /** Connector action version (defaults to the library's newest match). */
189
150
  version?: string;
@@ -228,107 +189,6 @@ export interface ConnectorOpts {
228
189
  */
229
190
  object?: string;
230
191
  }
231
- /** How a filter combines its rules: every rule must match, or any one. */
232
- export type FilterMatch = 'and' | 'or';
233
- /** Comparison a filter rule applies to a field. */
234
- export type FilterCondition = 'equals' | 'not_equals' | 'greater_than' | 'less_than' | 'greater_equal' | 'less_equal' | 'contains' | 'not_contains' | 'starts_with' | 'not_starts_with' | 'ends_with' | 'not_ends_with' | 'matches_regex' | 'in' | 'not_in' | 'is_null' | 'is_not_null' | 'is_empty' | 'is_not_empty';
235
- export interface FilterRule {
236
- /** Field on each item. Dot-paths reach nested fields (`'order.amount'`). */
237
- field: string;
238
- condition: FilterCondition;
239
- /**
240
- * What to compare against — a LITERAL only. The transform runtime reads this
241
- * value as-is and evaluates nothing, so an expression here would compare every
242
- * item against that text and match nothing. Hence `Expr` is not accepted: for
243
- * a dynamic threshold, filter in a `script` step instead.
244
- * Omit for the value-free conditions (`is_null`, `is_empty`, …).
245
- */
246
- value?: string | number | boolean | null;
247
- }
248
- /** What a map does to a field's value. Only `copy` is meaningful for non-text. */
249
- export type Transformation = 'copy' | 'uppercase' | 'lowercase' | 'trim';
250
- export interface FieldMapping {
251
- /** Field to carry into the output. Must exist on the item, or it is skipped. */
252
- field: string;
253
- /** Defaults to `'copy'` (the value unchanged). */
254
- transformation?: Transformation;
255
- /** Output field name. Omit to keep `field`'s own name. */
256
- renameTo?: string;
257
- }
258
- export type AggregationOperation = 'count' | 'sum' | 'average' | 'min' | 'max' | 'first' | 'last' | 'collect';
259
- export interface Aggregation {
260
- operation: AggregationOperation;
261
- /** Output field name for the aggregate. Required. */
262
- alias: string;
263
- /** Field to aggregate. Required for every operation except `count`. */
264
- field?: string;
265
- }
266
- /**
267
- * One link in the chain. Operations run in the order given, and each one's
268
- * result is the next one's input — so a `map` that drops a field puts it out of
269
- * reach of a later `filter`.
270
- */
271
- export type TransformOperation = {
272
- type: 'filter';
273
- filters: FilterRule[];
274
- operation?: FilterMatch;
275
- } | {
276
- type: 'map';
277
- mappings: FieldMapping[];
278
- keepOriginalFields?: boolean;
279
- } | {
280
- type: 'groupBy';
281
- groupByField: string;
282
- aggregations?: Aggregation[];
283
- };
284
- /**
285
- * Which Transform node type to emit.
286
- *
287
- * @remarks
288
- * The platform ships four: the generic `core.action.transform`, which chains N
289
- * operations, plus three single-purpose variants that each run exactly one.
290
- * They share ONE runtime — flow-v1 routes all four node types through the same
291
- * script generators and dispatches on the OPERATION's `type`, never the node's
292
- * (`bpmn-to-xml.ts`'s `DATA_TRANSFORM_NODE_TYPES` / `generateDataTransformScript`).
293
- * So a variant is the generic constrained to one operation, wearing a
294
- * self-describing node type and its own editor in the designer.
295
- *
296
- * Note the spelling: the node type is `core.action.transform.group-by`
297
- * (hyphen), while the operation it carries is `type: 'groupBy'` (camelCase) —
298
- * that mismatch is the platform's, not ours.
299
- */
300
- export type TransformVariant = 'map' | 'filter' | 'group-by';
301
- /**
302
- * The operation `type` each variant node must carry — one of, and only.
303
- *
304
- * @internal Serializer plumbing; an author states the variant, not the mapping.
305
- */
306
- export declare const VARIANT_OPERATION: Record<TransformVariant, TransformOperation['type']>;
307
- export interface TransformInputs {
308
- /**
309
- * The array to transform, as a REFERENCE: `v('catalog')` or
310
- * `out('fetchOrders', 'body.items')`.
311
- *
312
- * This is a variable PATH, not a value field — the runtime turns the string
313
- * into a lookup. An inline array or a computed `js` expression therefore
314
- * resolves to nothing, which is why the type is `Expr` and `check` rejects
315
- * anything that is not a bare `$vars.…` path. Keep static data in a
316
- * `.var(name, types.array, [...])` default and point here.
317
- */
318
- collection: Expr;
319
- /**
320
- * Emit a single-purpose variant node instead of the generic Transform.
321
- * Omit it for the generic (the default).
322
- *
323
- * With a variant, `operations` must hold exactly ONE operation of the
324
- * matching type — `'filter'` → `type: 'filter'`, `'map'` → `type: 'map'`,
325
- * `'group-by'` → `type: 'groupBy'`. `check` rejects anything else, naming
326
- * both the variant and the operation it found.
327
- */
328
- variant?: TransformVariant;
329
- /** At least one operation — an empty chain is a no-op node. */
330
- operations: TransformOperation[];
331
- }
332
192
  /**
333
193
  * A form field's type. These are the platform's own strings — an unrecognized
334
194
  * one is NOT an error there, it silently normalizes to text (so a number field
@@ -951,36 +811,6 @@ export interface IxpExtractInputs {
951
811
  */
952
812
  description?: string;
953
813
  }
954
- /**
955
- * The twelve durations the designer's dropdown offers. Purely an ENCODING
956
- * detail: a duration in this list ships as `timerPreset: '<duration>'` and any
957
- * other ships as `timerPreset: 'custom'` + `timerValue: '<duration>'`. Both
958
- * deploy and both wait the same length of time — the author never picks.
959
- * `core-definitions.test.ts` pins this list against the definition's own form.
960
- */
961
- export declare const DELAY_PRESETS: readonly ["PT5S", "PT15S", "PT30S", "PT1M", "PT5M", "PT15M", "PT30M", "PT1H", "PT6H", "PT12H", "P1D", "P1W"];
962
- export type DelayInputs = {
963
- /**
964
- * How long to wait, as an ISO-8601 duration: `PT30S`, `PT15M`, `PT2H`,
965
- * `P1D`, `P1W`. `PT` separates the time part, so `P1M` is a MONTH and
966
- * `PT1M` is a minute.
967
- * ISO-8601 duration format documentation is here:
968
- * {@link https://docs.digi.com/resources/documentation/digidocs/90001488-13/reference/r_iso_8601_duration_format.htm}
969
- */
970
- duration: string;
971
- /** Impossible together with `duration` — a delay waits one way or the other. */
972
- until?: never;
973
- } | {
974
- /**
975
- * Wait until an ABSOLUTE date-time, ISO-8601: `2026-09-01T09:00:00Z` or
976
- * `2026-09-01T09:00:00+02:00`. The platform's timeDate timer: the run
977
- * parks until the wall clock reaches this moment (already-past dates
978
- * fire immediately).
979
- */
980
- until: string;
981
- /** Impossible together with `until` — a delay waits one way or the other. */
982
- duration?: never;
983
- };
984
814
  /**
985
815
  * Where a process resource lives: deployed to an Orchestrator folder
986
816
  * (`'published'`, the default) or a sibling project of the SAME solution
@@ -2155,361 +1985,131 @@ export interface QueueItemInputs {
2155
1985
  returns?: Record<string, ReturnFieldType>;
2156
1986
  }
2157
1987
  /**
2158
- * The comparison operators the Data Fabric query serializer can emit, spelled
2159
- * exactly as the file carries them.
1988
+ * Every action kind, keyed by kind, to the body of its spec — the arm's fields
1989
+ * other than `kind`. {@link ActionSpec} is built from it.
2160
1990
  *
2161
1991
  * @remarks
2162
- * There is deliberately no `not in`, `not contains`, or null check — the
2163
- * serializer cannot emit them, and a filter it cannot emit takes the WHOLE
2164
- * query down rather than dropping one row. `is any of` is the legacy spelling
2165
- * of `in` and is still read, but author `in`.
2166
- */
2167
- export type DataFabricOperator = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'contains' | 'starts with' | 'ends with' | 'in';
2168
- /** One filter row on a Data Fabric query — rows AND together unless `or` is set. */
2169
- export interface DataFabricFilter {
2170
- /**
2171
- * The entity column to filter on. A dotted related path (`customer.Name`) is
2172
- * capped at 3 segments and needs the canvas's `_entityFields` snapshot, which
2173
- * the SDK does not author — keep from-scratch filters on the entity's own
2174
- * columns.
2175
- */
2176
- field: string;
2177
- /** Comparison operator; `=` when omitted. */
2178
- operator?: DataFabricOperator;
2179
- /**
2180
- * The comparison value. An `Expr` re-evaluates at activation time.
2181
- *
2182
- * A choice-set column compares against the choice's numeric `numberId`, never
2183
- * its label — a label matches nothing.
2184
- */
2185
- value: string | Expr;
2186
- /**
2187
- * Start a new OR alternative at this row.
2188
- *
2189
- * @remarks
2190
- * The query model is disjunctive — `alt1 OR alt2 OR …`, each alternative an
2191
- * AND of its own rows — so `or` SPLITS the list rather than joining one row
2192
- * to the one before it. `[A, B(or), C]` is therefore `A OR (B AND C)`, not
2193
- * `(A OR B) AND C`; to get the latter, write it out as
2194
- * `(A AND C) OR (B AND C)`.
2195
- *
2196
- * Ignored on the first row, which has no earlier alternative to split from.
2197
- */
2198
- or?: boolean;
2199
- }
2200
- /** How a multi-record query orders its rows before the limit is applied. */
2201
- export interface DataFabricSort {
2202
- /** The column to order by — a real one; a sort on a missing column is not caught by `validate`. */
2203
- field: string;
2204
- /** `'asc'` when omitted. */
2205
- direction?: 'asc' | 'desc';
1992
+ * An interface, not a closed union, so a node family can add its kinds where it
1993
+ * is defined, by declaration merging, instead of editing this file
1994
+ * (docs/NODE_TYPE_ARCHITECTURE_DESIGN.md §4.6). Most bodies are `{ inputs }`;
1995
+ * `mock`, `connector` and `waitEvent` are not, which is why the value is the
1996
+ * whole body rather than an inputs payload.
1997
+ */
1998
+ export interface FlowActionSpecs {
1999
+ /** The spec {@link http} builds. */
2000
+ http: {
2001
+ inputs: HttpInputs;
2002
+ };
2003
+ /** The spec {@link hitl} builds. */
2004
+ hitl: {
2005
+ inputs: HitlInputs;
2006
+ };
2007
+ /** The spec {@link rpaWorkflow} builds. */
2008
+ rpaWorkflow: {
2009
+ inputs: RpaWorkflowInputs;
2010
+ };
2011
+ /** The spec {@link apiWorkflow} builds. */
2012
+ apiWorkflow: {
2013
+ inputs: ApiWorkflowInputs;
2014
+ };
2015
+ /** The spec {@link publishedFunction} builds. */
2016
+ publishedFunction: {
2017
+ inputs: PublishedFunctionInputs;
2018
+ };
2019
+ /** The spec {@link sendMessage} builds. */
2020
+ sendMessage: {
2021
+ inputs: SendMessageInputs;
2022
+ };
2023
+ /** The spec {@link waitForMessage} builds. */
2024
+ waitForMessage: {
2025
+ inputs: WaitForMessageInputs;
2026
+ };
2027
+ /** The spec {@link conversationContext} builds. */
2028
+ conversationContext: {
2029
+ inputs: ConversationContextInputs;
2030
+ };
2031
+ /** The spec {@link createOutgoingCall} builds. */
2032
+ createOutgoingCall: {
2033
+ inputs: CreateOutgoingCallInputs;
2034
+ };
2035
+ /** The spec {@link endCall} builds. */
2036
+ endCall: {
2037
+ inputs: EndCallInputs;
2038
+ };
2039
+ /** The spec {@link voiceAgent} builds. */
2040
+ voiceAgent: {
2041
+ inputs: VoiceAgentInputs;
2042
+ };
2043
+ /** The spec {@link conversationalAgent} builds. */
2044
+ conversationalAgent: {
2045
+ inputs: ConversationalAgentInputs;
2046
+ };
2047
+ /** The spec {@link agenticProcess} builds. */
2048
+ agenticProcess: {
2049
+ inputs: AgenticProcessInputs;
2050
+ };
2051
+ /** The spec {@link agent} builds. */
2052
+ agent: {
2053
+ inputs: AgentInputs;
2054
+ };
2055
+ /** The spec {@link inlineAgent} builds. */
2056
+ inlineAgent: {
2057
+ inputs: InlineAgentInputs;
2058
+ };
2059
+ /** The spec {@link queueItem} builds. */
2060
+ queueItem: {
2061
+ inputs: QueueItemInputs;
2062
+ };
2063
+ /** The spec {@link summarize} builds. */
2064
+ summarize: {
2065
+ inputs: SummarizeInputs;
2066
+ };
2067
+ /** The spec {@link batchTransform} builds. */
2068
+ batchTransform: {
2069
+ inputs: BatchTransformInputs;
2070
+ };
2071
+ /** The spec {@link ixpExtract} builds. */
2072
+ ixpExtract: {
2073
+ inputs: IxpExtractInputs;
2074
+ };
2075
+ /** The spec {@link connector} builds. */
2076
+ connector: {
2077
+ /** The connector key, e.g. `'uipath-salesforce-slack'`. */
2078
+ key: string;
2079
+ /** The connector operation. */
2080
+ action: string;
2081
+ /** The exact connector version, when the author pins one. */
2082
+ version?: string;
2083
+ /** The connection's binding label. */
2084
+ connection?: string;
2085
+ /** The folder's binding label. */
2086
+ folder?: string;
2087
+ /** Which OBJECT a generic operation addresses — see {@link ConnectorOpts.object}. */
2088
+ object?: string;
2089
+ /** The operation's inputs, by field. */
2090
+ inputs: Record<string, unknown>;
2091
+ };
2092
+ /** The spec {@link waitForEvent} builds. */
2093
+ waitEvent: {
2094
+ subscription: EventSubscription;
2095
+ };
2206
2096
  }
2207
2097
  /**
2208
- * Which record a Data Fabric write targets — exactly ONE of the two forms.
2209
- *
2210
- * @remarks
2211
- * `{ byId }` names a record id, literal or expression. `{ fromRead }` names an
2212
- * earlier {@link dataFabricRead} STEP and reuses the record that step found, so
2213
- * the id never has to be carried by hand; `check` rejects a name no read step
2214
- * has. Shared by {@link dataFabricUpdate} and {@link dataFabricDelete} — the
2215
- * platform gives them the same `recordSource` shape.
2098
+ * One action step's spec: `{ kind }` plus that kind's body from
2099
+ * {@link FlowActionSpecs}, for every kind there.
2216
2100
  */
2217
- export type DataFabricRecordRef = {
2218
- byId: string | Expr;
2219
- fromRead?: never;
2220
- } | {
2221
- fromRead: string;
2222
- byId?: never;
2223
- };
2224
- export interface DataFabricReadInputs {
2225
- /** The Data Fabric entity's name, e.g. `'Invoices'`. */
2226
- entity: string;
2227
- /** Filter rows selecting the record(s) to query. Omit to take everything the entity holds. */
2228
- filters?: DataFabricFilter[];
2229
- /**
2230
- * `'single'` publishes ONE record as the step's `output`; `'multiple'`
2231
- * publishes the matching records under `output.results`.
2232
- *
2233
- * Setting either selects the node's **1.4** definition, which is where
2234
- * `resultMode` exists at all — the SDK's pinned default is 1.0, the
2235
- * read-one-record node this family started as. Omit it and nothing changes:
2236
- * the step stays on 1.0 and reads one record, as it always did.
2237
- *
2238
- * A `'single'` read faults only on an OVER-match; zero matches completes
2239
- * normally and leaves the step's output unresolved, so treat "not found" as a
2240
- * branch rather than an error.
2241
- */
2242
- resultMode?: 'single' | 'multiple';
2243
- /**
2244
- * Row cap for a `'multiple'` query. The emitted query ALWAYS carries a limit:
2245
- * omitting this resolves to 100, and 1000 is a hard ceiling — a larger value
2246
- * truncates silently, so page with `skip` instead.
2247
- */
2248
- limit?: number;
2249
- /** Rows to skip before the limit — the paging half of `limit`. */
2250
- skip?: number;
2251
- /** Order rows before the limit applies. Without it a limited slice is arbitrary. */
2252
- sort?: DataFabricSort;
2253
- /** Only these columns. Omit for every column the entity has. */
2254
- fields?: string[];
2255
- /**
2256
- * Folder key (GUID) for a folder-scoped entity — its `folderId` from
2257
- * `uip df entities list --include-folders`.
2258
- *
2259
- * Requires `resourceKey`: `folderKey` alone serializes the folder as a
2260
- * source-org LITERAL, which looks portable and breaks on cross-org deploy, so
2261
- * `check` refuses the pair being half-authored.
2262
- */
2263
- folderKey?: string;
2264
- /**
2265
- * The key the entity's reference is registered under in the solution, from
2266
- * `uip solution resources list --kind Entity`.
2267
- *
2268
- * @remarks
2269
- * Only meaningful with `folderKey`. Supplying both emits the two
2270
- * `resource: 'Entity'` binding rows (`propertyAttribute` `name` and
2271
- * `folderKey`) that let the flow deploy to another org. Nothing mints this
2272
- * key for a hand-authored flow — if you cannot resolve one, keep the entity
2273
- * tenant-scoped and omit both.
2274
- */
2275
- resourceKey?: string;
2276
- }
2277
- export interface DataFabricCreateInputs {
2278
- /** The Data Fabric entity's name, e.g. `'Invoices'`. */
2279
- entity: string;
2280
- /**
2281
- * The columns the new record starts with, by field name. At least one is
2282
- * required — the node's schema rejects an empty field list rather than
2283
- * inserting a blank row.
2284
- */
2285
- values: Record<string, string | Expr>;
2286
- /**
2287
- * Folder key (GUID) for a folder-scoped entity — its `folderId` from
2288
- * `uip df entities list --include-folders`.
2289
- *
2290
- * Requires `resourceKey`: `folderKey` alone serializes the folder as a
2291
- * source-org LITERAL, which looks portable and breaks on cross-org deploy, so
2292
- * `check` refuses the pair being half-authored.
2293
- */
2294
- folderKey?: string;
2295
- /**
2296
- * The key the entity's reference is registered under in the solution, from
2297
- * `uip solution resources list --kind Entity`.
2298
- *
2299
- * @remarks
2300
- * Only meaningful with `folderKey`. Supplying both emits the two
2301
- * `resource: 'Entity'` binding rows (`propertyAttribute` `name` and
2302
- * `folderKey`) that let the flow deploy to another org. Nothing mints this
2303
- * key for a hand-authored flow — if you cannot resolve one, keep the entity
2304
- * tenant-scoped and omit both.
2305
- */
2306
- resourceKey?: string;
2307
- }
2308
- export interface DataFabricUpdateInputs {
2309
- /** The Data Fabric entity's name, e.g. `'Invoices'`. */
2310
- entity: string;
2311
- /** Which record to update — see {@link DataFabricRecordRef}. */
2312
- record: DataFabricRecordRef;
2313
- /**
2314
- * The columns to write, by field name. An empty string is a real write — it
2315
- * clears the column.
2316
- */
2317
- set: Record<string, string | Expr>;
2318
- /**
2319
- * Folder key (GUID) for a folder-scoped entity — its `folderId` from
2320
- * `uip df entities list --include-folders`.
2321
- *
2322
- * Requires `resourceKey`: `folderKey` alone serializes the folder as a
2323
- * source-org LITERAL, which looks portable and breaks on cross-org deploy, so
2324
- * `check` refuses the pair being half-authored.
2325
- */
2326
- folderKey?: string;
2327
- /**
2328
- * The key the entity's reference is registered under in the solution, from
2329
- * `uip solution resources list --kind Entity`.
2330
- *
2331
- * @remarks
2332
- * Only meaningful with `folderKey`. Supplying both emits the two
2333
- * `resource: 'Entity'` binding rows (`propertyAttribute` `name` and
2334
- * `folderKey`) that let the flow deploy to another org. Nothing mints this
2335
- * key for a hand-authored flow — if you cannot resolve one, keep the entity
2336
- * tenant-scoped and omit both.
2337
- */
2338
- resourceKey?: string;
2339
- }
2340
- export interface DataFabricDeleteInputs {
2341
- /** The Data Fabric entity's name, e.g. `'Invoices'`. */
2342
- entity: string;
2343
- /** Which record to delete — see {@link DataFabricRecordRef}. */
2344
- record: DataFabricRecordRef;
2345
- /**
2346
- * Folder key (GUID) for a folder-scoped entity — its `folderId` from
2347
- * `uip df entities list --include-folders`.
2348
- *
2349
- * Requires `resourceKey`: `folderKey` alone serializes the folder as a
2350
- * source-org LITERAL, which looks portable and breaks on cross-org deploy, so
2351
- * `check` refuses the pair being half-authored.
2352
- */
2353
- folderKey?: string;
2354
- /**
2355
- * The key the entity's reference is registered under in the solution, from
2356
- * `uip solution resources list --kind Entity`.
2357
- *
2358
- * @remarks
2359
- * Only meaningful with `folderKey`. Supplying both emits the two
2360
- * `resource: 'Entity'` binding rows (`propertyAttribute` `name` and
2361
- * `folderKey`) that let the flow deploy to another org. Nothing mints this
2362
- * key for a hand-authored flow — if you cannot resolve one, keep the entity
2363
- * tenant-scoped and omit both.
2364
- */
2365
- resourceKey?: string;
2366
- }
2367
- export interface DocumentClassifyInputs {
2368
- /** The document to classify — a file reference (`input('file')`, `out('fetch', 'fileRef')`, …). */
2369
- fileRef: string | Expr;
2370
- /** Page range to classify, e.g. `'1-3'`. Omit for the whole document. */
2371
- pageRange?: string;
2372
- /** Split multi-document files into per-type page ranges. */
2373
- splitPages?: boolean;
2374
- /** Model configuration overrides; omit for the platform defaults (gemini_2_5_flash). */
2375
- modelConfig?: Record<string, unknown>;
2376
- }
2377
- export interface DynamicExtractInputs {
2378
- /** The document to extract from — a file reference. */
2379
- fileRef: string | Expr;
2380
- /**
2381
- * The IXP model deployment the extraction runs against. Dynamic Extract
2382
- * authors its SCHEMA inline, but execution still needs a model: Studio Web's
2383
- * panel destructures `modelName` and `folderKey`, and the platform rejects an
2384
- * instance without them.
2385
- */
2386
- model: {
2387
- /** The deployment's model name, e.g. `'invoiceixp-cef0d447-ixp'`. */
2388
- modelName: string;
2389
- /** Folder key (GUID) the deployment lives in. */
2390
- folderKey: string;
2391
- /** The IXP project's id (GUID). */
2392
- projectId?: string;
2393
- /** The IXP project's display name. */
2394
- projectName?: string;
2395
- /** Folder display name. */
2396
- folderName?: string;
2397
- /** Deployment version tag; omit for the live version. */
2398
- versionTag?: string;
2399
- };
2400
- /**
2401
- * The extraction schema (the node's inline taxonomy): a JSON-schema-shaped
2402
- * document describing the fields to extract. This is the Dynamic Extract
2403
- * node's defining input — authored inline rather than referencing a deployed
2404
- * IXP project (use {@link ixpExtract} for those).
2405
- */
2406
- schema?: Record<string, unknown>;
2407
- /** Page range to extract, e.g. `'1-3'`. Omit for the whole document. */
2408
- pageRange?: string;
2409
- /** Model configuration overrides; omit for the platform defaults. */
2410
- modelConfig?: Record<string, unknown>;
2411
- }
2412
2101
  export type ActionSpec = {
2413
- kind: 'http';
2414
- inputs: HttpInputs;
2415
- } | {
2416
- kind: 'script';
2417
- inputs: ScriptInputs;
2418
- } | {
2419
- kind: 'transform';
2420
- inputs: TransformInputs;
2421
- } | {
2422
- kind: 'hitl';
2423
- inputs: HitlInputs;
2424
- } | {
2425
- kind: 'delay';
2426
- inputs: DelayInputs;
2427
- }
2428
- /** A placeholder — no inputs, publishes nothing. See {@link mock}. */
2429
- | {
2430
- kind: 'mock';
2431
- } | {
2432
- kind: 'rpaWorkflow';
2433
- inputs: RpaWorkflowInputs;
2434
- } | {
2435
- kind: 'apiWorkflow';
2436
- inputs: ApiWorkflowInputs;
2437
- } | {
2438
- kind: 'publishedFunction';
2439
- inputs: PublishedFunctionInputs;
2440
- } | {
2441
- kind: 'sendMessage';
2442
- inputs: SendMessageInputs;
2443
- } | {
2444
- kind: 'waitForMessage';
2445
- inputs: WaitForMessageInputs;
2446
- } | {
2447
- kind: 'conversationContext';
2448
- inputs: ConversationContextInputs;
2449
- } | {
2450
- kind: 'createOutgoingCall';
2451
- inputs: CreateOutgoingCallInputs;
2452
- } | {
2453
- kind: 'endCall';
2454
- inputs: EndCallInputs;
2455
- } | {
2456
- kind: 'voiceAgent';
2457
- inputs: VoiceAgentInputs;
2458
- } | {
2459
- kind: 'conversationalAgent';
2460
- inputs: ConversationalAgentInputs;
2461
- } | {
2462
- kind: 'agenticProcess';
2463
- inputs: AgenticProcessInputs;
2464
- } | {
2465
- kind: 'agent';
2466
- inputs: AgentInputs;
2467
- } | {
2468
- kind: 'inlineAgent';
2469
- inputs: InlineAgentInputs;
2470
- } | {
2471
- kind: 'queueItem';
2472
- inputs: QueueItemInputs;
2473
- } | {
2474
- kind: 'summarize';
2475
- inputs: SummarizeInputs;
2476
- } | {
2477
- kind: 'batchTransform';
2478
- inputs: BatchTransformInputs;
2479
- } | {
2480
- kind: 'ixpExtract';
2481
- inputs: IxpExtractInputs;
2482
- } | {
2483
- kind: 'connector';
2484
- key: string;
2485
- action: string;
2486
- version?: string;
2487
- connection?: string;
2488
- folder?: string;
2489
- /** Which OBJECT a generic operation addresses — see {@link ConnectorOpts.object}. */
2490
- object?: string;
2491
- inputs: Record<string, unknown>;
2492
- } | {
2493
- kind: 'documentClassify';
2494
- inputs: DocumentClassifyInputs;
2495
- } | {
2496
- kind: 'dynamicExtract';
2497
- inputs: DynamicExtractInputs;
2498
- } | {
2499
- kind: 'dataFabricRead';
2500
- inputs: DataFabricReadInputs;
2501
- } | {
2502
- kind: 'dataFabricCreate';
2503
- inputs: DataFabricCreateInputs;
2504
- } | {
2505
- kind: 'dataFabricUpdate';
2506
- inputs: DataFabricUpdateInputs;
2507
- } | {
2508
- kind: 'dataFabricDelete';
2509
- inputs: DataFabricDeleteInputs;
2510
- } | {
2511
- kind: 'waitEvent';
2512
- subscription: EventSubscription;
2102
+ [K in keyof FlowActionSpecs]: FlatSpec<{
2103
+ kind: K;
2104
+ } & FlowActionSpecs[K]>;
2105
+ }[keyof FlowActionSpecs];
2106
+ /**
2107
+ * One object type in place of an intersection, keeping each property's optionality.
2108
+ *
2109
+ * @internal Type plumbing for {@link ActionSpec}; not an authoring type.
2110
+ */
2111
+ type FlatSpec<T> = {
2112
+ [P in keyof T]: T[P];
2513
2113
  };
2514
2114
  /**
2515
2115
  * Wrap a built-in action spec literal in its adapter class without changing
@@ -2539,60 +2139,6 @@ export declare function builtinTriggerSpec<S extends object>(spec: S): S;
2539
2139
  * @returns An action spec to pass to `.step(name, …)`.
2540
2140
  */
2541
2141
  export declare function http(inputs: HttpInputs): ActionSpec;
2542
- /**
2543
- * Declare an inline script action.
2544
- *
2545
- * @param inputs - The JavaScript body (`code`, which must `return`) and what it
2546
- * returns (`returns`).
2547
- * @returns An action spec to pass to `.step(name, …)`.
2548
- */
2549
- export declare function script(inputs: ScriptInputs): ActionSpec;
2550
- /**
2551
- * Declare a Transform action — a chain of declarative operations over a
2552
- * collection. Read the result downstream with `out('<step>')`.
2553
- *
2554
- * @remarks
2555
- * For a node that does ONE thing, name the variant — the emitted `.flow` then
2556
- * carries `core.action.transform.filter` and reads as `Filter` in the designer
2557
- * instead of a generic `Transform`:
2558
- *
2559
- * ```ts
2560
- * .step('bigOrders', transform({
2561
- * variant: 'filter',
2562
- * collection: v('orders'),
2563
- * operations: [
2564
- * { type: 'filter', filters: [{ field: 'amount', condition: 'greater_equal', value: 100 }] },
2565
- * ],
2566
- * }))
2567
- * ```
2568
- *
2569
- * @example
2570
- * **Filter a collection, then reshape what survives**
2571
- * ```ts
2572
- * .var('catalog', types.array, [
2573
- * { title: 'Deep Learning', author: 'Goodfellow', difficulty: 9, pages: 800 },
2574
- * { title: 'Information Theory', author: 'MacKay', difficulty: 7, pages: 540 },
2575
- * ])
2576
- * .step('curate', transform({
2577
- * collection: v('catalog'),
2578
- * operations: [
2579
- * { type: 'filter', operation: 'and', filters: [
2580
- * { field: 'difficulty', condition: 'greater_than', value: 5 },
2581
- * { field: 'pages', condition: 'less_than', value: 600 },
2582
- * ] },
2583
- * { type: 'map', keepOriginalFields: false, mappings: [
2584
- * { field: 'title', transformation: 'uppercase' },
2585
- * { field: 'author' },
2586
- * ] },
2587
- * ],
2588
- * }))
2589
- * ```
2590
- *
2591
- * @param inputs - The `collection` to transform and the chain of `operations` to
2592
- * run over it.
2593
- * @returns An action spec to pass to `.step(name, …)`.
2594
- */
2595
- export declare function transform(inputs: TransformInputs): ActionSpec;
2596
2142
  /**
2597
2143
  * Declare a human task — a step that pauses for a person to read some values,
2598
2144
  * fill others in, and press one of the outcome buttons.
@@ -2776,68 +2322,6 @@ export declare function batchTransform(inputs: BatchTransformInputs): ActionSpec
2776
2322
  * @returns An action spec to pass to `.step(name, …)`.
2777
2323
  */
2778
2324
  export declare function ixpExtract(inputs: IxpExtractInputs): ActionSpec;
2779
- /**
2780
- * Declare a delay — a step that pauses the flow for a fixed length of time and
2781
- * then carries on.
2782
- *
2783
- * @remarks
2784
- * A delay produces nothing: there is no `out('settle')` to read. It is a wait,
2785
- * not a value.
2786
- *
2787
- * The node itself splits that one duration across two fields (`timerPreset`
2788
- * holds it directly, or the literal `"custom"` with the real value in
2789
- * `timerValue`); the serializer picks the encoding, so you state the wait once.
2790
- *
2791
- * @example
2792
- * **Wait thirty seconds before carrying on**
2793
- * ```ts
2794
- * .step('settle', delay({ duration: 'PT30S' }))
2795
- * ```
2796
- *
2797
- * @param inputs - How long to wait (`duration`), as an ISO-8601 duration.
2798
- * @returns An action spec to pass to `.step(name, …)`.
2799
- */
2800
- export declare function delay(inputs: DelayInputs): ActionSpec;
2801
- /**
2802
- * Declare a PLACEHOLDER step — "a real node goes here later".
2803
- *
2804
- * @remarks
2805
- * A mock takes **no inputs and publishes nothing**. It is a marker on the canvas
2806
- * that keeps the graph wired and the flow deployable while one step is still
2807
- * missing — not a stub that returns test data. `out('extractInvoice')` is
2808
- * refused at compile time (`MOCK_HAS_NO_OUTPUT`) because it would read `null` at
2809
- * run time, always.
2810
- *
2811
- * Say what belongs there in the step's own name and in the label the canvas
2812
- * shows; the corpus's placeholders read like
2813
- * `"Extract Invoice Fields (mock — IxP model not yet published)"`.
2814
- *
2815
- * ### Why there are no arguments (convention #191 — the family contract)
2816
- *
2817
- * The platform's `core.logic.mock@1.0.0` declares **no `inputDefinition`** and one
2818
- * output whose `source` is the literal `"null"`. Measured over the 4,033 distinct
2819
- * archived `.flow` artifacts: **74 mock instances in 62 flows, and 0 carrying a
2820
- * fixture anywhere in the node** — 71 of them with `inputs: {}` or no `inputs`
2821
- * key. The 3 exceptions carry free-text `placeholder` / `_placeholder` keys the
2822
- * definition never declares, invented by agents on runs that scored 0.9 and 0.4.
2823
- *
2824
- * **This is NOT a local runner's `kind: 'mock'` test construct**, which returns a
2825
- * baked fixture. They are different things that share
2826
- * a name, and a `mock({ fixture })` surface would emit a node whose local
2827
- * behaviour and deployed behaviour disagree silently — see
2828
- * [#125](https://github.com/UiPath/flow-builder-sdk/issues/125). Nothing this SDK
2829
- * emits opens that channel: an SDK-authored mock publishes `null` locally,
2830
- * exactly as the platform does.
2831
- *
2832
- * @example
2833
- * **Hold a step's place until the real node exists**
2834
- * ```ts
2835
- * .step('extractInvoice', mock()) // ← swap for the IxP node once the project exists
2836
- * ```
2837
- *
2838
- * @returns An action spec to pass to `.step(name, …)`.
2839
- */
2840
- export declare function mock(): ActionSpec;
2841
2325
  /**
2842
2326
  * Invoke a deployed RPA (robotic process automation) workflow — a classic
2843
2327
  * UI-automation process, published to Orchestrator, run by a robot.
@@ -3221,131 +2705,6 @@ export declare function agent(inputs: AgentInputs): ActionSpec;
3221
2705
  * @returns An action spec to pass to `.step(name, …)`.
3222
2706
  */
3223
2707
  export declare function inlineAgent(inputs: InlineAgentInputs): ActionSpec;
3224
- /**
3225
- * Classify a document into a document type (`uipath.document.classify`). The
3226
- * result publishes `ClassificationResult` — an array of typed classifications
3227
- * with page ranges and confidences.
3228
- *
3229
- * @param inputs - The file reference and optional page range / split / model settings.
3230
- * @returns An action spec to pass to `.step(name, …)`.
3231
- */
3232
- export declare function documentClassify(inputs: DocumentClassifyInputs): ActionSpec;
3233
- /**
3234
- * Extract fields from a document with an INLINE schema — Dynamic Extract
3235
- * (`uipath.ixp.extract-document-builder`), the newer of the two extraction
3236
- * shapes. No deployed IXP project is referenced: the extraction schema rides
3237
- * the node. The result publishes `ExtractionResult` (and `Taxonomy`).
3238
- *
3239
- * @param inputs - The file reference, the inline extraction schema, and
3240
- * optional page range / model settings.
3241
- * @returns An action spec to pass to `.step(name, …)`.
3242
- */
3243
- export declare function dynamicExtract(inputs: DynamicExtractInputs): ActionSpec;
3244
- /**
3245
- * Query entity records from Data Fabric (`core.datafabric.read`). The result
3246
- * publishes to the step's `output`; downstream references re-fetch fresh data
3247
- * at activation time (the engine re-runs the query rather than caching).
3248
- *
3249
- * @remarks
3250
- * This node is **read-one AND query-many**, on its 1.4 definition: `resultMode:
3251
- * 'multiple'` publishes the matching records under `output.results`, and the
3252
- * platform renames the node "Query entity records" to say so. The SDK still
3253
- * pins 1.0 — read-one — as the no-`{ version }` default, so passing
3254
- * `resultMode` is what selects 1.4; see {@link DataFabricReadInputs.resultMode}.
3255
- *
3256
- * The native family covers all four CRUD verbs: this one,
3257
- * {@link dataFabricCreate}, {@link dataFabricUpdate} and
3258
- * {@link dataFabricDelete}. What it does NOT cover is get-by-id, a query row
3259
- * limit, file record fields, and entity events — those are operations on the
3260
- * SAME product reached through its Integration Service connector,
3261
- * `uipath-uipath-dataservice` (the tenant displays it as **UiPath Data
3262
- * Fabric**). So a flow that needs one of those still straddles two surfaces,
3263
- * and the connector remains the one surface that covers everything:
3264
- *
3265
- * ```ts
3266
- * .step('byId', connector('uipath-uipath-dataservice', 'get-entity-record-by-id',
3267
- * { entityName: 'Contracts', recordId: input('id') }, { connection: 'df' }))
3268
- * ```
3269
- *
3270
- * Get-by-id matters for long text. This node is a query even when it reads one
3271
- * record by an `Id` filter, and a Data Service query returns a PREVIEW of a
3272
- * long-text (`MULTILINE_MAX`) field: the first 10,000 characters plus
3273
- * `...[Truncated]`, with no flag in the output. A 15,551-character value comes
3274
- * back as 10,014 characters. When a field may exceed 10,000 characters, read
3275
- * it with `get-entity-record-by-id`, which returns the whole value
3276
- * (flow-builder-sdk#954).
3277
- *
3278
- * A connector operation's body fields come from the entity, so the library
3279
- * cannot carry them: run `uip maestro registry prepare uipath-uipath-dataservice
3280
- * get-entity-record-by-id -f entityName=<Entity>` first.
3281
- * The routing table is in the `data-fabric.md` reference and the parent-field
3282
- * loop in `connector-params.md` — cited by name rather than linked, because this
3283
- * comment renders both into the flat corpus, where those files sit alongside
3284
- * it, and onto the site, where each symbol is its own page and a relative
3285
- * `./data-fabric` resolves to nothing.
3286
- *
3287
- * @param inputs - The entity, optional filter rows, result mode, and folder scope.
3288
- * @returns An action spec to pass to `.step(name, …)`.
3289
- */
3290
- export declare function dataFabricRead(inputs: DataFabricReadInputs): ActionSpec;
3291
- /**
3292
- * Create an entity record in Data Fabric (`core.datafabric.create`). The new
3293
- * record publishes to the step's `output`, so a following
3294
- * {@link dataFabricUpdate} or {@link dataFabricDelete} can read its id.
3295
- *
3296
- * @remarks
3297
- * `values` must name at least one column — the node's schema rejects an empty
3298
- * field list rather than inserting a blank row, and `check` says so before the
3299
- * platform does. Field names are the ENTITY's, so copy them from the scenario
3300
- * or the tenant; nothing offline can tell a real column from a typo.
3301
- *
3302
- * The published `output` is the record as a query returns it, so a long-text
3303
- * (`MULTILINE_MAX`) field longer than 10,000 characters comes back cut, with
3304
- * `...[Truncated]` appended, even though the whole value was stored. Use the
3305
- * value you passed in, or re-read the record with the connector's
3306
- * `get-entity-record-by-id`, when the whole text is needed (flow-builder-sdk#954).
3307
- *
3308
- * See {@link dataFabricRead} for what the native family still does not cover
3309
- * and which connector operation covers it.
3310
- *
3311
- * @param inputs - The entity, the columns the record starts with, and folder scope.
3312
- * @returns An action spec to pass to `.step(name, …)`.
3313
- */
3314
- export declare function dataFabricCreate(inputs: DataFabricCreateInputs): ActionSpec;
3315
- /**
3316
- * Update an entity record in Data Fabric (`core.datafabric.update`). Target the
3317
- * record by id or through an earlier {@link dataFabricRead} step; downstream
3318
- * reads of this step observe the record AFTER the write.
3319
- *
3320
- * @remarks
3321
- * `set` must write at least one column: an empty `set` is a no-op the platform
3322
- * reports as success, so `check` rejects it.
3323
- *
3324
- * See {@link dataFabricRead} for what the native family still does not cover
3325
- * and which connector operation covers it.
3326
- *
3327
- * @param inputs - The entity, the record selector, and the columns to write.
3328
- * @returns An action spec to pass to `.step(name, …)`.
3329
- */
3330
- export declare function dataFabricUpdate(inputs: DataFabricUpdateInputs): ActionSpec;
3331
- /**
3332
- * Delete an entity record from Data Fabric (`core.datafabric.delete`). Target
3333
- * the record by id or through an earlier {@link dataFabricRead} step, exactly
3334
- * as {@link dataFabricUpdate} does.
3335
- *
3336
- * @remarks
3337
- * A delete **publishes nothing** — its definition declares no output — so
3338
- * `$vars.<step>.output` is undefined at run time and `check` rejects a read of
3339
- * it. Take what you need off the read step that found the record, before the
3340
- * delete.
3341
- *
3342
- * See {@link dataFabricRead} for what the native family still does not cover
3343
- * and which connector operation covers it.
3344
- *
3345
- * @param inputs - The entity, the record selector, and folder scope.
3346
- * @returns An action spec to pass to `.step(name, …)`.
3347
- */
3348
- export declare function dataFabricDelete(inputs: DataFabricDeleteInputs): ActionSpec;
3349
2708
  /**
3350
2709
  * Declare an Orchestrator QUEUE ITEM step.
3351
2710
  *