Repository navigation
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
Conversation
- 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.
…to fix/1.0.26-connectors-new-1
… 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
changed the base branch from
fix/1.0.26-connectors-shared
to
fix/1.0.26-connectors-vendors-2
November 10, 2026 16:53
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 (basefix/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
pb_live_key (Integrations, App: SoftGlaze) lists the account's proxies, 200 a page; How many caps the list; HTTP or SOCKS5 portrotation_url(a per-proxy token, no key), 65 s timeout; its documented refusals become clear messagesrotate-iprotation.manual.url; shared lines have none; refusals become clear messagesgenerate-proxy-stringcall per proxy: How many 1 rotating, more sticky (3 in flight, 50 a pull)POST /proxyper proxy; Keep same IP asttl(30 min when blank on a sticky pull, up to 60)proxy.simplynode.io, 9000 to 18999): provider-API hook resets the port's session with the saved keyShared 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:;@) andhost:port:user:pass.host:portalone 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 deadpr.ResiProx.iotemplate 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_LINK_TIMEOUT_MS.proxybrazil = 65000, keyed on theprovidertag thatsyncVendorPoolputs on every pulled row. NewROTATION_LINK_REFUSALS(ProxyBrazil, Zokol) /rotationLinkRefusal(proxy, status, data):rotateProxyIpthrows 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.apiRotationProvidergets one inline line each for ProxyUDP and SimplyNode (stored row fields only, socanRotatestays pure);PROVIDER_ROTATORSgets late-boundproxyudpandsimplynodeentries. The key comes fromreadSavedProviderCredsat rotation time and never goes into arotationUrlor a message.httpRequestTextkeepsRetry-AfterandX-Request-Idon a failed call: ProxyUDP shows the wait, ProxyBrazil logs the request id (never the key).geoSync.optional), labelled "Sub-account login" (geo.subaccountLabel) with an example placeholder (geo.subaccountPlaceholder, a newUSERNAME_PLACEHOLDERSbesideTOKEN_PLACEHOLDERS), so no new form field was needed.LIFE_BLANK_DEFAULTS.simplynode = 30.https://resiprox.com?ref=n2m3ztm); the other four have no live link yet, so they open the plain site.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
nextURL, so the token cannot be sent elsewhere.Open questions (for the owner to ask each provider; wording from section 16 of each spec)
Retry-Afterand the minimum gap between two rotations; whenrotation_urlis 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).GET /subscriptions/asactive; canproxy_login/proxy_passwordcome with the list (one detail call per port today); the rate limit and cooldown ofrotate-ip, whichcodevalues mean "too soon" or "modem busy", and isRetry-Afteralways sent; can the API return the private IP Rotation URL. Inferred: the country from a leading flag inserver_name.Retry-After; theErrorDto.codevalues; 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.proxy_stringformat for residential and mobile, rotating and sticky; the username flag grammar (for minting sticky sessions locally with one call, Phase 2); whethergenerate-proxy-stringtakes a TTL and a protocol, and whethersticky=truegives 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/countriesand the case ofcountry_code. Inferred: the API is Laravel, sostickyis sent as 1 / 0 (Laravel's boolean rule refuses "true").proxy-stringformat perprotocolandauth, and whichauthan app storing a login should use (the app sendslogin); thettlrange and maximum (the app stops at 3600 s until 21600 is confirmed); whether eachPOST /proxygives a new session; rate limits;Subaccount.statusandtrafficOverall.unitvalues; which gateway is current (ip.simplynode.io:9003with flags, orproxy.simplynode.ioports with awifi;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 bysession:resetengages only on port-format rows, and is untested.How it was verified
test/proxybrazil.test.js,test/proxyudp.test.js,test/zokol.test.js,test/resiprox.test.js,test/simplynode.test.js,test/vendorProxyString.test.js, withtest/helpers/connectorHarness.js(lifts a vendor section ofipcHandlers.jsand runs it against fixture answers built from each vendor's documented shapes; no test reaches a provider). They cover row mapping, paging, How many, every documented error (no key echoed), rotation timeout and refusals, the provider-API rotators, account checks, wiring and en/es strings.permissionsRound5andpermissionsRound7also liftrotationLinkRefusal(and stubROTATION_LINK_REFUSALS), whichrotateProxyIpnow calls. Nothing else changed.npm run check:depsOK;node --checkon all 95 files insrc/mainandsrc/preloadOK;npx vite buildOK (on the final renderer code);npm testas above.Noticed, not fixed