from typing import Any from urllib.parse import urljoin from fansifter_common.httpclient import HTTPClient from .exceptions import FacebookClientError from .types import UploadUsersPayload, UploadUsersResponse, UploadUsersSession class FacebookClient(HTTPClient): exception_class = FacebookClientError base_url = "https://graph.facebook.com" version = "v25.0" sensitive_params = { "client_secret", "fb_exchange_token", "input_token", "access_token", } def __init__( self, client_options: dict[str, Any] | None = None, ) -> None: client_options = client_options or {} client_options["base_url"] = urljoin(self.base_url, self.version) super().__init__(client_options=client_options) def upload_users( self, user_access_token: str, audience_external_id: str, session: UploadUsersSession, payload: UploadUsersPayload, ) -> UploadUsersResponse: return self.request( "POST", f"/{audience_external_id}/users", type=UploadUsersResponse, json={ "access_token": user_access_token, "session": session, "payload": payload, }, )