Finalize SuperOffice production migration and multi-campaign architecture (v1.8)

This commit is contained in:
2026-02-27 15:09:52 +00:00
parent 9f9a09375e
commit 04c7c9fc6c
17 changed files with 443 additions and 311 deletions

View File

@@ -43,7 +43,11 @@ class SuperOfficeClient:
def _refresh_access_token(self):
"""Refreshes and returns a new access token."""
url = "https://online.superoffice.com/login/common/oauth/tokens"
# OAuth token endpoint is ALWAYS online.superoffice.com for production,
# or sod.superoffice.com for sandbox.
token_domain = "online.superoffice.com" if "online" in self.env.lower() else "sod.superoffice.com"
url = f"https://{token_domain}/login/common/oauth/tokens"
logger.debug(f"DEBUG: Refresh URL: '{url}' (Env: '{self.env}')")
data = {
@@ -56,11 +60,18 @@ class SuperOfficeClient:
try:
resp = requests.post(url, data=data)
# Catch non-JSON responses early
if resp.status_code != 200:
logger.error(f"❌ Token Refresh Failed (Status {resp.status_code})")
logger.error(f"Response Body: {resp.text[:500]}")
return None
resp.raise_for_status()
return resp.json().get("access_token")
except requests.exceptions.HTTPError as e:
logger.error(f"❌ Token Refresh Error (Status: {e.response.status_code}): {e.response.text}")
logger.debug(f"Response Headers: {e.response.headers}")
except requests.exceptions.JSONDecodeError:
logger.error(f"❌ Token Refresh Error: Received non-JSON response from {url}")
logger.debug(f"Raw Response: {resp.text[:500]}")
return None
except Exception as e:
logger.error(f"❌ Connection Error during token refresh: {e}")