Repository navigation
1.0.26: Node4, ProxyEmpire, MountProxies and Massive connectors, Rotate IP for MountProxies through its API - #78
Merged
Conversation
…roxies Rotate IP through its API - Node4: an n4k_ API key; Residential, Rotating Datacenter and Rotating Unmetered logins built by POST /gateways/endpoint (100 a call, up to 1000 a pull, calls spaced for 60 a minute), Static Datacenter from GET /proxies/list, countries from /geo/countries, account from GET /status. - ProxyEmpire: a Bearer token; GET /user checks the package, POST /proxy-list returns ready lines (random, sticky or a custom time up to 120 minutes); Datacenter takes a country only, Static Residential nothing. Countries per pool; account from GET /user. - MountProxies: the account key lists the modems (HTTP only, no key kept on a row); Rotate IP reads the saved key, finds the modem's subscription_key and calls rotate_ip (V2, then V1 with the modem_key on a 404) through the provider-API rotate hook. Errors never echo the key or the URL. - Massive: gateway-built logins with the targeting in the username, the API token as the password, the port by protocol, ISP on isp.joinmassive.com:8000; account from the Reporting API (GB used in the last 7 days). - httpRequestText keeps the reply headers on a failed request, for a vendor's Retry-After.
…roviders page PROVIDERS entries (Node4 with the live affiliate link), Keep same IP defaults for ProxyEmpire and Massive, en and es hints, a 15 minute option text, the API token (proxy password) label, an account note for traffic used in the last 7 days, and an initials tile for a provider without a logo.
…ew-2 Both lanes appended to the same registries: the import list, PROXY_VENDORS, VENDOR_LOOKUPS, REAL_VENDOR_ADAPTERS, apiRotationProvider and PROVIDER_ROTATORS, the account adapters and parsers, PROVIDERS and LIFE_BLANK_DEFAULTS keep both lanes' entries (ProxyBrazil to SimplyNode, then Node4 to Massive). httpRequestText keeps new-1's error fields (retryAfter, requestId); Node4 and ProxyEmpire read the wait from error.retryAfter. The initials tile is new-1's. The Node4 to Massive sections now sit before the ProxyBrazil section, so each lane's test sections keep their bounds; the Massive test's end marker follows.
…o fix/1.0.26-connectors-new-2 # Conflicts: # src/renderer/lib/gatewayPull.mjs
…o fix/1.0.26-connectors-new-2 # Conflicts: # src/renderer/i18n/locales/en/cmpSettingsC.json # src/renderer/i18n/locales/es/cmpSettingsC.json # src/renderer/lib/gatewayPull.mjs
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.
New connectors, part 1 of lane C2. Stacked on #76 (
fix/1.0.26-connectors-new-1), which is stacked on #80, #77 and #73. Merge order: #73, #77, #80, #76, then this one, then #79. It brings in #76 (and with it #77 and #80) by merge commits; nothing is rebased. No version bump, no schema change. All four connectors are built from each vendor's public docs and tested with fixtures only. None is tested against a live account yet (no trial is active).What changed
n4k_API key (read:proxies). Residential, Rotating Datacenter and Rotating Unmetered logins are built by Node4 (POST /gateways/endpoint). Static Datacenter lists the IPs the account owns (GET /proxies/list). Load countries, account check.GET /userchecks the package, thenPOST /proxy-listreturns ready lines. Four products. Keep same IP up to 2 hours. Load countries per pool, account check.network.joinmassive.comwith the targeting in the username. The API token is the proxy password. The port follows the protocol. ISP is onisp.joinmassive.com:8000. Account check on the Reporting API.Shared pieces it adds or uses:
apiRotationProviderline and onePROVIDER_ROTATORSentry for MountProxies.gatewayPullPlan/mintGatewayRowsfor Massive.LIFE_BLANK_DEFAULTSentries:null("Provider default": a sticky line keeps its IP until ProxyEmpire rotates it or the device goes offline);15(nosessionttlis sent).life15;usedLast7Days;httpRequestTextkeeps 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's error fields. Node4 and ProxyEmpire readerror.retryAfter.Node4
Pool to product:
residentialPOST /gateways/endpointrotating_datacenterPOST /gateways/endpointrotating_unmeteredPOST /gateways/endpointGET /proxies/listGateway pulls:
sticky: false,count: 1).ttlis never sent.gb.Static:
premium_privateandsharedrows for the chosen protocol are kept.Errors:
Retry-Afteror the body'sretryAfterSeconds.Never called:
replace,refresh, credential or sub-user writes, orders, top-ups, webhooks.Load countries: Residential reads
GET /geo/countries. The datacenter products return the plan's US, IT and ES without a call.Account check:
GET /status.ok.no_active_proxiesshows as a note.user_inactiveshows as suspended.Dashboard button: the owner's live affiliate link,
https://node4.io?ref=REF-7643BU.ProxyEmpire
region), city, ZIP and ASN. Places are lowercase, joined with+.uk, as its list names it.gatewayPullPlansemantics):random.sticky.custom, withsession_lifetime= min(life, 120).GET /userchecks the package. It stops if:null;provider_availability.stateisunavailableorcircuit_open.parseLoginList. The row type follows the Protocol select, since HTTP and SOCKS5 share the host and port.errorsmessage), 429 (with theRetry-Afterseconds) and 5xx. The token is never echoed.GET /user.summedPlanswhen there is more than one.MountProxies
GET /proxies?api_key=…&output=json, one call.expire_atis a date.expire_atis skipped; "N/A" is kept.api_key,modem_keyandsubscription_keyare never stored on a row, and norotationUrlis stored.apiRotationProviderreturnsmountproxiesfor a row taggedmountproxieswith a host, port and username, socanRotatestays a pure function of the row.rotateMountProxiesreads the saved key withreadSavedProviderCreds('mountproxies')(main only). It lists the proxies and matches the row by IP, port and username.GET /subscription/<subscription_key>/rotate_ip. On a 404 it retries once withGET /proxy/<modem_key>/rotate_ip, the help article's form. The reply says which path worked ("(V2)" or "(V1)").expire_at(elseauto_renew_at), and the billing cycles. There is no traffic figure (plans are unlimited data).firstToExpirewhen there is more than one modem.Massive
massiveUsernamebuilds{USER}-country-US-subdivision-NY-city-New%20York-…-type-mobile-session-<sid>-sessionttl-<min>.sessionttlis sent only with a session, clamped to 1440.-type-mobile);isp.joinmassive.com:8000for both protocols. A location is refused, and Keep same IP is not sent (ISP sessions do not expire).mintGatewayRows(rotating for one row with no session; sticky otherwise; up to 1000).x-api-key: <token>on the Reporting API.used_bytes/ 10^9, with the note "Traffic used in the last 7 days; the API does not report what is left."{ data: [] },{ usage: [] }or one row are all read.Open questions per provider (for the held emails)
Each spec's section 16 has the full list. These are the points this build assumed:
Node4
GET /proxies/listreturn one row per protocol for static proxies, or only HTTP? How is the SOCKS5 port read by API? The build keeps rows whoseprotocolmatches the select.asna string or a number? The build sends a digits string. Arestateandcitylowercase? The build sends them lowercase, with spaces dropped from the city.https://node4.io/dashboardthe dashboard address? It is inferred.n4k_plus 8 to 200 characters? The length is inferred.GET /subscriptionschema, for an expiry date. It is not in v1.ProxyEmpire
POST /proxy-listneed: read, or create? The 403 message tells the user to add create if asked.ukfor Datacenter andgbelsewhere.ip_rotation_type? The build sends it as for Residential. Which host is current?MountProxies
subscription_key(V2) ormodem_key(V1)? The build tries V2, then V1 on a 404./proxiesreturn it? The connector is HTTP only.[A-Za-z0-9_-]{8,200}? It is inferred.Massive
used_bytesis documented.%2Daccepted?-subaccount-softglazebe added? The build does not add it.How it was verified
npm test:test/node4.test.js(12)test/proxyempire.test.js(9)test/mountproxies.test.js(10)test/massive.test.js(6)ipcHandlers.jsagainst a stubbed transport; error mapping with "never echoes the key or URL"; the rotate hook; account parsers throughcheckProviderAccount; and the wiring (registries, PROVIDERS entry, en and es hint, no dashes).npm run check:depsnpx vite buildnode --checkon all 95 main and preload filesnode_moduleswas partly deleted during this work, by another process.node_modulesin this worktree:npm ci --ignore-scripts, thenprisma generatethere only.Noticed, not fixed
compactProxyreportscanRotateonly for proxies with a link (src/main/ai/tools.js:119). So the AI is not told that MountProxies rows (or DataImpulse, ProxyUDP, SimplyNode ports) can rotate, althoughrotate_proxy_ipworks for them. 1.0.26: imported rotation links rotate, Rotate IP for "use only" shares, Firefox WebRTC shown as off, Quick generate preview with fewer proxies, token reveal flag #68 noted the same for DataImpulse.AFFILIATE-LINKS.mdlists live links for them.TX,austin). The hint and the refusal message explain it.