@uipath/maestro-builder-sdk 6.16.11 → 6.16.13
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/dist/api-index.md +16 -16
- package/dist/api-members.md +14 -14
- package/dist/config.d.ts +33 -4
- package/dist/config.js +43 -29
- package/dist/core/actions.d.ts +14 -0
- package/dist/core/actions.js +14 -0
- package/dist/serialize.d.ts +28 -0
- package/dist/serialize.js +120 -18
- package/package.json +2 -2
package/dist/api-index.md
CHANGED
|
@@ -70,8 +70,8 @@ could hand you spans for a version you do not have.
|
|
|
70
70
|
| `CaseValue` | type | `dist/flow-sdk.d.ts:327-328` | Supporting types | A value a `.switch` case compares the discriminant against. |
|
|
71
71
|
| `ChildFlow` | type | `dist/flow-sdk.d.ts:43-46` | Supporting types | Anything `subflow()` accepts as the child: a builder, or an already-built flow. |
|
|
72
72
|
| `ClientSideToolRef` | interface | `dist/core/actions.d.ts:1717-1732` | Supporting types | A CLIENT-side tool: the agent asks the CALLING application to run it and hand the answer back… |
|
|
73
|
-
| `connector` | function | `dist/core/actions.d.ts:
|
|
74
|
-
| `connector` | function | `dist/core/actions.d.ts:
|
|
73
|
+
| `connector` | function | `dist/core/actions.d.ts:3341-3364` | Actions | Declare an Integration Service connector action — the typed form, where a generated descriptor supplies the nodeType and… |
|
|
74
|
+
| `connector` | function | `dist/core/actions.d.ts:3365-3381` | Actions | Stringly form, for a connector with no prepared module — `connector('uipath-salesforce-slack',… |
|
|
75
75
|
| `ConnectorDescriptor` | type | `dist/core/connectors.d.ts:89-97` | Generated descriptors | A generated, typed connector descriptor: ConnectorMeta branded with phantom input/output types. |
|
|
76
76
|
| `ConnectorLookupValue` | type | `dist/core/connectors.d.ts:50-59` | Generated descriptors | ConnectorValue for a field that also accepts an unresolved lookup. |
|
|
77
77
|
| `ConnectorMeta` | interface | `dist/core/connectors.d.ts:60-88` | Generated descriptors | Runtime metadata a generated descriptor carries. |
|
|
@@ -90,17 +90,17 @@ could hand you spans for a version you do not have.
|
|
|
90
90
|
| `createOutgoingCall` | function | `dist/core/actions.d.ts:2943-2959` | Actions | Place an outgoing phone call (`uipath.conversational.voice.create-outgoing-call`) and get back the `callContext` every… |
|
|
91
91
|
| `CreateOutgoingCallInputs` | interface | `dist/core/actions.d.ts:732-740` | Option shapes | 2 field(s) |
|
|
92
92
|
| `CustomGuardrail` | interface | `dist/core/actions.d.ts:1338-1350` | Supporting types | A rule-based guardrail you author in place. |
|
|
93
|
-
| `dataFabricCreate` | function | `dist/core/actions.d.ts:
|
|
93
|
+
| `dataFabricCreate` | function | `dist/core/actions.d.ts:3237-3260` | Actions | Create an entity record in Data Fabric (`core.datafabric.create`). |
|
|
94
94
|
| `DataFabricCreateInputs` | interface | `dist/core/actions.d.ts:2223-2253` | Option shapes | 4 field(s) |
|
|
95
|
-
| `dataFabricDelete` | function | `dist/core/actions.d.ts:
|
|
95
|
+
| `dataFabricDelete` | function | `dist/core/actions.d.ts:3277-3294` | Actions | Delete an entity record from Data Fabric (`core.datafabric.delete`). |
|
|
96
96
|
| `DataFabricDeleteInputs` | interface | `dist/core/actions.d.ts:2286-2312` | Option shapes | 4 field(s) |
|
|
97
97
|
| `DataFabricFilter` | interface | `dist/core/actions.d.ts:2114-2145` | Supporting types | One filter row on a Data Fabric query — rows AND together unless `or` is set. |
|
|
98
98
|
| `DataFabricOperator` | type | `dist/core/actions.d.ts:2103-2113` | Supporting types | The comparison operators the Data Fabric query serializer can emit, spelled exactly as the file carries them. |
|
|
99
|
-
| `dataFabricRead` | function | `dist/core/actions.d.ts:3190-
|
|
99
|
+
| `dataFabricRead` | function | `dist/core/actions.d.ts:3190-3236` | Actions | Query entity records from Data Fabric (`core.datafabric.read`). |
|
|
100
100
|
| `DataFabricReadInputs` | interface | `dist/core/actions.d.ts:2170-2222` | Option shapes | 9 field(s) |
|
|
101
101
|
| `DataFabricRecordRef` | type | `dist/core/actions.d.ts:2153-2169` | Supporting types | Which record a Data Fabric write targets — exactly ONE of the two forms. |
|
|
102
102
|
| `DataFabricSort` | interface | `dist/core/actions.d.ts:2146-2152` | Supporting types | How a multi-record query orders its rows before the limit is applied. |
|
|
103
|
-
| `dataFabricUpdate` | function | `dist/core/actions.d.ts:
|
|
103
|
+
| `dataFabricUpdate` | function | `dist/core/actions.d.ts:3261-3276` | Actions | Update an entity record in Data Fabric (`core.datafabric.update`). |
|
|
104
104
|
| `DataFabricUpdateInputs` | interface | `dist/core/actions.d.ts:2254-2285` | Option shapes | 5 field(s) |
|
|
105
105
|
| `DEFAULT_TRIGGER_ID` | const | `dist/core/expr.d.ts:42-43` | Expressions and types | The manual trigger node's default id. |
|
|
106
106
|
| `DefinitionReference` | type | `dist/core/node-classes.d.ts:30-63` | Supporting types | An exact reference to the node definition a contribution compiles against. |
|
|
@@ -121,8 +121,8 @@ could hand you spans for a version you do not have.
|
|
|
121
121
|
| `err` | function | `dist/core/expr.d.ts:153-240` | Expressions and types | Reference a FAILED step's error → `$vars.<step>.error[.<field>]`. |
|
|
122
122
|
| `ErrorEnvelopeField` | type | `dist/core/expr.d.ts:142-152` | Supporting types | The fields a failure envelope carries. |
|
|
123
123
|
| `EscalationRef` | interface | `dist/core/actions.d.ts:1930-1991` | Supporting types | One escalation an inline agent may raise — an Action Center app task a human completes (the `coded-action-app` variant,… |
|
|
124
|
-
| `EventFilter` | type | `dist/core/actions.d.ts:
|
|
125
|
-
| `EventSubscription` | interface | `dist/core/actions.d.ts:
|
|
124
|
+
| `EventFilter` | type | `dist/core/actions.d.ts:3382-3423` | Supporting types | One filter condition on the event payload. |
|
|
125
|
+
| `EventSubscription` | interface | `dist/core/actions.d.ts:3472-3513` | Option shapes | What a connector event subscribes to. |
|
|
126
126
|
| `Expr` | class | `dist/core/expr.d.ts:11-21` | Supporting types | A Flow expression. |
|
|
127
127
|
| `FieldMapping` | interface | `dist/core/actions.d.ts:250-257` | Supporting types | 3 field(s) |
|
|
128
128
|
| `FilterCondition` | type | `dist/core/actions.d.ts:233-234` | Supporting types | Comparison a filter rule applies to a field. |
|
|
@@ -197,7 +197,7 @@ could hand you spans for a version you do not have.
|
|
|
197
197
|
| `ProcessToolRef` | interface | `dist/core/actions.d.ts:1861-1890` | Supporting types | A deployed tenant resource the agent may invoke. |
|
|
198
198
|
| `publishedFunction` | function | `dist/core/actions.d.ts:2867-2891` | Actions | Invoke a published Orchestrator **Function** — a deployed unit of code run as one step (`uipath.core.function.<key>`,… |
|
|
199
199
|
| `PublishedFunctionInputs` | interface | `dist/core/actions.d.ts:1054-1088` | Option shapes | A published Orchestrator **Function** — a small, single-purpose unit of code deployed as its own resource and invoked as… |
|
|
200
|
-
| `queueItem` | function | `dist/core/actions.d.ts:
|
|
200
|
+
| `queueItem` | function | `dist/core/actions.d.ts:3295-3340` | Actions | Declare an Orchestrator QUEUE ITEM step. |
|
|
201
201
|
| `QueueItemInputs` | interface | `dist/core/actions.d.ts:2029-2102` | Option shapes | 10 field(s) |
|
|
202
202
|
| `QueuePriority` | type | `dist/core/actions.d.ts:2027-2028` | Supporting types | The three priorities an Orchestrator queue item can carry. |
|
|
203
203
|
| `ran` | function | `dist/core/expr.d.ts:95-141` | Expressions and types | Did this step run? |
|
|
@@ -242,7 +242,7 @@ could hand you spans for a version you do not have.
|
|
|
242
242
|
| `triggerDescriptor` | function | `dist/core/connectors.d.ts:139-151` | Generated descriptors | Brand a trigger descriptor literal with its where/output types. |
|
|
243
243
|
| `TriggerDescriptor` | type | `dist/core/connectors.d.ts:130-138` | Generated descriptors | A generated, typed connector-trigger descriptor: TriggerMeta branded with phantom `where`/output types. |
|
|
244
244
|
| `TriggerMeta` | interface | `dist/core/connectors.d.ts:120-129` | Generated descriptors | Runtime metadata a generated trigger descriptor carries. |
|
|
245
|
-
| `TriggerOptions` | interface | `dist/core/actions.d.ts:
|
|
245
|
+
| `TriggerOptions` | interface | `dist/core/actions.d.ts:3424-3471` | Option shapes | The typed `onEvent`/`waitForEvent` options — everything an EventSubscription carries except `connector`/`event`, which… |
|
|
246
246
|
| `TriggerSpec` | type | `dist/flow-sdk.d.ts:150-168` | Supporting types | What starts the flow. |
|
|
247
247
|
| `TypeDesc` | type | `dist/core/expr.d.ts:379` | Supporting types | |
|
|
248
248
|
| `types` | const | `dist/core/expr.d.ts:363-378` | Expressions and types | Variable type descriptors (map to Flow variable `type` values). |
|
|
@@ -254,8 +254,8 @@ could hand you spans for a version you do not have.
|
|
|
254
254
|
| `VoiceAgentInputs` | interface | `dist/core/actions.d.ts:772-805` | Option shapes | 6 field(s) |
|
|
255
255
|
| `VoiceSettings` | interface | `dist/core/actions.d.ts:749-771` | Supporting types | The audio settings a voice agent speaks with. |
|
|
256
256
|
| `voiceTrigger` | function | `dist/flow-sdk.d.ts:302-326` | Flow construction | Start the flow when a phone call comes IN (`core.trigger.voice`). |
|
|
257
|
-
| `waitForEvent` | function | `dist/core/actions.d.ts:
|
|
258
|
-
| `waitForEvent` | function | `dist/core/actions.d.ts:
|
|
257
|
+
| `waitForEvent` | function | `dist/core/actions.d.ts:3523-3558` | Actions | Wait mid-flow until a connector event fires, then continue with its payload — the typed form, where a generated trigger… |
|
|
258
|
+
| `waitForEvent` | function | `dist/core/actions.d.ts:3559-3566` | Actions | Stringly form, for an event with no prepared module. |
|
|
259
259
|
| `waitForMessage` | function | `dist/core/actions.d.ts:2911-2927` | Actions | PAUSE until the person sends their next message (`uipath.conversational.wait-for-message`) — a catch event, like… |
|
|
260
260
|
| `WaitForMessageInputs` | interface | `dist/core/actions.d.ts:644-652` | Option shapes | 2 field(s) |
|
|
261
261
|
|
|
@@ -299,8 +299,8 @@ could hand you spans for a version you do not have.
|
|
|
299
299
|
| `EscalationOpts` | interface | `dist/case/case-sdk.d.ts:127-139` | Option shapes | 4 field(s) |
|
|
300
300
|
| `EscalationRecipient` | interface | `dist/case/case-sdk.d.ts:119-126` | Supporting types | Who an escalation notifies. |
|
|
301
301
|
| `EscalationTrigger` | type | `dist/case/case-sdk.d.ts:117-118` | Supporting types | When an escalation fires: as the deadline approaches (`at-risk`) or once it passes (`sla-breached`). |
|
|
302
|
-
| `EventFilter` | type | `dist/core/actions.d.ts:
|
|
303
|
-
| `EventSubscription` | interface | `dist/core/actions.d.ts:
|
|
302
|
+
| `EventFilter` | type | `dist/core/actions.d.ts:3382-3423` | Supporting types | One filter condition on the event payload. |
|
|
303
|
+
| `EventSubscription` | interface | `dist/core/actions.d.ts:3472-3513` | Option shapes | What a connector event subscribes to. |
|
|
304
304
|
| `eventTrigger` | function | `dist/case/case-sdk.d.ts:276-286` | Case authoring | An Integration Service **event** trigger — an external event (a new row, an email, a webhook) starts the case. |
|
|
305
305
|
| `eventTrigger` | function | `dist/case/case-sdk.d.ts:287-293` | Case authoring | An Integration Service event trigger in placeholder or stringly-resolved form. |
|
|
306
306
|
| `EventTriggerOpts` | interface | `dist/case/case-sdk.d.ts:239-263` | Option shapes | 4 field(s) |
|
|
@@ -336,7 +336,7 @@ could hand you spans for a version you do not have.
|
|
|
336
336
|
| `toUser` | function | `dist/case/case-sdk.d.ts:150-157` | Case authoring | An escalation recipient that is a single user. |
|
|
337
337
|
| `TriggerDescriptor` | type | `dist/core/connectors.d.ts:130-138` | Supporting types | A generated, typed connector-trigger descriptor: TriggerMeta branded with phantom `where`/output types. |
|
|
338
338
|
| `TriggerMeta` | interface | `dist/core/connectors.d.ts:120-129` | Supporting types | Runtime metadata a generated trigger descriptor carries. |
|
|
339
|
-
| `TriggerOptions` | interface | `dist/core/actions.d.ts:
|
|
339
|
+
| `TriggerOptions` | interface | `dist/core/actions.d.ts:3424-3471` | Option shapes | The typed `onEvent`/`waitForEvent` options — everything an EventSubscription carries except `connector`/`event`, which… |
|
|
340
340
|
| `TypeDesc` | type | `dist/core/expr.d.ts:379` | Supporting types | |
|
|
341
341
|
| `UnresolvedReferenceTaskKind` | type | `dist/case/case-sdk.d.ts:358-359` | Supporting types | Published-resource task kinds that the Case schema permits as unresolved skeletons. |
|
|
342
342
|
| `WaitConnectorPlaceholderSpec` | interface | `dist/case/case-sdk.d.ts:360-370` | Supporting types | A `wait-for-connector` subscription: suspend on an Integration Service event. |
|
|
@@ -387,7 +387,7 @@ could hand you spans for a version you do not have.
|
|
|
387
387
|
| `errorSchema` | const | `dist/bpmn/bpmn-sdk.d.ts:3490-3531` | BPMN authoring | The `Error` variable's shape — the platform's own error envelope. |
|
|
388
388
|
| `errorSchemaWithResponse` | const | `dist/bpmn/bpmn-sdk.d.ts:3532-3564` | BPMN authoring | The same envelope plus `response` — what a node whose failure carries a payload writes, and what the same source calls… |
|
|
389
389
|
| `EventDef` | type | `dist/bpmn/bpmn-sdk.d.ts:54-72` | Supporting types | The resolved event definition attached to an event node. |
|
|
390
|
-
| `EventFilter` | type | `dist/core/actions.d.ts:
|
|
390
|
+
| `EventFilter` | type | `dist/core/actions.d.ts:3382-3423` | Supporting types | One filter condition on the event payload. |
|
|
391
391
|
| `EventKind` | type | `dist/bpmn/bpmn-sdk.d.ts:75-76` | Supporting types | The four non-boundary event element kinds a BpmnNode can be. |
|
|
392
392
|
| `EventSubProcessOpts` | interface | `dist/bpmn/bpmn-sdk.d.ts:1835-1895` | Option shapes | Options for ScopeBuilder.eventSubProcess. |
|
|
393
393
|
| `ExtensionPayload` | interface | `dist/bpmn/bpmn-sdk.d.ts:557-593` | Supporting types | An extension payload carried by an element the payload does not describe. |
|
package/dist/api-members.md
CHANGED
|
@@ -139,15 +139,15 @@ not find it either.
|
|
|
139
139
|
| `connection` | property | `ConnectorOpts` | `dist/core/actions.d.ts:190-194` |
|
|
140
140
|
| `connection` | property | `ConnectorToolRef` | `dist/core/actions.d.ts:1832-1839` |
|
|
141
141
|
| `connection` | property | `DataServiceOpts` | `dist/bpmn/bpmn-sdk.d.ts:1092-1098` |
|
|
142
|
-
| `connection` | property | `EventSubscription` | `dist/core/actions.d.ts:
|
|
142
|
+
| `connection` | property | `EventSubscription` | `dist/core/actions.d.ts:3505-3509` |
|
|
143
143
|
| `connection` | property | `ExternalTaskOptions` | `dist/case/case-sdk.d.ts:393-394` |
|
|
144
144
|
| `connection` | property | `ExternalTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1503-1504` |
|
|
145
145
|
| `connection` | property | `HttpOpts` | `dist/bpmn/bpmn-sdk.d.ts:1156-1181` |
|
|
146
|
-
| `connection` | property | `TriggerOptions` | `dist/core/actions.d.ts:
|
|
146
|
+
| `connection` | property | `TriggerOptions` | `dist/core/actions.d.ts:3462-3466` |
|
|
147
147
|
| `connections` | property | `HitlRecipient` | `dist/core/actions.d.ts:438-442` |
|
|
148
148
|
| `connector` | property | `BuiltTask` | `dist/case/case-sdk.d.ts:506` |
|
|
149
149
|
| `connector` | property | `ConnectorToolRef` | `dist/core/actions.d.ts:1817-1818` |
|
|
150
|
-
| `connector` | property | `EventSubscription` | `dist/core/actions.d.ts:
|
|
150
|
+
| `connector` | property | `EventSubscription` | `dist/core/actions.d.ts:3474-3475` |
|
|
151
151
|
| `connector` | property | `ExternalTaskSpecData` | `dist/case/case-sdk.d.ts:406-407` |
|
|
152
152
|
| `connector` | property | `RuleOpts` | `dist/case/case-sdk.d.ts:56-62` |
|
|
153
153
|
| `connector` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:2332-2352` |
|
|
@@ -293,7 +293,7 @@ not find it either.
|
|
|
293
293
|
| `escalation` | property | `RuleOpts` | `dist/case/case-sdk.d.ts:69-74` |
|
|
294
294
|
| `escalations` | property | `BuiltSla` | `dist/case/case-sdk.d.ts:193` |
|
|
295
295
|
| `escalations` | property | `SlaOpts` | `dist/case/case-sdk.d.ts:183-184` |
|
|
296
|
-
| `event` | property | `EventSubscription` | `dist/core/actions.d.ts:
|
|
296
|
+
| `event` | property | `EventSubscription` | `dist/core/actions.d.ts:3476-3477` |
|
|
297
297
|
| `event` | property | `TriggerMeta` | `dist/core/connectors.d.ts:124-125` |
|
|
298
298
|
| `eventBasedGateway` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:2274-2283` |
|
|
299
299
|
| `eventDefinition` | property | `RegistryTypeSpec` | `dist/bpmn/typed-node.d.ts:91-92` |
|
|
@@ -343,8 +343,8 @@ not find it either.
|
|
|
343
343
|
| `filter` | property | `ConnectorEventOpts` | `dist/bpmn/bpmn-sdk.d.ts:1447-1462` |
|
|
344
344
|
| `filters` | property | `ConnectorEventOpts` | `dist/bpmn/bpmn-sdk.d.ts:1463-1478` |
|
|
345
345
|
| `filters` | property | `DataFabricReadInputs` | `dist/core/actions.d.ts:2173-2174` |
|
|
346
|
-
| `filters` | property | `EventSubscription` | `dist/core/actions.d.ts:
|
|
347
|
-
| `filters` | property | `TriggerOptions` | `dist/core/actions.d.ts:
|
|
346
|
+
| `filters` | property | `EventSubscription` | `dist/core/actions.d.ts:3503-3504` |
|
|
347
|
+
| `filters` | property | `TriggerOptions` | `dist/core/actions.d.ts:3460-3461` |
|
|
348
348
|
| `flavour` | property | `AgentInputs` | `dist/core/actions.d.ts:1250-1264` |
|
|
349
349
|
| `flowIds` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3006-3049` |
|
|
350
350
|
| `flowMode` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:2078-2117` |
|
|
@@ -355,13 +355,13 @@ not find it either.
|
|
|
355
355
|
| `folder` | property | `ConnectorOpts` | `dist/core/actions.d.ts:195-196` |
|
|
356
356
|
| `folder` | property | `ConnectorToolRef` | `dist/core/actions.d.ts:1840-1845` |
|
|
357
357
|
| `folder` | property | `DataServiceOpts` | `dist/bpmn/bpmn-sdk.d.ts:1099-1111` |
|
|
358
|
-
| `folder` | property | `EventSubscription` | `dist/core/actions.d.ts:
|
|
358
|
+
| `folder` | property | `EventSubscription` | `dist/core/actions.d.ts:3510-3511` |
|
|
359
359
|
| `folder` | property | `ExternalTaskOptions` | `dist/case/case-sdk.d.ts:395-396` |
|
|
360
360
|
| `folder` | property | `ExternalTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1505-1506` |
|
|
361
361
|
| `folder` | property | `HttpOpts` | `dist/bpmn/bpmn-sdk.d.ts:1182-1183` |
|
|
362
362
|
| `folder` | property | `OrchestratorOpts` | `dist/bpmn/bpmn-sdk.d.ts:1239-1240` |
|
|
363
363
|
| `folder` | property | `QueueItemOpts` | `dist/bpmn/bpmn-sdk.d.ts:1300-1301` |
|
|
364
|
-
| `folder` | property | `TriggerOptions` | `dist/core/actions.d.ts:
|
|
364
|
+
| `folder` | property | `TriggerOptions` | `dist/core/actions.d.ts:3467-3468` |
|
|
365
365
|
| `folderKey` | property | `AgentMemoryRef` | `dist/core/actions.d.ts:1777-1778` |
|
|
366
366
|
| `folderKey` | property | `ContextIndexRef` | `dist/core/actions.d.ts:2010-2011` |
|
|
367
367
|
| `folderKey` | property | `DataFabricCreateInputs` | `dist/core/actions.d.ts:2232-2240` |
|
|
@@ -674,8 +674,8 @@ not find it either.
|
|
|
674
674
|
| `object` | property | `ConnectorEventOpts` | `dist/bpmn/bpmn-sdk.d.ts:1437-1446` |
|
|
675
675
|
| `object` | property | `ConnectorOpts` | `dist/core/actions.d.ts:197-229` |
|
|
676
676
|
| `object` | property | `ConnectorToolRef` | `dist/core/actions.d.ts:1823-1824` |
|
|
677
|
-
| `object` | property | `EventSubscription` | `dist/core/actions.d.ts:
|
|
678
|
-
| `object` | property | `TriggerOptions` | `dist/core/actions.d.ts:
|
|
677
|
+
| `object` | property | `EventSubscription` | `dist/core/actions.d.ts:3497-3502` |
|
|
678
|
+
| `object` | property | `TriggerOptions` | `dist/core/actions.d.ts:3449-3459` |
|
|
679
679
|
| `objectName` | property | `ConnectorMeta` | `dist/core/connectors.d.ts:66-75` |
|
|
680
680
|
| `objectName` | property | `LookupSpec` | `dist/core/lookups.d.ts:23-24` |
|
|
681
681
|
| `objectName` | property | `SelectNextStageSpec` | `dist/case/case-sdk.d.ts:302-303` |
|
|
@@ -1091,12 +1091,12 @@ not find it either.
|
|
|
1091
1091
|
| `version` | property | `ConnectorMeta` | `dist/core/connectors.d.ts:63` |
|
|
1092
1092
|
| `version` | property | `ConnectorOpts` | `dist/core/actions.d.ts:188-189` |
|
|
1093
1093
|
| `version` | property | `ConnectorToolRef` | `dist/core/actions.d.ts:1821-1822` |
|
|
1094
|
-
| `version` | property | `EventSubscription` | `dist/core/actions.d.ts:
|
|
1094
|
+
| `version` | property | `EventSubscription` | `dist/core/actions.d.ts:3512` |
|
|
1095
1095
|
| `version` | property | `ExternalTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1507-1508` |
|
|
1096
1096
|
| `version` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1313-1326` |
|
|
1097
1097
|
| `version` | property | `NodeOptions` | `dist/flow-sdk.d.ts:354-361` |
|
|
1098
1098
|
| `version` | property | `TriggerMeta` | `dist/core/connectors.d.ts:126` |
|
|
1099
|
-
| `version` | property | `TriggerOptions` | `dist/core/actions.d.ts:
|
|
1099
|
+
| `version` | property | `TriggerOptions` | `dist/core/actions.d.ts:3469-3470` |
|
|
1100
1100
|
| `versionTag` | property | `IxpExtractInputs` | `dist/core/actions.d.ts:936-937` |
|
|
1101
1101
|
| `versionTag` | property | `IxpToolRef` | `dist/core/actions.d.ts:1918-1919` |
|
|
1102
1102
|
| `voice` | property | `VoiceAgentInputs` | `dist/core/actions.d.ts:791-792` |
|
|
@@ -1109,8 +1109,8 @@ not find it either.
|
|
|
1109
1109
|
| `waitForTimer` | method | `TaskBuilder` | `dist/case/case-sdk.d.ts:877-883` |
|
|
1110
1110
|
| `waypoints` | property | `EdgeRoute` | `dist/flow-sdk.d.ts:586-591` |
|
|
1111
1111
|
| `when` | property | `SlaOpts` | `dist/case/case-sdk.d.ts:176-182` |
|
|
1112
|
-
| `where` | property | `EventSubscription` | `dist/core/actions.d.ts:
|
|
1113
|
-
| `where` | property | `TriggerOptions` | `dist/core/actions.d.ts:
|
|
1112
|
+
| `where` | property | `EventSubscription` | `dist/core/actions.d.ts:3478-3496` |
|
|
1113
|
+
| `where` | property | `TriggerOptions` | `dist/core/actions.d.ts:3431-3448` |
|
|
1114
1114
|
| `width` | property | `CaseNodeLayout` | `dist/case/case-sdk.d.ts:604-605` |
|
|
1115
1115
|
| `width` | property | `StickyNote` | `dist/flow-sdk.d.ts:641-642` |
|
|
1116
1116
|
| `x` | property | `StickyNote` | `dist/flow-sdk.d.ts:637-638` |
|
package/dist/config.d.ts
CHANGED
|
@@ -1,14 +1,43 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* config — build a connector node's `inputs.detail.configuration` envelope.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `=jsonString
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* The node stores Studio Web's ESSENTIAL-ONLY form,
|
|
5
|
+
* `=jsonString:{ "essentialConfiguration": { … } }`, with no
|
|
6
|
+
* `optionalConfiguration` section. That is the form Studio Web itself writes for
|
|
7
|
+
* an activity whose field metadata is not loaded, and the one `uip maestro flow`
|
|
8
|
+
* node configuration, the managed HTTP node, triggers, Case and BPMN connector
|
|
9
|
+
* nodes already store. See {@link buildConfiguration} for why the split form
|
|
10
|
+
* broke the designer (flow-builder-sdk#936).
|
|
8
11
|
*/
|
|
9
12
|
/**
|
|
10
13
|
* Compose the `=jsonString:`-wrapped configuration for a connector library entry.
|
|
11
14
|
*
|
|
15
|
+
* ## Essential-only, because the split form needs a fieldsContainer
|
|
16
|
+
*
|
|
17
|
+
* Studio Web reads this string with `normalizeConfiguration`
|
|
18
|
+
* (StudioWeb `connector-activity/is-activities/runtime/models/configuration-classification.ts`
|
|
19
|
+
* @ 8724d739). It knows two stored forms:
|
|
20
|
+
*
|
|
21
|
+
* - **Split** — `{ essentialConfiguration, optionalConfiguration }` with a
|
|
22
|
+
* non-empty optional half. Studio Web treats the activity as fully configured
|
|
23
|
+
* and renders its fields from `optionalConfiguration.fieldsContainer`.
|
|
24
|
+
* - **Essential-only** — no `optionalConfiguration` (or an empty one). Studio
|
|
25
|
+
* Web sets `isEssentialOnly`, re-fetches the field metadata from the
|
|
26
|
+
* connection, and applies the node's `bodyParameters` / `queryParameters` /
|
|
27
|
+
* `pathParameters` to the rebuilt fields.
|
|
28
|
+
*
|
|
29
|
+
* This builder used to write the split form with Tier-A defaults in the
|
|
30
|
+
* optional half and no `fieldsContainer`. Studio Web then took the "fully
|
|
31
|
+
* configured" path, found no fields, showed every value empty (required ones
|
|
32
|
+
* flagged), and a designer save wrote the node back without its
|
|
33
|
+
* `bodyParameters`. The run was unaffected: the runtime reads the node's
|
|
34
|
+
* parameter buckets, not this string (flow-builder-sdk#936).
|
|
35
|
+
*
|
|
36
|
+
* The essential keys are Studio Web's `CONNECTOR_ACTIVITY_ESSENTIAL_PROPERTIES`
|
|
37
|
+
* plus the transient `savedFilterTrees` it keeps on the essential-only path.
|
|
38
|
+
* `uip maestro flow validate` and `pack` accept this form; the CLI's own
|
|
39
|
+
* connector configure writes it (`activityClient.getEssentialConfiguration()`).
|
|
40
|
+
*
|
|
12
41
|
* ## Two things here are measured, not chosen
|
|
13
42
|
*
|
|
14
43
|
* Census over **every** connector node in the deployed corpus — 4,026 `.flow`
|
package/dist/config.js
CHANGED
|
@@ -1,32 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* config — build a connector node's `inputs.detail.configuration` envelope.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `=jsonString
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* The node stores Studio Web's ESSENTIAL-ONLY form,
|
|
5
|
+
* `=jsonString:{ "essentialConfiguration": { … } }`, with no
|
|
6
|
+
* `optionalConfiguration` section. That is the form Studio Web itself writes for
|
|
7
|
+
* an activity whose field metadata is not loaded, and the one `uip maestro flow`
|
|
8
|
+
* node configuration, the managed HTTP node, triggers, Case and BPMN connector
|
|
9
|
+
* nodes already store. See {@link buildConfiguration} for why the split form
|
|
10
|
+
* broke the designer (flow-builder-sdk#936).
|
|
8
11
|
*/
|
|
9
12
|
import { parseCeql } from './core/ceql.js';
|
|
10
13
|
import { transportHttpMethod } from './core/connector-inputs.js';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
cachedPropertyMappings: [],
|
|
14
|
+
/**
|
|
15
|
+
* Defaults for the essential keys a library entry does not set. These are the
|
|
16
|
+
* values Studio Web's own constructors give a new connector activity.
|
|
17
|
+
*/
|
|
18
|
+
const ESSENTIAL_DEFAULTS = {
|
|
17
19
|
customFieldsRequestDetails: null,
|
|
18
|
-
eventMode: null,
|
|
19
|
-
eventOperation: null,
|
|
20
20
|
executionType: null,
|
|
21
|
-
hasBreakingChanges: false,
|
|
22
|
-
isAutopilotInvalidConfig: false,
|
|
23
|
-
jobArguments: null,
|
|
24
|
-
language: 'en-US',
|
|
25
|
-
maxPageSize: 1000,
|
|
26
|
-
objectActions: [],
|
|
27
21
|
operation: 'create',
|
|
28
22
|
packageVersion: '1.0.0',
|
|
29
|
-
primaryKeys: [],
|
|
30
23
|
};
|
|
31
24
|
/**
|
|
32
25
|
* Which of an operation's parameters carries a CEQL filter.
|
|
@@ -105,20 +98,44 @@ function schemaReplayDetails(operation, inputValues) {
|
|
|
105
98
|
}
|
|
106
99
|
return { objectActionName: action.name, parameterValues };
|
|
107
100
|
}
|
|
101
|
+
/** Keep the essential keys; everything else is re-derived by Studio Web on open. */
|
|
108
102
|
function envelope(flat) {
|
|
109
103
|
const essential = {};
|
|
110
|
-
const optional = {};
|
|
111
104
|
for (const [k, v] of Object.entries(flat)) {
|
|
112
105
|
if (ESSENTIAL_KEYS.has(k))
|
|
113
106
|
essential[k] = v;
|
|
114
|
-
else
|
|
115
|
-
optional[k] = v;
|
|
116
107
|
}
|
|
117
|
-
return { essentialConfiguration: essential
|
|
108
|
+
return { essentialConfiguration: essential };
|
|
118
109
|
}
|
|
119
110
|
/**
|
|
120
111
|
* Compose the `=jsonString:`-wrapped configuration for a connector library entry.
|
|
121
112
|
*
|
|
113
|
+
* ## Essential-only, because the split form needs a fieldsContainer
|
|
114
|
+
*
|
|
115
|
+
* Studio Web reads this string with `normalizeConfiguration`
|
|
116
|
+
* (StudioWeb `connector-activity/is-activities/runtime/models/configuration-classification.ts`
|
|
117
|
+
* @ 8724d739). It knows two stored forms:
|
|
118
|
+
*
|
|
119
|
+
* - **Split** — `{ essentialConfiguration, optionalConfiguration }` with a
|
|
120
|
+
* non-empty optional half. Studio Web treats the activity as fully configured
|
|
121
|
+
* and renders its fields from `optionalConfiguration.fieldsContainer`.
|
|
122
|
+
* - **Essential-only** — no `optionalConfiguration` (or an empty one). Studio
|
|
123
|
+
* Web sets `isEssentialOnly`, re-fetches the field metadata from the
|
|
124
|
+
* connection, and applies the node's `bodyParameters` / `queryParameters` /
|
|
125
|
+
* `pathParameters` to the rebuilt fields.
|
|
126
|
+
*
|
|
127
|
+
* This builder used to write the split form with Tier-A defaults in the
|
|
128
|
+
* optional half and no `fieldsContainer`. Studio Web then took the "fully
|
|
129
|
+
* configured" path, found no fields, showed every value empty (required ones
|
|
130
|
+
* flagged), and a designer save wrote the node back without its
|
|
131
|
+
* `bodyParameters`. The run was unaffected: the runtime reads the node's
|
|
132
|
+
* parameter buckets, not this string (flow-builder-sdk#936).
|
|
133
|
+
*
|
|
134
|
+
* The essential keys are Studio Web's `CONNECTOR_ACTIVITY_ESSENTIAL_PROPERTIES`
|
|
135
|
+
* plus the transient `savedFilterTrees` it keeps on the essential-only path.
|
|
136
|
+
* `uip maestro flow validate` and `pack` accept this form; the CLI's own
|
|
137
|
+
* connector configure writes it (`activityClient.getEssentialConfiguration()`).
|
|
138
|
+
*
|
|
122
139
|
* ## Two things here are measured, not chosen
|
|
123
140
|
*
|
|
124
141
|
* Census over **every** connector node in the deployed corpus — 4,026 `.flow`
|
|
@@ -153,17 +170,16 @@ export function buildConfiguration(entry, version, inputValues, seed = 'node') {
|
|
|
153
170
|
const isGeneric = at === 'Generic' || at === 'GenericExpanded';
|
|
154
171
|
const v1ActivityType = isGeneric ? 'Generic' : 'Curated';
|
|
155
172
|
// `operation.name` is the verb (`List`, `Create`, …); the platform stores it
|
|
156
|
-
// lower-cased. Falls back to the
|
|
173
|
+
// lower-cased. Falls back to the default `create` for an entry that declares no
|
|
157
174
|
// name, which keeps such an entry's emission exactly as it was.
|
|
158
175
|
const verb = typeof op.name === 'string' && op.name
|
|
159
176
|
? op.name.toLowerCase()
|
|
160
|
-
:
|
|
177
|
+
: ESSENTIAL_DEFAULTS.operation;
|
|
161
178
|
const composed = {
|
|
162
|
-
...
|
|
179
|
+
...ESSENTIAL_DEFAULTS,
|
|
163
180
|
operation: verb,
|
|
164
181
|
customFieldsRequestDetails: schemaReplayDetails(op, inputValues),
|
|
165
182
|
savedFilterTrees: savedFilterTrees(op, inputValues, seed),
|
|
166
|
-
connectorKey: conn.key,
|
|
167
183
|
objectName: op.objectName,
|
|
168
184
|
httpMethod: transportHttpMethod(op.httpMethod),
|
|
169
185
|
instanceParameters: isGeneric
|
|
@@ -184,8 +200,6 @@ export function buildConfiguration(entry, version, inputValues, seed = 'node') {
|
|
|
184
200
|
supportsStreaming: op.supportsStreaming,
|
|
185
201
|
subType: op.subType,
|
|
186
202
|
},
|
|
187
|
-
...(conn.name ? { connectorName: conn.name } : {}),
|
|
188
|
-
...(op.objectDisplayName ? { objectDisplayName: op.objectDisplayName } : {}),
|
|
189
203
|
...(op.pathTemplate || op.path ? { path: op.pathTemplate || op.path } : {}),
|
|
190
204
|
};
|
|
191
205
|
return '=jsonString:' + JSON.stringify(envelope(composed));
|
package/dist/core/actions.d.ts
CHANGED
|
@@ -3213,6 +3213,14 @@ export declare function dynamicExtract(inputs: DynamicExtractInputs): ActionSpec
|
|
|
3213
3213
|
* { entityName: 'Contracts', recordId: input('id') }, { connection: 'df' }))
|
|
3214
3214
|
* ```
|
|
3215
3215
|
*
|
|
3216
|
+
* Get-by-id matters for long text. This node is a query even when it reads one
|
|
3217
|
+
* record by an `Id` filter, and a Data Service query returns a PREVIEW of a
|
|
3218
|
+
* long-text (`MULTILINE_MAX`) field: the first 10,000 characters plus
|
|
3219
|
+
* `...[Truncated]`, with no flag in the output. A 15,551-character value comes
|
|
3220
|
+
* back as 10,014 characters. When a field may exceed 10,000 characters, read
|
|
3221
|
+
* it with `get-entity-record-by-id`, which returns the whole value
|
|
3222
|
+
* (flow-builder-sdk#954).
|
|
3223
|
+
*
|
|
3216
3224
|
* A connector operation's body fields come from the entity, so the library
|
|
3217
3225
|
* cannot carry them: run `uip maestro registry prepare uipath-uipath-dataservice
|
|
3218
3226
|
* get-entity-record-by-id -f entityName=<Entity>` first.
|
|
@@ -3237,6 +3245,12 @@ export declare function dataFabricRead(inputs: DataFabricReadInputs): ActionSpec
|
|
|
3237
3245
|
* platform does. Field names are the ENTITY's, so copy them from the scenario
|
|
3238
3246
|
* or the tenant; nothing offline can tell a real column from a typo.
|
|
3239
3247
|
*
|
|
3248
|
+
* The published `output` is the record as a query returns it, so a long-text
|
|
3249
|
+
* (`MULTILINE_MAX`) field longer than 10,000 characters comes back cut, with
|
|
3250
|
+
* `...[Truncated]` appended, even though the whole value was stored. Use the
|
|
3251
|
+
* value you passed in, or re-read the record with the connector's
|
|
3252
|
+
* `get-entity-record-by-id`, when the whole text is needed (flow-builder-sdk#954).
|
|
3253
|
+
*
|
|
3240
3254
|
* See {@link dataFabricRead} for what the native family still does not cover
|
|
3241
3255
|
* and which connector operation covers it.
|
|
3242
3256
|
*
|
package/dist/core/actions.js
CHANGED
|
@@ -916,6 +916,14 @@ export function dynamicExtract(inputs) {
|
|
|
916
916
|
* { entityName: 'Contracts', recordId: input('id') }, { connection: 'df' }))
|
|
917
917
|
* ```
|
|
918
918
|
*
|
|
919
|
+
* Get-by-id matters for long text. This node is a query even when it reads one
|
|
920
|
+
* record by an `Id` filter, and a Data Service query returns a PREVIEW of a
|
|
921
|
+
* long-text (`MULTILINE_MAX`) field: the first 10,000 characters plus
|
|
922
|
+
* `...[Truncated]`, with no flag in the output. A 15,551-character value comes
|
|
923
|
+
* back as 10,014 characters. When a field may exceed 10,000 characters, read
|
|
924
|
+
* it with `get-entity-record-by-id`, which returns the whole value
|
|
925
|
+
* (flow-builder-sdk#954).
|
|
926
|
+
*
|
|
919
927
|
* A connector operation's body fields come from the entity, so the library
|
|
920
928
|
* cannot carry them: run `uip maestro registry prepare uipath-uipath-dataservice
|
|
921
929
|
* get-entity-record-by-id -f entityName=<Entity>` first.
|
|
@@ -942,6 +950,12 @@ export function dataFabricRead(inputs) {
|
|
|
942
950
|
* platform does. Field names are the ENTITY's, so copy them from the scenario
|
|
943
951
|
* or the tenant; nothing offline can tell a real column from a typo.
|
|
944
952
|
*
|
|
953
|
+
* The published `output` is the record as a query returns it, so a long-text
|
|
954
|
+
* (`MULTILINE_MAX`) field longer than 10,000 characters comes back cut, with
|
|
955
|
+
* `...[Truncated]` appended, even though the whole value was stored. Use the
|
|
956
|
+
* value you passed in, or re-read the record with the connector's
|
|
957
|
+
* `get-entity-record-by-id`, when the whole text is needed (flow-builder-sdk#954).
|
|
958
|
+
*
|
|
945
959
|
* See {@link dataFabricRead} for what the native family still does not cover
|
|
946
960
|
* and which connector operation covers it.
|
|
947
961
|
*
|
package/dist/serialize.d.ts
CHANGED
|
@@ -88,6 +88,34 @@ export declare function serializeWithSidecars(built: BuiltFlow, opts?: Serialize
|
|
|
88
88
|
}>;
|
|
89
89
|
};
|
|
90
90
|
export declare function serialize(built: BuiltFlow, opts?: SerializeOpts): any;
|
|
91
|
+
/**
|
|
92
|
+
* Every node `configuration` that carries Studio Web's split envelope must be
|
|
93
|
+
* one Studio Web can restore: either essential-only (no, or an empty,
|
|
94
|
+
* `optionalConfiguration`), or a full form whose optional half holds a
|
|
95
|
+
* `fieldsContainer`.
|
|
96
|
+
*
|
|
97
|
+
* Studio Web's `normalizeConfiguration` treats a non-empty optional half as
|
|
98
|
+
* "fully configured" and renders the fields from its `fieldsContainer`. With no
|
|
99
|
+
* container, every field shows empty and a designer save drops the node's
|
|
100
|
+
* `bodyParameters`; validate, pack and the run all pass
|
|
101
|
+
* (flow-builder-sdk#936). `buildConfiguration` writes essential-only; this
|
|
102
|
+
* check covers every emitter, root and subflows, so a new one cannot bring the
|
|
103
|
+
* broken shape back unnoticed.
|
|
104
|
+
*
|
|
105
|
+
* @throws Error naming each node whose configuration Studio Web would show empty.
|
|
106
|
+
*/
|
|
107
|
+
export declare function assertConnectorConfigurationRestorable(flow: any): void;
|
|
108
|
+
/**
|
|
109
|
+
* Node ids and edge ids are each one namespace over the WHOLE file: the root
|
|
110
|
+
* and every `subflows` entry. Pack flattens subflows into one BPMN document, so
|
|
111
|
+
* two scopes sharing an id make it drop one element or crash in layout
|
|
112
|
+
* (`Cannot read properties of undefined (reading 'get')`), while `check` and
|
|
113
|
+
* `uip maestro flow validate` both pass. #938 shipped that way for `.stepToRef`
|
|
114
|
+
* edges; this check stops the next id scheme that forgets the file is shared.
|
|
115
|
+
*
|
|
116
|
+
* @throws Error naming each duplicated id and the scopes that carry it.
|
|
117
|
+
*/
|
|
118
|
+
export declare function assertFileWideIdsUnique(flow: any): void;
|
|
91
119
|
/**
|
|
92
120
|
* Every `<bindings.NAME>` placeholder a node's definition carries in its
|
|
93
121
|
* `model.context` must resolve to a `bindings[]` entry for THAT node.
|
package/dist/serialize.js
CHANGED
|
@@ -3633,14 +3633,15 @@ const STICKY_NOTE_TYPE_VERSION = '1.0.0';
|
|
|
3633
3633
|
* — a note colliding with a step would be silently dropped by the id-keyed
|
|
3634
3634
|
* layout and merge paths downstream.
|
|
3635
3635
|
*/
|
|
3636
|
-
function emitStickyNotes(built, scope) {
|
|
3636
|
+
function emitStickyNotes(built, scope, claimNoteId) {
|
|
3637
3637
|
const notes = built.stickyNotes;
|
|
3638
3638
|
if (!notes?.length)
|
|
3639
3639
|
return;
|
|
3640
3640
|
const taken = new Set(scope.nodes.map((n) => n.id));
|
|
3641
3641
|
const seen = new Set();
|
|
3642
3642
|
notes.forEach((note, i) => {
|
|
3643
|
-
const
|
|
3643
|
+
const authorId = note.id ?? `stickyNote_${i + 1}`;
|
|
3644
|
+
const id = authorId;
|
|
3644
3645
|
if (taken.has(id)) {
|
|
3645
3646
|
throw new Error(`.stickyNotes(): id "${id}" is already a node in this flow. A sticky note is a real node, `
|
|
3646
3647
|
+ `so its id has to be unique — name it something else.`);
|
|
@@ -3657,12 +3658,18 @@ function emitStickyNotes(built, scope) {
|
|
|
3657
3658
|
if ((note.width === undefined) !== (note.height === undefined)) {
|
|
3658
3659
|
throw new Error(`.stickyNotes(): note "${id}" needs both width and height, or neither.`);
|
|
3659
3660
|
}
|
|
3661
|
+
// Node ids are one namespace over the whole file (#938): pack merges every
|
|
3662
|
+
// subflow into one BPMN document. The author's id is kept unless another
|
|
3663
|
+
// scope already holds it — a child with notes, called from two steps — and
|
|
3664
|
+
// `.layout()` finds a renamed note through `noteNodeId`.
|
|
3665
|
+
const emittedId = claimNoteId(authorId);
|
|
3666
|
+
(scope.noteNodeId ??= new Map()).set(authorId, emittedId);
|
|
3660
3667
|
// The envelope Studio Web writes for a note (flow-v1 canvas: the add path
|
|
3661
3668
|
// sets `typeVersion: '1.0.0'` and no display, and `nodeToInstance` persists
|
|
3662
3669
|
// `display` as `{}`). Both fields are required on every node by
|
|
3663
3670
|
// `flow validate`, manifest or not (#869).
|
|
3664
3671
|
scope.nodes.push({
|
|
3665
|
-
id,
|
|
3672
|
+
id: emittedId,
|
|
3666
3673
|
type: 'stickyNote',
|
|
3667
3674
|
typeVersion: STICKY_NOTE_TYPE_VERSION,
|
|
3668
3675
|
ui: {
|
|
@@ -3685,7 +3692,9 @@ function applyAuthorLayout(layout, scope, where) {
|
|
|
3685
3692
|
if (!layout)
|
|
3686
3693
|
return undefined;
|
|
3687
3694
|
const resolveId = (key) => {
|
|
3688
|
-
const id = scope.stepNodeId.get(key)
|
|
3695
|
+
const id = scope.stepNodeId.get(key)
|
|
3696
|
+
?? scope.noteNodeId?.get(key)
|
|
3697
|
+
?? (scope.nodes.some((n) => n.id === key) ? key : undefined);
|
|
3689
3698
|
if (!id) {
|
|
3690
3699
|
throw new Error(`${where}.layout: "${key}" names no step or node in this flow. Layout keys are the flow's own step names (plus the trigger id and "end").`);
|
|
3691
3700
|
}
|
|
@@ -4366,20 +4375,18 @@ function newScope(outputs, vars = []) {
|
|
|
4366
4375
|
* exact class of failure `.onError` used to have (an error path that vanishes in
|
|
4367
4376
|
* conversion with every rung green). So it throws instead.
|
|
4368
4377
|
*/
|
|
4369
|
-
function resolveRejoins(scope) {
|
|
4378
|
+
function resolveRejoins(scope, addEdge) {
|
|
4370
4379
|
for (const { from, target } of scope.pendingEdges) {
|
|
4371
4380
|
const id = scope.stepNodeId.get(target);
|
|
4372
4381
|
if (!id) {
|
|
4373
4382
|
throw new Error(`.stepToRef('${target}') names a step this flow does not have. Known steps: `
|
|
4374
4383
|
+ `${[...scope.stepNodeId.keys()].join(', ') || '(none)'}.`);
|
|
4375
4384
|
}
|
|
4376
|
-
|
|
4377
|
-
|
|
4378
|
-
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
targetPort: 'input',
|
|
4382
|
-
});
|
|
4385
|
+
// Through the serializer's own `addEdge`, so the id comes from the one
|
|
4386
|
+
// file-wide counter. A per-scope count (`edge_ref_${scope.edges.length}`)
|
|
4387
|
+
// gave two subflow copies of one child the same edge id; pack then dropped
|
|
4388
|
+
// one copy's edge or crashed in layout (flow-builder-sdk#938).
|
|
4389
|
+
addEdge(scope, from, id);
|
|
4383
4390
|
}
|
|
4384
4391
|
scope.pendingEdges.length = 0;
|
|
4385
4392
|
}
|
|
@@ -4653,6 +4660,18 @@ export function serialize(built, opts = {}) {
|
|
|
4653
4660
|
takenIds.add(id);
|
|
4654
4661
|
return id;
|
|
4655
4662
|
}
|
|
4663
|
+
/**
|
|
4664
|
+
* A sticky note's id: the author's id as written when nothing in the file
|
|
4665
|
+
* holds it yet, else `claimId`'s de-duplicated form. Not sanitized first, so
|
|
4666
|
+
* an explicit note id the file does not collide on is emitted unchanged.
|
|
4667
|
+
*/
|
|
4668
|
+
function claimNoteId(base) {
|
|
4669
|
+
if (!takenIds.has(base)) {
|
|
4670
|
+
takenIds.add(base);
|
|
4671
|
+
return base;
|
|
4672
|
+
}
|
|
4673
|
+
return claimId(base);
|
|
4674
|
+
}
|
|
4656
4675
|
/**
|
|
4657
4676
|
* `uid` for a node that IS an author's step, recording which id that step got.
|
|
4658
4677
|
*
|
|
@@ -4672,8 +4691,9 @@ export function serialize(built, opts = {}) {
|
|
|
4672
4691
|
* Base and quick-form human tasks emitted so far, by node id. `addEdge` holds
|
|
4673
4692
|
* every edge out of one to the product's handle rule (`hitlExitViolation`), so
|
|
4674
4693
|
* `completed` on a task with outcomes fails at the edge that would write it;
|
|
4675
|
-
* `assertHitlExitInvariant` repeats the check over each finished scope
|
|
4676
|
-
*
|
|
4694
|
+
* `assertHitlExitInvariant` repeats the check over each finished scope, as a
|
|
4695
|
+
* guard for any future edge that is pushed without coming through here (parked
|
|
4696
|
+
* `.stepToRef` rejoins now do come through here, #938).
|
|
4677
4697
|
*/
|
|
4678
4698
|
const hitlNodes = new Map();
|
|
4679
4699
|
/**
|
|
@@ -4796,10 +4816,10 @@ export function serialize(built, opts = {}) {
|
|
|
4796
4816
|
globals.push({ id: o.name, name: o.name, direction: 'out', type: o.type, ...varMeta(o) });
|
|
4797
4817
|
for (const vd of childGlobals.vars)
|
|
4798
4818
|
globals.push({ id: vd.name, name: vd.name, direction: 'inout', type: vd.type, ...varMeta(vd) });
|
|
4799
|
-
resolveRejoins(scope);
|
|
4819
|
+
resolveRejoins(scope, addEdge);
|
|
4800
4820
|
assertHitlExitInvariant(scope.nodes, scope.edges);
|
|
4801
4821
|
typeAgentInputSchemas(scope, globals);
|
|
4802
|
-
emitStickyNotes(child, scope);
|
|
4822
|
+
emitStickyNotes(child, scope, claimNoteId);
|
|
4803
4823
|
const layoutEdges = applyAuthorLayout(child.layout, scope, `subflow "${nodeId}"`);
|
|
4804
4824
|
assertNodeEnvelope(scope.nodes, `subflow "${nodeId}"`);
|
|
4805
4825
|
return {
|
|
@@ -6964,10 +6984,10 @@ export function serialize(built, opts = {}) {
|
|
|
6964
6984
|
globals.push({ id: inp.name, name: inp.name, direction: 'in', type: inp.type, triggerNodeId: ep.id, ...varMeta(inp) });
|
|
6965
6985
|
}
|
|
6966
6986
|
}
|
|
6967
|
-
resolveRejoins(root);
|
|
6987
|
+
resolveRejoins(root, addEdge);
|
|
6968
6988
|
assertHitlExitInvariant(root.nodes, root.edges);
|
|
6969
6989
|
typeAgentInputSchemas(root, globals);
|
|
6970
|
-
emitStickyNotes(built, root);
|
|
6990
|
+
emitStickyNotes(built, root, claimNoteId);
|
|
6971
6991
|
const rootLayoutEdges = applyAuthorLayout(built.layout, root, `flow "${built.id}"`);
|
|
6972
6992
|
assertNodeEnvelope(root.nodes, `flow "${built.id}"`);
|
|
6973
6993
|
// The FILE-FORMAT version this document declares: the author's
|
|
@@ -7002,9 +7022,91 @@ export function serialize(built, opts = {}) {
|
|
|
7002
7022
|
// so every family and every emission order is covered by one rule, not by
|
|
7003
7023
|
// each call site remembering it (flow-builder-sdk#865/#866).
|
|
7004
7024
|
assertBindingPlaceholdersResolve(flow);
|
|
7025
|
+
assertFileWideIdsUnique(flow);
|
|
7026
|
+
assertConnectorConfigurationRestorable(flow);
|
|
7005
7027
|
connectionConnectors(flow);
|
|
7006
7028
|
return flow;
|
|
7007
7029
|
}
|
|
7030
|
+
/**
|
|
7031
|
+
* Every node `configuration` that carries Studio Web's split envelope must be
|
|
7032
|
+
* one Studio Web can restore: either essential-only (no, or an empty,
|
|
7033
|
+
* `optionalConfiguration`), or a full form whose optional half holds a
|
|
7034
|
+
* `fieldsContainer`.
|
|
7035
|
+
*
|
|
7036
|
+
* Studio Web's `normalizeConfiguration` treats a non-empty optional half as
|
|
7037
|
+
* "fully configured" and renders the fields from its `fieldsContainer`. With no
|
|
7038
|
+
* container, every field shows empty and a designer save drops the node's
|
|
7039
|
+
* `bodyParameters`; validate, pack and the run all pass
|
|
7040
|
+
* (flow-builder-sdk#936). `buildConfiguration` writes essential-only; this
|
|
7041
|
+
* check covers every emitter, root and subflows, so a new one cannot bring the
|
|
7042
|
+
* broken shape back unnoticed.
|
|
7043
|
+
*
|
|
7044
|
+
* @throws Error naming each node whose configuration Studio Web would show empty.
|
|
7045
|
+
*/
|
|
7046
|
+
export function assertConnectorConfigurationRestorable(flow) {
|
|
7047
|
+
const nodes = [...(Array.isArray(flow?.nodes) ? flow.nodes : [])];
|
|
7048
|
+
for (const sub of Object.values(flow?.subflows ?? {})) {
|
|
7049
|
+
if (Array.isArray(sub?.nodes))
|
|
7050
|
+
nodes.push(...sub.nodes);
|
|
7051
|
+
}
|
|
7052
|
+
const broken = [];
|
|
7053
|
+
for (const node of nodes) {
|
|
7054
|
+
const raw = node?.inputs?.detail?.configuration;
|
|
7055
|
+
if (typeof raw !== 'string' || !raw.startsWith('=jsonString:'))
|
|
7056
|
+
continue;
|
|
7057
|
+
let envelope;
|
|
7058
|
+
try {
|
|
7059
|
+
envelope = JSON.parse(raw.slice('=jsonString:'.length));
|
|
7060
|
+
}
|
|
7061
|
+
catch {
|
|
7062
|
+
continue;
|
|
7063
|
+
}
|
|
7064
|
+
const optional = envelope?.optionalConfiguration;
|
|
7065
|
+
if (!envelope?.essentialConfiguration || !optional || typeof optional !== 'object')
|
|
7066
|
+
continue;
|
|
7067
|
+
if (Object.keys(optional).length > 0 && optional.fieldsContainer === undefined)
|
|
7068
|
+
broken.push(node.id);
|
|
7069
|
+
}
|
|
7070
|
+
if (broken.length) {
|
|
7071
|
+
throw new Error(`serialize: connector configuration on ${broken.map((id) => `"${id}"`).join(', ')} has a non-empty `
|
|
7072
|
+
+ `optionalConfiguration without a fieldsContainer. Studio Web shows such a node's fields empty and a `
|
|
7073
|
+
+ `save drops its bodyParameters (flow-builder-sdk#936). Emit { essentialConfiguration } only.`);
|
|
7074
|
+
}
|
|
7075
|
+
}
|
|
7076
|
+
/**
|
|
7077
|
+
* Node ids and edge ids are each one namespace over the WHOLE file: the root
|
|
7078
|
+
* and every `subflows` entry. Pack flattens subflows into one BPMN document, so
|
|
7079
|
+
* two scopes sharing an id make it drop one element or crash in layout
|
|
7080
|
+
* (`Cannot read properties of undefined (reading 'get')`), while `check` and
|
|
7081
|
+
* `uip maestro flow validate` both pass. #938 shipped that way for `.stepToRef`
|
|
7082
|
+
* edges; this check stops the next id scheme that forgets the file is shared.
|
|
7083
|
+
*
|
|
7084
|
+
* @throws Error naming each duplicated id and the scopes that carry it.
|
|
7085
|
+
*/
|
|
7086
|
+
export function assertFileWideIdsUnique(flow) {
|
|
7087
|
+
const scopes = [['root', flow]];
|
|
7088
|
+
for (const [name, sub] of Object.entries(flow?.subflows ?? {}))
|
|
7089
|
+
scopes.push([`subflows.${name}`, sub]);
|
|
7090
|
+
const dupes = [];
|
|
7091
|
+
for (const kind of ['nodes', 'edges']) {
|
|
7092
|
+
const seen = new Map();
|
|
7093
|
+
for (const [where, scope] of scopes) {
|
|
7094
|
+
for (const el of Array.isArray(scope?.[kind]) ? scope[kind] : []) {
|
|
7095
|
+
const id = el?.id;
|
|
7096
|
+
if (typeof id !== 'string')
|
|
7097
|
+
continue;
|
|
7098
|
+
const first = seen.get(id);
|
|
7099
|
+
if (first !== undefined)
|
|
7100
|
+
dupes.push(`${kind.slice(0, -1)} id "${id}" in ${first} and ${where}`);
|
|
7101
|
+
else
|
|
7102
|
+
seen.set(id, where);
|
|
7103
|
+
}
|
|
7104
|
+
}
|
|
7105
|
+
}
|
|
7106
|
+
if (dupes.length) {
|
|
7107
|
+
throw new Error(`serialize: ids must be unique across the root and all subflows; duplicated: ${dupes.join('; ')}.`);
|
|
7108
|
+
}
|
|
7109
|
+
}
|
|
7008
7110
|
/**
|
|
7009
7111
|
* Every `<bindings.NAME>` placeholder a node's definition carries in its
|
|
7010
7112
|
* `model.context` must resolve to a `bindings[]` entry for THAT node.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uipath/maestro-builder-sdk",
|
|
3
|
-
"version": "6.16.
|
|
3
|
+
"version": "6.16.13",
|
|
4
4
|
"description": "Build UiPath Flow, Case, and BPMN artifacts by writing TypeScript.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://docs.uipath.com/maestro",
|
|
@@ -92,5 +92,5 @@
|
|
|
92
92
|
"@types/node": "^22.7.0",
|
|
93
93
|
"esbuild": "^0.28.1"
|
|
94
94
|
},
|
|
95
|
-
"gitref": "
|
|
95
|
+
"gitref": "fdace5d45a9d598a8e452bbf9f48bc50943b6688"
|
|
96
96
|
}
|