🔌 HERO API — Browser-Direkttest

Endpoint: https://login.hero-software.de/api/external/v7/graphql  |  Token: aus ⚙ Einstellungen (localStorage)

⏳ Lade Token aus Settings…
⚠️ Diagnose: Cloudflare WAF — das ist der echte Root Cause Alle 5 CORS-Proxies schlugen fehl — nicht wegen fehlendem Access-Control-Allow-Origin auf der HERO-App, sondern weil der Server hinter Cloudflare WAF sitzt. Postman funktioniert, weil es Session-Cookies mitschickt die Cloudflare ausgestellt hat:
CLOUDWAFSESID  ·  CLOUDWAFSESTIME  ·  _LB

Browser-Requests dürfen keine Cookie-Header bei Cross-Origin-Requests senden (Fetch-Spec, verboten). Cloudflare blockt deshalb jeden Browser-Request ohne gültige WAF-Session — und antwortet ohne CORS-Header, was der Browser als NetworkError interpretiert. Auch die CORS-Proxies bekommen keine WAF-Session, weil sie selbst keine Browser-Session mit login.hero-software.de aufgebaut haben.
④ Cookie-Diagnose — Was der Browser NICHT senden darf ℹ️ Info
Testet ob credentials: 'include' hilft (Spoiler: nein — WAF-Cookies vom Server gesetzt, nicht vom Browser-User gepflegt)

① Direktzugriff Erwartet: CORS-Fehler
② CORS-Proxies testen Alle fehlgeschlagen
⑤ Eigener Cloudflare Worker — die richtige Lösung Noch nicht konfiguriert
Trage die URL deines deployte Workers ein (z.B. https://hero-proxy.DEIN-NAME.workers.dev). Der Worker-Code liegt in cloudflare-worker/hero-proxy.js.
Mutation erzeugt einen Entwurf in HERO (nicht published) — danach in HERO manuell löschen.
③ Echte Mutation via CORS-Proxy (funktioniert sobald Proxy OK)
⑧ create_document Payload-Diagnose Noch nicht getestet
Testet create_document schrittweise. Alle Tests erzeugen einen Entwurf (publish: false) — in HERO danach löschen.
project_match_id im Feld unten eintragen (aus Suche kopieren).
Vorgehen: ① → ② → ③ → ... bis der 500er auftritt — dann weiss man welcher Action-Typ das Problem verursacht.
⑥ Such-Diagnose — welche Query-Namen & Felder existieren? Noch nicht getestet
Testet direkt über den CF Worker welche Queries die HERO-API anbietet und was project_matches / contacts wirklich zurückgibt. Worker-URL muss oben eingetragen sein.
⑨ Custom Fields — Schema entdecken + Werte lesen/schreiben Noch nicht getestet
✅ Verifizierte Feldnamen (aus Postman Introspection, 2025-06):
CustomFields_Schema: schemaId, relates, properties  ·  CustomFields_Record: schema, relationId, properties
Query: custom_field_records(relation: Enum!, relationIds: [Int])  ·  Mutation: set_custom_field_value(schemaId, relationId, properties)
Noch unbekannt: Felder von CustomFields_Property und CustomFields_PropertyValue — werden via ②/③ ermittelt.
Workflow: ① Alle CF-Typen · ② Property Felder · ③ PropertyValue + Input Felder · ④ Schemas laden · ⑤ Werte lesen · ⑥ Input-Typ Details · ⑦ Wert setzen
→ Klicke einen Button um zu starten…

✅ Was tun? — CORS-Lösungswege

  1. Weg 1 — HERO-Team anfragen (dauerhaft, ohne eigene Infrastruktur):
    HERO / Cloudflare so konfigurieren dass die Genspark-Domain (und localhost für Dev) in der WAF allowlisted ist und CORS-Header mitgeschickt werden. → Email-Template unten kopieren.
  2. Weg 2 — Eigener Cloudflare Worker (self-hosted, kostenlos, 5 Min. Setup):
    Code in cloudflare-worker/hero-proxy.js liegt bereit. Im Cloudflare Dashboard als Worker deployen → URL oben in Feld ⑤ eintragen → testen.
  3. Weg 3 — cors-anywhere selbst hosten (Heroku Free Tier):
    git clone https://github.com/Rob--W/cors-anywhere → Heroku deploy → URL in settings.html als Proxy-URL eintragen.
📧 Email-Template an HERO-Team:
An: support@hero-software.de Betreff: CORS / Cloudflare WAF Freigabe für API-Integration Guten Tag, wir nutzen die HERO External API (GraphQL, v7) zur Anbindung unseres Sky-Frame Kalkulationstools. Der API-Key ist aktiv und in Postman funktioniert die Verbindung einwandfrei. Beim Zugriff aus dem Browser (JavaScript fetch) schlägt jeder Request fehl, weil Cloudflare WAF die Anfragen blockiert bevor sie die HERO-API erreichen. Der Browser erhält dabei keine CORS-Header — was zu einem NetworkError führt. Konkret benötigen wir folgende Freigaben: 1. WAF-Rule: Requests mit gültigem Bearer-Token (Authorization: Bearer ac_...) durchlassen ohne Challenge (Bot-Management Bypass für API-Routen). 2. CORS-Header auf /api/external/v7/graphql: Access-Control-Allow-Origin: * (oder spezifisch unsere Domain) Access-Control-Allow-Methods: POST, OPTIONS Access-Control-Allow-Headers: Authorization, Content-Type, Accept Alternativ: IP/Domain-Whitelist für unsere Hosting-Domain. Vielen Dank und freundliche Grüsse, Sky-Frame AG — Digitales Team
🛠 Cloudflare Worker — Interaktive Setup-Anleitung:
Öffne die fertige Setup-Seite — sie führt dich Schritt für Schritt durch: → worker-setup.html öffnen (Code zum Kopieren, CF-Dashboard Screenshots, Live-Test direkt auf der Seite) Kurzversion: 1. dash.cloudflare.com → Workers & Pages → Create Worker → Name: "hero-proxy" 2. "Edit Code" → Ctrl+A → alles löschen → Code aus worker-setup.html kopieren 3. "Save and Deploy" 4. Worker-URL kopieren → hier in Feld ⑤ eintragen → testen 💡 Kosten: Cloudflare Workers Free Tier = 100.000 Requests/Tag — völlig ausreichend.