{"service":"SVG to PDF Converter","version":"5.5.0","fixes":["WHITE STRIP FIX: resvg cannot decode images inside <pattern> — sharp pre-renders each pattern row into a flat PNG strip","SAFETY NET: inlineRemainingImages() catches any https:// URL that slipped past prerenderPatterns","OOM FIX: sharp composites one PNG strip per row — no string duplication, no base64 explosion","URL encoding: spaces in S3 filenames percent-encoded before fetch","HTTP 403/404 guard: axios validateStatus throws, error body never treated as image","Magic byte validation: non-image responses retried, never cached","PDF MediaBox: physical inches embedded, Wasatch reads directly — no DPI guessing, no scattering"],"pipeline":["1. Fetch SVG","2. prerenderPatterns(): sharp composites tiled strips → flat <image data:...> per pattern row","3. inlineRemainingImages(): converts any leftover https:// to data URIs","4. svgToPng(): resvg renders — sees ONLY flat images, zero patterns","5. pngToPdf(): PDF with physical MediaBox"],"endpoints":{"POST /jobs | GET /jobs?url=":"Submit → { jobId, statusUrl, resultUrl }","GET /jobs/:id":"Poll status","GET /jobs/:id/result":"Download PDF","GET /convert?url=":"Blocking — returns PDF","GET /health":"Stats"}}