chainlit 2.0.0__py3-none-any.whl → 2.0.dev1__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.

Potentially problematic release.


This version of chainlit might be problematic. Click here for more details.

Files changed (76) hide show
  1. chainlit/__init__.py +57 -55
  2. chainlit/action.py +10 -12
  3. chainlit/{auth/__init__.py → auth.py} +34 -20
  4. chainlit/cache.py +1 -2
  5. chainlit/callbacks.py +7 -52
  6. chainlit/chat_context.py +2 -2
  7. chainlit/chat_settings.py +1 -3
  8. chainlit/cli/__init__.py +1 -14
  9. chainlit/config.py +69 -35
  10. chainlit/context.py +2 -3
  11. chainlit/copilot/dist/index.js +935 -8533
  12. chainlit/data/__init__.py +8 -96
  13. chainlit/data/acl.py +2 -3
  14. chainlit/data/base.py +1 -1
  15. chainlit/data/dynamodb.py +3 -5
  16. chainlit/data/literalai.py +6 -4
  17. chainlit/data/sql_alchemy.py +7 -8
  18. chainlit/data/storage_clients/azure.py +0 -1
  19. chainlit/data/storage_clients/base.py +0 -6
  20. chainlit/data/storage_clients/s3.py +3 -16
  21. chainlit/discord/app.py +1 -2
  22. chainlit/element.py +9 -13
  23. chainlit/emitter.py +21 -17
  24. chainlit/frontend/dist/assets/{DailyMotion-DgRzV5GZ.js → DailyMotion-D1ipkdPJ.js} +1 -1
  25. chainlit/frontend/dist/assets/{Facebook-C0vx6HWv.js → Facebook-d4TLeTik.js} +1 -1
  26. chainlit/frontend/dist/assets/{FilePlayer-CdhzeHPP.js → FilePlayer-BcU7tttX.js} +1 -1
  27. chainlit/frontend/dist/assets/{Kaltura-5iVmeUct.js → Kaltura-DdaRjZrh.js} +1 -1
  28. chainlit/frontend/dist/assets/{Mixcloud-C2zi77Ex.js → Mixcloud-BaJoMsaU.js} +1 -1
  29. chainlit/frontend/dist/assets/{Mux-Vkebogdf.js → Mux-DxPCM5d3.js} +1 -1
  30. chainlit/frontend/dist/assets/{Preview-DwY_sEIl.js → Preview-tUK_Z9pZ.js} +1 -1
  31. chainlit/frontend/dist/assets/{SoundCloud-CREBXAWo.js → SoundCloud-K8-lFZC6.js} +1 -1
  32. chainlit/frontend/dist/assets/{Streamable-B5Lu25uy.js → Streamable-hB-AQ54w.js} +1 -1
  33. chainlit/frontend/dist/assets/{Twitch-y9iKCcM1.js → Twitch-pmuNY0J5.js} +1 -1
  34. chainlit/frontend/dist/assets/{Vidyard-ClYvcuEu.js → Vidyard-BSUm6trV.js} +1 -1
  35. chainlit/frontend/dist/assets/{Vimeo-D6HvM2jt.js → Vimeo-JIPn71zS.js} +1 -1
  36. chainlit/frontend/dist/assets/Wistia-D75KkqOG.js +1 -0
  37. chainlit/frontend/dist/assets/{YouTube-D10tR6CJ.js → YouTube-CPlwqNm_.js} +1 -1
  38. chainlit/frontend/dist/assets/index-CuSbXjG5.js +1091 -0
  39. chainlit/frontend/dist/assets/index-CwmincdQ.css +1 -0
  40. chainlit/frontend/dist/assets/{react-plotly-BpxUS-ab.js → react-plotly-DALmanjC.js} +1 -1
  41. chainlit/frontend/dist/index.html +2 -2
  42. chainlit/haystack/callbacks.py +4 -5
  43. chainlit/input_widget.py +4 -6
  44. chainlit/langchain/callbacks.py +47 -56
  45. chainlit/langflow/__init__.py +0 -1
  46. chainlit/llama_index/callbacks.py +7 -7
  47. chainlit/message.py +7 -6
  48. chainlit/mistralai/__init__.py +2 -3
  49. chainlit/oauth_providers.py +3 -70
  50. chainlit/openai/__init__.py +2 -3
  51. chainlit/secret.py +1 -1
  52. chainlit/server.py +174 -474
  53. chainlit/session.py +5 -7
  54. chainlit/slack/app.py +2 -3
  55. chainlit/socket.py +103 -78
  56. chainlit/step.py +11 -11
  57. chainlit/sync.py +1 -2
  58. chainlit/teams/app.py +0 -1
  59. chainlit/types.py +4 -20
  60. chainlit/user.py +1 -2
  61. chainlit/utils.py +2 -3
  62. {chainlit-2.0.0.dist-info → chainlit-2.0.dev1.dist-info}/METADATA +38 -8
  63. chainlit-2.0.dev1.dist-info/RECORD +99 -0
  64. chainlit/auth/cookie.py +0 -123
  65. chainlit/auth/jwt.py +0 -37
  66. chainlit/data/chainlit_data_layer.py +0 -584
  67. chainlit/data/storage_clients/azure_blob.py +0 -80
  68. chainlit/data/storage_clients/gcs.py +0 -78
  69. chainlit/frontend/dist/assets/Dataframe-DVgwSMU2.js +0 -22
  70. chainlit/frontend/dist/assets/Wistia-Cu4zZ2Ci.js +0 -1
  71. chainlit/frontend/dist/assets/index-CI4qFOt5.js +0 -8665
  72. chainlit/frontend/dist/assets/index-CrrqM0nZ.css +0 -1
  73. chainlit/translations/nl-NL.json +0 -229
  74. chainlit-2.0.0.dist-info/RECORD +0 -106
  75. {chainlit-2.0.0.dist-info → chainlit-2.0.dev1.dist-info}/WHEEL +0 -0
  76. {chainlit-2.0.0.dist-info → chainlit-2.0.dev1.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,99 @@
1
+ chainlit/__init__.py,sha256=a9Kp1l-bWiCWV8zn4Eo-TDwFp7Uy6bgf0u7di2bZaNo,4433
2
+ chainlit/__main__.py,sha256=7Vg3w3T3qDuz4KDu5lQhLH6lQ3cYdume7gHH7Z1V97U,87
3
+ chainlit/_utils.py,sha256=vaKfEpXcL4kXktp54IRQWZRK4L_HGK8gJuAoIM29YYc,289
4
+ chainlit/action.py,sha256=k-GsblVHI4DnDWFyF-RZgq3KfdfAFICFh2OBeU4w8N8,1410
5
+ chainlit/auth.py,sha256=Ut_sQTgYDQ7K2t3QG0ByO4Gw5t0PmmYI4Cr48cJmHCA,2846
6
+ chainlit/cache.py,sha256=d6A8u3aWKJouuN7Ikx6e9bnsrZzPlaCy42PXSEQYrNY,1348
7
+ chainlit/callbacks.py,sha256=cz8RBC4yT2M8mK--lrazMFt4ZPrdPKwca4iSLZFm_mI,8886
8
+ chainlit/chat_context.py,sha256=X1NInuCkhrfFhFUNIbipVaqf-90xXuyCAB9fvJlEUD4,1868
9
+ chainlit/chat_settings.py,sha256=2ByenmwS8O6jQjDVJjhhbLrBPGA5aY2F7R3VvQQxXPk,877
10
+ chainlit/cli/__init__.py,sha256=EBm7RAcR9579s1uglKQ5O9UxSEQ5FEIXh2-joljRSFc,6244
11
+ chainlit/config.py,sha256=8o06uZt3w6GUO-jbkOrJoYsBi8ZU7hfUctRGb44GjTs,16907
12
+ chainlit/context.py,sha256=yAN5da8w2P5pZ8OhQLVpsoc5eqeNoo_mFSGNE6C_AGo,3318
13
+ chainlit/copilot/dist/assets/logo_dark-IkGJ_IwC.svg,sha256=Kjz3QMh-oh-ag4YatjU0YCPqGF7F8nHh8VUQoJIs01E,8887
14
+ chainlit/copilot/dist/assets/logo_light-Bb_IPh6r.svg,sha256=sHjnvEq1rfqh3bcexJNYUY7WEDdTQZq3aKZYpi4w4ck,8889
15
+ chainlit/copilot/dist/index.js,sha256=hfHsPAAtWdDTi9mJ28pU5T57FNZRxjIbHT_OH4ej8mo,7126630
16
+ chainlit/data/__init__.py,sha256=oaKft5-ejrduen95fTMVmqLMLXVyEa97mQI72oDDSlE,751
17
+ chainlit/data/acl.py,sha256=5EwZuKVcZediw77L661MohGce3JzGIaYmw6NutmMTw0,578
18
+ chainlit/data/base.py,sha256=U8MTp_7Ywmnt3j5W6TmYvBqqK61TOZ1T7kYi7RTyUGc,2539
19
+ chainlit/data/dynamodb.py,sha256=lb_XM5ApL82ATMmvqoHyD-Hror22TXedXLDFGFh9qZM,19456
20
+ chainlit/data/literalai.py,sha256=H6fxhqwJVeA6movnmlcB_TToD7jslY1X8u2vg3gIku0,17256
21
+ chainlit/data/sql_alchemy.py,sha256=1Kc3d6FSNVj7f2L1ms34NiAW7uAJ9fxJhUL9cjzTDyI,29562
22
+ chainlit/data/storage_clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ chainlit/data/storage_clients/azure.py,sha256=25VCLfSUuiwbS68r8YUaQnquDkbhvjt8iXeD78Oay_E,2530
24
+ chainlit/data/storage_clients/base.py,sha256=mOu3yWgLaqtdPZFjdngJ8ItTR_8Nwq05JxIjXfXlYMg,440
25
+ chainlit/data/storage_clients/s3.py,sha256=LcXABHtc4zX5YiMBLN4Xr7YAXpb0zPXojTMkrNjUKj0,1158
26
+ chainlit/data/utils.py,sha256=cVe8p9F-lITgmAD2xhON_h0nKJVrh1P0AUoLCq6JCWs,966
27
+ chainlit/discord/__init__.py,sha256=lTHHcYQmfa2wpJ35m3eveEpUbp6ti2YSA7AdopfsREs,219
28
+ chainlit/discord/app.py,sha256=-efl4v9wNvfidYPjS2kqNqaaUCvvfBlErZe6lyQF_IE,11174
29
+ chainlit/element.py,sha256=3bWesS5LVR3nJgrqsipDc0UqfrPOQekQWMmpgL91GDw,11632
30
+ chainlit/emitter.py,sha256=DvxpQYS_BKPHQ6WUEOOhAOkl9M14Tm1FQ8uFI2xi75E,13946
31
+ chainlit/frontend/dist/assets/DailyMotion-D1ipkdPJ.js,sha256=lfI-aAHQqeU7vKM-4nWByYOkCCOavciTgXwCVLlLR58,2958
32
+ chainlit/frontend/dist/assets/Facebook-d4TLeTik.js,sha256=UYx9xHuTTPbxfY8EAzQ4IoEAJKb53pa_rqKSR4ggqRE,3213
33
+ chainlit/frontend/dist/assets/FilePlayer-BcU7tttX.js,sha256=0MPqwM_Z2hMWD7RC_gwDHlWgsIamSeFFL4j2tOgjJo0,9038
34
+ chainlit/frontend/dist/assets/Kaltura-DdaRjZrh.js,sha256=_eegLbhKDAjJ0-GZK2e0Az-WF-pJOpUkChSXIjjvhso,2787
35
+ chainlit/frontend/dist/assets/Mixcloud-BaJoMsaU.js,sha256=5_A4jZhkc9QAPMvSpE1OQrmy_fHTwGgia_xK5X3AD6Y,2635
36
+ chainlit/frontend/dist/assets/Mux-DxPCM5d3.js,sha256=dZb7Vr5Rf91Ql43b5whuo9bBJDCbitChES4PHDIfWDk,5357
37
+ chainlit/frontend/dist/assets/Preview-tUK_Z9pZ.js,sha256=kjPNO2PZVlSRWy7pIF5zMFtHsQ1j5Mr2-X2wiHgrXTY,3008
38
+ chainlit/frontend/dist/assets/SoundCloud-K8-lFZC6.js,sha256=hzRPMiai5ojIEiM6E4kV5xue_bH41bEh4zOGY7PwzvM,2920
39
+ chainlit/frontend/dist/assets/Streamable-hB-AQ54w.js,sha256=FyErjgWAGbxutmgMZmOyMR4B3s0Rv_3a_zAJB21ah0A,2932
40
+ chainlit/frontend/dist/assets/Twitch-pmuNY0J5.js,sha256=uK1rfxa-DcQxmtg874BotoDLsDuL0mxiTrI9aQKjgBE,3080
41
+ chainlit/frontend/dist/assets/Vidyard-BSUm6trV.js,sha256=lnn3nNL0FaSUvMOURTKCWye-xGgustAGEKfUiR5swaE,2854
42
+ chainlit/frontend/dist/assets/Vimeo-JIPn71zS.js,sha256=M2SFC9RInnw2bXL-svvrh8SozvtUjxGzejGLLvo8NUE,3624
43
+ chainlit/frontend/dist/assets/Wistia-D75KkqOG.js,sha256=cE8UHEmoZ7_HeGU0Nccfeyq4HXjqpzR5v9hyZ-JpmV4,3511
44
+ chainlit/frontend/dist/assets/YouTube-CPlwqNm_.js,sha256=IEu7N_8-p8TQUW0m1Fqx2egYvOWS2k43-BcfCGKR6FE,4445
45
+ chainlit/frontend/dist/assets/index-CuSbXjG5.js,sha256=8mZvRkklEqjcYWBHkQwLFuSIWofAmMrsFilS6WtUrNQ,3086883
46
+ chainlit/frontend/dist/assets/index-CwmincdQ.css,sha256=qvl0qUmR5u0JcmJAfkzaZpN-0ZKdQjzqCSE9cnrQpZQ,2559
47
+ chainlit/frontend/dist/assets/logo_dark-IkGJ_IwC.svg,sha256=Kjz3QMh-oh-ag4YatjU0YCPqGF7F8nHh8VUQoJIs01E,8887
48
+ chainlit/frontend/dist/assets/logo_light-Bb_IPh6r.svg,sha256=sHjnvEq1rfqh3bcexJNYUY7WEDdTQZq3aKZYpi4w4ck,8889
49
+ chainlit/frontend/dist/assets/react-plotly-DALmanjC.js,sha256=MtXH8sP_q-N7gE344TAaTEe8gxmIRSiltHN4tDGkx5g,3762918
50
+ chainlit/frontend/dist/favicon.svg,sha256=0Cy8x28obT5eWW3nxZRhsEvu6_zMqrqbg0y6hT3D0Q0,6455
51
+ chainlit/frontend/dist/index.html,sha256=SK_O7tN4N8B6npXJwHS4lfYevWECNQW3TbSQtJf32Dc,972
52
+ chainlit/haystack/__init__.py,sha256=uZ77YiPy-qleSTi3dQCDO9HE6S6F6GpJWmh7jO4cxXA,217
53
+ chainlit/haystack/callbacks.py,sha256=mh6CS6n0Z70u9B1s72iF0kSl-qi2N55T-AgaMtUvq9Y,5036
54
+ chainlit/hello.py,sha256=LwENQWo5s5r8nNDn4iKSV77vX60Ky5r_qGjQhyi7qlY,416
55
+ chainlit/input_widget.py,sha256=KmOn1nPTBvnld3iIBHR0Vih0KsCxVnTbo2t_xBNANzo,4949
56
+ chainlit/langchain/__init__.py,sha256=zErMw0_3ufSGeF9ye7X0ZX3wDat4mTOx97T40ePDO2g,217
57
+ chainlit/langchain/callbacks.py,sha256=qC9p_XKYOVEszy2gdRr2QTHVtKHBzK07OXfcoxmqMOE,21242
58
+ chainlit/langflow/__init__.py,sha256=wxhxdsl1yxdsRyNTgZticxFF_8VFtJJ4OdIy3tnEIyM,817
59
+ chainlit/llama_index/__init__.py,sha256=weRoIWCaRBGvA1LczCEfsqhWsltQSVlhtRnTovtdo8w,227
60
+ chainlit/llama_index/callbacks.py,sha256=HtxBRkfjHnwEBmhcuYDFsAD2gUVpsOi4ET39l4afh1M,7286
61
+ chainlit/logger.py,sha256=wTwRSZsLfXwWy6U4351IgWAm4KCMThgxm9EZpjGUEr4,373
62
+ chainlit/markdown.py,sha256=V-Op4hyqyTTvXInU5QrHfxs0nb71lBMU8trOSAlast8,2142
63
+ chainlit/message.py,sha256=Rd7CT0U-Zv0zu7jce_XB32h10Ui7z4Ahlis41YYJJxQ,17308
64
+ chainlit/mistralai/__init__.py,sha256=Zr3-mb-3ycNXR1e5ui_yX_7ZxGB0cu5d9E80ir7t-2w,1507
65
+ chainlit/oauth_providers.py,sha256=e-HupFy6HFPCAavBfD3XGBgwHU1n0JrGHO7QjeBp0ts,24297
66
+ chainlit/openai/__init__.py,sha256=CJp-3lr4NS3X-aZ0H3OvKcL5wFf-cJZffIK0Bwl9jxA,1690
67
+ chainlit/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
+ chainlit/secret.py,sha256=cQvIFGTQ7r2heC8EOGdgifSZZYqslh-qQxhUhKhD8vU,295
69
+ chainlit/server.py,sha256=AIHezi1QgJC1JWRhETZmeWFXCiRg93edwrhl3MfT1nY,30430
70
+ chainlit/session.py,sha256=dU56wmJ9LSuSAOwKBpYF8ZofV5SoN1oPmWycHWEN85k,9219
71
+ chainlit/slack/__init__.py,sha256=gkC1iYlQrWHDN8bbsWOquwwlyW9DtKAe22GizJJzY7A,226
72
+ chainlit/slack/app.py,sha256=jzy6Nz9kmnJ6j1wfoI94cweSNDjdv7X-ur_lWnq5oVE,11741
73
+ chainlit/socket.py,sha256=Hg1OC0diVii9o_KZjo1mqnFbgZjezrF3r60D1-UfoBs,12762
74
+ chainlit/step.py,sha256=jyrmaLfj6cwiNtRcJ7q1492g5ZIpuTXX3jjI2Mv35uM,14286
75
+ chainlit/sync.py,sha256=G1n-7-3WgXsN8y1bJkEyws_YwmHZIyDZoZUwhprigag,1235
76
+ chainlit/teams/__init__.py,sha256=_lUcuc5R4bYwUoC15jyKES10KTeH8ciSWqV5JyLrW6M,236
77
+ chainlit/teams/app.py,sha256=gJm_wBNzCawaTLIYtOEhDlpRwBDprnguTAIoWZhlO8o,10533
78
+ chainlit/telemetry.py,sha256=Rk4dnZv0OnGOgV4kD-VHdhgl4i7i3ypqhSE_R-LZceM,3060
79
+ chainlit/translations/bn.json,sha256=_44si0jO2AFZytfH9sBcINpOveQ4OZs77yf-_VlUtjs,13172
80
+ chainlit/translations/en-US.json,sha256=eS9YSnca-MFpWeZI4JhI0Yl0YBQlrsxB-yFM62K03bI,7778
81
+ chainlit/translations/gu.json,sha256=CkhAowZ0mgMJhQUMrUADfKPfsDgj5mvHlC3WtQ0UjQE,12699
82
+ chainlit/translations/he-IL.json,sha256=fu6FXfoqYqydSh_NcDpS6ZN7byQ-WZkr4zU0qXznqwc,8789
83
+ chainlit/translations/hi.json,sha256=J15GBkMu45RJMj1p5sFVnlackwAp_jKySRsKN-wRCUg,12397
84
+ chainlit/translations/kn.json,sha256=koYH5mEcX4ZfacgmiTu_UfKgNbDXXUwcEV7v6uq92eY,13575
85
+ chainlit/translations/ml.json,sha256=x_QV-3H0vCoijszWrjHajaTBtZzAdQ0y4V2uJgLf0S4,14270
86
+ chainlit/translations/mr.json,sha256=pUr540hPG3Vq-Nts7Pnj-oor_scw1Rx2gaIBnGOyPZU,12495
87
+ chainlit/translations/ta.json,sha256=kLXucUlMCD3jXlPhmOZ3FFZNdXfGDaqVxwqGqJqVF78,14152
88
+ chainlit/translations/te.json,sha256=spOs9mYNITEUy_mKp4_9qmXP2yACVrruiQKb1zlRIWU,13608
89
+ chainlit/translations/zh-CN.json,sha256=Y3MhXUDFi4YMxX8-agpCM68efYXCGcHqyqRAen8LLfk,7508
90
+ chainlit/translations.py,sha256=WG_r7HzxBYns-zk9tVvoGdoofv71okTZx8k1RlcoTIg,2034
91
+ chainlit/types.py,sha256=7pY4iePG2s5nPxU9LnmKbmNI3vT6l5gs6jy9VEH3P4A,5181
92
+ chainlit/user.py,sha256=mUhnGhYQ__qEx8YzigHhF2Z9xxuqQo5C2U8opKpiVRs,752
93
+ chainlit/user_session.py,sha256=T1nQVN_weELXTrkDIV54YgdrA3zIvJGe1tN-nypunt4,1531
94
+ chainlit/utils.py,sha256=hXb5z3jb2syJP0P_jTz3zjDEuIfl0IAmQbA3MooSCTs,3989
95
+ chainlit/version.py,sha256=VcRO6Iwchkv80BWb4hRGkOnBgDhj87-Yjorcv1u5Z3g,276
96
+ chainlit-2.0.dev1.dist-info/METADATA,sha256=s4MlZw9456xccBhQd3rs5ynj9K5NQuacctEfdD_52iM,7091
97
+ chainlit-2.0.dev1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
98
+ chainlit-2.0.dev1.dist-info/entry_points.txt,sha256=FrkqdjrFl8juSnvBndniyX7XuKojmUwO4ghRh-CFMQc,45
99
+ chainlit-2.0.dev1.dist-info/RECORD,,
chainlit/auth/cookie.py DELETED
@@ -1,123 +0,0 @@
1
- import os
2
- from typing import Literal, Optional, cast
3
-
4
- from fastapi import Request, Response
5
- from fastapi.exceptions import HTTPException
6
- from fastapi.security.base import SecurityBase
7
- from fastapi.security.utils import get_authorization_scheme_param
8
- from starlette.status import HTTP_401_UNAUTHORIZED
9
-
10
- """ Module level cookie settings. """
11
- _cookie_samesite = cast(
12
- Literal["lax", "strict", "none"],
13
- os.environ.get("CHAINLIT_COOKIE_SAMESITE", "lax"),
14
- )
15
-
16
- assert (
17
- _cookie_samesite
18
- in [
19
- "lax",
20
- "strict",
21
- "none",
22
- ]
23
- ), "Invalid value for CHAINLIT_COOKIE_SAMESITE. Must be one of 'lax', 'strict' or 'none'."
24
- _cookie_secure = _cookie_samesite == "none"
25
-
26
- _auth_cookie_lifetime = 60 * 60 # 1 hour
27
- _state_cookie_lifetime = 3 * 60 # 3m
28
- _auth_cookie_name = "access_token"
29
- _state_cookie_name = "oauth_state"
30
-
31
-
32
- class OAuth2PasswordBearerWithCookie(SecurityBase):
33
- """
34
- OAuth2 password flow with cookie support with fallback to bearer token.
35
- """
36
-
37
- def __init__(
38
- self,
39
- tokenUrl: str,
40
- scheme_name: Optional[str] = None,
41
- auto_error: bool = True,
42
- ):
43
- self.tokenUrl = tokenUrl
44
- self.scheme_name = scheme_name or self.__class__.__name__
45
- self.auto_error = auto_error
46
-
47
- async def __call__(self, request: Request) -> Optional[str]:
48
- # First try to get the token from the cookie
49
- token = request.cookies.get(_auth_cookie_name)
50
-
51
- # If no cookie, try the Authorization header as fallback
52
- if not token:
53
- # TODO: Only bother to check if cookie auth is explicitly disabled.
54
- authorization = request.headers.get("Authorization")
55
- if authorization:
56
- scheme, token = get_authorization_scheme_param(authorization)
57
- if scheme.lower() != "bearer":
58
- if self.auto_error:
59
- raise HTTPException(
60
- status_code=HTTP_401_UNAUTHORIZED,
61
- detail="Invalid authentication credentials",
62
- headers={"WWW-Authenticate": "Bearer"},
63
- )
64
- else:
65
- return None
66
- else:
67
- if self.auto_error:
68
- raise HTTPException(
69
- status_code=HTTP_401_UNAUTHORIZED,
70
- detail="Not authenticated",
71
- headers={"WWW-Authenticate": "Bearer"},
72
- )
73
- else:
74
- return None
75
-
76
- return token
77
-
78
-
79
- def set_auth_cookie(response: Response, token: str):
80
- """
81
- Helper function to set the authentication cookie with secure parameters
82
- """
83
-
84
- response.set_cookie(
85
- key=_auth_cookie_name,
86
- value=token,
87
- httponly=True,
88
- secure=_cookie_secure,
89
- samesite=_cookie_samesite,
90
- max_age=_auth_cookie_lifetime,
91
- )
92
-
93
-
94
- def clear_auth_cookie(response: Response):
95
- """
96
- Helper function to clear the authentication cookie
97
- """
98
- response.delete_cookie(key=_auth_cookie_name, path="/")
99
-
100
-
101
- def set_oauth_state_cookie(response: Response, token: str):
102
- response.set_cookie(
103
- _state_cookie_name,
104
- token,
105
- httponly=True,
106
- samesite=_cookie_samesite,
107
- secure=_cookie_secure,
108
- max_age=_state_cookie_lifetime,
109
- )
110
-
111
-
112
- def validate_oauth_state_cookie(request: Request, state: str):
113
- """Check the state from the oauth provider against the browser cookie."""
114
-
115
- oauth_state = request.cookies.get(_state_cookie_name)
116
-
117
- if oauth_state != state:
118
- raise Exception("oauth state does not correspond")
119
-
120
-
121
- def clear_oauth_state_cookie(response: Response):
122
- """Oauth complete, delete state token."""
123
- response.delete_cookie(_state_cookie_name) # Do we set path here?
chainlit/auth/jwt.py DELETED
@@ -1,37 +0,0 @@
1
- import datetime
2
- import os
3
- from typing import Any, Dict, Optional
4
-
5
- import jwt as pyjwt
6
-
7
- from chainlit.config import config
8
- from chainlit.user import User
9
-
10
-
11
- def get_jwt_secret() -> Optional[str]:
12
- return os.environ.get("CHAINLIT_AUTH_SECRET")
13
-
14
-
15
- def create_jwt(data: User) -> str:
16
- to_encode: Dict[str, Any] = data.to_dict()
17
- to_encode.update(
18
- {
19
- "exp": datetime.datetime.utcnow()
20
- + datetime.timedelta(seconds=config.project.user_session_timeout),
21
- }
22
- )
23
- secret = get_jwt_secret()
24
- assert secret
25
- encoded_jwt = pyjwt.encode(to_encode, secret, algorithm="HS256")
26
- return encoded_jwt
27
-
28
-
29
- def decode_jwt(token: str) -> User:
30
- dict = pyjwt.decode(
31
- token,
32
- get_jwt_secret(),
33
- algorithms=["HS256"],
34
- options={"verify_signature": True},
35
- )
36
- del dict["exp"]
37
- return User(**dict)