Lees de SQL op de draad met Caddy en mitmproxy
Je backend bouwt SQL uit de filters van de gebruiker. Stuur de Postgres-verbinding tijdens het draaien via mitmproxy met @viaalink/caddy-api-client, lees de echte query en zet de route terug. Er wordt niets herstart.
TL;DR: De SQL die je app verstuurt, bestaat alleen op het moment dat hij draait. @viaalink/caddy-api-client kan één Postgres-verbinding via mitmproxy sturen en weer terugzetten terwijl Caddy blijft draaien. De decoder laat de query zien, de parameters, de rijen en de fouten. Bekijk de uitleg op YouTube (2:38).
De query die niemand schreef
Een backend bouwt zijn SQL uit wat de gebruiker kiest: filters, categorieën, een sorteervolgorde. De code laat de onderdelen zien. Hij laat niet het statement zien dat bij de database aankomt.
Het querylogboek van de database zou dat wel tonen, maar het staat vaak uit, is op een beheerde database niet bereikbaar en mengt de queries van alle clients. Je wilt de statements van één verbinding, zoals ze verstuurd zijn.
Zet de proxy in het pad
Caddy kan ruwe TCP-verkeer routeren met zijn layer 4-app (caddy-l4). De client wisselt die ene route tijdens het draaien via mitmproxy en weer terug, zonder herstart. Caddy blijft draaien en alleen de Postgres-route verandert.
mitmproxy vangt de bytes op. De Postgres-decoder die bij de bibliotheek hoort, zet ze om in de SQL, de parameters, de rijen en de fouten. Hij verbergt ook wachtwoorden, dus het logboek dat je bewaart bevat ze niet.
Wat de demo op de draad vindt
De uitleg draait een productzoekopdracht met een echte Playwright-opname. Twee bugs komen alleen naar boven als je het verkeer leest:
- Een categorie die niets vindt. De app stuurt
electronics, terwijl de dataElectronicsheeft. De query geeft nul rijen en geen fout, dus de pagina lijkt leeg. - Sorteren op een kolom die niet bestaat. Kiezen voor “Sort by Rating” stuurt een query op
rating. De app zegt alleen “something went wrong”. Postgres zegt precies wat er mis is:column "rating" does not exist.
Geen van beide bugs zit in de code die je als eerste leest. Beide zijn meteen duidelijk in het statement.
Hoe het zich verhoudt tot ngrok
ngrok heeft TCP-verbindingsinspectie toegevoegd die verbindingsgegevens toont. Onze invalshoek is anders: je leest de SQL binnen de verbinding, lokaal, op je eigen machine, tegen je eigen Caddy.
Aan de slag
De uitleg gebruikt een AI-stemkloon van Kelvins stem. De schermopname is echt: een Playwright-run tegen de productzoekopdracht.