
    ?j                    
   d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	Z	ddl
mZ ddlmZmZ dZ ej                          d	z  d
z  Z ed      ZddZdddZdddZddZ	 	 d	 	 	 	 	 ddZdZ	 	 	 d	 	 	 	 	 	 	 ddZddZy)zCToken dispenser authentication and Google Play header construction.    )annotationsN)Path)Optional)Console)FALLBACK_PROFILEget_priority_profileszhttps://auroraoss.com/api/authz.configgplaydlT)stderrc                    t         d|  dz  S )Nzauth-z.json)_CONFIG_DIR)archs    @/home/ubuntu/.local/lib/python3.12/site-packages/gplaydl/auth.py
_auth_pathr      s    5e,,,    c                    t         j                  dd       t        j                         | d<   t        |      }|j	                  t        j                  | d             |S )z3Persist auth data to disk and return the file path.T)parentsexist_ok
_cached_at   )indent)r   mkdirtimer   
write_textjsondumps)datar   paths      r   	save_authr      sK    dT2DdDOODJJtA./Kr   c                    t        |       }|j                         sy	 t        j                  |j	                               S # t        j
                  t        f$ r Y yw xY w)z Return cached auth dict or None.N)r   existsr   loads	read_textJSONDecodeErrorOSError)r   r   s     r   load_cached_authr%   #   sP    dD;;=zz$..*++  '* s   "A AAc                     t         j                         r-t         j                  d      D ]  } | j                  d        yy)zRemove all cached auth files.zauth-*.jsonT)
missing_okN)r   r    globunlink)fs    r   
clear_authr+   .   s;    !!-0 	&AHHH%	& r   c                r   | xs t         }ddd}t        |      }|s	dt        fg}|D ]~  \  }}|j                  d|      }	 t	        j
                  |||d      }|j                  dk(  r>|j                         }	|	j                  d	      rt        j                  d
| d       |	c S  y# t        $ r Y w xY w)zObtain an anonymous auth token from the dispenser.

    Rotates through device profiles until one yields an authToken.
    Returns the full auth dict on success, None on failure.
    zcom.aurora.store-4.6.1-70zapplication/json)
User-AgentzContent-TypefallbackUserReadableName   )r   headerstimeout   	authTokenz$  Authenticated with profile: [bold]z[/bold]N)DEFAULT_DISPENSER_URLr   r   gethttpxpoststatus_coder   consoleprint	Exception)
dispenser_urlr   urlr1   profilesprofile_nameprofiledevicerespr   s
             r   fetch_tokenrD   5   s     
00C1*G
 %T*H!123!) 
g/>	::c"MD3&yy{88K(MM$HPW"XYK
   		s   A#B**	B65B6i  c                6   |sft        |       }|rn|j                  d      r]t        j                         |j                  dd      z
  }|t        k  r|S t        j                  d       nt        j                  d       t        ||       }|rt        ||        |S )zReturn cached auth or fetch a new token transparently.

    Proactively refreshes tokens older than 50 minutes.
    Pass *force_refresh=True* to ignore cache entirely (e.g. after a 401).
    r4   r   r   u*   [dim]Token expired — refreshing...[/dim]z[dim]Refreshing token...[/dim])r=   r   )r%   r6   r   _MAX_TOKEN_AGEr:   r;   rD   r   )r   r=   force_refreshcachedager   s         r   ensure_authrJ   Z   s     !$'fjj-))+

< ;;C^#MMFG67]>D$Kr   c                R   | j                  di       }d}d| d    |j                  dd      | j                  dd      d	d
ddddd|d| j                  dd      dd}| j                  d      r| d   |d<   | j                  d      r| d   |d<   |j                  d      r|d   |d<   |S )z5Construct HTTP headers for Google Play FDFE requests.deviceInfoProvideren_USzBearer r4   userAgentStringzAndroid-Finsky/41.2.29-23 [0] [PR] 639844241 (api=3,versionCode=84122900,sdk=34,device=lynx,hardware=lynx,product=lynx,platformVersionRelease=14,model=Pixel%207a,buildId=UQ1A.231205.015,isWideScreen=0,supportedAbis=arm64-v8a;armeabi-v7a;armeabi)gsfId zen-USzSCAESN/qigQYC2AMBFfUbyA7SM5Ij/CvfBoIDgxXrBPsDlQUdMfOLAfoFrwEHgAcBrQYhoA0cGt4MKK0Y2gIzam-android-google4falseztimeoutMs=4000	dfeCookietrue)Authorizationr-   zX-DFE-Device-IdzAccept-LanguagezX-DFE-Encoded-TargetszX-DFE-Client-IdzX-DFE-Network-TypezX-DFE-Content-FilterszX-Limit-Ad-Tracking-EnabledzX-Ad-IdzX-DFE-UserLanguageszX-DFE-Request-ParamszX-DFE-CookiezX-DFE-No-PrefetchdeviceCheckInConsistencyTokenz&X-DFE-Device-Checkin-Consistency-TokendeviceConfigTokenzX-DFE-Device-Config-TokenmccMnczX-DFE-MCCMNC)r6   )authdevice_infolocaler1   s       r   build_headersr\   t   s    ((/4KF #4#4"56!ooN	
  88GR0"& /!!#'.% 0b1#5G: xx/0<@+=
89 xx#$/34G/H+,x "-h"7Nr   )r   strreturnr   )arm64)r   dictr   r]   r^   r   )r   r]   r^   Optional[dict])r^   None)Nr_   )r=   Optional[str]r   r]   r^   ra   )r_   NF)r   r]   r=   rc   rG   boolr^   ra   )rY   r`   r^   zdict[str, str])__doc__
__future__r   r   r   pathlibr   typingr   r7   rich.consoler   gplaydl.profilesr   r   r5   homer   r:   r   r   r%   r+   rD   rF   rJ   r\    r   r   <module>rm      s    I "        D8 diikI%	1

-& $( 
 D  #'
   	4+r   