+
    Pj                         R t ^ RIt^ RIHt ^RIHt ^RIHt ^RIH	t	H
t
 RtRt ! R R	]]4      tR
 R ltR R ltRRRR/R R lltRR/R R lltRRRRRRRR/R R lltR# )u  Keyless CI/CD authentication via OIDC token exchange ("Trusted Publishers").

A CI job proves its identity to the Hub with a short-lived OIDC id token minted by its CI
provider (e.g. GitHub Actions), then exchanges it at ``POST {ENDPOINT}/oauth/token`` (RFC 8693)
for a short-lived Hugging Face token — no long-lived ``HF_TOKEN`` secret to store.

This module is self-contained: it only handles minting the provider id token and the exchange.
It deliberately does not register a public API or a CLI verb; the integration point is the token
resolution in ``utils/_auth.py`` (see ``_get_token_from_oidc``).

Docs: https://huggingface.co/docs/hub/trusted-publishers
N)Enum)	constants)	OIDCError)get_sessionhf_raise_for_statusz/urn:ietf:params:oauth:grant-type:token-exchangez)urn:ietf:params:oauth:token-type:id_tokenc                       ] tR t^(tRtRtRtR# )ProviderzRCI providers that can mint an OIDC id token natively. GitHub Actions only for now.github N)__name__
__module____qualname____firstlineno____doc__GITHUB__static_attributes__r
       n/Users/ahmed/devFolder/Ultron/claude-voice/gateway/.venv/lib/python3.14/site-packages/huggingface_hub/_oidc.pyr   r   (   s
    \Fr   r   c                2    V ^8  d   QhR\         R,          /# )   returnN)r   )formats   "r   __annotate__r   .   s      D r   c                 n    \         P                  P                  R4      R8X  d   \        P                  # R# )zYDetect the CI provider able to mint an OIDC id token, or `None` if not in a supported CI.GITHUB_ACTIONStrueN)osenvirongetr   r   r
   r   r   detect_providerr   .   s%    	zz~~&'61r   c                0    V ^8  d   QhR\         R\         /# )r   audiencer   )str)r   s   "r   r   r   5   s     $ $S $S $r   c                >   \         P                  P                  R4      p\         P                  P                  R4      pV'       d	   V'       g   \        R4      h\	        4       P                  VRV /RRV 2/R7      p\        V4       VP                  4       R,          # )	zMint an OIDC id token from the GitHub Actions runtime.

Relies on the `ACTIONS_ID_TOKEN_REQUEST_URL` / `ACTIONS_ID_TOKEN_REQUEST_TOKEN` env vars,
which GitHub only injects when the job declares `permissions: id-token: write`.
ACTIONS_ID_TOKEN_REQUEST_URLACTIONS_ID_TOKEN_REQUEST_TOKENzCannot request an OIDC id token from GitHub Actions. Make sure the workflow job sets `permissions: id-token: write`. See https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connectr!   AuthorizationzBearer )paramsheadersvalue)r   r   r   r   r   r   json)r!   request_urlrequest_tokenresponses   &   r   _get_github_oidc_tokenr.   5   s     **..!?@KJJNN#CDMmM
 	

 }  H% GM?";< ! H
 !==?7##r   providerr!   c                n    V ^8  d   QhR\         \        ,          R,          R\        R,          R\        /# )r   r/   Nr!   r   )r   r"   )r   s   "r   r   r   L   s4     k k3 5 kd
 k^a kr   c                    T;'       g    \         P                  pT ;'       g    \        4       p RP                  R \         4       4      pV f   \        RV R24      hV \        P                  8X  d   \        V4      # \        RV  RV R24      h)a  Mint a raw OIDC id token (JWT) from the current CI provider.

Args:
    provider (`str`, *optional*):
        CI provider to use. Auto-detected from the environment when omitted.
    audience (`str`, *optional*):
        The `aud` claim to request. Defaults to `constants.ENDPOINT` so it matches the endpoint
        that validates it (respects `HF_ENDPOINT`/staging).

Returns:
    `str`: The raw id token (JWT) to pass to [`exchange_oidc_token`].
