import json from fansifter_common.adapters.stripo.exceptions import StripoClientError from fansifter_common.adapters.stripo.models import ( AuthResponse, CompileResponse, CompressResponse, HtmlCssResponse, ) from fansifter_common.httpclient.base import HTTPClient class StripoV2Client(HTTPClient): exception_class = StripoClientError def __init__( self, base_url: str, coediting_url: str, client_id: str, client_secret: str, ) -> None: super().__init__( client_options={ "headers": { "Content-Type": "application/json", "Accept": "application/json", }, } ) self.base_url = base_url self.coediting_url = coediting_url self.client_id = client_id self.client_secret = client_secret def generate_auth_token(self, *, user_id: str) -> str: response = self.request( "POST", f"{self.base_url}/api/v1/auth", json={ "pluginId": self.client_id, "secretKey": self.client_secret, "userId": user_id, "role": "USER", }, type=AuthResponse, ) return response.token def generate_api_token(self) -> str: response = self.request( "POST", f"{self.base_url}/api/v1/auth", json={ "pluginId": self.client_id, "secretKey": self.client_secret, "role": "API", }, type=AuthResponse, ) return response.token def compress(self, html: str, css: str) -> str: token = self.generate_api_token() response = self.request( "POST", f"{self.base_url}/api/v1/cleaner/v1/compress", json={"html": html, "css": css, "minimize": True}, headers={"ES-PLUGIN-AUTH": f"Bearer {token}"}, type=CompressResponse, ) return response.html def get_html_css(self, *, email_id: str, user_id: str) -> HtmlCssResponse: token = self.generate_auth_token(user_id=user_id) return self.request( "GET", f"{self.coediting_url}/v1/email/html-css", headers={ "ES-PLUGIN-AUTH": f"Bearer {token}", "ES-PLUGIN-UI-DATA": json.dumps({"emailId": email_id}), }, type=HtmlCssResponse, ) def compile(self, *, email_id: str, user_id: str) -> CompileResponse: token = self.generate_auth_token(user_id=user_id) return self.request( "GET", f"{self.coediting_url}/v1/email/compilation", headers={ "ES-PLUGIN-AUTH": f"Bearer {token}", "ES-PLUGIN-UI-DATA": json.dumps({"emailId": email_id}), }, params={"minimize": True, "inlineCss": True}, type=CompileResponse, )