langflow-base-nightly 0.5.0.dev38__py3-none-any.whl → 0.5.1.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. langflow/alembic/versions/0882f9657f22_encrypt_existing_mcp_auth_settings_.py +122 -0
  2. langflow/api/router.py +2 -0
  3. langflow/api/v1/__init__.py +2 -0
  4. langflow/api/v1/endpoints.py +7 -1
  5. langflow/api/v1/mcp_projects.py +373 -52
  6. langflow/api/v1/openai_responses.py +545 -0
  7. langflow/api/v1/schemas.py +1 -2
  8. langflow/components/FAISS/__init__.py +34 -0
  9. langflow/components/agents/agent.py +246 -52
  10. langflow/components/cassandra/__init__.py +40 -0
  11. langflow/components/chroma/__init__.py +34 -0
  12. langflow/components/clickhouse/__init__.py +34 -0
  13. langflow/components/couchbase/__init__.py +34 -0
  14. langflow/components/data/file.py +302 -376
  15. langflow/components/datastax/__init__.py +3 -3
  16. langflow/components/docling/docling_inline.py +56 -4
  17. langflow/components/elastic/__init__.py +37 -0
  18. langflow/components/milvus/__init__.py +34 -0
  19. langflow/components/mongodb/__init__.py +34 -0
  20. langflow/components/nvidia/nvidia_ingest.py +3 -2
  21. langflow/components/ollama/ollama.py +1 -0
  22. langflow/components/perplexity/perplexity.py +3 -13
  23. langflow/components/pgvector/__init__.py +34 -0
  24. langflow/components/pinecone/__init__.py +34 -0
  25. langflow/components/qdrant/__init__.py +34 -0
  26. langflow/components/redis/__init__.py +36 -2
  27. langflow/components/redis/redis.py +75 -29
  28. langflow/components/redis/redis_chat.py +43 -0
  29. langflow/components/supabase/__init__.py +37 -0
  30. langflow/components/upstash/__init__.py +34 -0
  31. langflow/components/vectara/__init__.py +37 -0
  32. langflow/components/vectorstores/__init__.py +0 -69
  33. langflow/components/vectorstores/local_db.py +1 -0
  34. langflow/components/weaviate/__init__.py +34 -0
  35. langflow/components/youtube/channel.py +1 -1
  36. langflow/custom/custom_component/custom_component.py +11 -0
  37. langflow/custom/dependency_analyzer.py +165 -0
  38. langflow/custom/utils.py +34 -16
  39. langflow/frontend/assets/{SlackIcon-BhW6H3JR.js → SlackIcon-Cr3Q15Px.js} +1 -1
  40. langflow/frontend/assets/{Wikipedia-Dx5jbiy3.js → Wikipedia-GxM5sPdM.js} +1 -1
  41. langflow/frontend/assets/{Wolfram-CIyonzwo.js → Wolfram-BN3-VOCA.js} +1 -1
  42. langflow/frontend/assets/{index-DOEvKC2X.js → index-28oOcafk.js} +1 -1
  43. langflow/frontend/assets/{index-Bhv79Zso.js → index-2wSXqBtB.js} +1 -1
  44. langflow/frontend/assets/{index-BRmSeoWR.js → index-3wW7BClE.js} +1 -1
  45. langflow/frontend/assets/{index-eUkS6iJM.js → index-6pyH3ZJB.js} +1 -1
  46. langflow/frontend/assets/{index-Cr5v2ave.js → index-AWCSdofD.js} +1 -1
  47. langflow/frontend/assets/{index-C27Jj_26.js → index-B2Zgv_xv.js} +1 -1
  48. langflow/frontend/assets/{index-BKKrUElc.js → index-B2ptVQGM.js} +1 -1
  49. langflow/frontend/assets/{index-BnAFhkSN.js → index-B3TANVes.js} +1 -1
  50. langflow/frontend/assets/{index-hZUcL0MZ.js → index-B4yCvZKV.js} +1 -1
  51. langflow/frontend/assets/{index-BPR2mEFC.js → index-BC65VuWx.js} +1 -1
  52. langflow/frontend/assets/{index-CgU7KF4I.js → index-BCDSei1q.js} +1 -1
  53. langflow/frontend/assets/{index-CzHzeZuA.js → index-BJy50PvP.js} +1 -1
  54. langflow/frontend/assets/{index-DkGhPNeA.js → index-BKseQQ2I.js} +1 -1
  55. langflow/frontend/assets/{index-BVFaF7HW.js → index-BLTxEeTi.js} +1 -1
  56. langflow/frontend/assets/{index-cEXY6V06.js → index-BRg1f4Mu.js} +1 -1
  57. langflow/frontend/assets/{index-C2eQmQsn.js → index-BS8Vo8nc.js} +1 -1
  58. langflow/frontend/assets/{index-gdb7XMS8.js → index-BTKOU4xC.js} +1 -1
  59. langflow/frontend/assets/{index-U9GWm1eH.js → index-BVwJDmw-.js} +1 -1
  60. langflow/frontend/assets/{index-BWt5xGeA.js → index-BWYuQ2Sj.js} +1 -1
  61. langflow/frontend/assets/{index-Dx-Z87KT.js → index-BWdLILDG.js} +1 -1
  62. langflow/frontend/assets/{index-paQEWYGT.js → index-BZcw4827.js} +1 -1
  63. langflow/frontend/assets/{index-BDQrd7Tj.js → index-Bbi87Ve4.js} +1 -1
  64. langflow/frontend/assets/{index-vJOO5U8M.js → index-Bf0IYKLd.js} +1 -1
  65. langflow/frontend/assets/{index-1Q3VBqKn.js → index-Bg5nrMRh.js} +1 -1
  66. langflow/frontend/assets/{index-BFQ8KFK0.js → index-BiC280Nx.js} +1 -1
  67. langflow/frontend/assets/{index-CFNTYfFK.js → index-BiKKN6FR.js} +1 -1
  68. langflow/frontend/assets/{index-BPfdqCc_.js → index-Bief6eyJ.js} +1 -1
  69. langflow/frontend/assets/{index-Cxy9sEpy.js → index-BkXec1Yf.js} +1 -1
  70. langflow/frontend/assets/{index-D4tjMhfY.js → index-Bnl6QHtP.js} +1 -1
  71. langflow/frontend/assets/{index-BD7Io1hL.js → index-BpxbUiZD.js} +1978 -1978
  72. langflow/frontend/assets/{index-Ch5r0oW6.js → index-BrJV8psX.js} +1 -1
  73. langflow/frontend/assets/{index-DOQDkSoK.js → index-BwLWcUXL.js} +1 -1
  74. langflow/frontend/assets/{index-CMHpjHZl.js → index-Bx7dBY26.js} +1 -1
  75. langflow/frontend/assets/{index-CbnWRlYY.js → index-C-EdnFdA.js} +1 -1
  76. langflow/frontend/assets/{index-DljpLeCW.js → index-C-Xfg4cD.js} +1 -1
  77. langflow/frontend/assets/{index-Bwi4flFg.js → index-C1f2wMat.js} +1 -1
  78. langflow/frontend/assets/index-C1xroOlH.css +1 -0
  79. langflow/frontend/assets/{index-D6CSIrp1.js → index-C3KequvP.js} +1 -1
  80. langflow/frontend/assets/{index-BYjw7Gk3.js → index-C3ZjKdCD.js} +1 -1
  81. langflow/frontend/assets/{index-DIKUsGLF.js → index-C3l0zYn0.js} +1 -1
  82. langflow/frontend/assets/{index-CfPBgkqg.js → index-C3yvArUT.js} +1 -1
  83. langflow/frontend/assets/{index-CsLQiWNf.js → index-C9Cxnkl8.js} +1 -1
  84. langflow/frontend/assets/{index-mzl9ULw5.js → index-CBc8fEAE.js} +1 -1
  85. langflow/frontend/assets/{index-CEJNWPhA.js → index-CBvrGgID.js} +1 -1
  86. langflow/frontend/assets/{index-DwfHWnX7.js → index-CD-PqGCY.js} +1 -1
  87. langflow/frontend/assets/{index-dyXKnkMi.js → index-CGO1CiUr.js} +1 -1
  88. langflow/frontend/assets/{index-Dka_Rk4-.js → index-CH5UVA9b.js} +1 -1
  89. langflow/frontend/assets/{index-uiKla4UR.js → index-CLJeJYjH.js} +1 -1
  90. langflow/frontend/assets/{index-D9kwEzPB.js → index-CMZ79X-Y.js} +1 -1
  91. langflow/frontend/assets/{index-BrVhdPZb.js → index-CMzfJKiW.js} +1 -1
  92. langflow/frontend/assets/{index-Bct1s6__.js → index-CNw1H-Wc.js} +1 -1
  93. langflow/frontend/assets/{index-B7uEuOPK.js → index-CPHEscq9.js} +1 -1
  94. langflow/frontend/assets/{index-ekfMOqrF.js → index-CRPKJZw9.js} +1 -1
  95. langflow/frontend/assets/{index-G4ro0MjT.js → index-CRPyCfYy.js} +1 -1
  96. langflow/frontend/assets/{index-CSu8KHOi.js → index-CRcMqCIj.js} +1 -1
  97. langflow/frontend/assets/{index-DsoX2o1S.js → index-CUVDws8F.js} +1 -1
  98. langflow/frontend/assets/{index-r_8gs4nL.js → index-CVWQfRYZ.js} +1 -1
  99. langflow/frontend/assets/{index-7hzXChQz.js → index-CVl6MbaM.js} +1 -1
  100. langflow/frontend/assets/{index-B8UR8v-Q.js → index-CVwWoX99.js} +1 -1
  101. langflow/frontend/assets/{index-Dda2u_yz.js → index-CWPzZtSx.js} +1 -1
  102. langflow/frontend/assets/{index-BKeZt2hQ.js → index-CZqRL9DE.js} +1 -1
  103. langflow/frontend/assets/{index-DHngW1k8.js → index-CdIf07Rw.js} +1 -1
  104. langflow/frontend/assets/{index-C--IDAyc.js → index-Cewy7JZE.js} +1 -1
  105. langflow/frontend/assets/{index-DZP_SaHb.js → index-CfwLpbMM.js} +1 -1
  106. langflow/frontend/assets/{index-CuCM7Wu7.js → index-CiR1dxI4.js} +1 -1
  107. langflow/frontend/assets/{index-Xi4TplbI.js → index-CiixOzDG.js} +1 -1
  108. langflow/frontend/assets/{index-BLYw9MK2.js → index-ClsuDmR6.js} +1 -1
  109. langflow/frontend/assets/{index-DMCWDJOl.js → index-CmEYYRN1.js} +1 -1
  110. langflow/frontend/assets/{index-CrAF-31Y.js → index-Co20d-eQ.js} +1 -1
  111. langflow/frontend/assets/{index-DXAfIEvs.js → index-CpzXS6md.js} +1 -1
  112. langflow/frontend/assets/{index-BmYJJ5YS.js → index-Cqpzl1J4.js} +1 -1
  113. langflow/frontend/assets/{index-KWY77KfV.js → index-CtVIONP2.js} +1 -1
  114. langflow/frontend/assets/{index-B3KCdQ91.js → index-CuFXdTx4.js} +1 -1
  115. langflow/frontend/assets/{index-p2kStSPe.js → index-Cyd2HtHK.js} +1 -1
  116. langflow/frontend/assets/{index-CkjwSTSM.js → index-D-1tA8Dt.js} +1 -1
  117. langflow/frontend/assets/{index-BFf0HTFI.js → index-D-KY3kkq.js} +1 -1
  118. langflow/frontend/assets/{index-BYhcGLTV.js → index-D-_B1a8v.js} +1 -1
  119. langflow/frontend/assets/{index-Dr6pVDPI.js → index-D14EWPyZ.js} +1 -1
  120. langflow/frontend/assets/{index-BDuk0d7P.js → index-D2N3l-cw.js} +1 -1
  121. langflow/frontend/assets/{index-BvGQfVBD.js → index-D5ETnvJa.js} +1 -1
  122. langflow/frontend/assets/{index-D1oynC8a.js → index-D7kquVv2.js} +1 -1
  123. langflow/frontend/assets/{index-B1XqWJhG.js → index-DA6-bvgN.js} +1 -1
  124. langflow/frontend/assets/{index-DzIv3RyR.js → index-DDWBeudF.js} +1 -1
  125. langflow/frontend/assets/{index-BKlQbl-6.js → index-DDcMAaG4.js} +1 -1
  126. langflow/frontend/assets/{index-CkK25zZO.js → index-DHgomBdh.js} +1 -1
  127. langflow/frontend/assets/{index-Bj3lSwvZ.js → index-DJP-ss47.js} +1 -1
  128. langflow/frontend/assets/{index-DDXsm8tz.js → index-DQ7VYqQc.js} +1 -1
  129. langflow/frontend/assets/{index-BNQIbda3.js → index-DTqbvGC0.js} +1 -1
  130. langflow/frontend/assets/{index-BzoRPtTY.js → index-DUpri6zF.js} +1 -1
  131. langflow/frontend/assets/{index-35sspuLu.js → index-DV3utZDZ.js} +1 -1
  132. langflow/frontend/assets/{index-BpmqDOeZ.js → index-DXRfN4HV.js} +1 -1
  133. langflow/frontend/assets/{index-C0E3_MIK.js → index-Db9dYSzy.js} +1 -1
  134. langflow/frontend/assets/{index-C8K0r39B.js → index-DdtMEn6I.js} +1 -1
  135. langflow/frontend/assets/{index-BLsVo9iW.js → index-DfDhMHgQ.js} +1 -1
  136. langflow/frontend/assets/{index-BZFljdMa.js → index-Dfe7qfvf.js} +1 -1
  137. langflow/frontend/assets/{index-CyP3py8K.js → index-DhtZ5hx8.js} +1 -1
  138. langflow/frontend/assets/{index-w72fDjpG.js → index-DiB3CTo8.js} +1 -1
  139. langflow/frontend/assets/{index-CY7_TBTC.js → index-DiGWASY5.js} +1 -1
  140. langflow/frontend/assets/{index-CmSFKgiD.js → index-Dl5amdBz.js} +1 -1
  141. langflow/frontend/assets/{index-B0m53xKd.js → index-DlD4dXlZ.js} +1 -1
  142. langflow/frontend/assets/{index-DnVYJtVO.js → index-DmeiHnfl.js} +1 -1
  143. langflow/frontend/assets/index-Dmu-X5-4.js +1 -0
  144. langflow/frontend/assets/{index-CWYiSeWV.js → index-DpVWih90.js} +1 -1
  145. langflow/frontend/assets/{index-CjsommIr.js → index-DrDrcajG.js} +1 -1
  146. langflow/frontend/assets/{index-Un9pWxnP.js → index-Du-pc0KE.js} +1 -1
  147. langflow/frontend/assets/{index-oxHBZk2v.js → index-DwPkMTaY.js} +1 -1
  148. langflow/frontend/assets/{index-CgwykVGh.js → index-DwQEZe3C.js} +1 -1
  149. langflow/frontend/assets/{index-BmIx1cws.js → index-DyJFTK24.js} +1 -1
  150. langflow/frontend/assets/{index-0XQqYgdG.js → index-J38wh62w.js} +1 -1
  151. langflow/frontend/assets/{index-H7J7w7fa.js → index-Kwdl-e29.js} +1 -1
  152. langflow/frontend/assets/{index-CUKmGsI6.js → index-OwPvCmpW.js} +1 -1
  153. langflow/frontend/assets/{index-zV82kQ6k.js → index-Tw3Os-DN.js} +1 -1
  154. langflow/frontend/assets/{index-8cuhogZP.js → index-X0guhYF8.js} +1 -1
  155. langflow/frontend/assets/{index-BUse-kxM.js → index-dJWNxIRH.js} +1 -1
  156. langflow/frontend/assets/{index-DyqITq51.js → index-dcJ8-agu.js} +1 -1
  157. langflow/frontend/assets/{index-Cg53lrYh.js → index-eo2mAtL-.js} +1 -1
  158. langflow/frontend/assets/{index-DqbzUcI5.js → index-hG24k5xJ.js} +1 -1
  159. langflow/frontend/assets/{index-BQrVDjR1.js → index-h_aSZHf3.js} +1 -1
  160. langflow/frontend/assets/{index-kkA-qHB_.js → index-hbndqB9B.js} +1 -1
  161. langflow/frontend/assets/{index-DZxUIhWh.js → index-iJngutFo.js} +1 -1
  162. langflow/frontend/assets/{index-Dg8N3NSO.js → index-lTpteg8t.js} +1 -1
  163. langflow/frontend/assets/{index-DDhJVVel.js → index-lZX9AvZW.js} +1 -1
  164. langflow/frontend/assets/{index-BHhnpSkW.js → index-m8QA6VNM.js} +1 -1
  165. langflow/frontend/assets/{index-Bk4mTwnI.js → index-o0D2S7xW.js} +1 -1
  166. langflow/frontend/assets/{index-DJESSNJi.js → index-ovFJ_0J6.js} +1 -1
  167. langflow/frontend/assets/{index-DH6o91_s.js → index-pYJJOcma.js} +1 -1
  168. langflow/frontend/assets/{index-Bo-ww0Bb.js → index-sI75DsdM.js} +1 -1
  169. langflow/frontend/assets/{index-BcAgItH4.js → index-xvFOmxx4.js} +1 -1
  170. langflow/frontend/assets/{index-_cbGmjF4.js → index-z3SRY-mX.js} +1 -1
  171. langflow/frontend/assets/lazyIconImports-D97HEZkE.js +2 -0
  172. langflow/frontend/assets/{use-post-add-user-CvtuazTg.js → use-post-add-user-C0MdTpQ5.js} +1 -1
  173. langflow/frontend/index.html +2 -2
  174. langflow/graph/graph/base.py +4 -2
  175. langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +26 -0
  176. langflow/initial_setup/starter_projects/Basic Prompting.json +26 -0
  177. langflow/initial_setup/starter_projects/Blog Writer.json +56 -0
  178. langflow/initial_setup/starter_projects/Custom Component Generator.json +35 -0
  179. langflow/initial_setup/starter_projects/Document Q&A.json +27 -1
  180. langflow/initial_setup/starter_projects/Financial Report Parser.json +43 -0
  181. langflow/initial_setup/starter_projects/Hybrid Search RAG.json +83 -1
  182. langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +43 -0
  183. langflow/initial_setup/starter_projects/Instagram Copywriter.json +49 -1
  184. langflow/initial_setup/starter_projects/Invoice Summarizer.json +40 -1
  185. langflow/initial_setup/starter_projects/Knowledge Ingestion.json +71 -0
  186. langflow/initial_setup/starter_projects/Knowledge Retrieval.json +63 -0
  187. langflow/initial_setup/starter_projects/Market Research.json +57 -1
  188. langflow/initial_setup/starter_projects/Meeting Summary.json +95 -0
  189. langflow/initial_setup/starter_projects/Memory Chatbot.json +35 -0
  190. langflow/initial_setup/starter_projects/News Aggregator.json +61 -1
  191. langflow/initial_setup/starter_projects/Nvidia Remix.json +67 -2
  192. langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +48 -1
  193. langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +44 -1
  194. langflow/initial_setup/starter_projects/Price Deal Finder.json +53 -1
  195. langflow/initial_setup/starter_projects/Research Agent.json +40 -1
  196. langflow/initial_setup/starter_projects/Research Translation Loop.json +66 -0
  197. langflow/initial_setup/starter_projects/SEO Keyword Generator.json +17 -0
  198. langflow/initial_setup/starter_projects/SaaS Pricing.json +27 -1
  199. langflow/initial_setup/starter_projects/Search agent.json +40 -1
  200. langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +72 -3
  201. langflow/initial_setup/starter_projects/Simple Agent.json +57 -1
  202. langflow/initial_setup/starter_projects/Social Media Agent.json +77 -1
  203. langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +35 -1
  204. langflow/initial_setup/starter_projects/Travel Planning Agents.json +51 -3
  205. langflow/initial_setup/starter_projects/Twitter Thread Generator.json +80 -0
  206. langflow/initial_setup/starter_projects/Vector Store RAG.json +110 -3
  207. langflow/initial_setup/starter_projects/Youtube Analysis.json +82 -1
  208. langflow/initial_setup/starter_projects/vector_store_rag.py +1 -1
  209. langflow/processing/process.py +3 -0
  210. langflow/schema/openai_responses_schemas.py +74 -0
  211. langflow/services/auth/mcp_encryption.py +104 -0
  212. langflow/services/settings/feature_flags.py +1 -1
  213. {langflow_base_nightly-0.5.0.dev38.dist-info → langflow_base_nightly-0.5.1.dev0.dist-info}/METADATA +1 -1
  214. {langflow_base_nightly-0.5.0.dev38.dist-info → langflow_base_nightly-0.5.1.dev0.dist-info}/RECORD +239 -219
  215. langflow/components/vectorstores/redis.py +0 -89
  216. langflow/frontend/assets/index-BWgIWfv2.js +0 -1
  217. langflow/frontend/assets/index-CqS7zir1.css +0 -1
  218. langflow/frontend/assets/lazyIconImports-DTNgvPE-.js +0 -2
  219. /langflow/components/{vectorstores → FAISS}/faiss.py +0 -0
  220. /langflow/components/{vectorstores → cassandra}/cassandra.py +0 -0
  221. /langflow/components/{datastax/cassandra.py → cassandra/cassandra_chat.py} +0 -0
  222. /langflow/components/{vectorstores → cassandra}/cassandra_graph.py +0 -0
  223. /langflow/components/{vectorstores → chroma}/chroma.py +0 -0
  224. /langflow/components/{vectorstores → clickhouse}/clickhouse.py +0 -0
  225. /langflow/components/{vectorstores → couchbase}/couchbase.py +0 -0
  226. /langflow/components/{vectorstores → datastax}/astradb.py +0 -0
  227. /langflow/components/{vectorstores → datastax}/astradb_graph.py +0 -0
  228. /langflow/components/{vectorstores → datastax}/graph_rag.py +0 -0
  229. /langflow/components/{vectorstores → datastax}/hcd.py +0 -0
  230. /langflow/components/{vectorstores → elastic}/elasticsearch.py +0 -0
  231. /langflow/components/{vectorstores → elastic}/opensearch.py +0 -0
  232. /langflow/components/{vectorstores → milvus}/milvus.py +0 -0
  233. /langflow/components/{vectorstores → mongodb}/mongodb_atlas.py +0 -0
  234. /langflow/components/{vectorstores → pgvector}/pgvector.py +0 -0
  235. /langflow/components/{vectorstores → pinecone}/pinecone.py +0 -0
  236. /langflow/components/{vectorstores → qdrant}/qdrant.py +0 -0
  237. /langflow/components/{vectorstores → supabase}/supabase.py +0 -0
  238. /langflow/components/{vectorstores → upstash}/upstash.py +0 -0
  239. /langflow/components/{vectorstores → vectara}/vectara.py +0 -0
  240. /langflow/components/{vectorstores → vectara}/vectara_rag.py +0 -0
  241. /langflow/components/{vectorstores → weaviate}/weaviate.py +0 -0
  242. {langflow_base_nightly-0.5.0.dev38.dist-info → langflow_base_nightly-0.5.1.dev0.dist-info}/WHEEL +0 -0
  243. {langflow_base_nightly-0.5.0.dev38.dist-info → langflow_base_nightly-0.5.1.dev0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,104 @@
1
+ """MCP Authentication encryption utilities for secure credential storage."""
2
+
3
+ from typing import Any
4
+
5
+ from cryptography.fernet import InvalidToken
6
+ from loguru import logger
7
+
8
+ from langflow.services.auth import utils as auth_utils
9
+ from langflow.services.deps import get_settings_service
10
+
11
+ # Fields that should be encrypted when stored
12
+ SENSITIVE_FIELDS = [
13
+ "oauth_client_secret",
14
+ "api_key",
15
+ ]
16
+
17
+
18
+ def encrypt_auth_settings(auth_settings: dict[str, Any] | None) -> dict[str, Any] | None:
19
+ """Encrypt sensitive fields in auth_settings dictionary.
20
+
21
+ Args:
22
+ auth_settings: Dictionary containing authentication settings
23
+
24
+ Returns:
25
+ Dictionary with sensitive fields encrypted, or None if input is None
26
+ """
27
+ if auth_settings is None:
28
+ return None
29
+
30
+ settings_service = get_settings_service()
31
+ encrypted_settings = auth_settings.copy()
32
+
33
+ for field in SENSITIVE_FIELDS:
34
+ if encrypted_settings.get(field):
35
+ try:
36
+ # Only encrypt if the value is not already encrypted
37
+ # Try to decrypt first - if it fails, it's not encrypted
38
+ try:
39
+ auth_utils.decrypt_api_key(encrypted_settings[field], settings_service)
40
+ # If decrypt succeeds, it's already encrypted
41
+ logger.debug(f"Field {field} is already encrypted")
42
+ except (ValueError, TypeError, KeyError, InvalidToken):
43
+ # If decrypt fails, the value is plaintext and needs encryption
44
+ encrypted_value = auth_utils.encrypt_api_key(encrypted_settings[field], settings_service)
45
+ encrypted_settings[field] = encrypted_value
46
+ logger.debug(f"Encrypted field {field}")
47
+ except (ValueError, TypeError, KeyError) as e:
48
+ logger.error(f"Failed to encrypt field {field}: {e}")
49
+ raise
50
+
51
+ return encrypted_settings
52
+
53
+
54
+ def decrypt_auth_settings(auth_settings: dict[str, Any] | None) -> dict[str, Any] | None:
55
+ """Decrypt sensitive fields in auth_settings dictionary.
56
+
57
+ Args:
58
+ auth_settings: Dictionary containing encrypted authentication settings
59
+
60
+ Returns:
61
+ Dictionary with sensitive fields decrypted, or None if input is None
62
+ """
63
+ if auth_settings is None:
64
+ return None
65
+
66
+ settings_service = get_settings_service()
67
+ decrypted_settings = auth_settings.copy()
68
+
69
+ for field in SENSITIVE_FIELDS:
70
+ if decrypted_settings.get(field):
71
+ try:
72
+ decrypted_value = auth_utils.decrypt_api_key(decrypted_settings[field], settings_service)
73
+ decrypted_settings[field] = decrypted_value
74
+ logger.debug(f"Decrypted field {field}")
75
+ except (ValueError, TypeError, KeyError, InvalidToken) as e:
76
+ # If decryption fails, assume the value is already plaintext
77
+ # This handles backward compatibility with existing unencrypted data
78
+ logger.debug(f"Field {field} appears to be plaintext or decryption failed: {e}")
79
+ # Keep the original value
80
+
81
+ return decrypted_settings
82
+
83
+
84
+ def is_encrypted(value: str) -> bool:
85
+ """Check if a value appears to be encrypted.
86
+
87
+ Args:
88
+ value: String value to check
89
+
90
+ Returns:
91
+ True if the value appears to be encrypted (base64 Fernet token)
92
+ """
93
+ if not value:
94
+ return False
95
+
96
+ settings_service = get_settings_service()
97
+ try:
98
+ # Try to decrypt - if it succeeds, it's encrypted
99
+ auth_utils.decrypt_api_key(value, settings_service)
100
+ except (ValueError, TypeError, KeyError, InvalidToken):
101
+ # If decryption fails, it's not encrypted
102
+ return False
103
+ else:
104
+ return True
@@ -3,7 +3,7 @@ from pydantic_settings import BaseSettings
3
3
 
4
4
  class FeatureFlags(BaseSettings):
5
5
  mvp_components: bool = False
6
- mcp_composer: bool = False
6
+ mcp_composer: bool = True
7
7
 
8
8
  class Config:
9
9
  env_prefix = "LANGFLOW_FEATURE_"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langflow-base-nightly
3
- Version: 0.5.0.dev38
3
+ Version: 0.5.1.dev0
4
4
  Summary: A Python package with a built-in web application
5
5
  Project-URL: Repository, https://github.com/langflow-ai/langflow
6
6
  Project-URL: Documentation, https://docs.langflow.org