ó
    ýÞ jÂ"  ã                  óª  • % S r SSKJr  SSKrSSKrSSKrSSKJr  SSKJ	r	  SSK
JrJrJr  SSKJrJr  SSKrSSKrSSKJr  \(       a  SS	KJr  S
r\" S\" 5       5      r\4SS jjr      SS jrSS jr\R:                  " S5      r    SS jrS S jr S!S jr!S"S jr"S#S jr#S$S jr$S%S jr%/ r&S\'S'   S&S jr(\RR                  " SS9S'S j5       r*g)(z4Shared utility functions for async and sync clients.é    )ÚannotationsN)ÚMapping)Útzinfo)ÚTYPE_CHECKINGÚAnyÚcast)ÚquoteÚurlparse)ÚRunCreateMetadata)ÚZoneInfo)ú	x-api-keyc                óö   • [        U [        5      (       a  U $ U [        L aY  S HS  n[        R                  " U S35      =n(       d  M%  UR                  5       R                  S5      R                  S5      s  $    g)aÆ  Get the API key from the environment.
Precedence:
    1. explicit string argument
    2. LANGGRAPH_API_KEY (if api_key not provided)
    3. LANGSMITH_API_KEY (if api_key not provided)
    4. LANGCHAIN_API_KEY (if api_key not provided)

Args:
    api_key: The API key to use. Can be:
        - A string: use this exact API key
        - None: explicitly skip loading from environment
        - NOT_PROVIDED (default): auto-load from environment variables
)Ú	LANGGRAPHÚ	LANGSMITHÚ	LANGCHAINÚ_API_KEYÚ"Ú'N)Ú
isinstanceÚstrÚNOT_PROVIDEDÚosÚgetenvÚstrip)Úapi_keyÚprefixÚenvs      ÚY/var/www/html/gaurav/venv/lib/python3.13/site-packages/langgraph_sdk/_shared/utilities.pyÚ_get_api_keyr      sj   € ô �'œ3×ÑØˆØ”,Òã=ˆFÜ—i’i 6 (¨(Ð 3Ó4Ð4ˆs×4Ø—y‘y“{×(Ñ(¨Ó-×3Ñ3°CÓ8Ò8ñ >ð ó    c                ó¸   • U=(       d    0 n[          H  nX!;   d  M
  [        SU S35      e   SS[        R                   30UEn[	        U 5      nU(       a  XCS'   U$ )z1Combine api_key and custom user-provided headers.zCannot set reserved header 'r   z
User-Agentzlanggraph-sdk-py/r   )ÚRESERVED_HEADERSÚ
ValueErrorÚlanggraph_sdkÚ__version__r   )r   Úcustom_headersÚheaderÚheadersÚresolved_api_keys        r   Ú_get_headersr*   3   su   € ð
 $×) r€Nß"ˆØÕ#ÜÐ;¸F¸8À1ÐEÓFÐFñ #ð
 	Ð)¬-×*CÑ*CÐ)DÐEðà
ð€Gô $ GÓ,ÐÞØ/�Ñà€Nr    c                óò  • [        U [        5      n[        U S5      (       aD  [        U R                  5      (       a*  U(       a  [        SU < SU < 35      eU R	                  5       $ [        U S5      (       aD  [        U R                  5      (       a*  U(       a  [        SU < SU < 35      eU R                  5       $ [        U [        [        45      (       a  [        U 5      $ [        S[        U 5       S35      e)NÚ
model_dumpz#Cannot JSON-serialize type object: zI. Did you mean to pass an instance of the object instead?
Received type: ÚdictzObject of type z is not JSON serializable)
r   ÚtypeÚhasattrÚcallabler,   Ú	TypeErrorr-   ÚsetÚ	frozensetÚlist)ÚobjÚis_classs     r   Ú_orjson_defaultr7   H   sâ   € Ü˜#œtÓ$€HÜˆs�L×!Ñ!¤h¨s¯~©~×&>Ñ&>ÞÜØ5°c±Wð =$Ø$'¡7ð,óð ð �~‰~ÓÐÜ	��f×	Ñ	¤(¨3¯8©8×"4Ñ"4ÞÜØ5°c±Wð =$Ø$'¡7ð,óð ð �x‰x‹zÐÜ	�Cœ#œyÐ)×	*Ñ	*Ü�C‹yÐä˜/¬$¨s«)¨Ð4MÐNÓOÐOr    z5(\/threads\/(?P<thread_id>.+))?\/runs\/(?P<run_id>.+)c                óâ   • U R                   R                  S5      =n(       aM  [        R                  U5      =n(       a1  [	        UR                  S5      UR                  S5      =(       d    SS9$ g)z/Extract run metadata from the response headers.zContent-LocationÚrun_idÚ	thread_idN)r9   r:   )r(   ÚgetÚ_RUN_METADATA_PATTERNÚsearchr   Úgroup)ÚresponseÚcontent_locationÚmatchs      r   Ú_get_run_metadata_from_responserB   d   sh   € ð %×,Ñ,×0Ñ0Ð1CÓDÐDÐÕDÜ&×-Ñ-Ð.>Ó?Ð?ˆÕ?ä Ø—;‘;˜xÓ(Ø—k‘k +Ó.×6°$ñ
ð 	
ð
 r    c                óä   • U S:X  a  gU R                  S5      nUS   n[        U5      S:”  a  USS O/ nX4US.nUS:X  a,  [        U[        5      (       a  UR	                  S/ 5      US	'   U$ / US	'   U$ )
zuConvert an SSE event+data pair into a v2 stream part dict.

Returns None for ``end`` events (signals end of stream).
ÚendNÚ|r   é   )r.   ÚnsÚdataÚvaluesÚ__interrupt__Ú
interrupts)ÚsplitÚlenr   r-   Úpop)ÚeventrH   ÚpartsÚ
event_typerG   Úresults         r   Ú_sse_to_v2_dictrS   s   s‡   € ð
 �ƒ~ØØ�K‰K˜Ó€EØ�q‘€JÜ˜%“j 1“nˆˆqˆr‰¨"€BØ&0ÀDÑI€FØ�XÓ¤*¨T´4×"8Ñ"8Ø#Ÿx™x¨¸Ó<ˆˆ|Ñð €Mð  "ˆˆ|ÑØ€Mr    c                ó6  • U b  [        U [        5      (       a  U $ [        U [        5      (       aJ  [        U SS5      n[        U[        5      (       a  U$ U R	                  S5      nUb  U$ [        SU < S35      e[        S[        U 5      R                   35      e)a{  Convert a timezone argument to an IANA timezone string.

Accepts:
    - A string (returned as-is, assumed to be an IANA timezone name)
    - A ``datetime.tzinfo`` instance (e.g. ``zoneinfo.ZoneInfo("America/New_York")``,
      ``datetime.timezone.utc``). The ``key`` attribute is used if available,
      otherwise ``tzname(None)`` is used.
    - ``None`` (returned as ``None``)
NÚkeyz$Cannot determine timezone name from zL. Use a zoneinfo.ZoneInfo instance or pass a string like 'America/New_York'.z9Expected str, datetime.tzinfo, or None for timezone, got )	r   r   r   ÚgetattrÚtznamer#   r1   r.   Ú__name__)ÚtzrU   Únames      r   Ú_resolve_timezoner[   …   s£   € ð 
�z”Z ¤C×(Ñ(Øˆ	Ü�"”f×Ñä�b˜% Ó&ˆÜ�cœ3×ÑØˆJà�y‰y˜‹ˆØÑØˆKÜØ2°2±&ð 9Yð Yó
ð 	
ô Ø
CÄDÈÃH×DUÑDUÐCVÐWóð r    c                ó   • U S:X  a  S$ S$ )NÚhttpsi»  éP   © )Úschemes    r   Ú_default_portra   £   s   € Ø˜GÓ#ˆ3Ð+¨Ð+r    c                óº  • [        U5      nUR                  (       d  UR                  (       d  U$ [        U R                  5      nU[        U R                  5      U R
                  =(       d    [        U5      4nUR                  UR                  =(       d    SUR
                  =(       d    [        UR                  5      4nXE:w  a  [        SU< SU SU 35      eU$ )zÚValidate that a reconnect Location URL is same-origin as the base URL.

Raises ValueError if the Location header points to a different origin
(scheme + host + port), which would leak credentials to an external server.
Ú z4Refusing to follow cross-origin reconnect Location: z	 (origin z!) does not match base URL origin )	r
   r`   Únetlocr   ÚhostÚportra   Úhostnamer#   )Úbase_urlÚlocationÚparsedÚbase_schemeÚbase_originÚ
loc_origins         r   Ú_validate_reconnect_locationrn   §   sÁ   € ô �hÓ€Fà�=�= §§Øˆä�h—o‘oÓ&€KàÜˆH�M‰MÓØ�‰×3œ {Ó3ð€Kð 	�‰Ø�‰×˜2Ø�‰×3”} V§]¡]Ó3ð€Jð
 Ó ÜØBÀ8Á,ð OØ!�lÐ"CÀKÀ=ðRó
ð 	
ð €Or    c                ó`   • U R                  5        VVs0 sH  u  pUc  M
  X_M     snn$ s  snnf ©N)Úitems)ÚdÚkÚvs      r   Ú_provided_valsru   Å   s(   € ØŸW™WœYÔ8™Y‘T�Q¨!‹DˆAŠD™YÒ8Ð8ùÓ8s   ”* *c                óì   • U c  [        S5      e[        U [        [        45      (       a  [        S5      e[	        [        U 5      SS9nU(       a%  [        S U 5       5      (       a  S[        U5      -  nU$ )aA  Encode a value for safe interpolation into a request path segment.

Path segments are encoded with ``safe=""`` so that ``/`` and other reserved
characters are escaped. Standalone dot-segments (``.`` and ``..``) are also
encoded because some URL-handling stacks (including ``httpx``) collapse
them client-side as relative-path traversal before transmission. The value
is coerced to ``str`` so callers can pass ``uuid.UUID`` and similar types
directly without changing call sites.

A properly formed identifier (for example, a standard UUID, which contains
no dots or reserved characters) round-trips through this function
unchanged.

Raises:
    TypeError: If `value` is `None` or a `bytes`/`bytearray` instance.
        Coercing those would produce misleading paths (e.g. `/threads/None`),
        so surface the caller bug instead.
zpath parameter must not be Nonez9path parameter must not be bytes; pass a str or uuid.UUIDrc   )Úsafec              3  ó(   #   • U H	  oS :H  v •  M     g7f)Ú.Nr_   )Ú.0Úcs     r   Ú	<genexpr>Ú$_quote_path_param.<locals>.<genexpr>å   s   é € Ð/© 1˜3–hªùs   ‚z%2E)r1   r   ÚbytesÚ	bytearrayr	   r   ÚallrM   )ÚvalueÚquoteds     r   Ú_quote_path_paramrƒ   É   sk   € ð& �}ÜÐ9Ó:Ð:Ü�%œ%¤Ð+×,Ñ,ÜÐSÓTÐTÜ”3�u“: BÑ'€Fö
 ”#Ñ/©Ó/×/Ñ/Øœ˜V›Ñ$ˆØ€Mr    zlist[httpx.ASGITransport]Ú_registered_transportsc                ó*   • [          H	  nXl        M     g rp   )r„   Úapp)r†   Ú	transports     r   Úconfigure_loopback_transportsrˆ   î   s   € ß+ˆ	ØŽò ,r    rF   )Úmaxsizec                 óh   •  SSK Jn   U R                  $ ! [         a    [        R                  s $ f = f)Nr   ©Úasgi_transport)Úlanggraph_apirŒ   ÚASGITransportÚImportErrorÚhttpxr‹   s    r   Úget_asgi_transportr‘   ó   s1   € ð#Ý0à×+Ñ+Ð+øÜó #ä×"Ñ"Ò"ð#ús   ‚ ”1°1)r   ú
str | NoneÚreturnr’   )r   r’   r&   zMapping[str, str] | Noner“   zdict[str, str])r5   r   r“   r   )r?   zhttpx.Responser“   zRunCreateMetadata | None)rO   r   rH   r   r“   zdict[str, Any] | None)rY   zstr | tzinfo | ZoneInfo | Noner“   r’   )r`   r   r“   Úint)rh   z	httpx.URLri   r   r“   r   )rr   zMapping[str, Any]r“   zdict[str, Any])r�   r   r“   r   )r†   r   r“   ÚNone)r“   ztype[httpx.ASGITransport])+Ú__doc__Ú
__future__r   Ú	functoolsr   ÚreÚcollections.abcr   Údatetimer   Útypingr   r   r   Úurllib.parser	   r
   r�   r$   Úlanggraph_sdk.schemar   Úzoneinfor   r"   Úobjectr   r   r*   r7   Úcompiler<   rB   rS   r[   ra   rn   ru   rƒ   r„   Ú__annotations__rˆ   Ú	lru_cacher‘   r_   r    r   Ú<module>r¤      sï   ðÚ :å "ã Û 	Û 	Ý #Ý ß +Ñ +ß (ã ã Ý 2æÝ!à!Ð á�D™&›(Ó#€ð (4ö ð2Øðà,ðð ôô*Pð. Ÿ
š
Ø<óÐ ð
Øðàôôô$ô<,ôô<9ôðB 57Ð Ð1Ó 6ôð
 ×Ò˜QÑó#ó  ñ#r    