§
    ¹eîiö  ã                  ó$  — d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlZ G d„ d	¦  «        Z e¦   «         Zd7d„Zd8d„Z G d„ de¦  «        Z e	d¬¦  «         G d„ d¦  «        ¦   «         Zej                             dd¦  «        Zej                             dde› �¦  «        ZdZde› d�ZdZdZdZ  ej!        ¦   «         dz  Z"d9d!„Z#ed"„ ¦   «         Z$d:d$„Z%d;d)„Z&d<d,„Z'd-d.œd=d1„Z(d>d3„Z)d8d4„Z*d?d5„Z+d@d6„Z,dS )Aé    )ÚannotationsN)Úcontextmanager)Ú	dataclass)ÚPath)ÚLock)ÚOptionalc                  ó   — e Zd Zd„ ZdS )ÚGoogleColabStatec                óH   — d| _         t          ¦   «         | _        d | _        d S )NF)Ú
is_checkedr   ÚlockÚsecret©Úselfs    úS/home/div/.hermes/hermes-agent/venv/lib/python3.11/site-packages/fal_client/auth.pyÚ__init__zGoogleColabState.__init__   s   € ØˆŒÝ‘F”FˆŒ	Ø%)ˆŒˆˆó    N)Ú__name__Ú
__module__Ú__qualname__r   © r   r   r
   r
      s#   € € € € € ð*ð *ð *ð *ð *r   r
   ÚreturnÚboolc                 ó|   — 	 ddl m}  dt           | ¦   «         ¦  «        v S # t          $ r Y dS t          $ r Y dS w xY w)Nr   ©Úget_ipythonzgoogle.colabF)ÚIPythonr   ÚstrÚModuleNotFoundErrorÚ	NameErrorr   s    r   Úis_google_colabr!      sm   € ðØ'Ð'Ð'Ð'Ð'Ð'à¥ [ [¡]¤]Ñ!3Ô!3Ð3Ð3øÝð ð ð ØˆuˆuÝð ð ð Øˆuˆuðøøøs   ‚! ¡
;®	;º;úOptional[str]c                 óÐ  — t          ¦   «         sd S t          j        5  t          j        rt          j        cd d d ¦  «         S 	 ddlm}  n# t          $ r Y d d d ¦  «         d S w xY w	 |                      d¦  «        }| 	                    ¦   «         t          _        n# t          $ r d t          _        Y nw xY wdt          _        t          j        cd d d ¦  «         S # 1 swxY w Y   d S )Nr   )ÚuserdataÚFAL_KEYT)r!   Ú_colab_stater   r   r   Úgoogle.colabr$   ÚImportErrorÚgetÚstripÚ	Exception)r$   Útokens     r   Úget_colab_tokenr-   %   s}  € ÝÑÔð ØˆtÝ	Ô	ð #ð #ÝÔ"ð 	'ÝÔ&ð#ð #ð #ð #ñ #ô #ð #ð #ð	Ø-Ð-Ð-Ð-Ð-Ð-Ð-øÝð 	ð 	ð 	Øð#ð #ð #ñ #ô #ð #ð #ð #ð	øøøð	'Ø—L’L Ñ+Ô+ˆEØ"'§+¢+¡-¤-�LÔÐøÝð 	'ð 	'ð 	'Ø"&�LÔÐÐð	'øøøð #'�ÔÝÔ"ð!#ð #ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #ð #sY   �CÁA
Á	CÁ

