prometheus/service
Local Dev 09bb42f7a6 prometheus: push scan-clean uploads to Sia, auto-fill the download URL
Publishers no longer need to self-host. When the service is configured
with PROMETHEUS_S3_* credentials pointing at the hosted s3d
(s3.silentmode.st), every clean upload is pushed to
s3://${bucket}/${prefix}<sha256>.bin and the public URL comes back on
/api/upload as `hosted_url`. Step 2 of the submit form pre-fills the
Download URL input with that URL — publishers can overwrite if they
prefer their own hosting; by default they ship nothing.

- service/s3.js: SigV4 S3 client vendored from Pithos/core/s3.js so bug
  fixes port by file-copy. Path-style, UNSIGNED-PAYLOAD streaming PUT,
  Content-Length required (s3d chunked encoding does not round-trip
  cleanly for large bodies).
- service/storage.js: thin wrapper exposing isConfigured() and
  uploadScannedFile(). Idempotent on sha256 — same bytes → same key.
  Failure is non-fatal; the publisher can still paste their own URL.
- service/uploads.js: after rename-to-final, push to Sia if configured.
  Added `hosted_url` to the response (null when storage off).
- service/pages.js: step 2 pre-fills download_url when hosted_url is
  present; hint text explains the override path.
- docker-compose.yml: PROMETHEUS_S3_* env plumbed through, with sane
  defaults for bucket/prefix (bns + prometheus-storage/).
2026-10-23 21:33:14 +03:00
..
lib prometheus: signed listings — BIP-137 publisher sign, SQLite index 2026-10-08 01:48:12 +02:00
admin-pages.js prometheus: BCH payments — invoices, price oracle, admin reconcile 2026-10-08 21:52:01 +02:00
admin-session.js prometheus: admin panel — login, listings, 3-mode toggle, audit log 2026-10-08 21:35:48 +02:00
admin.js prometheus: BCH payments — invoices, price oracle, admin reconcile 2026-10-08 21:52:01 +02:00
audit.js prometheus: admin panel — login, listings, 3-mode toggle, audit log 2026-10-08 21:35:48 +02:00
bns.js prometheus: signed listings — BIP-137 publisher sign, SQLite index 2026-10-08 01:48:12 +02:00
clamd.js prometheus: VirusTotal enrichment, gated on VIRUSTOTAL_API_KEY 2026-10-08 21:44:34 +02:00
db.js prometheus: BCH payments — invoices, price oracle, admin reconcile 2026-10-08 21:52:01 +02:00
invoice-api.js prometheus: BCH payments — invoices, price oracle, admin reconcile 2026-10-08 21:52:01 +02:00
layout.js prometheus: standalone identity + first-wave Silent Mode listings 2026-10-09 01:23:21 +02:00
listings.js prometheus: allow BCH-address-only publishers (no BNS name needed) 2026-10-23 02:02:07 +03:00
modes.js prometheus: admin panel — login, listings, 3-mode toggle, audit log 2026-10-08 21:35:48 +02:00
pages-browse.js prometheus: allow BCH-address-only publishers (no BNS name needed) 2026-10-23 02:02:07 +03:00
pages.js prometheus: push scan-clean uploads to Sia, auto-fill the download URL 2026-10-23 21:33:14 +03:00
payments.js prometheus: size-tiered pricing, 2 GiB cap, new hero copy, SEO LD 2026-10-22 23:31:43 +03:00
price.js prometheus: BCH payments — invoices, price oracle, admin reconcile 2026-10-08 21:52:01 +02:00
s3.js prometheus: push scan-clean uploads to Sia, auto-fill the download URL 2026-10-23 21:33:14 +03:00
seo.js prometheus: weekly s3 snapshot of the browse surface to bns/prometheus 2026-10-08 21:42:54 +02:00
server.js prometheus: taxonomy — Apps / Games / FinTech, with sub-chips inside Apps 2026-10-22 22:39:08 +03:00
signing.js prometheus: upload + ClamAV scan + signed scan reports 2026-10-05 22:41:55 +02:00
storage.js prometheus: push scan-clean uploads to Sia, auto-fill the download URL 2026-10-23 21:33:14 +03:00
uploads.js prometheus: push scan-clean uploads to Sia, auto-fill the download URL 2026-10-23 21:33:14 +03:00
virustotal.js prometheus: VirusTotal enrichment, gated on VIRUSTOTAL_API_KEY 2026-10-08 21:44:34 +02:00