@oomol-lab/open-flow 0.1.0-beta.80 → 0.1.0-beta.82
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 +35 -0
- package/dist/browser/{FlowCanvas-CrsiDHK8.js → FlowCanvas-Dew2fmoT.js} +55 -274
- package/dist/browser/{createResourceDialog-CS3u9ga9.js → createResourceDialog-bdOJa5Zk.js} +2 -1
- package/dist/browser/{exportPng-BOPfjeEi.js → exportPng-Cjdb6COo.js} +2 -2
- package/dist/browser/{flowChanges-pFjPHU5k.js → flowChanges-URBEd4DI.js} +2719 -78
- package/dist/browser/{flowWorkspace-CRlqc403.js → flowWorkspace-BlXx-yAn.js} +445 -2699
- package/dist/browser/{markdownContent-CAG_CQfH.js → markdownContent-D8G_oNOe.js} +18 -41
- package/dist/browser/{markdownContent-frwDfQQU.js → markdownContent-IS8xXDoc.js} +18 -40
- package/dist/browser/preview.css +88 -80
- package/dist/browser/preview.js +291 -188
- package/dist/browser/ui.css +8 -0
- package/dist/browser/{dist-CHwj9BhV.js → videoLink-NAWDmBtf.js} +35 -1
- package/dist/browser/workbench-contract.d.ts +6 -0
- package/dist/browser/workbench.css +259 -251
- package/dist/browser/workbench.d.ts +2 -0
- package/dist/browser/workbench.js +311 -143
- package/dist/browser/{ContentIcon-CMn0c-kl.js → wrapLayout-DZvW9dBs.js} +4397 -4152
- package/dist/command/index.js +43 -41
- package/dist/common/authoring.d.ts +1 -1
- package/dist/common/control-api-conformance.js +306 -2
- package/dist/common/control-api.d.ts +20 -0
- package/dist/common/control-api.js +306 -4
- package/dist/common/control-requests.d.ts +3 -5
- package/dist/common/control-requests.js +24 -10
- package/dist/common/flow-authoring.js +19 -3
- package/dist/common/flow-encoding.d.ts +1 -0
- package/dist/common/flow-encoding.js +167 -1
- package/dist/common/flow-semantics.js +44 -7
- package/dist/common/flow-workflowBundle.d.ts +27 -0
- package/dist/common/flow-workflowFile.d.ts +2 -0
- package/dist/common/flow-workflowReferences.d.ts +4 -0
- package/dist/common/mcp.d.ts +2 -0
- package/dist/common/mcp.js +312 -4
- package/dist/render/browser/licenses.md +4047 -0
- package/dist/render/browser/runtime.css +14877 -0
- package/dist/render/browser/runtime.js +266765 -0
- package/dist/render/common/png.d.ts +24 -0
- package/dist/render/node/index.d.ts +11 -0
- package/dist/render/node/index.js +9491 -0
- package/dist/render/node/licenses.md +75 -0
- package/package.json +12 -2
- package/src/connector/common/actionContract.ts +26 -0
- package/src/control/common/api.ts +50 -0
- package/src/control/common/flowDecoders.ts +2 -0
- package/src/control/common/mcp.ts +4 -4
- package/src/control/common/requests.ts +12 -1
- package/src/flow/common/edgeChanges.ts +9 -6
- package/src/flow/common/encoding.ts +1 -0
- package/src/flow/common/semantics.ts +11 -8
- package/src/flow/common/workflowBundle.ts +117 -0
- package/src/flow/common/workflowFile.ts +4 -0
- package/src/flow/common/workflowReferences.ts +20 -0
|
@@ -82,6 +82,7 @@ export declare function authoringNode(content: RevisionContent, ref: string): {
|
|
|
82
82
|
})[];
|
|
83
83
|
};
|
|
84
84
|
export declare function readAuthoring(content: RevisionContent, query?: AuthoringRead): {
|
|
85
|
+
nodes?: undefined;
|
|
85
86
|
text: {
|
|
86
87
|
node: string;
|
|
87
88
|
field: "code" | "prompt";
|
|
@@ -92,7 +93,6 @@ export declare function readAuthoring(content: RevisionContent, query?: Authorin
|
|
|
92
93
|
nextStart?: number | undefined;
|
|
93
94
|
truncated: boolean;
|
|
94
95
|
};
|
|
95
|
-
nodes?: undefined;
|
|
96
96
|
edges?: undefined;
|
|
97
97
|
} | {
|
|
98
98
|
text?: undefined;
|
|
@@ -9474,6 +9474,27 @@ function assertDocumentHttpAuthBindings(content) {
|
|
|
9474
9474
|
for (const graphNode of Object.values(content.graph.nodes)) if (graphNode.kind == "task" && "executor" in graphNode.task && ["openapi", "http-request"].includes(graphNode.task.executor.kind)) assertHttpAuthBindings(graphNode.inputs);
|
|
9475
9475
|
}
|
|
9476
9476
|
//#endregion
|
|
9477
|
+
//#region src/flow/common/condition.ts
|
|
9478
|
+
function clearConditionBinding(operand) {
|
|
9479
|
+
return operand.kind == "source" && operand.source.kind == "binding" ? { kind: "value" } : operand;
|
|
9480
|
+
}
|
|
9481
|
+
function clearConditionBindings(node) {
|
|
9482
|
+
return {
|
|
9483
|
+
...node,
|
|
9484
|
+
cases: node.cases.map((item) => ({
|
|
9485
|
+
...item,
|
|
9486
|
+
groups: item.groups.map((group) => ({
|
|
9487
|
+
...group,
|
|
9488
|
+
expressions: group.expressions.map((expression) => ({
|
|
9489
|
+
...expression,
|
|
9490
|
+
left: clearConditionBinding(expression.left),
|
|
9491
|
+
...expression.right == null ? {} : { right: clearConditionBinding(expression.right) }
|
|
9492
|
+
}))
|
|
9493
|
+
}))
|
|
9494
|
+
}))
|
|
9495
|
+
};
|
|
9496
|
+
}
|
|
9497
|
+
//#endregion
|
|
9477
9498
|
//#region src/flow/common/change.ts
|
|
9478
9499
|
/** Lossless upgrade of readable content. Historical content and its encoding stay unchanged. */
|
|
9479
9500
|
function upgradeRevisionContent(content) {
|
|
@@ -9582,6 +9603,31 @@ function findEngineContract(contract) {
|
|
|
9582
9603
|
};
|
|
9583
9604
|
}
|
|
9584
9605
|
//#endregion
|
|
9606
|
+
//#region src/flow/common/workflowReferences.ts
|
|
9607
|
+
/** Workflow declarations share discovery across authoring, admission and resource indexing. */
|
|
9608
|
+
function nodeWorkflowReferences(node) {
|
|
9609
|
+
if (node.kind != "task") return [];
|
|
9610
|
+
if ("moduleId" in node.task) return (node.task.capabilities ?? []).flatMap((item, index) => item.kind == "workflow" ? [{
|
|
9611
|
+
target: item,
|
|
9612
|
+
path: `task/capabilities/${index}`,
|
|
9613
|
+
tool: item.name
|
|
9614
|
+
}] : []);
|
|
9615
|
+
if (node.task.executor.kind == "workflow") return [{
|
|
9616
|
+
target: {
|
|
9617
|
+
...node.task.executor,
|
|
9618
|
+
inputs: node.task.inputs.filter((port) => "handle" in port),
|
|
9619
|
+
outputs: node.task.outputs.filter((port) => "handle" in port)
|
|
9620
|
+
},
|
|
9621
|
+
path: "task/executor"
|
|
9622
|
+
}];
|
|
9623
|
+
if (node.task.executor.kind == "agent") return node.task.executor.tools.flatMap((item, index) => item.kind == "workflow" ? [{
|
|
9624
|
+
target: item,
|
|
9625
|
+
path: `task/executor/tools/${index}`,
|
|
9626
|
+
tool: item.name
|
|
9627
|
+
}] : []);
|
|
9628
|
+
return [];
|
|
9629
|
+
}
|
|
9630
|
+
//#endregion
|
|
9585
9631
|
//#region src/workflow/common/workflow.ts
|
|
9586
9632
|
var portSchema = object({
|
|
9587
9633
|
handle: string$1().min(1),
|
|
@@ -10495,12 +10541,12 @@ function decodeLiveDetails(value) {
|
|
|
10495
10541
|
publication: current,
|
|
10496
10542
|
status,
|
|
10497
10543
|
enabled: source.enabled,
|
|
10498
|
-
entries: decodeEntries(source.entries, current),
|
|
10544
|
+
entries: decodeEntries$1(source.entries, current),
|
|
10499
10545
|
version: 1
|
|
10500
10546
|
};
|
|
10501
10547
|
}
|
|
10502
10548
|
/** Both producers and consumers enforce the same published-entry invariants. */
|
|
10503
|
-
function decodeEntries(values, current) {
|
|
10549
|
+
function decodeEntries$1(values, current) {
|
|
10504
10550
|
const parsed = array(entrySchema).safeParse(values);
|
|
10505
10551
|
if (!parsed.success) return invalidResponse();
|
|
10506
10552
|
const ids = /* @__PURE__ */ new Set();
|
|
@@ -10547,11 +10593,109 @@ function providerIconAppearance(metadata, position) {
|
|
|
10547
10593
|
};
|
|
10548
10594
|
}
|
|
10549
10595
|
//#endregion
|
|
10596
|
+
//#region src/trigger/common/config.ts
|
|
10597
|
+
/** Deployment-bound selections owned by the Trigger configuration contract. */
|
|
10598
|
+
function clearTriggerExternalConfig(key, config) {
|
|
10599
|
+
const fields = key == "jira.on_issue_event" || key == "intercom.on_conversation_event" || key == "sentry.on_issue_alert" || key == "zoom.on_recording_ready" || key == "fireflies.on_meeting_ready" ? ["sourceId", "eventTypes"] : key == "slackbot.on_event" ? [
|
|
10600
|
+
"sourceId",
|
|
10601
|
+
"eventTypes",
|
|
10602
|
+
"channelIds"
|
|
10603
|
+
] : key == "feishu_app_bot.on_event" ? [
|
|
10604
|
+
"sourceId",
|
|
10605
|
+
"eventTypes",
|
|
10606
|
+
"resource",
|
|
10607
|
+
"chatIds"
|
|
10608
|
+
] : key == "linear.on_issue_changed" ? ["teamId", "stateIds"] : [];
|
|
10609
|
+
return {
|
|
10610
|
+
...config,
|
|
10611
|
+
...Object.fromEntries(fields.map((field) => [field, { kind: "unset" }]))
|
|
10612
|
+
};
|
|
10613
|
+
}
|
|
10614
|
+
//#endregion
|
|
10615
|
+
//#region src/flow/common/connectionUsage.ts
|
|
10616
|
+
function clearNodeConnections(graph, connectionId) {
|
|
10617
|
+
return {
|
|
10618
|
+
...graph,
|
|
10619
|
+
nodes: Object.fromEntries(Object.entries(graph.nodes).map(([id, node]) => {
|
|
10620
|
+
if ((node.kind == "poll" || node.kind == "integration") && (connectionId == null || node.connectionId == connectionId)) {
|
|
10621
|
+
const { connectionId: _, ...remaining } = node;
|
|
10622
|
+
return [id, remaining];
|
|
10623
|
+
}
|
|
10624
|
+
if (node.kind != "task") return [id, node];
|
|
10625
|
+
if ("executor" in node.task) {
|
|
10626
|
+
const executor = node.task.executor;
|
|
10627
|
+
const clear = (value) => {
|
|
10628
|
+
if (value.connectionId === "") return value;
|
|
10629
|
+
if (connectionId != null && value.connectionId != connectionId) return value;
|
|
10630
|
+
const { connectionId: _, ...rest } = value;
|
|
10631
|
+
return rest;
|
|
10632
|
+
};
|
|
10633
|
+
if (executor.kind == "connector") return [id, {
|
|
10634
|
+
...node,
|
|
10635
|
+
task: {
|
|
10636
|
+
...node.task,
|
|
10637
|
+
executor: clear(executor)
|
|
10638
|
+
}
|
|
10639
|
+
}];
|
|
10640
|
+
if (executor.kind == "agent") return [id, {
|
|
10641
|
+
...node,
|
|
10642
|
+
task: {
|
|
10643
|
+
...node.task,
|
|
10644
|
+
executor: {
|
|
10645
|
+
...executor,
|
|
10646
|
+
tools: executor.tools.map(clear),
|
|
10647
|
+
...executor.notification == null ? {} : { notification: clear(executor.notification) }
|
|
10648
|
+
}
|
|
10649
|
+
}
|
|
10650
|
+
}];
|
|
10651
|
+
return [id, node];
|
|
10652
|
+
}
|
|
10653
|
+
const capabilities = node.task.capabilities?.map((capability) => {
|
|
10654
|
+
if (capability.kind == "workflow" || capability.kind == "http") return capability;
|
|
10655
|
+
if (!("mode" in capability)) {
|
|
10656
|
+
if ("action" in capability) {
|
|
10657
|
+
const { connectionId: selected, ...rest } = capability;
|
|
10658
|
+
return {
|
|
10659
|
+
...rest,
|
|
10660
|
+
connections: capability.connections.filter((item) => connectionId != null && item.connectionId != connectionId),
|
|
10661
|
+
...selected != null && connectionId != null && selected != connectionId ? { connectionId: selected } : {}
|
|
10662
|
+
};
|
|
10663
|
+
}
|
|
10664
|
+
return {
|
|
10665
|
+
...capability,
|
|
10666
|
+
...connectionId == null && (capability.connectionHints?.length ?? 0) > 0 ? { actionHints: [.../* @__PURE__ */ new Set([...capability.actionHints ?? [], ...capability.connectionHints.map((hint) => hint.action)])] } : {},
|
|
10667
|
+
...capability.connectionHints == null ? {} : { connectionHints: capability.connectionHints.filter((item) => connectionId != null && item.connectionId != connectionId) }
|
|
10668
|
+
};
|
|
10669
|
+
}
|
|
10670
|
+
if (capability.mode != "independent") return capability;
|
|
10671
|
+
return {
|
|
10672
|
+
...capability,
|
|
10673
|
+
actions: capability.actions.map((action) => {
|
|
10674
|
+
if (action.connectionId === "") return action;
|
|
10675
|
+
if (connectionId != null && action.connectionId != connectionId) return action;
|
|
10676
|
+
const { connectionId: _, ...remaining } = action;
|
|
10677
|
+
return remaining;
|
|
10678
|
+
})
|
|
10679
|
+
};
|
|
10680
|
+
});
|
|
10681
|
+
return [id, capabilities == null ? node : {
|
|
10682
|
+
...node,
|
|
10683
|
+
task: {
|
|
10684
|
+
...node.task,
|
|
10685
|
+
capabilities
|
|
10686
|
+
}
|
|
10687
|
+
}];
|
|
10688
|
+
}))
|
|
10689
|
+
};
|
|
10690
|
+
}
|
|
10691
|
+
//#endregion
|
|
10550
10692
|
//#region src/flow/common/workflowFile.ts
|
|
10551
10693
|
var envelope = strictObject({
|
|
10552
10694
|
kind: literal("open-flow-workflow"),
|
|
10553
10695
|
version: literal(1),
|
|
10554
10696
|
name: string$1().optional(),
|
|
10697
|
+
icon: string$1().optional(),
|
|
10698
|
+
description: string$1().optional(),
|
|
10555
10699
|
content: unknown(),
|
|
10556
10700
|
presentation: record$3(string$1(), json$4()).optional()
|
|
10557
10701
|
});
|
|
@@ -10564,6 +10708,126 @@ function decodeWorkflowFile(value) {
|
|
|
10564
10708
|
content: decodeRevisionContent(file.content)
|
|
10565
10709
|
};
|
|
10566
10710
|
}
|
|
10711
|
+
function cleanInput(input) {
|
|
10712
|
+
if (input.kind != "sources" || !input.sources.some((source) => source.kind == "binding")) return input;
|
|
10713
|
+
const sources = input.sources.filter((source) => source.kind != "binding");
|
|
10714
|
+
return sources.length == 0 ? { kind: "unset" } : {
|
|
10715
|
+
kind: "sources",
|
|
10716
|
+
sources
|
|
10717
|
+
};
|
|
10718
|
+
}
|
|
10719
|
+
/** Clear only owned structured references, never strings in code or business values. */
|
|
10720
|
+
function cleanWorkflowFile(value) {
|
|
10721
|
+
const file = decodeWorkflowFile(value);
|
|
10722
|
+
const original = file.content.document.graph;
|
|
10723
|
+
const graph = clearNodeConnections(original);
|
|
10724
|
+
const nodes = Object.fromEntries(Object.entries(graph.nodes).map(([id, source]) => {
|
|
10725
|
+
let node = source;
|
|
10726
|
+
if ("inputs" in node) node = {
|
|
10727
|
+
...node,
|
|
10728
|
+
inputs: Object.fromEntries(Object.entries(node.inputs).map(([key, input]) => [key, cleanInput(input)]))
|
|
10729
|
+
};
|
|
10730
|
+
if (node.kind == "outputs") node = {
|
|
10731
|
+
...node,
|
|
10732
|
+
outputMappings: Object.fromEntries(Object.entries(node.outputMappings).map(([key, input]) => [key, cleanInput(input)]))
|
|
10733
|
+
};
|
|
10734
|
+
if (node.kind == "condition") node = clearConditionBindings(node);
|
|
10735
|
+
if (node.kind == "error" && node.sourceFlowIds != null) node = {
|
|
10736
|
+
...node,
|
|
10737
|
+
sourceFlowIds: []
|
|
10738
|
+
};
|
|
10739
|
+
if (node.kind == "poll" || node.kind == "integration") node = {
|
|
10740
|
+
...node,
|
|
10741
|
+
config: clearTriggerExternalConfig(node.definition.key, node.config)
|
|
10742
|
+
};
|
|
10743
|
+
return [id, node];
|
|
10744
|
+
}));
|
|
10745
|
+
return {
|
|
10746
|
+
file: {
|
|
10747
|
+
...file,
|
|
10748
|
+
content: {
|
|
10749
|
+
...file.content,
|
|
10750
|
+
document: {
|
|
10751
|
+
...file.content.document,
|
|
10752
|
+
bindings: {},
|
|
10753
|
+
graph: {
|
|
10754
|
+
...graph,
|
|
10755
|
+
nodes
|
|
10756
|
+
}
|
|
10757
|
+
}
|
|
10758
|
+
}
|
|
10759
|
+
},
|
|
10760
|
+
summary: {
|
|
10761
|
+
changedNodeIds: Object.keys(nodes).filter((id) => !dequal(nodes[id], original.nodes[id])),
|
|
10762
|
+
removedBindings: Object.keys(file.content.document.bindings).length
|
|
10763
|
+
}
|
|
10764
|
+
};
|
|
10765
|
+
}
|
|
10766
|
+
//#endregion
|
|
10767
|
+
//#region src/flow/common/workflowBundle.ts
|
|
10768
|
+
var entries = array(strictObject({
|
|
10769
|
+
flowId: string$1().min(1),
|
|
10770
|
+
file: unknown()
|
|
10771
|
+
})).min(1);
|
|
10772
|
+
var bundleSchema = strictObject({
|
|
10773
|
+
kind: literal("open-flow-workflow-bundle"),
|
|
10774
|
+
version: literal(1),
|
|
10775
|
+
entryFlowId: string$1().min(1),
|
|
10776
|
+
workflows: entries
|
|
10777
|
+
});
|
|
10778
|
+
var previewSchema = strictObject({
|
|
10779
|
+
version: literal(1),
|
|
10780
|
+
entryFlowId: string$1().min(1),
|
|
10781
|
+
workflows: entries,
|
|
10782
|
+
unavailableFlowIds: array(string$1().min(1))
|
|
10783
|
+
});
|
|
10784
|
+
function decodeEntries(value, entryFlowId, unavailableFlowIds = []) {
|
|
10785
|
+
const workflows = value.map(({ flowId, file }) => ({
|
|
10786
|
+
flowId,
|
|
10787
|
+
file: decodeWorkflowFile(file)
|
|
10788
|
+
}));
|
|
10789
|
+
const ids = new Set(workflows.map(({ flowId }) => flowId));
|
|
10790
|
+
if (ids.size != workflows.length || !ids.has(entryFlowId)) throw new TypeError("Workflow identities must be unique and include the entry workflow.");
|
|
10791
|
+
const unavailable = new Set(unavailableFlowIds);
|
|
10792
|
+
if (unavailable.size != unavailableFlowIds.length || unavailableFlowIds.some((id) => ids.has(id))) throw new TypeError("Invalid unavailable workflow identities.");
|
|
10793
|
+
for (const { file } of workflows) for (const node of Object.values(file.content.document.graph.nodes)) for (const { target } of nodeWorkflowReferences(node)) if (target.flowId && !ids.has(target.flowId) && !unavailable.has(target.flowId)) throw new TypeError("A referenced workflow is missing from the bundle.");
|
|
10794
|
+
return workflows;
|
|
10795
|
+
}
|
|
10796
|
+
function decodeWorkflowBundle(value) {
|
|
10797
|
+
checkJsonDepth(value, -4);
|
|
10798
|
+
const bundle = bundleSchema.parse(value);
|
|
10799
|
+
return {
|
|
10800
|
+
...bundle,
|
|
10801
|
+
workflows: decodeEntries(bundle.workflows, bundle.entryFlowId)
|
|
10802
|
+
};
|
|
10803
|
+
}
|
|
10804
|
+
function decodeWorkflowExportPreview(value) {
|
|
10805
|
+
checkJsonDepth(value, -4);
|
|
10806
|
+
const preview = previewSchema.parse(value);
|
|
10807
|
+
return {
|
|
10808
|
+
...preview,
|
|
10809
|
+
workflows: decodeEntries(preview.workflows, preview.entryFlowId, preview.unavailableFlowIds)
|
|
10810
|
+
};
|
|
10811
|
+
}
|
|
10812
|
+
function cleanWorkflowBundle(value) {
|
|
10813
|
+
const bundle = decodeWorkflowBundle(value);
|
|
10814
|
+
return {
|
|
10815
|
+
...bundle,
|
|
10816
|
+
workflows: bundle.workflows.map(({ flowId, file }) => ({
|
|
10817
|
+
flowId,
|
|
10818
|
+
file: cleanWorkflowFile(file).file
|
|
10819
|
+
}))
|
|
10820
|
+
};
|
|
10821
|
+
}
|
|
10822
|
+
function workflowBundleFromPreview(preview) {
|
|
10823
|
+
if (preview.unavailableFlowIds.length) throw new TypeError("Some referenced workflows are unavailable.");
|
|
10824
|
+
return cleanWorkflowBundle({
|
|
10825
|
+
kind: "open-flow-workflow-bundle",
|
|
10826
|
+
version: 1,
|
|
10827
|
+
entryFlowId: preview.entryFlowId,
|
|
10828
|
+
workflows: preview.workflows
|
|
10829
|
+
});
|
|
10830
|
+
}
|
|
10567
10831
|
new TextEncoder();
|
|
10568
10832
|
//#endregion
|
|
10569
10833
|
//#region src/control/common/providerAccess.ts
|
|
@@ -11308,6 +11572,8 @@ function flow(value) {
|
|
|
11308
11572
|
resourceReferences: resourceReferences(source.resourceReferences),
|
|
11309
11573
|
flowId: string(source.flowId),
|
|
11310
11574
|
name: string(source.name),
|
|
11575
|
+
...source.icon === void 0 ? {} : { icon: string(source.icon) },
|
|
11576
|
+
...source.description === void 0 ? {} : { description: string(source.description) },
|
|
11311
11577
|
status,
|
|
11312
11578
|
updatedAt: string(source.updatedAt),
|
|
11313
11579
|
version: 1
|
|
@@ -11794,6 +12060,18 @@ function decodeTagListItem(value) {
|
|
|
11794
12060
|
}
|
|
11795
12061
|
//#endregion
|
|
11796
12062
|
//#region src/control/common/api.ts
|
|
12063
|
+
function decodeWorkflowBundleImportResult(value) {
|
|
12064
|
+
const source = record$1(value);
|
|
12065
|
+
if (source.version != 1 || !Array.isArray(source.flows) || source.flows.length == 0) return invalidResponse();
|
|
12066
|
+
const entry = flow(source.flow);
|
|
12067
|
+
const flows = source.flows.map(flow);
|
|
12068
|
+
if (new Set(flows.map((item) => item.flowId)).size != flows.length || !flows.some((item) => item.flowId == entry.flowId)) return invalidResponse();
|
|
12069
|
+
return {
|
|
12070
|
+
version: 1,
|
|
12071
|
+
flow: entry,
|
|
12072
|
+
flows
|
|
12073
|
+
};
|
|
12074
|
+
}
|
|
11797
12075
|
function decodeRunEvent(value) {
|
|
11798
12076
|
const source = record$1(value);
|
|
11799
12077
|
const sequence = integer(source.sequence);
|
|
@@ -12108,6 +12386,32 @@ var ControlClient = class {
|
|
|
12108
12386
|
return invalidResponse();
|
|
12109
12387
|
}
|
|
12110
12388
|
}
|
|
12389
|
+
async getFlowExportPreview(flowId) {
|
|
12390
|
+
const value = await this.request(`/v1/flows/${segment(flowId)}/export-preview`);
|
|
12391
|
+
try {
|
|
12392
|
+
return decodeWorkflowExportPreview(value);
|
|
12393
|
+
} catch {
|
|
12394
|
+
return invalidResponse();
|
|
12395
|
+
}
|
|
12396
|
+
}
|
|
12397
|
+
async exportFlowBundle(flowId) {
|
|
12398
|
+
const preview = await this.getFlowExportPreview(flowId);
|
|
12399
|
+
if (preview.unavailableFlowIds.length) throw new ApiError(400, "flow.invalid", "Some referenced workflows are unavailable.");
|
|
12400
|
+
return workflowBundleFromPreview(preview);
|
|
12401
|
+
}
|
|
12402
|
+
async importFlowBundle(file, options = {}) {
|
|
12403
|
+
return decodeWorkflowBundleImportResult(await this.request("/v1/flows/import-bundle", {
|
|
12404
|
+
method: "POST",
|
|
12405
|
+
headers: { "Idempotency-Key": options.idempotencyKey ?? `flow-${randomId()}` },
|
|
12406
|
+
body: JSON.stringify({
|
|
12407
|
+
file,
|
|
12408
|
+
name: options.name,
|
|
12409
|
+
teamId: options.teamId,
|
|
12410
|
+
tagIds: options.tagIds,
|
|
12411
|
+
version: 1
|
|
12412
|
+
})
|
|
12413
|
+
}));
|
|
12414
|
+
}
|
|
12111
12415
|
async importFlow(file, options = {}) {
|
|
12112
12416
|
return flow(await this.request("/v1/flows/import", {
|
|
12113
12417
|
method: "POST",
|
|
@@ -27,8 +27,10 @@ import type { ResultQuery } from './run-results.js';
|
|
|
27
27
|
import { decodeResultList, decodeResultRead } from './run-results.js';
|
|
28
28
|
export { readResult, parseResultQuery, decodeResultList, decodeResultRead, type ResultCall, type ResultInfo, type ResultPage, type ResultQuery, } from './run-results.js';
|
|
29
29
|
import type { RunStatus } from './run-lifecycle.js';
|
|
30
|
+
import type { WorkflowBundle, WorkflowExportPreview } from './flow-workflowBundle.js';
|
|
30
31
|
import type { WorkflowFile } from './flow-workflowFile.js';
|
|
31
32
|
export type { WorkflowFile, WorkflowCleanupSummary } from './flow-workflowFile.js';
|
|
33
|
+
export type { WorkflowBundle, WorkflowExportPreview } from './flow-workflowBundle.js';
|
|
32
34
|
import type { InputPortDefinition, JsonValue, PortDefinition, RevisionContent, TriggerKeySnapshot, WaitAction } from './flow-change.js';
|
|
33
35
|
import type { FlowResourceReferences } from './flow-semantics.js';
|
|
34
36
|
export type { JsonValue, TriggerKeySnapshot, WaitAction } from './flow-change.js';
|
|
@@ -63,8 +65,16 @@ export interface FlowResources {
|
|
|
63
65
|
}
|
|
64
66
|
export interface FlowUpdate {
|
|
65
67
|
readonly name?: string;
|
|
68
|
+
readonly icon?: string | null;
|
|
69
|
+
readonly description?: string | null;
|
|
66
70
|
readonly tagIds?: readonly string[];
|
|
67
71
|
}
|
|
72
|
+
export interface WorkflowBundleImportResult {
|
|
73
|
+
readonly version: 1;
|
|
74
|
+
readonly flow: Flow;
|
|
75
|
+
readonly flows: readonly Flow[];
|
|
76
|
+
}
|
|
77
|
+
export declare function decodeWorkflowBundleImportResult(value: unknown): WorkflowBundleImportResult;
|
|
68
78
|
export interface FlowQuery {
|
|
69
79
|
readonly query?: string;
|
|
70
80
|
readonly tagIds?: readonly string[];
|
|
@@ -93,6 +103,8 @@ export interface Flow {
|
|
|
93
103
|
/** Connector Team scope used by the OOMOL resource cache. */
|
|
94
104
|
readonly connectorTeamId?: string;
|
|
95
105
|
readonly name: string;
|
|
106
|
+
readonly icon?: string;
|
|
107
|
+
readonly description?: string;
|
|
96
108
|
readonly status: 'active' | 'retiring';
|
|
97
109
|
readonly updatedAt: string;
|
|
98
110
|
readonly version: 1;
|
|
@@ -828,6 +840,14 @@ export declare class ControlClient {
|
|
|
828
840
|
putVariable(name: string, value: string): Promise<Variable>;
|
|
829
841
|
deleteVariable(name: string): Promise<void>;
|
|
830
842
|
exportFlow(flowId: string): Promise<WorkflowFile>;
|
|
843
|
+
getFlowExportPreview(flowId: string): Promise<WorkflowExportPreview>;
|
|
844
|
+
exportFlowBundle(flowId: string): Promise<WorkflowBundle>;
|
|
845
|
+
importFlowBundle(file: WorkflowBundle, options?: {
|
|
846
|
+
readonly name?: string;
|
|
847
|
+
readonly teamId?: string;
|
|
848
|
+
readonly idempotencyKey?: string;
|
|
849
|
+
readonly tagIds?: readonly string[];
|
|
850
|
+
}): Promise<WorkflowBundleImportResult>;
|
|
831
851
|
importFlow(file: WorkflowFile, options?: {
|
|
832
852
|
readonly name?: string;
|
|
833
853
|
readonly teamId?: string;
|