Skip to content

1.0.26: ProxyBrazil, ProxyUDP, Zokol, ResiProx and SimplyNode connectors, a 65-second rotation link for ProxyBrazil, provider-API Rotate IP for ProxyUDP and SimplyNode ports - #76

Merged
softglazee merged 6 commits into
mainfrom
fix/1.0.26-connectors-new-1
Nov 10, 2026
Merged

softglazee merged 6 commits into
mainfrom
fix/1.0.26-connectors-new-1

Conversation

@softglazee

@softglazee softglazee commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

Five new proxy connectors, from the specs in tmp-partners-pilot/new-connectors (lane C1 of the connector round). No version bump, no schema change. Stacked on #80 (base fix/1.0.26-connectors-vendors-2, which carries #73 and #77). Merge order: #73, #77, #80, then this one, then #78 and #79. The branch merged #77 and #80 in (normal merges, no rebase), so it merges cleanly after them. Built on #73 and its shared mechanisms: the provider-API rotate hook, ROTATION_LINK_TIMEOUT_MS, gatewayPullPlan / LIFE_BLANK_DEFAULTS, credential labels and optional fields. Built from the vendors' docs only: not tested with a live key; every inferred point is listed under "Open questions" for the owner to ask the provider.

What changed

# Connector Pull Rotate IP Account check
1 ProxyBrazil (dedicated 4G, Brazil) pb_live_ key (Integrations, App: SoftGlaze) lists the account's proxies, 200 a page; How many caps the list; HTTP or SOCKS5 port the proxy's own rotation_url (a per-proxy token, no key), 65 s timeout; its documented refusals become clear messages proxies, next expiry, data used / limit in GB
2 ProxyUDP (mobile 4G/5G ports) API token lists the active subscriptions, then one detail call per port for its login (How many caps the detail calls, 2 in flight) no link in the API: provider-API hook finds the port's subscription with the saved token and POSTs rotate-ip balance (USD), plans, next expiry
3 Zokol (French mobile) Bearer key lists the lines, 100 a page (zero-based) dedicated lines keep rotation.manual.url; shared lines have none; refusals become clear messages lines, Dedicated/Shared, next expiry (no traffic: units undocumented)
4 ResiProx (residential, mobile) Bearer token checks the pool's traffic, then one generate-proxy-string call per proxy: How many 1 rotating, more sticky (3 in flight, 50 a pull) none (no rotate call or link exists) both pools in decimal GB (1 GB = 1e9 bytes, as its docs require)
5 SimplyNode (residential Essential / Core, mobile) API key (header only) + the typed sub-account, or the first one of the pool with traffic; one POST /proxy per proxy; Keep same IP as ttl (30 min when blank on a sticky pull, up to 60) port-format proxies (proxy.simplynode.io, 9000 to 18999): provider-API hook resets the port's session with the saved key traffic of every sub-account, converted by its unit

