// Templates const { Modal, Toggle, useToast } = window.UI; function templateType(tpl) { return tpl.template_type || "proxy"; } function templateCoverage(tpl) { return tpl.coverage || (templateType(tpl) === "chijie" ? "both" : (tpl.residential ? "residential" : "normal")); } function templateClassLabel(tpl) { const coverage = templateCoverage(tpl); if (coverage === "both") return "normal + residential"; return coverage === "residential" ? "residential" : "normal"; } function PageTemplates({ state, dispatch }) { const { pools } = state; const tpls = pools.filter(p => p.source === "template"); const [addOpen, setAddOpen] = React.useState(false); const [editTpl, setEditTpl] = React.useState(null); const [test, setTest] = React.useState(null); const toast = useToast(); return (

Templates

Generate per-region accounts on demand. Templates serve any 2-letter region as fallback, with residential used only when requested or when normal coverage is unavailable.

{tpls.map(t => (

{t.name}

{templateClassLabel(t)} p{t.priority || 0}
dispatch({type:"togglePool", name: t.name})}/>
Provider
{templateType(t)}
{templateType(t) === "chijie" ? ( <>
Endpoint
{t.endpoint}{t.port ? `:${t.port}` : ""}
Bearer
{t.bearer_token}
) : ( <>
Type
{t.type}
Server
{t.server}:{t.port}
Username
{t.username_template}
Password
{t.password}
)}
Coverage
any ISO-2
{templateClassLabel(t)} · higher priority tries first
))}
setTest(null)} title={test ? `Test ${test.name}` : ""} footer={<>}> setAddOpen(false)} dispatch={dispatch} toast={toast}/> setEditTpl(null)} dispatch={dispatch} toast={toast}/>
); } function AddTemplateModal({ open, onClose, dispatch, toast }) { const [form, setForm] = React.useState({ name: "", template_type: "proxy", type: "http_proxy", server: "", endpoint: "", port: 33335, bearer_token: "", username_template: "", password: "", priority: 0, coverage: "normal", residential: false, }); const set = (k, v) => setForm(f => ({ ...f, [k]: v })); const submit = async () => { const isChijie = form.template_type === "chijie"; if (!form.name.trim()) { toast("Pool name is required"); return; } if (isChijie && (!form.endpoint.trim() || !form.bearer_token.trim())) { toast("Endpoint and Bearer are required"); return; } if (isChijie && form.endpoint.trim().toLowerCase().startsWith("http://")) { toast("Chijie endpoint must use HTTPS"); return; } if (!isChijie && (!form.server.trim() || !form.type.trim())) { toast("Type and server are required"); return; } const ok = await dispatch({type:"addPool", name: form.name.trim(), config:{ source: "template", enabled: true, template_type: form.template_type, type: isChijie ? "" : form.type, server: isChijie ? "" : form.server.trim(), endpoint: isChijie ? form.endpoint.trim() : "", port: Number(form.port || 0), bearer_token: isChijie ? form.bearer_token : "", username_template: isChijie ? "" : form.username_template, password: isChijie ? "" : form.password, priority: Number(form.priority || 0), coverage: form.coverage, residential: form.coverage === "residential", }}); if (ok) onClose(); }; return ( }>
set("name", e.target.value)} placeholder="brightdata-eu"/>
{form.template_type === "chijie" ? ( <>
set("endpoint", e.target.value)} placeholder="https://b.example.com"/>
set("port", e.target.value)} placeholder="443"/>
set("bearer_token", e.target.value)}/>
) : ( <>
set("port", e.target.value)}/>
set("server", e.target.value)} placeholder="brd.superproxy.io"/>
set("username_template", e.target.value)} placeholder="brd-customer-xxx-zone-yyy-country-{region}"/>
{`{region}`} → lowercase · {`{REGION}`} → uppercase
set("password", e.target.value)}/>
)}
set("priority", e.target.value)} placeholder="100"/>
Fallback order
Templates are tried by priority after local static and subscription nodes are unavailable.
); } function EditTemplateModal({ tpl, onClose, dispatch, toast }) { const [form, setForm] = React.useState({ template_type: "proxy", type: "http_proxy", server: "", endpoint: "", port: 33335, bearer_token: "", username_template: "", password: "", priority: 0, coverage: "normal", residential: false, }); React.useEffect(() => { if (!tpl) return; setForm({ template_type: tpl.template_type || "proxy", type: tpl.type || "http_proxy", server: tpl.server || "", endpoint: tpl.endpoint || "", port: tpl.port || (tpl.template_type === "chijie" ? "" : 33335), bearer_token: tpl.config?.bearer_token || "", username_template: tpl.username_template || "", password: tpl.config?.password || "", priority: tpl.priority || 0, coverage: templateCoverage(tpl), residential: !!tpl.residential, }); }, [tpl]); if (!tpl) return null; const set = (k, v) => setForm(f => ({ ...f, [k]: v })); const submit = async () => { const isChijie = form.template_type === "chijie"; if (isChijie && (!form.endpoint.trim() || !form.bearer_token.trim())) { toast("Endpoint and Bearer are required"); return; } if (isChijie && form.endpoint.trim().toLowerCase().startsWith("http://")) { toast("Chijie endpoint must use HTTPS"); return; } if (!isChijie && (!form.server.trim() || !form.type.trim())) { toast("Type and server are required"); return; } const ok = await dispatch({type:"updatePoolConfig", pool: tpl.name, patch:{ source: "template", enabled: tpl.enabled, template_type: form.template_type, type: isChijie ? "" : form.type, server: isChijie ? "" : form.server.trim(), endpoint: isChijie ? form.endpoint.trim() : "", port: Number(form.port || 0), bearer_token: isChijie ? form.bearer_token : "", username_template: isChijie ? "" : form.username_template, password: isChijie ? "" : form.password, priority: Number(form.priority || 0), coverage: form.coverage, residential: form.coverage === "residential", }}); if (ok) onClose(); }; return ( }>
set("priority", e.target.value)}/>
{form.template_type === "chijie" ? ( <>
set("endpoint", e.target.value)} placeholder="https://b.example.com"/>
set("port", e.target.value)} placeholder="443"/>
set("bearer_token", e.target.value)}/>
) : ( <>
set("port", e.target.value)}/>
set("server", e.target.value)} placeholder="brd.superproxy.io"/>
set("username_template", e.target.value)} placeholder="brd-customer-xxx-zone-yyy-country-{region}"/>
{`{region}`} → lowercase · {`{REGION}`} → uppercase
set("password", e.target.value)}/>
)}
Fallback order
Templates are tried by priority after local static and subscription nodes are unavailable.
); } function TemplateTest({ tpl, dispatch }) { const [region, setRegion] = React.useState("US"); const [targetMode, setTargetMode] = React.useState("https://api.ipify.org?format=json"); const [customTarget, setCustomTarget] = React.useState(""); const [result, setResult] = React.useState(null); const [busy, setBusy] = React.useState(false); if (!tpl) return null; const isChijie = templateType(tpl) === "chijie"; const target = targetMode === "custom" ? customTarget : targetMode; const resolved = (tpl.username_template || "").replaceAll("{region}", region.toLowerCase()).replaceAll("{REGION}", region.toUpperCase()); const phaseLabel = { proxy_tcp: "proxy tcp", proxy_connect: "proxy connect", tls_handshake: "tls handshake", target_http: "target http", remote_chijie: "remote chijie", timeout: "timeout", request: "request", }[result?.phase] || result?.phase || "—"; const hint = result?.phase === "proxy_connect" ? "Proxy rejected CONNECT before target response. Check Bright Data zone permission, country parameter, password, whitelist and target policy." : result?.phase === "target_http" ? "Target returned an HTTP response through the proxy." : result?.phase === "remote_chijie" ? "Remote Chijie returned a /proxy response for the requested region." : ""; const countryMismatch = result?.country_code && result?.region && result.country_code !== result.region; const ipSignals = [ result?.ip_proxy ? "proxy" : "", result?.ip_vpn ? "vpn" : "", result?.ip_tor ? "tor" : "", result?.ip_hosting ? "hosting" : "", ].filter(Boolean).join(", "); return (
setRegion(e.target.value.toUpperCase().slice(0,2))} maxLength={2}/>
{targetMode === "custom" && (
setCustomTarget(e.target.value)} placeholder="https://example.com/"/>
)}
{isChijie ? "POST /proxy · least-latency" : resolved}
{result && (
{result.ok ? "connected" : "failed"} {result.ok && {result.latency_ms}ms}
Node
{result.node || "—"}
Requested region
{result.region || region}
Egress IP
{result.observed_ip || "—"}
IP country
{result.country_code || "—"}
IP type
{result.ip_type || "—"}{result.ip_version ? ` · ${result.ip_version}` : ""}
ISP
{result.ip_isp || "—"}
ASN
{result.ip_asn ? `AS${result.ip_asn}` : "—"}
Organization
{result.ip_org || "—"}
IP flags
{ipSignals || "—"}
Test URL
{result.test_url || target}
Phase
{phaseLabel}
HTTP
{result.http_status || "—"}
{isChijie ? "Remote" : "Username"}
{isChijie ? "Chijie /proxy" : (result.resolved_username || resolved)}
{result.error && <>
Error
{result.error}
} {result.geo_error && <>
Geo error
{result.geo_error}
} {hint && <>
Meaning
{hint}
}
)}
); } window.PageTemplates = PageTemplates;