public async Task <bool> CreateLink(LiteGraph.Link link)
        {
            return(await Task.Run(() =>
            {
                if (engine == null)
                {
                    return false;
                }

                Nodes.Node outNode = SystemController.nodesEngine.GetNode(link.origin_id);
                Nodes.Node inNode = SystemController.nodesEngine.GetNode(link.target_id);

                if (outNode == null || inNode == null)
                {
                    engine.LogEngineError(
                        $"Can`t create link from [{link.origin_id}] to [{link.target_id}]. Does not exist.");
                    return false;
                }

                if (outNode.GetNodeOptions().ProtectedAccess || inNode.GetNodeOptions().ProtectedAccess)
                {
                    if (!User.HasClaim(x => x.Type == UserClaims.EditorProtectedAccess))
                    {
                        engine.LogEngineError(
                            $"Can`t create link from [{link.origin_id}] to [{link.target_id}]. No permissions for protected access.");
                        return false;
                    }
                }

                engine.AddLink(outNode.Outputs[link.origin_slot], inNode.Inputs[link.target_slot]);
                return true;
            }));
        }
        public LiteGraph.Link ConvertLinkToLiteGraphLink(Nodes.Link link)
        {
            if (link == null)
            {
                return(null);
            }
            LiteGraph.Link liteGraphLink = new LiteGraph.Link
            {
                origin_id   = engine.GetOutputOwner(link.OutputId)?.Id,
                target_id   = engine.GetInputOwner(link.InputId)?.Id,
                origin_slot = GetOutputSlot(link.OutputId),
                target_slot = GetInputSlot(link.InputId),
                id          = link.Id,
                panel_id    = link.PanelId
            };

            return(liteGraphLink);
        }
        public LiteGraph.Link ConvertLinkToLiteGraphLink(Nodes.Link link)
        {
            if (link == null)
                return null;
            LiteGraph.Link liteGraphLink = new LiteGraph.Link
            {
                origin_id = engine.GetOutputOwner(link.OutputId)?.Id,
                target_id = engine.GetInputOwner(link.InputId)?.Id,
                origin_slot = GetOutputSlot(link.OutputId),
                target_slot = GetInputSlot(link.InputId),
                id = link.Id,
                panel_id = link.PanelId
            };

            return liteGraphLink;
        }