@lunnoa/client 2.3.0 → 2.5.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.
- package/README.md +2 -2
- package/dist/cli.js +43 -1
- package/dist/index.cjs +171 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +84 -6
- package/dist/index.d.ts +84 -6
- package/dist/index.js +170 -3
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +43 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +71 -4
- package/dist/react.d.ts +71 -4
- package/dist/react.js +43 -1
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/skills/lunnoa-client/SKILL.md +76 -2
- package/skills/lunnoa-solution-design/SKILL.md +8 -2
package/dist/react.d.cts
CHANGED
|
@@ -810,13 +810,18 @@ interface components {
|
|
|
810
810
|
requestedCount: number;
|
|
811
811
|
};
|
|
812
812
|
UpsertWorkflowStepDto: {
|
|
813
|
+
/**
|
|
814
|
+
* @description Name later steps use in ={{step:<key>,path}}. Keyed steps keep their node id across deploys. "trigger" is reserved.
|
|
815
|
+
* @example loadCase
|
|
816
|
+
*/
|
|
817
|
+
key?: string;
|
|
813
818
|
/** @description Workflow app id (catalogue slug). */
|
|
814
819
|
appId: string;
|
|
815
820
|
/** @description Catalogue action id. */
|
|
816
821
|
actionId: string;
|
|
817
822
|
/** @description Connection instance UUID for this step. */
|
|
818
823
|
connectionId?: string;
|
|
819
|
-
/** @description Action input / config fields. */
|
|
824
|
+
/** @description Action input / config fields. String values may use ={{step:trigger,field}} or ={{step:<key>,path,to,value}}. */
|
|
820
825
|
input?: {
|
|
821
826
|
[key: string]: unknown;
|
|
822
827
|
};
|
|
@@ -824,6 +829,24 @@ interface components {
|
|
|
824
829
|
name?: string;
|
|
825
830
|
/** @description Step description. */
|
|
826
831
|
description?: string;
|
|
832
|
+
/** @description Branches after this step. Only on flow-control_action_conditional-paths, flow-control_action_manually-decide-paths, or flow-control_action_request-approval (approved path first, then rejected), and only on the last step of a list. */
|
|
833
|
+
paths?: components["schemas"]["UpsertWorkflowPathDto"][];
|
|
834
|
+
};
|
|
835
|
+
UpsertWorkflowPathConditionDto: {
|
|
836
|
+
/** @description One step reference, e.g. ={{step:load,amount}}. */
|
|
837
|
+
field: string;
|
|
838
|
+
/** @description contains, does_not_contain, equals, does_not_equal, exists, does_not_exist, starts_with, ends_with, is_empty, is_not_empty, comes_before, comes_after, is_in_the_past, is_in_the_future, is_true, is_false, is_truthy, is_falsey, is_greater_than, is_less_than, is_greater_than_or_equal_to, is_less_than_or_equal_to, matches_regex, does_not_match_regex. */
|
|
839
|
+
condition: string;
|
|
840
|
+
/** @description Value to compare with. */
|
|
841
|
+
value?: string;
|
|
842
|
+
};
|
|
843
|
+
UpsertWorkflowPathDto: {
|
|
844
|
+
/** @description Path label, unique on its step. */
|
|
845
|
+
label: string;
|
|
846
|
+
/** @description Conditional Paths only. Groups are OR-ed, conditions inside a group AND-ed. Omit to always take this path. */
|
|
847
|
+
when?: components["schemas"]["UpsertWorkflowPathConditionDto"][][];
|
|
848
|
+
/** @description Steps on this path. */
|
|
849
|
+
steps: components["schemas"]["UpsertWorkflowStepDto"][];
|
|
827
850
|
};
|
|
828
851
|
UpsertWorkflowTriggerInputFieldDto: {
|
|
829
852
|
/** @description Field id. Callers pass this key to workflows.execute. */
|
|
@@ -873,7 +896,7 @@ interface components {
|
|
|
873
896
|
isActive?: boolean;
|
|
874
897
|
/** @description Catalogue trigger. Omit for a Manually Run trigger with no input fields. */
|
|
875
898
|
trigger?: components["schemas"]["UpsertWorkflowTriggerDto"];
|
|
876
|
-
/** @description
|
|
899
|
+
/** @description Catalogue-action steps in order. The last step may branch with `paths`. */
|
|
877
900
|
steps: components["schemas"]["UpsertWorkflowStepDto"][];
|
|
878
901
|
/** @description Marks the row as managed by code (CLI / SDK). Defaults to true on this endpoint. */
|
|
879
902
|
managedByCode?: boolean;
|
|
@@ -1975,6 +1998,8 @@ interface components {
|
|
|
1975
1998
|
executionPath?: components["schemas"]["ExecutionPathStepDto"][];
|
|
1976
1999
|
};
|
|
1977
2000
|
RunStepDto: {
|
|
2001
|
+
/** @description Name later steps use in ={{step:<key>,path}}. Ad-hoc runs have no trigger. */
|
|
2002
|
+
key?: string;
|
|
1978
2003
|
/** @description Workflow app id (catalogue slug), e.g. `http`, `gmail`. */
|
|
1979
2004
|
appId: string;
|
|
1980
2005
|
/** @description Action id within the app, e.g. `http_action_send-request`. Discover via GET /workflow-apps. */
|
|
@@ -2761,11 +2786,42 @@ interface TriggerDefinition {
|
|
|
2761
2786
|
description?: string;
|
|
2762
2787
|
}
|
|
2763
2788
|
interface WorkflowStepDefinition {
|
|
2789
|
+
/**
|
|
2790
|
+
* Name later steps use with `ref.step(key, ...)`. Keyed steps keep their
|
|
2791
|
+
* node id across deploys. `trigger` is reserved.
|
|
2792
|
+
*/
|
|
2793
|
+
key?: string;
|
|
2764
2794
|
/** Action definition (or inline action-shaped object). */
|
|
2765
2795
|
use: ActionDefinition;
|
|
2766
|
-
/** Per-step input overrides. */
|
|
2796
|
+
/** Per-step input overrides. Values may contain `ref.trigger` / `ref.step`. */
|
|
2767
2797
|
input?: Record<string, unknown>;
|
|
2768
2798
|
name?: string;
|
|
2799
|
+
/**
|
|
2800
|
+
* Branches after this step. Only on Conditional Paths, Manually Decide Path,
|
|
2801
|
+
* or Request Approval (approved path first, then rejected), and only on the
|
|
2802
|
+
* last step of a list. Put later steps inside each path.
|
|
2803
|
+
*/
|
|
2804
|
+
paths?: WorkflowPathDefinition[];
|
|
2805
|
+
}
|
|
2806
|
+
/** Conditions Conditional Paths evaluates (same list as the builder). */
|
|
2807
|
+
declare const PATH_CONDITIONS: readonly ["contains", "does_not_contain", "equals", "does_not_equal", "exists", "does_not_exist", "starts_with", "ends_with", "is_empty", "is_not_empty", "comes_before", "comes_after", "is_in_the_past", "is_in_the_future", "is_true", "is_false", "is_truthy", "is_falsey", "is_greater_than", "is_less_than", "is_greater_than_or_equal_to", "is_less_than_or_equal_to", "matches_regex", "does_not_match_regex"];
|
|
2808
|
+
type PathConditionType = (typeof PATH_CONDITIONS)[number];
|
|
2809
|
+
interface PathCondition {
|
|
2810
|
+
/** One reference: `ref.trigger(...)` or `ref.step(...)`. */
|
|
2811
|
+
field: string;
|
|
2812
|
+
condition: PathConditionType;
|
|
2813
|
+
/** Compared as text. Omit for exists / is_empty / is_true and similar. */
|
|
2814
|
+
value?: string;
|
|
2815
|
+
}
|
|
2816
|
+
interface WorkflowPathDefinition {
|
|
2817
|
+
/** Unique on its step. On Request Approval use `Approved` / `Rejected`. */
|
|
2818
|
+
label: string;
|
|
2819
|
+
/**
|
|
2820
|
+
* Conditional Paths only. Groups are OR-ed, conditions in a group AND-ed.
|
|
2821
|
+
* Omit to always take this path.
|
|
2822
|
+
*/
|
|
2823
|
+
when?: PathCondition[][];
|
|
2824
|
+
steps: WorkflowStepDefinition[];
|
|
2769
2825
|
}
|
|
2770
2826
|
interface WorkflowDefinition {
|
|
2771
2827
|
kind: typeof DEFINE_KINDS.workflow;
|
|
@@ -2779,7 +2835,7 @@ interface WorkflowDefinition {
|
|
|
2779
2835
|
* `runs.start` ignores this and runs the steps only.
|
|
2780
2836
|
*/
|
|
2781
2837
|
trigger?: TriggerDefinition;
|
|
2782
|
-
/**
|
|
2838
|
+
/** Steps in order. The last step may branch with `paths`. */
|
|
2783
2839
|
steps: WorkflowStepDefinition[];
|
|
2784
2840
|
}
|
|
2785
2841
|
type AgentToolDefinition = ActionDefinition | WorkflowDefinition | {
|
|
@@ -3390,6 +3446,8 @@ declare class QueuesResource {
|
|
|
3390
3446
|
}
|
|
3391
3447
|
|
|
3392
3448
|
interface StartRunStep {
|
|
3449
|
+
/** Name later steps use with `ref.step(key, ...)`. */
|
|
3450
|
+
key?: string;
|
|
3393
3451
|
appId: string;
|
|
3394
3452
|
actionId: string;
|
|
3395
3453
|
connectionId?: string;
|
|
@@ -3542,12 +3600,21 @@ declare class VariablesResource {
|
|
|
3542
3600
|
}
|
|
3543
3601
|
|
|
3544
3602
|
interface UpsertWorkflowStepInput {
|
|
3603
|
+
/** Name later steps use in `={{step:<key>,path}}`. Keeps the node id stable. */
|
|
3604
|
+
key?: string;
|
|
3545
3605
|
appId: string;
|
|
3546
3606
|
actionId: string;
|
|
3547
3607
|
connectionId?: string;
|
|
3548
3608
|
input?: Record<string, unknown>;
|
|
3549
3609
|
name?: string;
|
|
3550
3610
|
description?: string;
|
|
3611
|
+
/** Branches after this step (last step of a list only). */
|
|
3612
|
+
paths?: UpsertWorkflowPathInput[];
|
|
3613
|
+
}
|
|
3614
|
+
interface UpsertWorkflowPathInput {
|
|
3615
|
+
label: string;
|
|
3616
|
+
when?: WorkflowPathDefinition['when'];
|
|
3617
|
+
steps: UpsertWorkflowStepInput[];
|
|
3551
3618
|
}
|
|
3552
3619
|
interface UpsertWorkflowTriggerInput {
|
|
3553
3620
|
triggerId: string;
|
package/dist/react.d.ts
CHANGED
|
@@ -810,13 +810,18 @@ interface components {
|
|
|
810
810
|
requestedCount: number;
|
|
811
811
|
};
|
|
812
812
|
UpsertWorkflowStepDto: {
|
|
813
|
+
/**
|
|
814
|
+
* @description Name later steps use in ={{step:<key>,path}}. Keyed steps keep their node id across deploys. "trigger" is reserved.
|
|
815
|
+
* @example loadCase
|
|
816
|
+
*/
|
|
817
|
+
key?: string;
|
|
813
818
|
/** @description Workflow app id (catalogue slug). */
|
|
814
819
|
appId: string;
|
|
815
820
|
/** @description Catalogue action id. */
|
|
816
821
|
actionId: string;
|
|
817
822
|
/** @description Connection instance UUID for this step. */
|
|
818
823
|
connectionId?: string;
|
|
819
|
-
/** @description Action input / config fields. */
|
|
824
|
+
/** @description Action input / config fields. String values may use ={{step:trigger,field}} or ={{step:<key>,path,to,value}}. */
|
|
820
825
|
input?: {
|
|
821
826
|
[key: string]: unknown;
|
|
822
827
|
};
|
|
@@ -824,6 +829,24 @@ interface components {
|
|
|
824
829
|
name?: string;
|
|
825
830
|
/** @description Step description. */
|
|
826
831
|
description?: string;
|
|
832
|
+
/** @description Branches after this step. Only on flow-control_action_conditional-paths, flow-control_action_manually-decide-paths, or flow-control_action_request-approval (approved path first, then rejected), and only on the last step of a list. */
|
|
833
|
+
paths?: components["schemas"]["UpsertWorkflowPathDto"][];
|
|
834
|
+
};
|
|
835
|
+
UpsertWorkflowPathConditionDto: {
|
|
836
|
+
/** @description One step reference, e.g. ={{step:load,amount}}. */
|
|
837
|
+
field: string;
|
|
838
|
+
/** @description contains, does_not_contain, equals, does_not_equal, exists, does_not_exist, starts_with, ends_with, is_empty, is_not_empty, comes_before, comes_after, is_in_the_past, is_in_the_future, is_true, is_false, is_truthy, is_falsey, is_greater_than, is_less_than, is_greater_than_or_equal_to, is_less_than_or_equal_to, matches_regex, does_not_match_regex. */
|
|
839
|
+
condition: string;
|
|
840
|
+
/** @description Value to compare with. */
|
|
841
|
+
value?: string;
|
|
842
|
+
};
|
|
843
|
+
UpsertWorkflowPathDto: {
|
|
844
|
+
/** @description Path label, unique on its step. */
|
|
845
|
+
label: string;
|
|
846
|
+
/** @description Conditional Paths only. Groups are OR-ed, conditions inside a group AND-ed. Omit to always take this path. */
|
|
847
|
+
when?: components["schemas"]["UpsertWorkflowPathConditionDto"][][];
|
|
848
|
+
/** @description Steps on this path. */
|
|
849
|
+
steps: components["schemas"]["UpsertWorkflowStepDto"][];
|
|
827
850
|
};
|
|
828
851
|
UpsertWorkflowTriggerInputFieldDto: {
|
|
829
852
|
/** @description Field id. Callers pass this key to workflows.execute. */
|
|
@@ -873,7 +896,7 @@ interface components {
|
|
|
873
896
|
isActive?: boolean;
|
|
874
897
|
/** @description Catalogue trigger. Omit for a Manually Run trigger with no input fields. */
|
|
875
898
|
trigger?: components["schemas"]["UpsertWorkflowTriggerDto"];
|
|
876
|
-
/** @description
|
|
899
|
+
/** @description Catalogue-action steps in order. The last step may branch with `paths`. */
|
|
877
900
|
steps: components["schemas"]["UpsertWorkflowStepDto"][];
|
|
878
901
|
/** @description Marks the row as managed by code (CLI / SDK). Defaults to true on this endpoint. */
|
|
879
902
|
managedByCode?: boolean;
|
|
@@ -1975,6 +1998,8 @@ interface components {
|
|
|
1975
1998
|
executionPath?: components["schemas"]["ExecutionPathStepDto"][];
|
|
1976
1999
|
};
|
|
1977
2000
|
RunStepDto: {
|
|
2001
|
+
/** @description Name later steps use in ={{step:<key>,path}}. Ad-hoc runs have no trigger. */
|
|
2002
|
+
key?: string;
|
|
1978
2003
|
/** @description Workflow app id (catalogue slug), e.g. `http`, `gmail`. */
|
|
1979
2004
|
appId: string;
|
|
1980
2005
|
/** @description Action id within the app, e.g. `http_action_send-request`. Discover via GET /workflow-apps. */
|
|
@@ -2761,11 +2786,42 @@ interface TriggerDefinition {
|
|
|
2761
2786
|
description?: string;
|
|
2762
2787
|
}
|
|
2763
2788
|
interface WorkflowStepDefinition {
|
|
2789
|
+
/**
|
|
2790
|
+
* Name later steps use with `ref.step(key, ...)`. Keyed steps keep their
|
|
2791
|
+
* node id across deploys. `trigger` is reserved.
|
|
2792
|
+
*/
|
|
2793
|
+
key?: string;
|
|
2764
2794
|
/** Action definition (or inline action-shaped object). */
|
|
2765
2795
|
use: ActionDefinition;
|
|
2766
|
-
/** Per-step input overrides. */
|
|
2796
|
+
/** Per-step input overrides. Values may contain `ref.trigger` / `ref.step`. */
|
|
2767
2797
|
input?: Record<string, unknown>;
|
|
2768
2798
|
name?: string;
|
|
2799
|
+
/**
|
|
2800
|
+
* Branches after this step. Only on Conditional Paths, Manually Decide Path,
|
|
2801
|
+
* or Request Approval (approved path first, then rejected), and only on the
|
|
2802
|
+
* last step of a list. Put later steps inside each path.
|
|
2803
|
+
*/
|
|
2804
|
+
paths?: WorkflowPathDefinition[];
|
|
2805
|
+
}
|
|
2806
|
+
/** Conditions Conditional Paths evaluates (same list as the builder). */
|
|
2807
|
+
declare const PATH_CONDITIONS: readonly ["contains", "does_not_contain", "equals", "does_not_equal", "exists", "does_not_exist", "starts_with", "ends_with", "is_empty", "is_not_empty", "comes_before", "comes_after", "is_in_the_past", "is_in_the_future", "is_true", "is_false", "is_truthy", "is_falsey", "is_greater_than", "is_less_than", "is_greater_than_or_equal_to", "is_less_than_or_equal_to", "matches_regex", "does_not_match_regex"];
|
|
2808
|
+
type PathConditionType = (typeof PATH_CONDITIONS)[number];
|
|
2809
|
+
interface PathCondition {
|
|
2810
|
+
/** One reference: `ref.trigger(...)` or `ref.step(...)`. */
|
|
2811
|
+
field: string;
|
|
2812
|
+
condition: PathConditionType;
|
|
2813
|
+
/** Compared as text. Omit for exists / is_empty / is_true and similar. */
|
|
2814
|
+
value?: string;
|
|
2815
|
+
}
|
|
2816
|
+
interface WorkflowPathDefinition {
|
|
2817
|
+
/** Unique on its step. On Request Approval use `Approved` / `Rejected`. */
|
|
2818
|
+
label: string;
|
|
2819
|
+
/**
|
|
2820
|
+
* Conditional Paths only. Groups are OR-ed, conditions in a group AND-ed.
|
|
2821
|
+
* Omit to always take this path.
|
|
2822
|
+
*/
|
|
2823
|
+
when?: PathCondition[][];
|
|
2824
|
+
steps: WorkflowStepDefinition[];
|
|
2769
2825
|
}
|
|
2770
2826
|
interface WorkflowDefinition {
|
|
2771
2827
|
kind: typeof DEFINE_KINDS.workflow;
|
|
@@ -2779,7 +2835,7 @@ interface WorkflowDefinition {
|
|
|
2779
2835
|
* `runs.start` ignores this and runs the steps only.
|
|
2780
2836
|
*/
|
|
2781
2837
|
trigger?: TriggerDefinition;
|
|
2782
|
-
/**
|
|
2838
|
+
/** Steps in order. The last step may branch with `paths`. */
|
|
2783
2839
|
steps: WorkflowStepDefinition[];
|
|
2784
2840
|
}
|
|
2785
2841
|
type AgentToolDefinition = ActionDefinition | WorkflowDefinition | {
|
|
@@ -3390,6 +3446,8 @@ declare class QueuesResource {
|
|
|
3390
3446
|
}
|
|
3391
3447
|
|
|
3392
3448
|
interface StartRunStep {
|
|
3449
|
+
/** Name later steps use with `ref.step(key, ...)`. */
|
|
3450
|
+
key?: string;
|
|
3393
3451
|
appId: string;
|
|
3394
3452
|
actionId: string;
|
|
3395
3453
|
connectionId?: string;
|
|
@@ -3542,12 +3600,21 @@ declare class VariablesResource {
|
|
|
3542
3600
|
}
|
|
3543
3601
|
|
|
3544
3602
|
interface UpsertWorkflowStepInput {
|
|
3603
|
+
/** Name later steps use in `={{step:<key>,path}}`. Keeps the node id stable. */
|
|
3604
|
+
key?: string;
|
|
3545
3605
|
appId: string;
|
|
3546
3606
|
actionId: string;
|
|
3547
3607
|
connectionId?: string;
|
|
3548
3608
|
input?: Record<string, unknown>;
|
|
3549
3609
|
name?: string;
|
|
3550
3610
|
description?: string;
|
|
3611
|
+
/** Branches after this step (last step of a list only). */
|
|
3612
|
+
paths?: UpsertWorkflowPathInput[];
|
|
3613
|
+
}
|
|
3614
|
+
interface UpsertWorkflowPathInput {
|
|
3615
|
+
label: string;
|
|
3616
|
+
when?: WorkflowPathDefinition['when'];
|
|
3617
|
+
steps: UpsertWorkflowStepInput[];
|
|
3551
3618
|
}
|
|
3552
3619
|
interface UpsertWorkflowTriggerInput {
|
|
3553
3620
|
triggerId: string;
|
package/dist/react.js
CHANGED
|
@@ -584,6 +584,33 @@ var ActionsResource = class {
|
|
|
584
584
|
var DEFINE_KINDS = {
|
|
585
585
|
action: "action",
|
|
586
586
|
workflow: "workflow"};
|
|
587
|
+
var PATH_CONDITIONS = [
|
|
588
|
+
"contains",
|
|
589
|
+
"does_not_contain",
|
|
590
|
+
"equals",
|
|
591
|
+
"does_not_equal",
|
|
592
|
+
"exists",
|
|
593
|
+
"does_not_exist",
|
|
594
|
+
"starts_with",
|
|
595
|
+
"ends_with",
|
|
596
|
+
"is_empty",
|
|
597
|
+
"is_not_empty",
|
|
598
|
+
"comes_before",
|
|
599
|
+
"comes_after",
|
|
600
|
+
"is_in_the_past",
|
|
601
|
+
"is_in_the_future",
|
|
602
|
+
"is_true",
|
|
603
|
+
"is_false",
|
|
604
|
+
"is_truthy",
|
|
605
|
+
"is_falsey",
|
|
606
|
+
"is_greater_than",
|
|
607
|
+
"is_less_than",
|
|
608
|
+
"is_greater_than_or_equal_to",
|
|
609
|
+
"is_less_than_or_equal_to",
|
|
610
|
+
"matches_regex",
|
|
611
|
+
"does_not_match_regex"
|
|
612
|
+
];
|
|
613
|
+
new Set(PATH_CONDITIONS);
|
|
587
614
|
function resolveActionAppId(action) {
|
|
588
615
|
if (action.appId?.trim()) {
|
|
589
616
|
return action.appId.trim();
|
|
@@ -1843,12 +1870,19 @@ function stepFromDefinition(step) {
|
|
|
1843
1870
|
...step.name ? { name: step.name } : {}
|
|
1844
1871
|
};
|
|
1845
1872
|
}
|
|
1873
|
+
if (step.paths?.length) {
|
|
1874
|
+
throw new Error(
|
|
1875
|
+
"runs.start runs straight lines only. Deploy workflows with paths, then execute them."
|
|
1876
|
+
);
|
|
1877
|
+
}
|
|
1846
1878
|
const use = step.use;
|
|
1847
1879
|
const input = {
|
|
1848
1880
|
...use.input ?? {},
|
|
1849
1881
|
...step.input ?? {}
|
|
1850
1882
|
};
|
|
1883
|
+
const key = step.key;
|
|
1851
1884
|
return {
|
|
1885
|
+
...key ? { key } : {},
|
|
1852
1886
|
appId: resolveActionAppId(use),
|
|
1853
1887
|
actionId: resolveActionId(use),
|
|
1854
1888
|
...use.connection?.id ? { connectionId: use.connection.id } : {},
|
|
@@ -2064,6 +2098,7 @@ function triggerToUpsertInput(trigger) {
|
|
|
2064
2098
|
function stepToUpsertInput(step) {
|
|
2065
2099
|
const use = step.use;
|
|
2066
2100
|
return {
|
|
2101
|
+
...step.key ? { key: step.key } : {},
|
|
2067
2102
|
appId: resolveActionAppId(use),
|
|
2068
2103
|
actionId: resolveActionId(use),
|
|
2069
2104
|
connectionId: use.connection?.id,
|
|
@@ -2072,7 +2107,14 @@ function stepToUpsertInput(step) {
|
|
|
2072
2107
|
...step.input ?? {}
|
|
2073
2108
|
},
|
|
2074
2109
|
name: step.name ?? use.name,
|
|
2075
|
-
description: use.description
|
|
2110
|
+
description: use.description,
|
|
2111
|
+
...step.paths?.length ? {
|
|
2112
|
+
paths: step.paths.map((path) => ({
|
|
2113
|
+
label: path.label,
|
|
2114
|
+
...path.when ? { when: path.when } : {},
|
|
2115
|
+
steps: path.steps.map(stepToUpsertInput)
|
|
2116
|
+
}))
|
|
2117
|
+
} : {}
|
|
2076
2118
|
};
|
|
2077
2119
|
}
|
|
2078
2120
|
function workflowDefinitionToUpsert(def) {
|