+
    ‡åºi/#  ã                   ó¶   € R t ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIH	t	 Rt
R	tR
t]P                  ! RR7      t ! R R]P                  4      tR# )z'Experimental GDCH credentials support.
N)Ú_helpers)Ú_service_account_info)Úcredentials)Ú
exceptions)Újwt)Ú_clientz/urn:ietf:params:oauth:token-type:token-exchangez-urn:ietf:params:oauth:token-type:access_tokenz.urn:k8s:params:oauth:token-type:serviceaccounti  )Úsecondsc                   ó¶   a a€ ] tR t^"t oRtV 3R ltR t]P                  ! ]	P                  4      R 4       tR t]R 4       t]R 4       t]R 4       tR	tVtV ;t# )
ÚServiceAccountCredentialsaÊ  Credentials for GDCH (`Google Distributed Cloud Hosted`_) for service
    account users.

    .. _Google Distributed Cloud Hosted:
        https://cloud.google.com/blog/topics/hybrid-cloud/            announcing-google-distributed-cloud-edge-and-hosted

    To create a GDCH service account credential, first create a JSON file of
    the following format::

        {
            "type": "gdch_service_account",
            "format_version": "1",
            "project": "<project name>",
            "private_key_id": "<key id>",
            "private_key": "-----BEGIN EC PRIVATE KEY-----
<key bytes>
-----END EC PRIVATE KEY-----
",
            "name": "<service identity name>",
            "ca_cert_path": "<CA cert path>",
            "token_uri": "https://service-identity.<Domain>/authenticate"
        }

    The "format_version" field stands for the format of the JSON file. For now
    it is always "1". The `private_key_id` and `private_key` is used for signing.
    The `ca_cert_path` is used for token server TLS certificate verification.

    After the JSON file is created, set `GOOGLE_APPLICATION_CREDENTIALS` environment
    variable to the JSON file path, then use the following code to create the
    credential::

        import google.auth

        credential, _ = google.auth.default()
        credential = credential.with_gdch_audience("<the audience>")

    We can also create the credential directly::

        from google.oauth import gdch_credentials

        credential = gdch_credentials.ServiceAccountCredentials.from_service_account_file("<the json file path>")
        credential = credential.with_gdch_audience("<the audience>")

    The token is obtained in the following way. This class first creates a
    self signed JWT. It uses the `name` value as the `iss` and `sub` claim, and
    the `token_uri` as the `aud` claim, and signs the JWT with the `private_key`.
    It then sends the JWT to the `token_uri` to exchange a final token for
    `audience`.
    c                ót   <€ \         \        V `  4        Wn        W n        W0n        W@n        WPn        W`n        R# )a  
Args:
    signer (google.auth.crypt.Signer): The signer used to sign JWTs.
    service_identity_name (str): The service identity name. It will be
        used as the `iss` and `sub` claim in the self signed JWT.
    project (str): The project.
    audience (str): The audience for the final token.
    token_uri (str): The token server uri.
    ca_cert_path (str): The CA cert path for token server side TLS
        certificate verification. If the token server uses well known
        CA, then this parameter can be `None`.
N)	Úsuperr
   Ú__init__Ú_signerÚ_service_identity_nameÚ_projectÚ	_audienceÚ
_token_uriÚ_ca_cert_path)ÚselfÚsignerÚservice_identity_nameÚprojectÚaudienceÚ	token_uriÚca_cert_pathÚ	__class__s   &&&&&&&€Úq/Users/igloo/.openclaw/workspace/scratch/fb_ad_env/lib/python3.14/site-packages/google/oauth2/gdch_credentials.pyr   Ú"ServiceAccountCredentials.__init__S   s3   ø€ ô 	Ô'¨Ñ7Ô9ØŒØ&;Ô#ØŒØ!ŒØ#ŒØ)Öó    c                óx  € \         P                  ! 4       pV\        ,           pR P                  V P                  V P
                  4      pRVRVRV P                  R\         P                  ! V4      R\         P                  ! V4      /p\         P                  ! \        P                  ! V P                  V4      4      # )zsystem:serviceaccount:{}:{}ÚissÚsubÚaudÚiatÚexp)r   ÚutcnowÚJWT_LIFETIMEÚformatr   r   r   Údatetime_to_secsÚ
from_bytesr   Úencoder   )r   ÚnowÚexpiryÚiss_sub_valueÚpayloads   &    r   Ú_create_jwtÚ%ServiceAccountCredentials._create_jwtj   s•   € ÜoŠoÓˆØ”|Õ#ˆØ5×<Ñ<ØM‰M˜4×6Ñ6ó
ˆð
 =Ø=Ø4—?‘?Ø”8×,Ò,¨SÓ1Ø”8×,Ò,¨VÓ4ð
ˆô ×"Ò"¤3§:¢:¨d¯l©l¸GÓ#DÓEÐEr   c           
     óº  € ^ RI p\        WP                  P                  P                  P
                  4      '       g   \        P                  ! R4      hV P                  4       pR\        RV P                  R\        RVR\        /p\        P                  ! VV P                  VRRV P                   R	7      p\        P"                  ! VR4      w  V n        q`n        pR# )
