Problem
proxyabl's headline claim is SSRF protection, but the good engine is dead code. proxyabl-core's assertUrlSafe/executeProxyRequest (DNS-rebinding-aware, resolves all A/AAAA, unpacks IPv4-mapped IPv6, redirect:"manual") is exported and unit-tested but imported by NOTHING outside its own tests. The middleware wrapper and apps/gateway-server route /proxy through packages/proxyabl/src/router.ts (raw fetch, lines ~426/588/856) with a weaker host-equality + path-allowlist check and no private-IP/DNS validation.
A reviewer who greps for assertUrlSafe finds zero consumers — the thing being marketed is not the thing running. During a star push this is a credibility hole.
Fix (pick one)
- Preferred: route the gateway's
/proxy handler through executeProxyRequest/assertUrlSafe so the marketed engine is the one that runs. Retire the raw-fetch path in router.ts.
- Or: if the router's model is intentionally different, update the README/docs/packages.md to describe what actually runs, and demote the SSRF-engine claim to "available primitive."
Related (convergence)
Production (gatewaystack-connect) forked this same engine into integrations/custom/security.ts in Feb 2026 and each side now has fixes the other lacks (OSS has extractIpv4MappedIpv6; prod has redirect-revalidating safePublicFetch). The real fix is one canonical proxyabl-core engine consumed by both — see the prod convergence epic. This issue is the OSS half: make proxyabl-core's engine actually load-bearing in OSS.
Acceptance
assertUrlSafe (or the full engine) has a real consumer in the gateway path, OR the marketing is corrected to match reality.
Problem
proxyabl's headline claim is SSRF protection, but the good engine is dead code.
proxyabl-core'sassertUrlSafe/executeProxyRequest(DNS-rebinding-aware, resolves all A/AAAA, unpacks IPv4-mapped IPv6,redirect:"manual") is exported and unit-tested but imported by NOTHING outside its own tests. The middleware wrapper andapps/gateway-serverroute/proxythroughpackages/proxyabl/src/router.ts(rawfetch, lines ~426/588/856) with a weaker host-equality + path-allowlist check and no private-IP/DNS validation.A reviewer who greps for
assertUrlSafefinds zero consumers — the thing being marketed is not the thing running. During a star push this is a credibility hole.Fix (pick one)
/proxyhandler throughexecuteProxyRequest/assertUrlSafeso the marketed engine is the one that runs. Retire the raw-fetch path inrouter.ts.Related (convergence)
Production (gatewaystack-connect) forked this same engine into
integrations/custom/security.tsin Feb 2026 and each side now has fixes the other lacks (OSS hasextractIpv4MappedIpv6; prod has redirect-revalidatingsafePublicFetch). The real fix is one canonical proxyabl-core engine consumed by both — see the prod convergence epic. This issue is the OSS half: make proxyabl-core's engine actually load-bearing in OSS.Acceptance
assertUrlSafe(or the full engine) has a real consumer in the gateway path, OR the marketing is corrected to match reality.