A#ÁCÁ"A#Á#CÁ'3BÂCÂB4Â1CÂ3B4Â4CÃCÃ"Cc                  ó   — e Zd ZdS )ÚMissingCredentialsErrorN)r   r   r   r   r   r   r/   r/   ;   s   € € € € € Ø€Dr   r/   T)Úfrozenc                  óH   — e Zd ZU dZded<   ded<   ed
d„¦   «         Zdd„Zd	S )ÚAuthCredentialsz)Represents an authorization header value.r   Úschemer,   r   c                ó$   — | j         › d| j        › �S )NÚ )r3   r,   r   s    r   Úheader_valuezAuthCredentials.header_valueF   s   € à”+Ð,Ð, ¤
Ð,Ð,Ð,r   údict[str, str]c                ó   — d| j         iS )NÚAuthorization)r6   r   s    r   Ú
as_headerszAuthCredentials.as_headersJ   s   € Ø Ô!2Ð3Ð3r   N©r   r   )r   r7   )r   r   r   Ú__doc__Ú__annotations__Úpropertyr6   r:   r   r   r   r2   r2   ?   s`   € € € € € € à3Ð3à€K€K�KØ€J€J�Jàð-ð -ð -ñ „Xð-ð4ð 4ð 4ð 4ð 4ð 4r   r2   ÚFAL_RUN_HOSTzfal.runÚFAL_QUEUE_RUN_HOSTzqueue.zauth.fal.aizhttps://z/oauth/tokenÚ TwXR51Vz8JbY8GUUMy6EyuVR0fTO7N4NÚauth0_tokenz
.portalockz.falr   c                 óŽ   — t          t          j        dt          t          ¦  «        ¦  «        ¦  «                             ¦   «         S )NÚFAL_HOME_DIR)r   ÚosÚgetenvr   ÚDEFAULT_FAL_HOMEÚ
expanduserr   r   r   Ú_get_fal_home_dirrI   Y   s1   € Ý•”	˜.­#Õ.>Ñ*?Ô*?Ñ@Ô@ÑAÔA×LÒLÑNÔNÐNr   c               #  ó2  K  — 	 ddl } n# t          $ r dV — Y dS w xY wt          ¦   «         t          z  }|j                             dd¬¦  «         | j                             t          |¦  «        dd¬¦  «        5  dV — ddd¦  «         dS # 1 swxY w Y   dS )z%Best effort lock shared with fal-cli.r   NT©ÚparentsÚexist_okFé   )Úfail_when_lockedÚtimeout)	Úportalockerr+   rI   ÚAUTH_LOCK_FILENAMEÚparentÚmkdirÚutilsÚTemporaryFileLockr   )rQ   Ú	lock_files     r   Ú_token_lockrX   ]   s  è è € ðØÐÐÐÐøÝð ð ð ØˆˆˆØˆˆðøøøõ "Ñ#Ô#Õ&8Ñ8€IØÔ×Ò 4°$ÐÑ7Ô7Ð7Ø	Ô	×	,Ò	,ÝˆI‰Œ¨¸ð 
-ñ 
ô 
ð ð ð 	ˆˆˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   „	 ‰šÁ:BÂBÂBú#tuple[Optional[str], Optional[str]]c                 ó  — t          ¦   «         t          z  } |                      ¦   «         sdS d„ |                      ¦   «                              ¦   «         D ¦   «         }|sdS |d         }d }t          |¦  «        dk    r|d         }|pd |pd fS )N)NNc                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S r   )r*   )Ú.0Úlines     r   ú
<listcomp>z%_read_auth_tokens.<locals>.<listcomp>t   s-   € ÐTÐTÐT˜dÀtÇzÂzÁ|Ä|ÐTˆT�ZŠZ‰\Œ\ÐTÐTÐTr   r   é   )rI   ÚAUTH_TOKEN_FILENAMEÚexistsÚ	read_textÚ
splitlinesÚlen)ÚpathÚlinesÚrefresh_tokenÚaccess_tokens       r   Ú_read_auth_tokensri   o   s™   € ÝÑÔÕ!4Ñ4€DØ�;Š;‰=Œ=ð ØˆzàTÐT d§n¢nÑ&6Ô&6×&AÒ&AÑ&CÔ&CÐTÑTÔT€EØð Øˆzà˜!”H€MØ"&€LÝ
ˆ5�z„z�A‚~€~Ø˜Q”xˆàÐ ˜D ,Ð"6°$Ð6Ð6r   rg   r   rh   ÚNonec                óî   — t          ¦   «         t          z  }|j                             dd¬¦  «         | g}|r|                     |¦  «         |                     d                     |¦  «        ¦  «         d S )NTrK   Ú
)rI   r`   rS   rT   ÚappendÚ
write_textÚjoin)rg   rh   re   Úcontentss       r   Ú_write_auth_tokensrq   €   ss   € ÝÑÔÕ!4Ñ4€DØ„K×Ò˜d¨TÐÑ2Ô2Ð2àˆ€HØð &Ø�Š˜Ñ%Ô%Ð%à‡O‚O�D—I’I˜hÑ'Ô'Ñ(Ô(Ð(Ð(Ð(r   r,   úOptional[int]c                óH  — 	 |                       d¦  «        d         }dt          |¦  «         dz  z  }t          j        ||z   ¦  «        }t	          j        |                     d¦  «        ¦  «        }t          |                     d¦  «        ¦  «        S # t          $ r Y dS w xY w)z?Returns exp claim in seconds since epoch or None if unreadable.ú.r_   Ú=é   zutf-8ÚexpN)
Úsplitrd   Úbase64Úurlsafe_b64decodeÚjsonÚloadsÚdecodeÚintr)   r+   )r,   Úpayload_segmentÚpaddingÚpayloadÚclaimss        r   Ú_decode_jwt_exprƒ   ‹   s£   € ðØŸ+š+ cÑ*Ô*¨1Ô-ˆØ�#˜oÑ.Ô.Ð.°Ñ2Ñ3ˆÝÔ*¨?¸WÑ+DÑEÔEˆÝ”˜GŸNšN¨7Ñ3Ô3Ñ4Ô4ˆÝ�6—:’:˜eÑ$Ô$Ñ%Ô%Ð%øÝð ð ð Øˆtˆtðøøøs   ‚BB Â
B!Â B!i,  )Úleeway_secondsr„   r~   c               ó\   — t          | ¦  «        }|€dS t          j        ¦   «         |z   |k    S )NT)rƒ   Útime)r,   r„   rw   s      r   Ú_is_access_token_expiredr‡   ˜   s/   € Ý
˜%Ñ
 Ô
 €CØ