é    NzeFor GDCH service account credentials, request must be a google.auth.transport.requests.Request objectÚ
grant_typer   Úrequested_token_typeÚsubject_tokenÚsubject_token_typeT)Úaccess_tokenÚuse_jsonÚverify)Úgoogle.auth.transport.requestsÚ
isinstanceÚauthÚ	transportÚrequestsÚRequestr   ÚRefreshErrorr/   ÚTOKEN_EXCHANGE_TYPEr   ÚACCESS_TOKEN_TOKEN_TYPEÚSERVICE_ACCOUNT_TOKEN_TYPEr   Ú_token_endpoint_requestr   r   Ú_handle_refresh_grant_responseÚtokenr,   )r   ÚrequestÚgoogleÚ	jwt_tokenÚrequest_bodyÚresponse_dataÚ_s   &&     r   ÚrefreshÚ!ServiceAccountCredentials.refresh{   sÃ   € ã-ä˜'§;¡;×#8Ñ#8×#AÑ#A×#IÑ#I×JÒJÜ×)Ò)Øwóð ð
 ×$Ñ$Ó&ˆ	àÔ-Ø˜Ÿ™Ø"Ô$;Ø˜YØ Ô"<ð
ˆô  ×7Ò7ØØO‰OØØØØ×%Ñ%ô
ˆô )0×(NÒ(NØ˜4ó)
Ñ%ˆŒ
A”{¢Ar   c                ó’   € V P                  V P                  V P                  V P                  VV P                  V P
                  4      # )z†Create a copy of GDCH credentials with the specified audience.

Args:
    audience (str): The intended audience for GDCH credentials.
)r   r   r   r   r   r   )r   r   s   &&r   Úwith_gdch_audienceÚ,ServiceAccountCredentials.with_gdch_audienceš   s?   € ð ~‰~ØL‰LØ×'Ñ'ØM‰MØØO‰OØ×Ñó
ð 	
r   c                ó˜   € VR,          R8w  d   \        R4      hV ! VVR,          VR,          RVR,          VP                  RR4      4      # )	a|  Creates a Credentials instance from a signer and service account
info.

Args:
    signer (google.auth.crypt.Signer): The signer used to sign JWTs.
    info (Mapping[str, str]): The service account info.

Returns:
    google.oauth2.gdch_credentials.ServiceAccountCredentials: The constructed
        credentials.

Raises:
    ValueError: If the info is not in the expected format.
Úformat_versionÚ1z"Only format version 1 is supportedÚnamer   Nr   r   )Ú
ValueErrorÚget)Úclsr   Úinfos   &&&r   Ú_from_signer_and_infoÚ/ServiceAccountCredentials._from_signer_and_info©   sU   € ð  Ð Õ! SÔ(ÜÐAÓBÐBáØØLØOØØÕØH‰H^ TÓ*ó
ð 	
r   c                óZ   € \         P                  ! V. RORR7      pV P                  W!4      # )a‡  Creates a Credentials instance from parsed service account info.

Args:
    info (Mapping[str, str]): The service account info in Google
        format.
    kwargs: Additional arguments to pass to the constructor.

Returns:
    google.oauth2.gdch_credentials.ServiceAccountCredentials: The constructed
        credentials.

Raises:
    ValueError: If the info is not in the expected format.
F©ÚrequireÚuse_rsa_signer©rS   Úprivate_key_idÚprivate_keyrU   r   r   )r   Ú	from_dictrZ   )rX   rY   r   s   && r   Úfrom_service_account_infoÚ3ServiceAccountCredentials.from_service_account_infoÅ   s4   € ô  '×0Ò0Øòð !ô
ˆð ×(Ñ(¨Ó6Ð6r   c                ó^   € \         P                  ! V. RORR7      w  r#V P                  W24      # )a1  Creates a Credentials instance from a service account json file.

Args:
    filename (str): The path to the service account json file.
    kwargs: Additional arguments to pass to the constructor.

Returns:
    google.oauth2.gdch_credentials.ServiceAccountCredentials: The constructed
        credentials.
Fr]   r`   )r   Úfrom_filenamerZ   )rX   ÚfilenamerY   r   s   &&  r   Úfrom_service_account_fileÚ3ServiceAccountCredentials.from_service_account_fileã   s6   € ô -×:Ò:Øòð !ô
‰ˆð ×(Ñ(¨Ó6Ð6r   )r   r   r   r   r   r   r,   rF   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r/   r   Úcopy_docstringr   ÚCredentialsrM   rP   ÚclassmethodrZ   rd   ri   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r   Ú__classdict__s   @@r   r
   r
   "   s   ù‡ € ñ.õ`*ò.Fð" ×Ò˜[×4Ñ4Ó5ñ
ó 6ð
ò<
ð ñ
ó ð
ð6 ñ7ó ð7ð: ñ7ó ÷7ð 7r   r
   )ro   ÚdatetimeÚgoogle.authr   r   r   r   r   Úgoogle.oauth2r   rA   rB   rC   Ú	timedeltar&   rq   r
   © r   r   Ú<module>r|      sZ   ðñó å  Ý -Ý #Ý "Ý Ý !ð HÐ ØIÐ ØMÐ Ø×!Ò!¨$Ô/€ôY7 × 7Ñ 7ö Y7r   