troubleshooting costco header extraction
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
import os
|
||||
from dataclasses import dataclass
|
||||
from dotenv import load_dotenv
|
||||
|
||||
from browser_session import (
|
||||
find_json_storage_value,
|
||||
@@ -32,29 +34,60 @@ def load_giant_session(browser="firefox", profile_dir=None):
|
||||
)
|
||||
return RetailerSession(cookies=context.cookies, headers={})
|
||||
|
||||
|
||||
def load_costco_session(browser="firefox", profile_dir=None):
|
||||
load_dotenv()
|
||||
|
||||
headers = {
|
||||
"costco-x-authorization": os.getenv("COSTCO_X_AUTHORIZATION", "").strip(),
|
||||
"costco-x-wcs-clientId": os.getenv("COSTCO_WCS_CLIENT_ID", "").strip(),
|
||||
"client-identifier": os.getenv("COSTCO_CLIENT_IDENTIFIER", "").strip(),
|
||||
}
|
||||
|
||||
context = load_browser_context(
|
||||
browser=browser,
|
||||
domain_name=".costco.com",
|
||||
storage_origins=COSTCO_STORAGE_ORIGINS,
|
||||
storage_origins=["costco.com"],
|
||||
profile_dir=profile_dir,
|
||||
)
|
||||
headers = extract_costco_headers(context.storage_entries)
|
||||
missing = [
|
||||
header_name for header_name, value in headers.items() if not value
|
||||
]
|
||||
if missing:
|
||||
available_keys = ", ".join(
|
||||
list_storage_keys(context.storage_entries, COSTCO_STORAGE_ORIGINS)
|
||||
)
|
||||
raise ValueError(
|
||||
"missing Costco browser session headers: "
|
||||
f"{', '.join(missing)}. "
|
||||
f"Available Costco storage keys: {available_keys or '(none)'}"
|
||||
|
||||
storage = {entry.key: entry.value for entry in context.storage_entries}
|
||||
|
||||
id_token = storage.get("idToken", "").strip()
|
||||
client_id = storage.get("clientID", "").strip()
|
||||
|
||||
if id_token:
|
||||
headers["costco-x-authorization"] = (
|
||||
id_token if id_token.startswith("Bearer ") else f"Bearer {id_token}"
|
||||
)
|
||||
if client_id:
|
||||
headers["costco-x-wcs-clientId"] = client_id
|
||||
|
||||
headers = {k: v for k, v in headers.items() if v}
|
||||
|
||||
return RetailerSession(cookies=context.cookies, headers=headers)
|
||||
|
||||
#def load_costco_session(browser="firefox", profile_dir=None):
|
||||
# context = load_browser_context(
|
||||
# browser=browser,
|
||||
# domain_name=".costco.com",
|
||||
# storage_origins=COSTCO_STORAGE_ORIGINS,
|
||||
# profile_dir=profile_dir,
|
||||
# )
|
||||
# headers = extract_costco_headers(context.storage_entries)
|
||||
# missing = [
|
||||
# header_name for header_name, value in headers.items() if not value
|
||||
# ]
|
||||
# if missing:
|
||||
# available_keys = ", ".join(
|
||||
# list_storage_keys(context.storage_entries, COSTCO_STORAGE_ORIGINS)
|
||||
# )
|
||||
# raise ValueError(
|
||||
# "missing Costco browser session headers: "
|
||||
# f"{', '.join(missing)}. "
|
||||
# f"Available Costco storage keys: {available_keys or '(none)'}"
|
||||
# )
|
||||
# return RetailerSession(cookies=context.cookies, headers=headers)
|
||||
|
||||
|
||||
def extract_costco_headers(storage_entries):
|
||||
headers = {}
|
||||
|
||||
Reference in New Issue
Block a user