€{àˆtåŒ9‰;Œ;˜Ñ'¨3Ò.Ð.r   Údictc                óÜ   — t          j        t          dt          | dœd¬¦  «        }	 |                     ¦   «         }n# t
          $ r i }Y nw xY w|j        dk    sd|vrt          d¦  «        ‚|S )Nrg   )Ú
grant_typeÚ	client_idrg   é   )ÚdatarP   éÈ   rh   zDFailed to refresh fal auth token. Please run `fal auth login` again.)ÚhttpxÚpostÚAUTH0_TOKEN_URLÚAUTH0_CLIENT_IDr{   r+   Ústatus_coder/   )rg   ÚresponseÚ
token_datas      r   Ú_refresh_access_tokenr–   ¡   s¢   € ÝŒzÝà)Ý(Ø*ð
ð 
ð
 ðñ ô €HðØ—]’]‘_”_ˆ
ˆ
øÝð ð ð Øˆ
ˆ
ˆ
ðøøøð Ô˜sÒ"Ð" n¸JÐ&FÐ&FÝ%ØRñ
ô 
ð 	
ð Ðs   §< ¼AÁ
Ac                 óh  — t          ¦   «         5  t          ¦   «         \  } }ddd¦  «         n# 1 swxY w Y   | sdS |rt          |¦  «        s|S t          | ¦  «        }|                     d| ¦  «        }|d         }t          ¦   «         5  t          ||¦  «         ddd¦  «         n# 1 swxY w Y   |S )z½
    Try to reuse tokens created by `fal auth login`.

    We share the same file layout as fal-cli:
    - refresh token on first line
    - optional cached access token on second line
    Nrg   rh   )rX   ri   r‡   r–   r)   rq   )rg   rh   r•   Únew_refreshÚ
new_accesss        r   Ú_load_bearer_token_from_loginrš   ¹   sA  € õ 
‰Œð :ð :Ý&7Ñ&9Ô&9Ñ#ˆ�|ð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð ð Øˆtàð Õ4°\ÑBÔBð ØÐå& }Ñ5Ô5€JØ—.’. °-Ñ@Ô@€KØ˜NÔ+€Jå	‰Œð 4ð 4Ý˜;¨
Ñ3Ô3Ð3ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð Ðs   �-­1´1Â
B'Â'B+Â.B+c                 ó¸  — t           j                             d¦  «        dk    } | s‡t          j        d¦  «        x}rt	          d|¦  «        S t          j        d¦  «        x}r+t          j        d¦  «        x}rt	          d|› d|› �¦  «        S t          ¦   «         x}rt	          d|¦  «        S t          ¦   «         x}rt	          d|¦  «        S t          d	¦  «        ‚)
zµ
    Return credentials using this priority:
    1) FAL_KEY / FAL_KEY_ID+FAL_KEY_SECRET / Colab secret (unless FAL_FORCE_AUTH_BY_USER=1)
    2) Tokens saved by `fal auth login`
    ÚFAL_FORCE_AUTH_BY_USERÚ1r%   ÚKeyÚ
