Altinity / Altinity/altinity-sql-browser
[sup] ACM-mode transport adapter: cookie auth, JSON-body /query, per-format result unwrap, settings-into-SQL, fake-stream
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- TypeScript
- Sterne
- 8
- Forks
- 2
- Ø Merge
- 1 Std. 34 Min.
- Gemergte PRs (30 T.)
- 6
Beschreibung
Part of #352. Updated for the same-origin / cookie-auth model.
ACM-mode transport behind the injected ctx.fetch, so authedFetch/queryJson/runQuery/loadSchema stay untouched. Pure translation logic in src/core/ at 100%.
Scope
- Cookie auth, no token. Requests go to
/api/cluster/{id}/querywithcredentials:'same-origin'and noAuthorization/X-Auth-Tokenheader. - JSON body request:
{ node, query, ddl, user, password, timeout, swarm }(matches acm-ui's owncluster-explore/query). SQL/creds never in the URL. - Settings → in-SQL: rewrite otherwise-dropped query-string settings into an appended
SETTINGS <k=v,…>clause; thenFORMAT <fmt>. ⚠️ SQL-tail rewriter must handle existingFORMAT/SETTINGS, trailing;, comments — its own pure module + tests. - Response unwrap: parse the per-node array → select the target node → on
meta.error, synthesize a non-okResponse carrying the CH error text (soparseExceptionTextworks); else wrapresultas raw text for the requested format (do NOT blindlyJSON.parse— TSV/CSV/raw and empty effect-statement bodies must pass through). - Fake progress-stream: for
Table/KPI/Filter, emit the buffered rows as synthetic progress lines sorunQuery's reader loop + grids work unchanged. - Explicit node required on every query (LB nondeterminism verified).
Removed vs. original
Map. The ACM session is browser-managed (cookie); a real session expiry is a normal login redirect. Only the temp CH password is ours to re-mint (see #354) — via an explicit single-flight remint on a CH-auth error, not by sniffing error text into the sharedAUTHENTICATION_FAILED→ synthetic 401 to reuserefresh()authedFetchrefresh path (which latchesauthConfirmedafter first success anyway).
Acceptance
- Injected
fetch; no changes toauthedFetch/queryJson/runQuery. - Cookie auth; nothing in the URL; JSON body.
- Settings effective via in-SQL
SETTINGS; SQL-tail rewriter unit-tested on FORMAT/SETTINGS/;/comment edge cases. -
resultwrapped per-format; empty bodies + error envelopes handled. - Grids render via the fake stream unchanged; explicit node targeting.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne in src/core und verfolge die Grenze des injizierten ctx.fetch, wobei authedFetch, queryJson und runQuery unverändert bleiben. Implementiere die Übersetzung des SQL-Endteils für FORMAT, SETTINGS, Semikolons und Kommentare und schreibe dafür Unit-Tests. Verifiziere anschließend Cookie-authentifizierte JSON-Anfragen, die Resultatumschließung pro Format, Fehlerhüllen, explizite Node-Zielauswahl und das Grid-Rendering mit Fake-Stream anhand der Abnahmeliste.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- sql, typescript
- Bereich
- api, backend, databases
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 52/100