Revert "[ka6] fix connecteur designgama.com: domaine expiré + clientHold registrar → NXDOMAIN mondial, gestion _wix_domain_nxdomain → catalogue vide fidèle. Cause racine vérifiée live 2026-10-03: le domaine a expiré le 2026-10-02 (registrar Wix.com Ltd.) et a été mis en clientHold le 03 à 08:49 UTC — retiré de la zone DNS, NXDOMAIN mondial (résolveur local, 8.8.8.8, DoH dns.google Status 3 sur www ET apex), timing qui colle au 1er échec de sync (~08:51 UTC). L'entreprise est vivante (Serper: Facebook/Instagram/LinkedIn actifs, expansion récente) et Google n'indexe que designgama.com — pas de migration, panne d'adresse probablement temporaire (renouvellement en grâce). Sans le fix: le direct échoue en ConnectionError, la chaîne de secours remonte un 200 à CORPS VIDE, r.json() plante → « Expecting value » (3 échecs) → broken; _wix_domain_parked ne matche pas (port 80 injoignable en NXDOMAIN). Fix minimal wix.py, même philosophie que _wix_domain_parked (b7cb895)/_domain_parked (dd99f2b): corps non-JSON sur /_api/v1/access-tokens ET NXDOMAIN confirmé chez un résolveur public en DoH (dns.google, Status 3 exigé sur l'hôte ET l'apex — insensible à une panne du résolveur local du nœud) → return [] (0 fidèle, sync ok). Un non-JSON sans ce marqueur continue de lever l'erreur — pas de masquage. Sync réel 2026-10-03: designgama.com ok / 0 produit, removed=0 (les 138 produits en base préservés, active=138, réactivation auto si le domaine est renouvelé); non-régression kievepauze.com ok / 40 produits (chemin Wix nominal intact) + témoin _wix_domain_nxdomain False sur kievepauze. pm2 restart fabri-ka-sync fait, web local 200. Si le domaine revient (renouvellement), le sync repartira tout seul; si le clientHold persiste des mois, envisager site_source_mort."
This reverts commit 524c7435f07ddf9637478e4ee0df9aa9735d0e91.
1 changed file +4 −26
modified
fabrika/connectors/wix.py
+4 −26
@@ -44,12 +44,10 @@ class WixConnector(BaseConnector): | ||
| 44 | 44 | # Corps non-JSON (souvent un 200 vide remonté par la chaîne de |
| 45 | 45 | # secours quand le direct échoue). Si le domaine est déconnecté de |
| 46 | 46 | # Wix — parking « expiredwixdomain.com » servi par l'infra Wix |
| 47 | − # elle-même sur le port 80 (ex. baraqueapots.com) — ou carrément | |
| 48 | − # retiré de la zone DNS (NXDOMAIN mondial, ex. designgama.com | |
| 49 | − # expiré + clientHold 2026-10-03) — la boutique n'existe plus à | |
| 50 | − # cette adresse : catalogue vide fidèle. Sans l'un de ces | |
| 51 | − # marqueurs, on propage l'erreur comme avant (pas de masquage). | |
| 52 | − if self._wix_domain_parked() or self._wix_domain_nxdomain(): | |
| 47 | + # elle-même sur le port 80 (ex. baraqueapots.com) — la boutique | |
| 48 | + # n'existe plus à cette adresse : catalogue vide fidèle. Sans ce | |
| 49 | + # marqueur, on propage l'erreur comme avant (pas de masquage). | |
| 50 | + if self._wix_domain_parked(): | |
| 53 | 51 | return [] |
| 54 | 52 | raise |
| 55 | 53 | apps = body.get("apps", {}) |
@@ -77,26 +75,6 @@ class WixConnector(BaseConnector): | ||
| 77 | 75 | return (r.status_code in (301, 302) |
| 78 | 76 | and "expiredwixdomain" in (r.headers.get("Location") or "")) |
| 79 | 77 | |
| 80 | − def _wix_domain_nxdomain(self) -> bool: | |
| 81 | − """True si le domaine a disparu du DNS mondial : NXDOMAIN (Status 3) | |
| 82 | − chez un résolveur public pour l'hôte ET son apex — typiquement un | |
| 83 | − domaine expiré mis en clientHold par le registrar, donc retiré de la | |
| 84 | − zone (ex. designgama.com, expiré 2026-10-02, clientHold Wix le 03). | |
| 85 | − Vérifié en DNS-over-HTTPS (dns.google) pour ne pas confondre avec une | |
| 86 | − panne du résolveur local du nœud ; en cas de doute (DoH injoignable, | |
| 87 | − Status != 3) on renvoie False et l'erreur se propage — pas de masquage.""" | |
| 88 | − host = (_urlsplit(self.base).netloc or self.base).split(":")[0] | |
| 89 | − apex = host[4:] if host.startswith("www.") else host | |
| 90 | − for name in {host, apex}: | |
| 91 | − try: | |
| 92 | − r = _requests.get("https://dns.google/resolve", | |
| 93 | − params={"name": name, "type": "A"}, timeout=15) | |
| 94 | − if r.json().get("Status") != 3: | |
| 95 | − return False | |
| 96 | − except (ValueError, _requests.RequestException): | |
| 97 | − return False | |
| 98 | − return True | |
| 99 | − | |
| 100 | 78 | # ------------------------------------------------------------------ V3 -- |
| 101 | 79 | def _fetch_v3(self, inst: str) -> list[Product]: |
| 102 | 80 | """Catalogue V3 : POST wixapis.com/stores/v3/products/query, le jeton |
| 103 | 81 | |