Shared pieces

  • parseVendorProxyString (proxyVendorUtils.js, pure), for ResiProx and SimplyNode, whose string format is unpublished. It reads a URL (http|https|socks4|socks5|socks5h://user:pass@host:port), user:pass@host:port (the password may hold : ; @) and host:port:user:pass. host:port alone is refused as "no login" (IP allow-list mode), anything else as unreadable, with a clear message. Each vendor also refuses a host that is not its own (ResiProx's dead pr.ResiProx.io template host, for one).
  • collectVendorStrings: up to 3 generator calls in flight, a 60 s deadline; a repeated string ends the pull (a rotating string repeats itself); an error or a rate limit part way keeps the proxies already made and says "(n of N)" on the first row.
  • Rotation links: ROTATION_LINK_TIMEOUT_MS.proxybrazil = 65000, keyed on the provider tag that syncVendorPool puts on every pulled row. New ROTATION_LINK_REFUSALS (ProxyBrazil, Zokol) / rotationLinkRefusal(proxy, status, data): rotateProxyIp throws the vendor's reason ("the account reached 30 IP changes in 15 minutes", "the modem did not change IP this time", ...) instead of a bare HTTP status. It never echoes the link.
  • Provider-API rotation: apiRotationProvider gets one inline line each for ProxyUDP and SimplyNode (stored row fields only, so canRotate stays pure); PROVIDER_ROTATORS gets late-bound proxyudp and simplynode entries. The key comes from readSavedProviderCreds at rotation time and never goes into a rotationUrl or a message.
  • httpRequestText keeps Retry-After and X-Request-Id on a failed call: ProxyUDP shows the wait, ProxyBrazil logs the request id (never the key).
  • SimplyNode's sub-account login is the shared username field, optional (geoSync.optional), labelled "Sub-account login" (geo.subaccountLabel) with an example placeholder (geo.subaccountPlaceholder, a new USERNAME_PLACEHOLDERS beside TOKEN_PLACEHOLDERS), so no new form field was needed. LIFE_BLANK_DEFAULTS.simplynode = 30.
  • Initials tiles: none of the five has a logo file, and the fallback mark was a plain circle, so the five looked the same. A provider without a logo file or a mark of its own now shows its catalog initials.
  • Dashboard buttons: ResiProx carries the owner's live affiliate link (https://resiprox.com?ref=n2m3ztm); the other four have no live link yet, so they open the plain site.
  • Strings: English and Spanish hints for the five connectors and the two new field keys. No em or en dashes.

Read-only by design

Never called: ProxyBrazil's API rotate; ProxyUDP's orders, rotate-all, reboot, change-os, auto-renew, refresh, login and logout (logout invalidates the token); Zokol's credential regeneration, rotation-link or schedule changes, ISP switch, reboot, purchase, trial; ResiProx's sub-user and package calls; SimplyNode's sub-account creation, rotation interval, traffic and IP allow-list calls. ProxyUDP pages by number, never by following the next URL, so the token cannot be sent elsewhere.

Open questions (for the owner to ask each provider; wording from section 16 of each spec)

  • ProxyBrazil: which port ranges are live (docs 10100 / 20100, emails 88xx / 58xx) and whether the host is always secure.proxybrazil.com; whether 429 sends Retry-After and the minimum gap between two rotations; when rotation_url is null and whether its token changes when a key is revoked and a new one made; which scopes an App = SoftGlaze key gets; when keys are enabled for every account (not_available).
  • ProxyUDP: do test and reseller ports appear in GET /subscriptions/ as active; can proxy_login / proxy_password come with the list (one detail call per port today); the rate limit and cooldown of rotate-ip, which code values mean "too soon" or "modem busy", and is Retry-After always sent; can the API return the private IP Rotation URL. Inferred: the country from a leading flag in server_name.
  • Zokol: does a plain GET of the rotation link rotate without a token, what it returns, and what status comes back during the cooldown (the app stores and opens it, as Dolphin Anty does); API rate limits and Retry-After; the ErrorDto.code values; traffic units; whether a key can be limited to listing proxies; written confirmation that customers pasting their own key into SoftGlaze Browser is allowed under the licence.
  • ResiProx: the exact proxy_string format for residential and mobile, rotating and sticky; the username flag grammar (for minting sticky sessions locally with one call, Phase 2); whether generate-proxy-string takes a TTL and a protocol, and whether sticky=true gives a new session each call; whether SOCKS5 is on go.resiprox.com:5000 too (the app assumes so); rate limits; where the token is created; the shapes of /countries and the case of country_code. Inferred: the API is Laravel, so sticky is sent as 1 / 0 (Laravel's boolean rule refuses "true").
  • SimplyNode: the proxy-string format per protocol and auth, and which auth an app storing a login should use (the app sends login); the ttl range and maximum (the app stops at 3600 s until 21600 is confirmed); whether each POST /proxy gives a new session; rate limits; Subaccount.status and trafficOverall.unit values; which gateway is current (ip.simplynode.io:9003 with flags, or proxy.simplynode.io ports with a wifi;cc;... password) and the sticky port range (9000 to 18000, 18999 or 19999); whether country codes are ISO (gb) or SimplyNode's own (uk; the app sends what Load countries returns). Rotate IP by session:reset engages only on port-format rows, and is untested.

How it was verified

Noticed, not fixed

  • The Spanish API key placeholder ("Tu clave de API de ...") is cut at 375 px on every key connector (shared string).
  • The real Live Proxies trial username still appears in existing code and tests; backlog item 38 replaces it in the per-vendor PR.

- ProxyBrazil: lists the dedicated 4G proxies of a pb_live_ key (Partner API, 200 a page) with each
  proxy's key-free rotation link; Rotate IP waits 65 seconds for that link (ROTATION_LINK_TIMEOUT_MS)
  and its documented refusals (30 changes in 15 minutes, modem busy, inactive proxy) become clear
  messages (ROTATION_LINK_REFUSALS). The request id of a failed call is logged, never the key.
- ProxyUDP: lists the active ports of an API token, then one detail call per port for its login
  (How many caps the detail calls). Its API has no rotation link, so Rotate IP finds the port's
  subscription with the saved token and asks rotate-ip (provider-API rotate hook).
- Zokol: lists the French mobile lines of a Bearer key; dedicated lines keep their rotation link,
  shared lines have none. The link's behaviour is undocumented, so a refusal gets a clear message.
- ResiProx and SimplyNode: one generator call per proxy (3 in flight, 50 a pull), read by a shared
  parseVendorProxyString (URL, user:pass@host:port, host:port:user:pass; host:port alone and anything
  else refused). ResiProx checks the pool's traffic first; SimplyNode uses the typed sub-account or
  the first one of the pool with traffic, and Keep same IP as ttl. A port-format SimplyNode proxy
  resets its session through the provider-API rotate hook with the saved key.
- Account checks for all five; ResiProx traffic in decimal GB as its docs require.
- httpRequestText keeps Retry-After and X-Request-Id on a failed call.
…count login, initials tiles

- PROVIDERS entries for ProxyBrazil, ProxyUDP, Zokol, ResiProx (the owner's live affiliate link)
  and SimplyNode, with vendor names for the key fields.
- SimplyNode's sub-account login is the shared username field, optional, with its own label and an
  example placeholder; Keep same IP left blank on a sticky pull reads "Default (30 minutes)".
- A provider without a logo file or a mark of its own shows its catalog initials instead of a
  plain circle.
- English and Spanish hints for the five connectors.
…onnectors

Fixture answers built from each vendor's documented shapes, run against the lifted vendor sections
with a stubbed transport (test/helpers/connectorHarness.js); no test reaches a provider. The rotation
harnesses of permissionsRound5 and permissionsRound7 also lift rotationLinkRefusal, which
rotateProxyIp now calls.
… into fix/1.0.26-connectors-new-1

# Conflicts:
#	src/renderer/i18n/locales/en/cmpSettingsC.json
#	src/renderer/i18n/locales/es/cmpSettingsC.json
#	src/renderer/lib/gatewayPull.mjs
… into fix/1.0.26-connectors-new-1

# Conflicts:
#	src/renderer/lib/gatewayPull.mjs
@softglazee
softglazee changed the base branch from fix/1.0.26-connectors-shared to fix/1.0.26-connectors-vendors-2 November 10, 2026 16:53
Base automatically changed from fix/1.0.26-connectors-vendors-2 to main November 10, 2026 17:13
@softglazee
softglazee merged commit c52bc55 into main Nov 10, 2026
6 checks passed
@softglazee
softglazee deleted the fix/1.0.26-connectors-new-1 branch November 10, 2026 17:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant