argus/src/gateway
Local Dev ef0e7e430c feat(argus): POST /api/icon-upload route for Deviant Potidaea Katalogos icons
Content-addressed image upload for the DVMB icon sidecar (see the
Deviant repo commit 'in-browser Sia upload' for the client side).

Request
  POST /api/icon-upload
  Content-Type: image/(svg+xml|png|jpeg|gif|webp|x-icon)
  body:       raw image bytes (≤ 128 KB)

Response
  { sha256, ext, path: "s3://bns/potidaea/icons/<sha256>.<ext>",
    url:  "https://navigate.st/bns/potidaea.asm/icons/<sha256>.<ext>",
    bytes }

Why no auth
  Content-addressed: the key IS the SHA-256, so a re-upload of the same
  bytes overwrites itself harmlessly, and a spammer only pollutes their
  own hash-space. The on-chain iconSha256 field (DVMB chunk 5) ties an
  entry NFT to specific bytes — a rogue upload can't hijack another
  asset's icon.

Guards
  • content-type whitelist (only real image formats)
  • 128 KB body cap enforced during read (early destroy on overflow)
  • CORS * — safe, since we never touch per-user state
  • OPTIONS preflight handled for browsers that trigger one

Deployed to silentmode 2026-09-06; live at
  https://navigate.st/api/icon-upload
Smoke: browser JS POST returned 200 with the expected content-
addressed URL; a later GET of that URL returned matching bytes.
2026-09-07 02:29:02 +02:00
..
public-gateway.mjs feat(argus): POST /api/icon-upload route for Deviant Potidaea Katalogos icons 2026-09-07 02:29:02 +02:00