z, c              3   8   "   T F  qP                   x  K  	  R # 5i)N)r)   ).0ps   & r   	<genexpr>!get_oidc_token.<locals>.<genexpr>[   s     48a''8s   zONo supported CI OIDC provider detected. Trusted Publishers currently supports: .zOIDC provider 'z#' is not supported yet. Supported: )	r   ENDPOINTr   joinr   r   r   r.   NotImplementedError)r/   r!   	supporteds   $$ r   get_oidc_tokenr<   L   s     --9--H,,?,H		4844Iijsittuvww8??"%h//
z9\]f\gghi
jjr   endpointc                V    V ^8  d   QhR\         R\         R\         R,          R\        /# )r   subject_tokenresourcer=   Nr   )r"   dict)r   s   "r   r   r   c   s-      #  d
 ^b r   c                    \        4       P                  T;'       g    \        P                   R2R\        R\
        RV RV/R7      p\        V4       VP                  4       # )u  Exchange a CI OIDC id token for a short-lived Hugging Face token (RFC 8693).

Args:
    subject_token (`str`):
        The raw OIDC id token (JWT) from the CI provider. Its `aud` claim must be the Hub URL.
    resource (`str`):
        What to scope the token to: a Hub repo (`namespace/name`, `datasets/namespace/name`,
        `spaces/namespace/name`, `kernels/namespace/name`) for a write token, or a bare Hub
        username for a read-only `gated-repos` token.
    endpoint (`str`, *optional*):
        Hub endpoint. Defaults to `constants.ENDPOINT` (respects `HF_ENDPOINT`/staging).

Returns:
    `dict`: The token-exchange response, e.g.
    `{"access_token": "hf_jwt_…", "token_type": "bearer", "expires_in": 3600, ...}`.
z/oauth/token
grant_typesubject_token_typer?   r@   )r*   )r   postr   r8   _TOKEN_EXCHANGE_GRANT_TYPE_ID_TOKEN_TYPEr   r*   )r?   r@   r=   r-   s   $$$ r   exchange_oidc_tokenrH   c   sd    " }!!))y))
*,74 .]	
 " H !==?r   r?   c                    V ^8  d   QhR\         R\         R,          R\        \         ,          R,          R\         R,          R\         R,          R\        /# )r   r@   r?   Nr/   r!   r=   r   )r"   r   rA   )r   s   "r   r   r      sc     "b "b"b :"b nt#	"b
 Dj"b Dj"b 
"br   c                    T;'       g    \         P                  pVf   \        Y#;'       g    TR7      p\        WVR7      # )uj  Mint a CI OIDC id token and exchange it for a Hugging Face token.

Convenience wrapper around [`get_oidc_token`] + [`exchange_oidc_token`]. Returns the raw
exchange response (it does not persist anything — the caller decides what to do with the token).

Args:
    resource (`str`):
        Repo or username to scope the token to. See [`exchange_oidc_token`].
    subject_token (`str`, *optional*):
        A pre-minted OIDC id token to exchange directly. Use this for CI providers not yet
        supported natively (e.g. GitLab): mint the id token in your job and pass it here. When
        omitted, the token is minted from the detected `provider`.
    provider (`str`, *optional*):
        CI provider. Auto-detected when omitted. Ignored when `subject_token` is provided.
    audience (`str`, *optional*):
        The `aud` claim to request. Defaults to the resolved `endpoint`, so it matches the
        endpoint that validates it.
    endpoint (`str`, *optional*):
        Hub endpoint. Defaults to `constants.ENDPOINT`.

Returns:
    `dict`: The token-exchange response (`access_token`, `token_type`, `expires_in`, ...).
)r/   r!   )r?   r@   r=   )r   r8   r<   rH   )r@   r?   r/   r!   r=   s   $$$$$r   
oidc_loginrK      s=    > --9--H&CWCWxX]X`aar   )r   r   enumr    r   errorsr   utilsr   r   rF   rG   r"   r   r   r.   r<   rH   rK   r
   r   r   <module>rP      s    
    3 O <sD $.k kUY k.UY <"b !%"b '+	"b
  "b  "b "br   