FAL_KEY_IDÚFAL_KEY_SECRETú:ÚBearerz_No credentials found. Set FAL_KEY (or FAL_KEY_ID/FAL_KEY_SECRET) or login via `fal auth login`.)rE   Úenvironr)   rF   r2   r-   rš   r/   )Úforce_user_authÚkeyÚkey_idÚfal_key_secretÚcolab_tokenÚbearers         r   Úfetch_auth_credentialsrª   Õ   sö   € õ ”j—n’nÐ%=Ñ>Ô>À#ÒE€Oàð 7Ý”)˜IÑ&Ô&Ð&ˆ3ð 	7Ý" 5¨#Ñ.Ô.Ð.Ýœ	 ,Ñ/Ô/Ð/ˆfð 	7Ý œiÐ(8Ñ9Ô9Ð9ˆNð	7õ # 5¨VÐ*FÐ*F°nÐ*FÐ*FÑGÔGÐGÝ+Ñ-Ô-Ð-ˆ[ð 	7Ý" 5¨+Ñ6Ô6Ð6å.Ñ0Ô0Ð0€vð 1Ý˜x¨Ñ0Ô0Ð0å
!Øiñô ð r   c                 ó„   — t          ¦   «         } | j                             ¦   «         dk    rt          d¦  «        ‚| j        S )zÕ
    Legacy helper kept for backwards compatibility.

    It only returns Key-based credentials; user-based auth (Bearer) will raise
    MissingCredentialsError so callers don't accidentally send it as a key.
    r¥   zFKey credentials not found. Set FAL_KEY (or FAL_KEY_ID/FAL_KEY_SECRET).)rª   r3   Úlowerr/   r,   )Úauths    r   Úfetch_credentialsr®   ð   sG   € õ "Ñ#Ô#€DØ„{×ÒÑÔ˜eÒ#Ð#Ý%ØTñ
ô 
ð 	
ð Œ:Ðr   )r   r   )r   r"   )r   r   )r   rY   )rg   r   rh   r"   r   rj   )r,   r   r   rr   )r,   r   r„   r~   r   r   )rg   r   r   rˆ   )r   r2   r;   )-Ú
__future__r   ry   r{   rE   r†   Ú
contextlibr   Údataclassesr   Úpathlibr   Ú	threadingr   Útypingr   r�   r
   r&   r!   r-   r+   r/   r2   r£   r)   r?   r@   ÚAUTH0_DOMAINr‘   r’   r`   rR   ÚhomerG   rI   rX   ri   rq   rƒ   r‡   r–   rš   rª   r®   r   r   r   ú<module>r·      sÈ  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€ð*ð *ð *ð *ð *ñ *ô *ð *ð  ÐÑ!Ô!€ðð ð ð ð#ð #ð #ð #ð,	ð 	ð 	ð 	ð 	˜iñ 	ô 	ð 	ð €�$ÐÑÔð4ð 4ð 4ð 4ð 4ñ 4ô 4ñ Ôð4ð Œz�~Š~˜n¨iÑ8Ô8€Ø”Z—^’^Ð$8Ð:QÀ<Ð:QÐ:QÑRÔRÐ à€Ø7˜\Ð7Ð7Ð7€Ø4€Ø#Ð Ø!Ð Ø�4”9‘;”; Ñ'Ð ðOð Oð Oð Oð ðð ñ „ðð"7ð 7ð 7ð 7ð")ð )ð )ð )ð
ð 
ð 
ð 
ð CFð /ð /ð /ð /ð /ð /ðð ð ð ð0ð ð ð ð8ð ð ð ð6ð ð ð ð ð r   