Proxy Saving and UX Fixes (#4467)

This commit is contained in:
Marc Kelechava
2026-01-15 13:26:26 -08:00
committed by GitHub
parent 5e23c580e7
commit be3128e47d
6 changed files with 21 additions and 7 deletions

View File

@@ -124,7 +124,7 @@ export function GeoTargetSelector({
<CommandGroup heading="Countries">
{results.countries.map((item) => (
<CommandItem
key={`country-${item.value.country}`}
key={`country-${item.value.country}${item.value.isISP ? "-isp" : ""}`}
value={JSON.stringify(item.value)}
onSelect={() => handleSelect(item)}
>

View File

@@ -116,7 +116,7 @@ function compareWorkflowBlocks(
function getWorkflowElements(version: WorkflowVersion) {
const settings: WorkflowSettings = {
proxyLocation: version.proxy_location || ProxyLocation.Residential,
proxyLocation: version.proxy_location ?? ProxyLocation.Residential,
webhookCallbackUrl: version.webhook_callback_url || "",
persistBrowserSession: version.persist_browser_session,
model: version.model,

View File

@@ -956,7 +956,7 @@ function Workspace({
// Load the selected version into the main editor
const settings: WorkflowSettings = {
proxyLocation:
selectedVersion.proxy_location || ProxyLocation.Residential,
selectedVersion.proxy_location ?? ProxyLocation.Residential,
webhookCallbackUrl: selectedVersion.webhook_callback_url || "",
persistBrowserSession: selectedVersion.persist_browser_session,
model: selectedVersion.model,
@@ -1660,7 +1660,7 @@ function Workspace({
const settings: WorkflowSettings = {
proxyLocation:
saveData?.settings.proxyLocation || ProxyLocation.Residential,
saveData?.settings.proxyLocation ?? ProxyLocation.Residential,
webhookCallbackUrl: saveData?.settings.webhookCallbackUrl || "",
persistBrowserSession:
saveData?.settings.persistBrowserSession ?? false,

View File

@@ -141,7 +141,7 @@ function compareWorkflowBlocks(
function getWorkflowElements(version: WorkflowVersion) {
const settings: WorkflowSettings = {
proxyLocation: version.proxy_location || ProxyLocation.Residential,
proxyLocation: version.proxy_location ?? ProxyLocation.Residential,
webhookCallbackUrl: version.webhook_callback_url || "",
persistBrowserSession: version.persist_browser_session,
model: version.model,

View File

@@ -149,6 +149,15 @@ export function geoTargetToProxyLocationInput(
return ProxyLocation.ResidentialISP;
}
// Guard against malformed subdivision (e.g., boolean instead of string)
if (target.subdivision != null && typeof target.subdivision !== "string") {
console.error(
"[geoTargetToProxyLocationInput] Invalid subdivision:",
target.subdivision,
);
target = { ...target, subdivision: undefined };
}
// Try to map back to legacy enum if it's just a country
if (target.country && !target.subdivision && !target.city) {
const legacyLocation = COUNTRY_TO_PROXY_LOCATION[target.country];

View File

@@ -109,6 +109,11 @@ def _deserialize_proxy_location(value: str | None) -> ProxyLocationInput:
if value.startswith("{"):
try:
data = json.loads(value)
# Handle malformed subdivision (e.g., boolean instead of string)
subdivision = data.get("subdivision")
if subdivision is not None and not isinstance(subdivision, str):
LOG.warning("Malformed subdivision in proxy_location", db_value=value, subdivision=subdivision)
data["subdivision"] = None
result = GeoTarget.model_validate(data)
LOG.info(
"Deserialized proxy_location as GeoTarget",
@@ -116,8 +121,8 @@ def _deserialize_proxy_location(value: str | None) -> ProxyLocationInput:
result=str(result),
)
return result
except (json.JSONDecodeError, ValueError):
pass
except (json.JSONDecodeError, ValueError) as e:
LOG.warning("Failed to parse proxy_location as GeoTarget", db_value=value, error=str(e))
# Try as ProxyLocation enum
try: