{"id":495976,"date":"2026-09-24T16:45:31","date_gmt":"2026-09-24T16:45:31","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=495976"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=495976","title":{"rendered":"Flowise \u0437\u0430\u043a\u0440\u044b\u043b\u0438, \u044f \u0435\u0433\u043e \u0444\u043e\u0440\u043a\u043d\u0443\u043b \u2014 \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e \u0444\u043e\u0440\u043a\u0430\u0442\u044c \u0431\u044b\u043b\u043e \u043d\u0435\u043b\u044c\u0437\u044f"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><a href=\"https:\/\/github.com\/FlowiseAI\/Flowise\" rel=\"noopener nofollow\">Flowise<\/a> \u2014 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f LLM-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439: \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442\u0435 \u043d\u0430 \u0445\u043e\u043b\u0441\u0442 \u043c\u043e\u0434\u0435\u043b\u044c, \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043f\u0430\u043c\u044f\u0442\u044c, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0435 \u0438\u0445 \u043b\u0438\u043d\u0438\u044f\u043c\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0447\u0430\u0442-\u0431\u043e\u0442\u0430, RAG-\u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043c \u0438\u043b\u0438 \u0430\u0433\u0435\u043d\u0442\u0430. \u0423 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 55 \u0442\u044b\u0441\u044f\u0447 \u0437\u0432\u0451\u0437\u0434 \u043d\u0430 GitHub, 25 \u0442\u044b\u0441\u044f\u0447 \u0444\u043e\u0440\u043a\u043e\u0432 \u0438 \u043f\u043e\u0447\u0442\u0438 7 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0439 Docker-\u043e\u0431\u0440\u0430\u0437\u0430. \u0415\u0433\u043e \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0443 \u0441\u0435\u0431\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b.<\/p>\n<p>29 \u0438\u044e\u043b\u044f 2026 \u0433\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430 \u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438: \u00ab\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432\u0441\u0451 \u0447\u0430\u0449\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0430\u0433\u0435\u043d\u0442\u0430\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0436\u0451\u0441\u0442\u043a\u0438\u0435 low-code-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0443\u043f\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043b\u043e\u043a\u00bb. 13 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0437\u0430\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043b\u0438, 31 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c. \u0412 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u044f\u043c\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e: \u043a\u043e\u0434 \u043f\u043e\u0434 Apache 2.0 \u0432\u0430\u0448, \u0444\u043e\u0440\u043a\u0430\u0439\u0442\u0435.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0438\u0441\u044c, \u0430 \u0431\u044e\u043b\u043b\u0435\u0442\u0435\u043d\u0438 \u043e\u0431 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u0445 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b\u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c. \u0414\u0435\u0441\u044f\u0442\u043e\u0433\u043e \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f GitHub \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u0435\u0449\u0451 \u0448\u0435\u0441\u0442\u044c advisory \u0434\u043b\u044f Flowise \u2014 \u0432\u0441\u0435 \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 \u00ab\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0435\u0442\u00bb. \u042f \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u0440\u044b, \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434 \u0438\u043c\u0435\u043d\u0435\u043c <strong>Keelflow<\/strong> (<a href=\"https:\/\/github.com\/Perruer\/keelflow\" rel=\"noopener nofollow\">GitHub<\/a>, Apache-2.0). \u041a\u0438\u043b\u044c (keel) \u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0443\u0434\u043d\u043e \u043d\u0430 \u043a\u0443\u0440\u0441\u0435 \u2014 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430.<\/p>\n<p>\u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0444\u043e\u0440\u043a\u043d\u0443\u0442\u044c Flowise \u00ab\u043a\u0430\u043a \u0435\u0441\u0442\u044c\u00bb \u043d\u0435\u043b\u044c\u0437\u044f. \u041e\u0431 \u044d\u0442\u043e\u043c, \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c, \u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u0432 \u043a\u043e\u0434\u0435 \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0435, \u2014 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/868\/661\/421\/868661421b1d4821722f1d3321c6f3c8.png\" alt=\"Keelflow\" width=\"1280\" height=\"640\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/868\/661\/421\/868661421b1d4821722f1d3321c6f3c8.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/868\/661\/421\/868661421b1d4821722f1d3321c6f3c8.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Keelflow<\/figcaption><\/div>\n<\/figure>\n<h3>\u041b\u043e\u0432\u0443\u0448\u043a\u0430 \u0432 LICENSE.md<\/h3>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u044f \u043e\u0442\u043a\u0440\u044b\u043b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e. \u041e\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0441 \u0442\u0435\u043a\u0441\u0442\u0430 Apache, \u0430 \u0441 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b:<\/p>\n<blockquote>\n<p>Portions of this software are licensed as follows: All content that resides under <code>packages\/server\/src\/enterprise<\/code> directory and files with explicit copyright notice such as <code>IdentityManager.ts<\/code> are licensed under Commercial License.<\/p>\n<\/blockquote>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0451\u0442 \u0441\u0430\u043c\u0430 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0430\u044f \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f FlowiseAI: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u043e\u0439, \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u0432\u0441\u0435 \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 FlowiseAI, \u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e. \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u043b\u0438\u0448\u044c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u00ab\u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00bb.<\/p>\n<p>\u0421\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u044d\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 open core: \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0435 \u044f\u0434\u0440\u043e \u043f\u043b\u044e\u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043b\u0435\u0436\u0438\u0442 \u0432 <code>enterprise<\/code>. \u042f \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b: 130 \u0444\u0430\u0439\u043b\u043e\u0432, 13,4 \u0442\u044b\u0441\u044f\u0447\u0438 \u0441\u0442\u0440\u043e\u043a \u043d\u0430 TypeScript \u2014 \u043f\u044f\u0442\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0418 64 \u0444\u0430\u0439\u043b\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u0442\u0443 \u043f\u0430\u043f\u043a\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442:<\/p>\n<pre><code>28 enterprise\/rbac\/PermissionCheck12 enterprise\/utils\/ControllerServiceUtils11 enterprise\/database\/entities\/workspace.entity 7 enterprise\/database\/entities\/organization.entity 1 enterprise\/middleware\/passport...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, JWT \u0432 cookie, \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u00ab\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u00bb, \u00ab\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u00bb \u0438 \u00ab\u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e\u00bb, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0435, 48 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0439 \u0431\u0430\u0437\u044b \u2014 \u0432\u0441\u0451 \u044d\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0434. \u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f Flowise 3.x \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f: \u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 <code>passport<\/code>, \u0442\u0435 \u0436\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0438 \u0442\u0443 \u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u043e\u0434\u043d\u0438\u043c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u043c.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0444\u043e\u0440\u043a Flowise 3.x \u0441 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u043e\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0432 \u0432\u0438\u0434\u0435 Docker-\u043e\u0431\u0440\u0430\u0437\u0430, \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442. \u0424\u043e\u0440\u043a \u0431\u0435\u0437 \u043d\u0435\u0451 \u043d\u0435 \u0441\u043e\u0431\u0435\u0440\u0451\u0442\u0441\u044f. \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u0432\u0430: \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0430 Flowise 2.x, \u0433\u0434\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0435\u0449\u0451 \u043d\u0435 \u0431\u044b\u043b\u043e (\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439: agentflow v2, MCP, \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f), \u0438\u043b\u0438 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0443. \u042f \u0432\u044b\u0431\u0440\u0430\u043b \u0432\u0442\u043e\u0440\u043e\u0435.<\/p>\n<h3>\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0438\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0438, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0434\u0435\u0440\u0435\u0432\u0430<\/h3>\n<p>\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u043d\u043e\u0432\u044b\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e: \u0444\u0430\u0439\u043b\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438, \u0438 \u043b\u044e\u0431\u043e\u0439, \u043a\u0442\u043e \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>git filter-repo<\/code>:<\/p>\n<pre><code class=\"bash\">git filter-repo --invert-paths \\  --path packages\/server\/src\/enterprise \\  --path packages\/server\/src\/IdentityManager.ts \\  --path packages\/server\/test\/enterprise<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u0437 3634 \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c 3614: \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043c\u0435\u043d\u044f\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0441\u0442\u0430\u043b\u0438 \u043f\u0443\u0441\u0442\u044b\u043c\u0438. \u0410\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u043e \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0441\u044c.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432\u043d\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u2014 \u044d\u0442\u043e \u043f\u0440\u044f\u043c\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 \u00ab\u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\u00bb. \u0421\u043c\u043e\u0442\u0440\u0435\u043b \u044f \u0432 \u043d\u0435\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0434\u0438 \u0434\u0432\u0443\u0445 \u0432\u0435\u0449\u0435\u0439: \u0441\u0445\u0435\u043c\u044b \u0442\u0430\u0431\u043b\u0438\u0446 (\u0447\u0442\u043e\u0431\u044b \u043d\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438) \u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 API, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043b\u0435\u0436\u0438\u0442 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0438 \u043f\u043e \u043d\u0435\u043c\u0443 \u0432\u0438\u0434\u043d\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451: \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u043d \u0445\u0440\u0430\u043d\u0438\u0442, \u043a\u0443\u0434\u0430 \u0438\u0434\u0451\u0442 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u0438 401.<\/p>\n<h3>\u0421\u0432\u043e\u0439 \u0432\u0445\u043e\u0434: \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0438 API-\u043a\u043b\u044e\u0447\u0438<\/h3>\n<p>\u041d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c. \u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 Flowise \u0443\u043c\u0435\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439, \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u0440\u043e\u043b\u0438, \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u043e\u0447\u0442\u0435 \u0438 SSO \u0447\u0435\u0440\u0435\u0437 Google, Azure, Auth0 \u0438 GitHub. \u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u2014 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430. \u0414\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f, \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u2014 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c, \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043c\u0438\u043d\u0438\u043c\u0443\u043c: <strong>\u043e\u0434\u043d\u0430 \u0443\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u043f\u043b\u044e\u0441 API-\u043a\u043b\u044e\u0447\u0438 \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<\/strong>. \u041c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u0434\u0430 \u2014 \u043c\u0435\u043d\u044c\u0448\u0435 \u043c\u0435\u0441\u0442 \u0434\u043b\u044f \u043e\u0448\u0438\u0431\u043a\u0438. \u041a\u0441\u0442\u0430\u0442\u0438, \u0434\u0432\u0435 \u0438\u0437 \u0448\u0435\u0441\u0442\u0438 \u0441\u0432\u0435\u0436\u0438\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043a\u0430\u043a \u0440\u0430\u0437 \u0432 SSO: \u0437\u0430\u0445\u0432\u0430\u0442 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 e-mail \u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0438 \u043e\u0431\u0445\u043e\u0434 \u0442\u043e\u043a\u0435\u043d\u0430 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f. \u0412 Keelflow \u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442.<\/p>\n<p>\u041c\u043e\u0434\u0443\u043b\u044c <code>packages\/server\/src\/identity<\/code> \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0430 ~800 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<ul>\n<li>\n<p><strong>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f<\/strong> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430 \u0432 \u0431\u0430\u0437\u0435 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0412 Flowise 3.0.1 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0432\u043e\u0439\u0442\u0438 (<a href=\"https:\/\/github.com\/FlowiseAI\/Flowise\/security\/advisories\/GHSA-v5w9-prxf-w882\" rel=\"noopener nofollow\">GHSA-v5w9-prxf-w882<\/a>). \u0417\u0434\u0435\u0441\u044c \u043b\u044e\u0431\u0430\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u0437 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0431\u0430\u0437\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0430\u0440\u043e\u043b\u0438<\/strong> \u2014 bcrypt. Flowise \u0442\u043e\u0436\u0435 \u0445\u0440\u0430\u043d\u0438\u043b bcrypt-\u0445\u0435\u0448\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043f\u0430\u0440\u043e\u043b\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0435\u0441\u0441\u0438\u0438<\/strong> \u2014 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0430 \u043d\u0435 JWT. \u0412 cookie \u043b\u0435\u0436\u0438\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 32-\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0439 \u0442\u043e\u043a\u0435\u043d, \u0432 \u0431\u0430\u0437\u0435 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e SHA-256. \u0423\u0442\u0451\u043a\u0448\u0430\u044f \u0431\u0430\u0437\u0430 \u043d\u0435 \u0434\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0441\u0435\u0441\u0441\u0438\u0439. \u0421\u0435\u0441\u0441\u0438\u044f \u0436\u0438\u0432\u0451\u0442 7 \u0434\u043d\u0435\u0439 \u0431\u0435\u0437 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 30 \u0434\u043d\u0435\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c; \u0441\u043c\u0435\u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u044f \u0438\u043b\u0438 \u0441\u0431\u0440\u043e\u0441 \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442 \u0432\u0441\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0421 JWT \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c: \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0447\u0451\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u043a\u0435\u043d\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0432\u0445\u043e\u0434\u0430<\/strong>: 10 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u0437\u0430 15 \u043c\u0438\u043d\u0443\u0442 \u0441 \u043e\u0434\u043d\u043e\u0433\u043e IP \u0438 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d e-mail. \u0414\u043b\u044f \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e e-mail \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0442\u0440\u0430\u0442\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 bcrypt, \u0447\u0442\u043e\u0431\u044b \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>API-\u043a\u043b\u044e\u0447\u0438<\/strong> \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c\u0438: \u043f\u0440\u0430\u0432\u0430 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 <code>apikey.permissions<\/code> \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0432\u0438\u0434\u0430 <code>chatflows:view<\/code>, <code>documentStores:upsert-config<\/code>. \u041a\u043b\u044e\u0447\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e Flowise, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u043f\u0440\u0435\u0436\u043d\u0438\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u0414\u043e \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043b\u044e\u0447 \u043d\u0435 \u0434\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0434\u0432\u0443\u043c \u0441\u0442\u0440\u043e\u043a\u0430\u043c: \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0451, \u043a\u043b\u044e\u0447\u0443 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435.<\/p>\n<pre><code class=\"typescript\">const hasAny = (req: Request, required: string[]): boolean =&gt; {    const user = req.user    if (!user) return false    if (user.isOrganizationAdmin) return true    return required.some((permission) =&gt; (user.permissions ?? []).includes(permission))}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u0435\u0439 \u0432\u0440\u043e\u0434\u0435 <code>isOrganizationAdmin<\/code> \u0438 <code>activeWorkspaceId<\/code> \u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b. \u041d\u0430 \u043d\u0438\u0445 \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u044b \u0441\u043e\u0442\u043d\u0438 \u043c\u0435\u0441\u0442 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 (\u0442\u043e\u043b\u044c\u043a\u043e <code>req.user?.activeWorkspaceId<\/code> \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f 132 \u0440\u0430\u0437\u0430) \u0438 \u0432\u0435\u0441\u044c \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0431\u044b\u043b\u043e \u0431\u044b \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u043d\u043e \u044d\u0442\u043e \u0442\u044b\u0441\u044f\u0447\u0430 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u0430\u0432\u043e\u043a \u0432 \u0447\u0443\u0436\u043e\u043c \u043a\u043e\u0434\u0435 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>\u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0442\u043e\u0436\u0435 \u043f\u0440\u0435\u0436\u043d\u0438\u0435: <code>\/auth\/resolve<\/code> \u0440\u0435\u0448\u0430\u0435\u0442, \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0438\u043b\u0438 \u0444\u043e\u0440\u043c\u0443 \u0432\u0445\u043e\u0434\u0430, <code>\/auth\/login<\/code>, <code>\/account\/register<\/code>, <code>\/account\/logout<\/code>, <code>\/user<\/code>. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u2014 \u043f\u043e\u043c\u0435\u043d\u044f\u043b \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u00ab\u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c?\u00bb: \u043f\u0438\u0441\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442, \u043f\u0430\u0440\u043e\u043b\u044c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>keelflow user &lt;email&gt; &lt;\u043f\u0430\u0440\u043e\u043b\u044c&gt;<\/code> \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<h3>\u041c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0442<\/h3>\n<p>\u0421\u0430\u043c\u0430\u044f \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c. \u0412 \u0431\u0430\u0437\u0435 Flowise 3.x \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>user<\/code>, <code>organization<\/code>, <code>workspace<\/code> \u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 <code>workspaceId<\/code> \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438. \u0423\u0434\u0430\u043b\u0438\u0432 \u0438\u0445, \u044f \u043f\u043e\u043b\u0443\u0447\u0430\u044e \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438:<\/p>\n<ol>\n<li>\n<p><strong>\u0421\u0442\u0430\u0440\u0430\u044f \u0431\u0430\u0437\u0430<\/strong> (Flowise 3.x): \u0432\u0441\u0451 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043e. \u041d\u043e\u0432\u044b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u043c\u0430\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430<\/strong> \u0438\u043b\u0438 \u0431\u0430\u0437\u0430 \u043e\u0442 Flowise 2.x: \u0442\u0430\u0431\u043b\u0438\u0446 \u043d\u0435\u0442, \u0438 \u0431\u0435\u0437 \u043d\u0438\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0443\u0442 \u0434\u0430\u043b\u044c\u0448\u0435, \u0443\u043f\u0430\u0434\u0443\u0442.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0445\u0438\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f <code>ModifyChatflowType<\/code> \u0434\u043b\u044f SQLite \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 <code>chat_flow<\/code> \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u043d\u0430 <code>workspace<\/code>:<\/p>\n<pre><code class=\"sql\">CREATE TABLE \"temp_chat_flow\" (    ...    \"workspaceId\" TEXT,    FOREIGN KEY (\"workspaceId\") REFERENCES \"workspace\"(\"id\"));<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0438\u0442, <code>workspace<\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u043d\u044c\u0448\u0435. \u0422\u0443\u0442 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 TypeORM 0.3: \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <code>migrations<\/code>, <em>\u043f\u043e \u0438\u043c\u0435\u043d\u0438<\/em>, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0438\u0445 \u043f\u043e \u043e\u0442\u043c\u0435\u0442\u043a\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430. \u0420\u0430\u0437 \u0442\u0430\u043a, \u044f \u0434\u0430\u043b \u0441\u0432\u043e\u0438\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f\u043c \u043e\u0442\u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u044f\u0434\u043e\u043c \u0441 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u043c\u0438:<\/p>\n<pre><code class=\"typescript\">\/\/ \u043c\u0435\u0436\u0434\u0443 AddApiKey1720230151480 \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0435\u0439export class KeelflowIdentityTables1720230151483 implements MigrationInterface { ... }\/\/ \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 AddExecutionEntity1738090872625export class KeelflowWorkspaceColumns1738090872626 implements MigrationInterface { ... }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u043d\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 \u043e\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0440\u0430\u043d\u044c\u0448\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435. \u041d\u0430 \u0441\u0442\u0430\u0440\u043e\u0439 \u2014 \u0442\u043e\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f (\u0438\u0445 \u0438\u043c\u0451\u043d \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <code>migrations<\/code> \u043d\u0435\u0442), \u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0448\u0430\u0433 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u0438\u043b\u0438 \u0438\u043d\u0434\u0435\u043a\u0441, \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c.<\/p>\n<p>\u0427\u0435\u0442\u044b\u0440\u0435 \u0421\u0423\u0411\u0414 \u2014 SQLite, Postgres, MySQL \u0438 MariaDB \u2014 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u0438\u043f\u0430\u043c\u0438. \u0412\u043e Flowise \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u044b\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432; \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043e\u0434\u043d\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0438\u043f \u043f\u043e\u0434 \u0434\u0438\u0430\u043b\u0435\u043a\u0442: <code>uuid DEFAULT uuid_generate_v4()<\/code> \u0432 Postgres, <code>varchar(36)<\/code> \u0432 MySQL, <code>varchar<\/code> \u0432 SQLite. \u041a\u043e\u043b\u043e\u043d\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 API TypeORM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u0437\u043d\u0430\u0435\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0430\u0437\u044b.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f <code>AddApiKeyPermission<\/code>: \u043e\u043d\u0430 \u0447\u0438\u0441\u0442\u0438\u0442 \u043f\u0440\u0430\u0432\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <code>role<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432 Keelflow \u043d\u0435\u0442. \u0425\u0432\u0430\u0442\u0438\u043b\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 <code>if (!(await queryRunner.hasTable('role'))) return<\/code>.<\/p>\n<h4>\u041a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u043d\u0435 \u0438\u043c\u0435\u044f \u0441\u0442\u0430\u0440\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/h4>\n<p>\u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u00ab\u0432\u0430\u0448\u0430 \u0431\u0430\u0437\u0430 \u043e\u0442 Flowise \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u00bb \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0431\u0430\u0437\u0435 \u043e\u0442 Flowise, \u0430 \u043d\u0435 \u043d\u0430 \u0442\u043e\u0439, \u0447\u0442\u043e \u044f \u0441\u0435\u0431\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u0435\u0441\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 <code>flowise@3.1.4<\/code> \u0438\u0437 npm \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 <em>\u0435\u0433\u043e<\/em> \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u2014 \u0432\u0441\u0435 57, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435. \u041a\u043e\u0434 \u044f \u043d\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u044e: \u043e\u043d \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 npm \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u0441\u0442\u0430, \u043a\u0430\u043a \u043f\u0440\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 Flowise.<\/p>\n<p>\u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 Flowise \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442 \u043f\u0430\u043a\u0435\u0442 <code>flowise-components<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 Keelflow \u043d\u0435\u0442: \u043e\u043d \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439:<\/p>\n<pre><code class=\"javascript\">const resolveFilename = Module._resolveFilenameModule._resolveFilename = function (request, ...rest) {    return resolveFilename.call(this, request === 'flowise-components' ? 'keelflow-components' : request, ...rest)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0442\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0442\u0430\u043a, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b Flowise 3.x (\u0441 \u0440\u043e\u043b\u044c\u044e owner, \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u0432 <code>organization_user<\/code> \u0438 <code>workspace_user<\/code>), flow \u0438 API-\u043a\u043b\u044e\u0447 \u0441 \u043f\u0440\u0430\u0432\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f Keelflow, \u0438 \u0442\u0435\u0441\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442: \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432\u0445\u043e\u0434, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u0430, \u0441\u0442\u0430\u0440\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u0441\u0442\u0430\u0440\u044b\u0439 flow \u0432\u0438\u0434\u0435\u043d, \u0441\u0442\u0430\u0440\u044b\u0439 API-\u043a\u043b\u044e\u0447 \u0447\u0438\u0442\u0430\u0435\u0442 flow, \u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 403 \u043d\u0430 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0412 CI \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u043f\u043b\u044e\u0441 \u0441\u043a\u0432\u043e\u0437\u043d\u043e\u0439 \u0442\u0435\u0441\u0442 \u0432\u0445\u043e\u0434\u0430 \u0438 \u043a\u043b\u044e\u0447\u0435\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0421\u0423\u0411\u0414 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0438 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044c \u0441 \u043f\u0430\u043f\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445. Flowise \u0445\u0440\u0430\u043d\u0438\u0442 \u0431\u0430\u0437\u0443, \u043a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 <code>~\/.flowise<\/code>. Keelflow \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>~\/.keelflow<\/code>, \u043d\u043e \u0435\u0441\u043b\u0438 \u0435\u0451 \u043d\u0435\u0442 \u0438\u043b\u0438 \u043e\u043d\u0430 \u043f\u0443\u0441\u0442\u0430, \u0430 <code>~\/.flowise<\/code> \u0435\u0441\u0442\u044c, \u0431\u0435\u0440\u0451\u0442 \u0441\u0442\u0430\u0440\u0443\u044e. \u00ab\u0418\u043b\u0438 \u043f\u0443\u0441\u0442\u0430\u00bb \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0438\u0437-\u0437\u0430 Docker: \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 \u043f\u0430\u043f\u043a\u0430 <code>\/home\/node\/.keelflow<\/code> \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f <code>node<\/code>, \u0438\u043d\u0430\u0447\u0435 Docker \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0442\u043e\u043c \u043e\u0442 root. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0443\u0441\u0442\u0430\u044f \u043d\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u043b\u0430 \u0431\u044b \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u044b\u0439 \u0442\u043e\u043c.<\/p>\n<h3>\u0427\u0442\u043e \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0435<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0448\u044c \u043f\u043e \u043a\u043e\u0434\u0443 \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u00ab\u0447\u0442\u043e \u0442\u0443\u0442 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0432\u0440\u0435\u0434\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e\u00bb, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u043f\u043e\u043a\u0430 \u043d\u0430 \u043d\u0438\u0445 \u043d\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c.<\/p>\n<h4>\u0422\u0440\u0435\u043a\u0435\u0440 \u043f\u0430\u0440\u0442\u043d\u0451\u0440\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435<\/h4>\n<p>\u0412 <code>packages\/ui\/index.html<\/code> \u2014 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u0442\u0434\u0430\u0451\u0442 \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u0430\u044f \u043a\u043e\u043f\u0438\u044f Flowise, \u2014 \u0431\u044b\u043b\u043e \u0432\u043e\u0442 \u044d\u0442\u043e:<\/p>\n<pre><code>&lt;script async src=\"https:\/\/r.wdfl.co\/rw.js\" data-rewardful=\"9a3a26\"&gt;&lt;\/script&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0441\u043a\u0440\u0438\u043f\u0442 Rewardful \u2014 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u0430\u0440\u0442\u043d\u0451\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0434\u043b\u044f SaaS: \u043e\u043d \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043f\u043e \u0440\u0435\u0444\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438. \u0410 \u0443 \u0444\u043e\u0440\u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0441\u0442\u043e\u044f\u043b \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>data-rewardful<\/code>, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0444\u043e\u0440\u043c\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Flowise \u044d\u0442\u043e, \u0432\u0438\u0434\u0438\u043c\u043e, \u0438\u043c\u0435\u043b\u043e \u0441\u043c\u044b\u0441\u043b. \u041d\u043e \u0438\u0437-\u0437\u0430 \u043e\u0431\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0441\u044f \u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 self-hosted \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u2014 \u0432\u043d\u0443\u0442\u0440\u0438 \u0430\u0434\u043c\u0438\u043d\u043a\u0438, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0438 \u043a\u043e \u0432\u0441\u0435\u043c LLM-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c \u0438 \u0431\u0430\u0437\u0430\u043c.<\/p>\n<p>\u042f \u043d\u0435 \u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u0435\u043b\u0430\u043b \u0447\u0442\u043e-\u0442\u043e \u043f\u043b\u043e\u0445\u043e\u0435. \u041d\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 JavaScript \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u2014 \u044d\u0442\u043e \u0434\u043e\u0432\u0435\u0440\u0438\u0435 \u043a \u0447\u0443\u0436\u043e\u043c\u0443 CDN \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u00ab\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u0432\u0438\u0434\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u00bb. \u0415\u0441\u043b\u0438 \u0434\u043e\u043c\u0435\u043d <a href=\"http:\/\/wdfl.co\" rel=\"noopener nofollow\"><code>wdfl.co<\/code><\/a> \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043c\u0435\u043d\u0438\u0442 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0438\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0442, \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u044e\u0442 \u0432\u0441\u0435, \u0443 \u043a\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Flowise. \u0412 Keelflow \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0435\u0442.<\/p>\n<p>\u0417\u0430\u043e\u0434\u043d\u043e \u0442\u0430\u043c \u0436\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0438\u0441\u044c \u0448\u0440\u0438\u0444\u0442\u044b \u0441 Google Fonts, \u0430 \u0448\u0430\u043f\u043a\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0430 \u0443 GitHub API \u0447\u0438\u0441\u043b\u043e \u0437\u0432\u0451\u0437\u0434 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \u0428\u0440\u0438\u0444\u0442 Inter \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0434\u0451\u0442 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 <code>@fontsource\/inter<\/code>, \u043a\u043d\u043e\u043f\u043a\u0430 GitHub \u0441\u0442\u0430\u043b\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. \u041f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 Keelflow \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u2014 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u043f\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u00ab\u0421\u0435\u0442\u044c\u00bb.<\/p>\n<h4>\u0421\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0441 GitHub \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438<\/h4>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0434\u0435\u043b\u0435\u0439 OpenAI, Anthropic \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0432 \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u043c\u0435\u043d\u044e \u0443\u0437\u043b\u043e\u0432, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0441\u044f \u0442\u0430\u043a:<\/p>\n<pre><code class=\"typescript\">const modelFile =    process.env.MODEL_LIST_CONFIG_JSON ?? 'https:\/\/raw.githubusercontent.com\/FlowiseAI\/Flowise\/main\/packages\/components\/models.json'const resp = await axios.get(modelFile)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u0445\u043e\u0434\u0438\u043b \u043d\u0430 GitHub \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0443\u0437\u043b\u0430 \u0441 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u2014 \u0431\u0435\u0437 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u0438 \u0431\u0435\u0437 \u043a\u0435\u0448\u0430. \u0412 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0439 \u0441\u0435\u0442\u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0432\u0438\u0441\u0435\u043b\u043e, \u043f\u043e\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u043e\u0442\u0432\u0430\u043b\u0438\u0442\u0441\u044f \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443 \u041e\u0421. \u0410 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b \u0442\u043e\u0442, \u043a\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c FlowiseAI. \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 <code>models.json<\/code> \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f; \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d \u0441\u0432\u043e\u0439, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u043c \u0438\u043b\u0438 URL, \u0438 URL \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0447\u0430\u0441.<\/p>\n<h4>\u00ab\u0414\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432\u0441\u0435\u043c \u043f\u0440\u043e\u043a\u0441\u0438\u00bb<\/h4>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 <code>TRUST_PROXY<\/code> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u044b\u043b\u0430 <code>true<\/code>: Express \u0432\u0435\u0440\u0438\u043b \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0443 <code>X-Forwarded-For<\/code> \u043e\u0442 \u043a\u043e\u0433\u043e \u0443\u0433\u043e\u0434\u043d\u043e. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u0430\u043c \u0432\u044b\u0431\u0438\u0440\u0430\u043b IP-\u0430\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0438\u0434\u044f\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u0435\u043b\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c. \u041d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 <code>loopback, linklocal, uniquelocal<\/code>: \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0443 \u0432\u0435\u0440\u044f\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0438\u0448\u0451\u043b \u043e\u0442 \u043f\u0440\u043e\u043a\u0441\u0438 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u0435 \u0438\u043b\u0438 \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 (Docker, Kubernetes, nginx \u0432 \u043b\u043e\u043a\u0430\u043b\u043a\u0435). \u041a\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0430\u0440\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0441\u0442\u0430\u0432\u0438\u0442 <code>TRUST_PROXY=true<\/code>.<\/p>\n<h4>\u0423\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0443\u0436\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430<\/h4>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\u0441\u043a\u0438\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0431\u0435\u0437 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, <a href=\"https:\/\/github.com\/FlowiseAI\/Flowise\/security\/advisories\/GHSA-27w2-26m5-x82c\" rel=\"noopener nofollow\">GHSA-27w2-26m5-x82c<\/a>: \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 flow \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0441\u043a\u0430\u043b\u0438\u0441\u044c \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 id, \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. Flow \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043c\u043e\u0433 \u0441\u043e\u0441\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 UUID \u043a\u043b\u044e\u0447\u0430 OpenAI \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 \u043e\u0434\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435:<\/p>\n<pre><code class=\"typescript\">const credential = await appDataSource.getRepository(databaseEntities['Credential']).findOneBy({    id: selectedCredentialId,    ...(options.workspaceId ? { workspaceId: options.workspaceId } : {})})<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0440\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u00ab\u043d\u0435\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435\u00bb \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u043d\u0430\u0431\u043e\u0440\u0430 (\u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0447\u0430\u0442\u043e\u0432 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0430\u0432) \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0443\u0436\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044b \u0432 3.1.4 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u0431\u044e\u043b\u043b\u0435\u0442\u0435\u043d\u044f\u0445 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.<\/p>\n<h4>\u041f\u043b\u0430\u0442\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c<\/h4>\n<p>\u041d\u0430\u0431\u043e\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0446\u0435\u043d\u043a\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0442\u0432\u0435\u0442\u043e\u0432, \u043e\u0446\u0435\u043d\u0449\u0438\u043a\u0438 \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043b\u043e\u0433\u043e\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043b\u0435\u0436\u0430\u0442 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0434 Apache. \u041d\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u043a \u043d\u0438\u043c \u0431\u044b\u043b\u0438 \u043e\u0431\u0451\u0440\u043d\u0443\u0442\u044b \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u0430\u0440\u0438\u0444\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u043b\u0430 403. \u0412 Keelflow \u0442\u0430\u0440\u0438\u0444\u043e\u0432 \u043d\u0435\u0442, \u0438 \u044d\u0442\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442.<\/p>\n<h3>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438: 385 \u2192 153<\/h3>\n<p>Lock-\u0444\u0430\u0439\u043b Flowise \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 4200 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0421\u0435\u0440\u0432\u0438\u0441 <a href=\"http:\/\/osv.dev\" rel=\"noopener nofollow\">osv.dev<\/a> \u0438\u0437 \u043c\u043e\u0435\u0439 \u0441\u0435\u0442\u0438 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0442\u0435\u043c \u0436\u0435 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u043c, \u0447\u0442\u043e \u0438 <code>npm audit<\/code>: <code>registry.npmjs.org\/-\/npm\/v1\/security\/advisories\/bulk<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u00ab\u043f\u0430\u043a\u0435\u0442 \u2192 \u0432\u0435\u0440\u0441\u0438\u0438\u00bb \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u044e\u043b\u043b\u0435\u0442\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a \u043d\u0438\u043c \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043b\u044f Flowise 3.1.4: 385 \u0431\u044e\u043b\u043b\u0435\u0442\u0435\u043d\u0435\u0439, \u0438\u0437 \u043d\u0438\u0445 19 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438 145 \u0432\u044b\u0441\u043e\u043a\u0438\u0445.<\/p>\n<p>\u0425\u0443\u0434\u0448\u0438\u0439 \u2014 <strong>vm2 3.11.2<\/strong>. \u0412 \u044d\u0442\u043e\u0439 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0435 Flowise \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 JavaScript \u0438\u0437 \u0443\u0437\u043b\u043e\u0432 Custom Function \u0438 Custom Tool, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 E2B. \u0414\u043b\u044f 3.11.2 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043e \u0434\u0435\u0432\u044f\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0438\u0437 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u041f\u0440\u043e\u0435\u043a\u0442 vm2 \u0432 2026 \u0433\u043e\u0434\u0443 \u043e\u0436\u0438\u043b \u0438 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u043b \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e: 3.11.6, 3.11.7 (\u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0431\u044e\u043b\u043b\u0435\u0442\u0435\u043d\u0435\u0439 \u0440\u0430\u0437\u043e\u043c), 3.11.8, 3.12.0\u20133.12.2. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 3.12.2 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 API, \u043d\u043e \u044f \u043d\u0435 \u043f\u0438\u0442\u0430\u044e \u0438\u043b\u043b\u044e\u0437\u0438\u0439: vm2 \u2014 \u044d\u0442\u043e \u043d\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0438 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Keelflow \u0442\u0430\u043a \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e. \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c flow \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435, \u043a\u043e\u043c\u0443 \u0432\u044b \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u044f \u0434\u0435\u043b\u0430\u043b \u0442\u0430\u043a: \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0441\u0430\u043c\u0443\u044e \u0440\u0430\u043d\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043c\u0430\u0436\u043e\u0440\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0435, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043d\u0438 \u043e\u0434\u0438\u043d \u0431\u044e\u043b\u043b\u0435\u0442\u0435\u043d\u044c, \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0435\u0451 \u0432 <code>pnpm.overrides<\/code>. \u0422\u0430\u043a \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043e\u043a\u043e\u043b\u043e 60 \u043f\u0430\u043a\u0435\u0442\u043e\u0432: axios, handlebars, fast-xml-parser, langchain 0.3, langsmith, mysql2, xmldom, lodash, js-yaml, multer, ws, sharp, playwright \u0438 \u0434\u0440\u0443\u0433\u0438\u0435. \u0422\u0440\u0438 \u0441\u043b\u0443\u0447\u0430\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438 \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b:<\/p>\n<ul>\n<li>\n<p><strong>expr-eval<\/strong> \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0435\u0442, \u043f\u0440\u043e\u0435\u043a\u0442 \u0437\u0430\u0431\u0440\u043e\u0448\u0435\u043d. \u0415\u0433\u043e \u0442\u044f\u043d\u0435\u0442 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0438\u0437 <code>@langchain\/community<\/code>. \u041f\u043e\u043c\u043e\u0433 \u0444\u043e\u0440\u043a <code>expr-eval-fork<\/code> \u0441 \u0442\u0435\u043c \u0436\u0435 API: <code>\"expr-eval\": \"npm:expr-eval-fork@^3.0.3\"<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>xlsx<\/strong> \u2014 SheetJS \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0432 npm, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0442\u0430\u043c 0.18.5 \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f 0.20.3 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 CDN \u0441\u0430\u043c\u043e\u0433\u043e SheetJS.<\/p>\n<\/li>\n<li>\n<p><strong>jsondiffpatch<\/strong> \u2014 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0435\u0441\u0442\u044c, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a ES-\u043c\u043e\u0434\u0443\u043b\u044c, \u0430 \u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 CommonJS-\u0441\u0431\u043e\u0440\u043a\u0430 Vercel AI SDK. \u041e\u0441\u0442\u0430\u0432\u0438\u043b \u0441\u0442\u0430\u0440\u0443\u044e \u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043b \u0432 <a href=\"http:\/\/SECURITY.md\" rel=\"noopener nofollow\">SECURITY.md<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0449\u0451 \u0447\u0430\u0441\u0442\u044c \u0443\u0448\u043b\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u043c \u043a\u043e\u0434\u043e\u043c: passport \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u043c\u0438, express-session \u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0441\u0435\u0441\u0441\u0438\u0439, jsonwebtoken, nodemailer, stripe. \u0418\u0442\u043e\u0433 \u2014 153 \u0431\u044e\u043b\u043b\u0435\u0442\u0435\u043d\u044f, \u043e\u0434\u043d\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c (\u0432 <code>tar<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432) \u0438 20 \u0432\u044b\u0441\u043e\u043a\u0438\u0445, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u0441\u0431\u043e\u0440\u043a\u0438: vite, svgo, postcss.<\/p>\n<h3>\u0427\u0442\u043e \u0432\u044b\u0448\u043b\u043e<\/h3>\n<p>Keelflow 3.2.0 \u2014 \u044d\u0442\u043e Flowise 3.1.4 \u043f\u043b\u044e\u0441:<\/p>\n<ul>\n<li>\n<p>\u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u043f\u043e\u0434 Apache-2.0, \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0439 \u0443\u0434\u0430\u043b\u0451\u043d \u0438\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0432\u0445\u043e\u0434 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0438 API-\u043a\u043b\u044e\u0447\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u0441\u0435\u0441\u0441\u0438\u044f\u043c\u0438 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043f\u044b\u0442\u043e\u043a;<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, vm2 3.12.2, \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u0435\u0437 232 \u0431\u044e\u043b\u043b\u0435\u0442\u0435\u043d\u0435\u0439;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430\u0440\u0443\u0436\u0443 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0431\u043e\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0446\u0435\u043d\u043a\u0438 \u0438 \u043b\u043e\u0433\u0438 \u0431\u0435\u0437 \u0442\u0430\u0440\u0438\u0444\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>Docker-\u043e\u0431\u0440\u0430\u0437 \u0434\u043b\u044f amd64 \u0438 arm64 \u043e\u0442 \u043d\u0435\u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043d\u0430 901 \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, 65 \u0442\u0435\u0441\u0442\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0441\u043a\u0432\u043e\u0437\u043d\u043e\u043c \u0442\u0435\u0441\u0442\u0435 \u0432\u0445\u043e\u0434\u0430 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0421\u0423\u0411\u0414 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0441 \u0431\u0430\u0437\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e Flowise 3.1.4.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0435\u0437\u0434 \u0441 Flowise \u0432 Docker \u2014 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430:<\/p>\n<pre><code class=\"bash\">docker run -d -p 3000:3000 -v ~\/.flowise:\/home\/node\/.flowise ghcr.io\/perruer\/keelflow:latest<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f: \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0438\u0437 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, SSO, \u0440\u043e\u043b\u0438 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u2014 \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 issue, \u043e\u0431\u0441\u0443\u0434\u0438\u043c; \u043d\u043e \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u043e \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0442\u043e, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e.<\/p>\n<p>\u041a\u043e\u0434: <a href=\"https:\/\/github.com\/Perruer\/keelflow\" rel=\"noopener nofollow\">github.com\/Perruer\/keelflow<\/a>. \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0435\u0440\u0436\u0438\u0442\u0435 Flowise \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u0438 \u0447\u0442\u043e-\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u2014 issue \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043c\u043e\u0433\u0443\u0442: \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0442\u0435 \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043d\u0435 \u043f\u043e\u0439\u043c\u0430\u043b\u0438.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1086288\/\">https:\/\/habr.com\/ru\/articles\/1086288\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Flowise \u2014 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f LLM-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439: \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442\u0435 \u043d\u0430 \u0445\u043e\u043b\u0441\u0442 \u043c\u043e\u0434\u0435\u043b\u044c, \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043f\u0430\u043c\u044f\u0442\u044c, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0435 \u0438\u0445 \u043b\u0438\u043d\u0438\u044f\u043c\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0447\u0430\u0442-\u0431\u043e\u0442\u0430, RAG-\u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043c \u0438\u043b\u0438 \u0430\u0433\u0435\u043d\u0442\u0430. \u0423 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 55 \u0442\u044b\u0441\u044f\u0447 \u0437\u0432\u0451\u0437\u0434 \u043d\u0430 GitHub, 25 \u0442\u044b\u0441\u044f\u0447 \u0444\u043e\u0440\u043a\u043e\u0432 \u0438 \u043f\u043e\u0447\u0442\u0438 7 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0439 Docker-\u043e\u0431\u0440\u0430\u0437\u0430. \u0415\u0433\u043e \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0443 \u0441\u0435\u0431\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b.29 \u0438\u044e\u043b\u044f 2026 \u0433\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430 \u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438: \u00ab\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432\u0441\u0451 \u0447\u0430\u0449\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0430\u0433\u0435\u043d\u0442\u0430\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0436\u0451\u0441\u0442\u043a\u0438\u0435 low-code-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0443\u043f\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043b\u043e\u043a\u00bb. 13 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0437\u0430\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043b\u0438, 31 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c. \u0412 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u044f\u043c\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e: \u043a\u043e\u0434 \u043f\u043e\u0434 Apache 2.0 \u0432\u0430\u0448, \u0444\u043e\u0440\u043a\u0430\u0439\u0442\u0435.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0438\u0441\u044c, \u0430 \u0431\u044e\u043b\u043b\u0435\u0442\u0435\u043d\u0438 \u043e\u0431 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u0445 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b\u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c. \u0414\u0435\u0441\u044f\u0442\u043e\u0433\u043e \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f GitHub \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u0435\u0449\u0451 \u0448\u0435\u0441\u0442\u044c advisory \u0434\u043b\u044f Flowise \u2014 \u0432\u0441\u0435 \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 \u00ab\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0435\u0442\u00bb. \u042f \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u0440\u044b, \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434 \u0438\u043c\u0435\u043d\u0435\u043c Keelflow (GitHub, Apache-2.0). \u041a\u0438\u043b\u044c (keel) \u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0443\u0434\u043d\u043e \u043d\u0430 \u043a\u0443\u0440\u0441\u0435 \u2014 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430.\u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0444\u043e\u0440\u043a\u043d\u0443\u0442\u044c Flowise \u00ab\u043a\u0430\u043a \u0435\u0441\u0442\u044c\u00bb \u043d\u0435\u043b\u044c\u0437\u044f. \u041e\u0431 \u044d\u0442\u043e\u043c, \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c, \u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u0432 \u043a\u043e\u0434\u0435 \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0435, \u2014 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f.Keelflow\u041b\u043e\u0432\u0443\u0448\u043a\u0430 \u0432 LICENSE.md\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u044f \u043e\u0442\u043a\u0440\u044b\u043b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e. \u041e\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0441 \u0442\u0435\u043a\u0441\u0442\u0430 Apache, \u0430 \u0441 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b:Portions of this software are licensed as follows: All content that resides under packages\/server\/src\/enterprise directory and files with explicit copyright notice such as IdentityManager.ts are licensed under Commercial License.\u0414\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0451\u0442 \u0441\u0430\u043c\u0430 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0430\u044f \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f FlowiseAI: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u043e\u0439, \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u0432\u0441\u0435 \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 FlowiseAI, \u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e. \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u043b\u0438\u0448\u044c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u00ab\u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00bb.\u0421\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u044d\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 open core: \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0435 \u044f\u0434\u0440\u043e \u043f\u043b\u044e\u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043b\u0435\u0436\u0438\u0442 \u0432 enterprise. \u042f \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b: 130 \u0444\u0430\u0439\u043b\u043e\u0432, 13,4 \u0442\u044b\u0441\u044f\u0447\u0438 \u0441\u0442\u0440\u043e\u043a \u043d\u0430 TypeScript \u2014 \u043f\u044f\u0442\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0418 64 \u0444\u0430\u0439\u043b\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u0442\u0443 \u043f\u0430\u043f\u043a\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442:28 enterprise\/rbac\/PermissionCheck12 enterprise\/utils\/ControllerServiceUtils11 enterprise\/database\/entities\/workspace.entity 7 enterprise\/database\/entities\/organization.entity 1 enterprise\/middleware\/passport&#8230;\u0412\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, JWT \u0432 cookie, \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u00ab\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u00bb, \u00ab\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u00bb \u0438 \u00ab\u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e\u00bb, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0435, 48 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0439 \u0431\u0430\u0437\u044b \u2014 \u0432\u0441\u0451 \u044d\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0434. \u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f Flowise 3.x \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f: \u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 passport, \u0442\u0435 \u0436\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0438 \u0442\u0443 \u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u043e\u0434\u043d\u0438\u043c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u043c.\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0444\u043e\u0440\u043a Flowise 3.x \u0441 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u043e\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0432 \u0432\u0438\u0434\u0435 Docker-\u043e\u0431\u0440\u0430\u0437\u0430, \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442. \u0424\u043e\u0440\u043a \u0431\u0435\u0437 \u043d\u0435\u0451 \u043d\u0435 \u0441\u043e\u0431\u0435\u0440\u0451\u0442\u0441\u044f. \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u0432\u0430: \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0430 Flowise 2.x, \u0433\u0434\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0435\u0449\u0451 \u043d\u0435 \u0431\u044b\u043b\u043e (\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439: agentflow v2, MCP, \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f), \u0438\u043b\u0438 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0443. \u042f \u0432\u044b\u0431\u0440\u0430\u043b \u0432\u0442\u043e\u0440\u043e\u0435.\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0438\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0438, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0434\u0435\u0440\u0435\u0432\u0430\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u043d\u043e\u0432\u044b\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e: \u0444\u0430\u0439\u043b\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438, \u0438 \u043b\u044e\u0431\u043e\u0439, \u043a\u0442\u043e \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e git filter-repo:git filter-repo &#8212;invert-paths \\  &#8212;path packages\/server\/src\/enterprise \\  &#8212;path packages\/server\/src\/IdentityManager.ts \\  &#8212;path packages\/server\/test\/enterprise\u0418\u0437 3634 \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c 3614: \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043c\u0435\u043d\u044f\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0441\u0442\u0430\u043b\u0438 \u043f\u0443\u0441\u0442\u044b\u043c\u0438. \u0410\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u043e \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0441\u044c.\u041f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432\u043d\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u2014 \u044d\u0442\u043e \u043f\u0440\u044f\u043c\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 \u00ab\u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\u00bb. \u0421\u043c\u043e\u0442\u0440\u0435\u043b \u044f \u0432 \u043d\u0435\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0434\u0438 \u0434\u0432\u0443\u0445 \u0432\u0435\u0449\u0435\u0439: \u0441\u0445\u0435\u043c\u044b \u0442\u0430\u0431\u043b\u0438\u0446 (\u0447\u0442\u043e\u0431\u044b \u043d\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438) \u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 API, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043b\u0435\u0436\u0438\u0442 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0438 \u043f\u043e \u043d\u0435\u043c\u0443 \u0432\u0438\u0434\u043d\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451: \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u043d \u0445\u0440\u0430\u043d\u0438\u0442, \u043a\u0443\u0434\u0430 \u0438\u0434\u0451\u0442 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u0438 401.\u0421\u0432\u043e\u0439 \u0432\u0445\u043e\u0434: \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0438 API-\u043a\u043b\u044e\u0447\u0438\u041d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c. \u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 Flowise \u0443\u043c\u0435\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439, \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u0440\u043e\u043b\u0438, \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u043e\u0447\u0442\u0435 \u0438 SSO \u0447\u0435\u0440\u0435\u0437 Google, Azure, Auth0 \u0438 GitHub. \u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u2014 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430. \u0414\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f, \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u2014 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c, \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043c\u0438\u043d\u0438\u043c\u0443\u043c: \u043e\u0434\u043d\u0430 \u0443\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u043f\u043b\u044e\u0441 API-\u043a\u043b\u044e\u0447\u0438 \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u041c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u0434\u0430 \u2014 \u043c\u0435\u043d\u044c\u0448\u0435 \u043c\u0435\u0441\u0442 \u0434\u043b\u044f \u043e\u0448\u0438\u0431\u043a\u0438. \u041a\u0441\u0442\u0430\u0442\u0438, \u0434\u0432\u0435 \u0438\u0437 \u0448\u0435\u0441\u0442\u0438 \u0441\u0432\u0435\u0436\u0438\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043a\u0430\u043a \u0440\u0430\u0437 \u0432 SSO: \u0437\u0430\u0445\u0432\u0430\u0442 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 e-mail \u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0438 \u043e\u0431\u0445\u043e\u0434 \u0442\u043e\u043a\u0435\u043d\u0430 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f. \u0412 Keelflow \u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442.\u041c\u043e\u0434\u0443\u043b\u044c packages\/server\/src\/identity \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0430 ~800 \u0441\u0442\u0440\u043e\u043a:\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430 \u0432 \u0431\u0430\u0437\u0435 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0412 Flowise 3.0.1 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0432\u043e\u0439\u0442\u0438 (GHSA-v5w9-prxf-w882). \u0417\u0434\u0435\u0441\u044c \u043b\u044e\u0431\u0430\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u0437 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0431\u0430\u0437\u044b.\u041f\u0430\u0440\u043e\u043b\u0438 \u2014 bcrypt. Flowise \u0442\u043e\u0436\u0435 \u0445\u0440\u0430\u043d\u0438\u043b bcrypt-\u0445\u0435\u0448\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043f\u0430\u0440\u043e\u043b\u0435\u043c.\u0421\u0435\u0441\u0441\u0438\u0438 \u2014 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0430 \u043d\u0435 JWT. \u0412 cookie \u043b\u0435\u0436\u0438\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 32-\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0439 \u0442\u043e\u043a\u0435\u043d, \u0432 \u0431\u0430\u0437\u0435 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e SHA-256. \u0423\u0442\u0451\u043a\u0448\u0430\u044f \u0431\u0430\u0437\u0430 \u043d\u0435 \u0434\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0441\u0435\u0441\u0441\u0438\u0439. \u0421\u0435\u0441\u0441\u0438\u044f \u0436\u0438\u0432\u0451\u0442 7 \u0434\u043d\u0435\u0439 \u0431\u0435\u0437 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 30 \u0434\u043d\u0435\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c; \u0441\u043c\u0435\u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u044f \u0438\u043b\u0438 \u0441\u0431\u0440\u043e\u0441 \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442 \u0432\u0441\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0421 JWT \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c: \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0447\u0451\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u043a\u0435\u043d\u043e\u0432.\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0432\u0445\u043e\u0434\u0430: 10 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u0437\u0430 15 \u043c\u0438\u043d\u0443\u0442 \u0441 \u043e\u0434\u043d\u043e\u0433\u043e IP \u0438 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d e-mail. \u0414\u043b\u044f \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e e-mail \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0442\u0440\u0430\u0442\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 bcrypt, \u0447\u0442\u043e\u0431\u044b \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430.API-\u043a\u043b\u044e\u0447\u0438 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c\u0438: \u043f\u0440\u0430\u0432\u0430 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 apikey.permissions \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0432\u0438\u0434\u0430 chatflows:view, documentStores:upsert-config. \u041a\u043b\u044e\u0447\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e Flowise, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u043f\u0440\u0435\u0436\u043d\u0438\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u0414\u043e \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043b\u044e\u0447 \u043d\u0435 \u0434\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435.\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0434\u0432\u0443\u043c \u0441\u0442\u0440\u043e\u043a\u0430\u043c: \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0451, \u043a\u043b\u044e\u0447\u0443 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435.const hasAny = (req: Request, required: string[]): boolean =&gt; {    const user = req.user    if (!user) return false    if (user.isOrganizationAdmin) return true    return required.some((permission) =&gt; (user.permissions ?? []).includes(permission))}\u0418\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u0435\u0439 \u0432\u0440\u043e\u0434\u0435 isOrganizationAdmin \u0438 activeWorkspaceId \u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b. \u041d\u0430 \u043d\u0438\u0445 \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u044b \u0441\u043e\u0442\u043d\u0438 \u043c\u0435\u0441\u0442 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 (\u0442\u043e\u043b\u044c\u043a\u043e req.user?.activeWorkspaceId \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f 132 \u0440\u0430\u0437\u0430) \u0438 \u0432\u0435\u0441\u044c \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0431\u044b\u043b\u043e \u0431\u044b \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u043d\u043e \u044d\u0442\u043e \u0442\u044b\u0441\u044f\u0447\u0430 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u0430\u0432\u043e\u043a \u0432 \u0447\u0443\u0436\u043e\u043c \u043a\u043e\u0434\u0435 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.\u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0442\u043e\u0436\u0435 \u043f\u0440\u0435\u0436\u043d\u0438\u0435: \/auth\/resolve \u0440\u0435\u0448\u0430\u0435\u0442, \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0438\u043b\u0438 \u0444\u043e\u0440\u043c\u0443 \u0432\u0445\u043e\u0434\u0430, \/auth\/login, \/account\/register, \/account\/logout, \/user. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u2014 \u043f\u043e\u043c\u0435\u043d\u044f\u043b \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u00ab\u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c?\u00bb: \u043f\u0438\u0441\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442, \u043f\u0430\u0440\u043e\u043b\u044c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 keelflow user &lt;email&gt; &lt;\u043f\u0430\u0440\u043e\u043b\u044c&gt; \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.\u041c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0442\u0421\u0430\u043c\u0430\u044f \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c. \u0412 \u0431\u0430\u0437\u0435 Flowise 3.x \u0442\u0430\u0431\u043b\u0438\u0446\u044b user, organization, workspace \u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 workspaceId \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438. \u0423\u0434\u0430\u043b\u0438\u0432 \u0438\u0445, \u044f \u043f\u043e\u043b\u0443\u0447\u0430\u044e \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438:\u0421\u0442\u0430\u0440\u0430\u044f \u0431\u0430\u0437\u0430 (Flowise 3.x): \u0432\u0441\u0451 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043e. \u041d\u043e\u0432\u044b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u043c\u0430\u0442\u044c.\u041d\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0438\u043b\u0438 \u0431\u0430\u0437\u0430 \u043e\u0442 Flowise 2.x: \u0442\u0430\u0431\u043b\u0438\u0446 \u043d\u0435\u0442, \u0438 \u0431\u0435\u0437 \u043d\u0438\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0443\u0442 \u0434\u0430\u043b\u044c\u0448\u0435, \u0443\u043f\u0430\u0434\u0443\u0442.\u0412\u0442\u043e\u0440\u043e\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0445\u0438\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f ModifyChatflowType \u0434\u043b\u044f SQLite \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 chat_flow \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u043d\u0430 workspace:CREATE TABLE &#171;temp_chat_flow&#187; (    &#8230;    &#171;workspaceId&#187; TEXT,    FOREIGN KEY (&#171;workspaceId&#187;) REFERENCES &#171;workspace&#187;(&#171;id&#187;));\u0417\u043d\u0430\u0447\u0438\u0442, workspace \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u043d\u044c\u0448\u0435. \u0422\u0443\u0442 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 TypeORM 0.3: \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 migrations, \u043f\u043e \u0438\u043c\u0435\u043d\u0438, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0438\u0445 \u043f\u043e \u043e\u0442\u043c\u0435\u0442\u043a\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430. \u0420\u0430\u0437 \u0442\u0430\u043a, \u044f \u0434\u0430\u043b \u0441\u0432\u043e\u0438\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f\u043c \u043e\u0442\u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u044f\u0434\u043e\u043c \u0441 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u043c\u0438:\/\/ \u043c\u0435\u0436\u0434\u0443 AddApiKey1720230151480 \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0435\u0439export class KeelflowIdentityTables1720230151483 implements MigrationInterface { &#8230; }\/\/ \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 AddExecutionEntity1738090872625export class KeelflowWorkspaceColumns1738090872626 implements MigrationInterface { &#8230; }\u041d\u0430 \u043d\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 \u043e\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0440\u0430\u043d\u044c\u0448\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435. \u041d\u0430 \u0441\u0442\u0430\u0440\u043e\u0439 \u2014 \u0442\u043e\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f (\u0438\u0445 \u0438\u043c\u0451\u043d \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 migrations \u043d\u0435\u0442), \u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0448\u0430\u0433 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u0438\u043b\u0438 \u0438\u043d\u0434\u0435\u043a\u0441, \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c.\u0427\u0435\u0442\u044b\u0440\u0435 \u0421\u0423\u0411\u0414 \u2014 SQLite, Postgres, MySQL \u0438 MariaDB \u2014 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u0438\u043f\u0430\u043c\u0438. \u0412\u043e Flowise \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u044b\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432; \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043e\u0434\u043d\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0438\u043f \u043f\u043e\u0434 \u0434\u0438\u0430\u043b\u0435\u043a\u0442: uuid DEFAULT uuid_generate_v4() \u0432 Postgres, varchar(36) \u0432 MySQL, varchar \u0432 SQLite. \u041a\u043e\u043b\u043e\u043d\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 API TypeORM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u0437\u043d\u0430\u0435\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0430\u0437\u044b.\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f AddApiKeyPermission: \u043e\u043d\u0430 \u0447\u0438\u0441\u0442\u0438\u0442 \u043f\u0440\u0430\u0432\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 role, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432 Keelflow \u043d\u0435\u0442. \u0425\u0432\u0430\u0442\u0438\u043b\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 if (!(await queryRunner.hasTable(&#8216;role&#8217;))) return.\u041a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u043d\u0435 \u0438\u043c\u0435\u044f \u0441\u0442\u0430\u0440\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u00ab\u0432\u0430\u0448\u0430 \u0431\u0430\u0437\u0430 \u043e\u0442 Flowise \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u00bb \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0431\u0430\u0437\u0435 \u043e\u0442 Flowise, \u0430 \u043d\u0435 \u043d\u0430 \u0442\u043e\u0439, \u0447\u0442\u043e \u044f \u0441\u0435\u0431\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u0435\u0441\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 flowise@3.1.4 \u0438\u0437 npm \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0435\u0433\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u2014 \u0432\u0441\u0435 57, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435. \u041a\u043e\u0434 \u044f \u043d\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u044e: \u043e\u043d \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 npm \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u0441\u0442\u0430, \u043a\u0430\u043a \u043f\u0440\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 Flowise.\u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 Flowise \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442 \u043f\u0430\u043a\u0435\u0442 flowise-components, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 Keelflow \u043d\u0435\u0442: \u043e\u043d \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439:const resolveFilename = Module._resolveFilenameModule._resolveFilename = function (request, &#8230;rest) {    return resolveFilename.call(this, request === &#8216;flowise-components&#8217; ? &#8216;keelflow-components&#8217; : request, &#8230;rest)}\u041f\u043e\u0442\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0442\u0430\u043a, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b Flowise 3.x (\u0441 \u0440\u043e\u043b\u044c\u044e owner, \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u0432 organization_user \u0438 workspace_user), flow \u0438 API-\u043a\u043b\u044e\u0447 \u0441 \u043f\u0440\u0430\u0432\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f Keelflow, \u0438 \u0442\u0435\u0441\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442: \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-495976","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/495976","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=495976"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/495976\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=495976"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=495976"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=495976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}