fix(proxy): rotate Floxy creds (prior account hit HTTP 402 / balance exhausted)
Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled

The hardcoded Floxy account (d739255e819b) ran out of balance → 402 Payment
Required on every CONNECT → pcat decode dead on prod since ~07:16 UTC 2026-06-11
(pcat has no proxy fallback; EMEX limped on its DataImpulse fallback). New funded
account cac4b0d96a80 verified working (call leg 401-reachable, capture leg 200).
Updates the hardcoded defaults in all 3 Floxy consumers (pcat auth, emex http,
emex browser); env overrides PCAT_FLOXY_USER/PASS + EMEX_FLOXY_USER/PASS unchanged.

Follow-up: wire FLOXY_USER/PASS into docker-compose env so future rotations are
Coolify-env-only (no code change / rebuild).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-11 16:49:37 +03:00
parent c972a17670
commit 2e6c8ac751
3 changed files with 8 additions and 6 deletions

View File

@@ -96,8 +96,8 @@ export class EmexBrowserService implements OnModuleInit, OnModuleDestroy {
this.proxyPassword = this.configService.get<string>("EMEX_PROXY_PASS", "f11c7b6128cc86c6"); this.proxyPassword = this.configService.get<string>("EMEX_PROXY_PASS", "f11c7b6128cc86c6");
this.floxyHost = this.configService.get<string>("EMEX_FLOXY_HOST", "residential.floxy.io"); this.floxyHost = this.configService.get<string>("EMEX_FLOXY_HOST", "residential.floxy.io");
this.floxyPort = Number(this.configService.get("EMEX_FLOXY_PORT", 12321)) || 12321; this.floxyPort = Number(this.configService.get("EMEX_FLOXY_PORT", 12321)) || 12321;
this.floxyUser = this.configService.get<string>("EMEX_FLOXY_USER", "d739255e819b"); this.floxyUser = this.configService.get<string>("EMEX_FLOXY_USER", "cac4b0d96a80");
this.floxyPass = this.configService.get<string>("EMEX_FLOXY_PASS", "9092873ba4e0"); this.floxyPass = this.configService.get<string>("EMEX_FLOXY_PASS", "dfc38fe467a3");
this.floxyLifetime = Number(this.configService.get("EMEX_FLOXY_LIFETIME", 300)) || 300; this.floxyLifetime = Number(this.configService.get("EMEX_FLOXY_LIFETIME", 300)) || 300;
} }

View File

@@ -189,8 +189,8 @@ export class EmexService {
this.emexFloxy = { this.emexFloxy = {
host: this.configService.get<string>("EMEX_FLOXY_HOST", "residential.floxy.io"), host: this.configService.get<string>("EMEX_FLOXY_HOST", "residential.floxy.io"),
port: Number.isInteger(fport) && fport >= 1 && fport <= 65535 ? fport : 12321, port: Number.isInteger(fport) && fport >= 1 && fport <= 65535 ? fport : 12321,
user: this.configService.get<string>("EMEX_FLOXY_USER", "d739255e819b"), user: this.configService.get<string>("EMEX_FLOXY_USER", "cac4b0d96a80"),
pass: this.configService.get<string>("EMEX_FLOXY_PASS", "9092873ba4e0"), pass: this.configService.get<string>("EMEX_FLOXY_PASS", "dfc38fe467a3"),
lifetime: Number.isInteger(flife) && flife >= 0 ? flife : 300, lifetime: Number.isInteger(flife) && flife >= 0 ? flife : 300,
}; };
this.logger.log( this.logger.log(

View File

@@ -99,8 +99,10 @@ const DI_DEFAULT_PASS = "78ebc3d881de6ec0";
// Playwright capture so the partner site sees a coherent session. // Playwright capture so the partner site sees a coherent session.
const FLOXY_HOST = "residential.floxy.io"; const FLOXY_HOST = "residential.floxy.io";
const FLOXY_PORT = 12321; const FLOXY_PORT = 12321;
const FLOXY_DEFAULT_USER = "d739255e819b"; // Floxy account creds (overridable via PCAT_FLOXY_USER/PASS). Rotated 2026-06-11
const FLOXY_DEFAULT_PASS = "9092873ba4e0"; // after the prior account (d739255e819b) hit HTTP 402 (balance exhausted).
const FLOXY_DEFAULT_USER = "cac4b0d96a80";
const FLOXY_DEFAULT_PASS = "dfc38fe467a3";
const FLOXY_CAPTURE_LIFETIME_S = 60; // sticky window for one capture attempt const FLOXY_CAPTURE_LIFETIME_S = 60; // sticky window for one capture attempt
type ProxyProvider = "floxy" | "dataimpulse" | "none"; type ProxyProvider = "floxy" | "dataimpulse" | "none";