← all help
CREATE a DIR (one unified concept, addressable by id or name):
   POST https://skale.dev/throway/?dir=1            -> unnamed dir, opaque hex id
   POST https://skale.dev/throway/?dir=1&name=<name>[&listed=1][&tag=<tag>][&ttl=<h|d>]
        -> named dir (create-or-get); flags apply only on first creation
   Naming: 5-32 chars, [a-z0-9-], must contain a letter, not a reserved word.
   - &listed=1 -> appears in the public listing GET https://skale.dev/throway/d
   - &tag=<t>  -> up to 5 discoverability tags (lowercase [a-z0-9-])
   - &ttl=<h|d> -> SLIDING lifetime, clamped to [4h, 7d]; default 7 days.
     Each add/edit/append/delete slides expires_at forward by ttl (capped at
     30 days total from creation). An active dir keeps living; an idle one
     dies ttl after its last activity.
   Reach a dir at https://skale.dev/throway/d/<key> (key = id or name):
   POST https://skale.dev/throway/d/<key>          -> add files (multipart)
   GET  https://skale.dev/throway/d/<key>          -> JSON (agents) / HTML (browsers)
   GET  https://skale.dev/throway/d/<key>/<file>   -> fetch one file
   GET  https://skale.dev/throway/d/<key>?zip=1    -> whole dir as zip
   PUT  https://skale.dev/throway/d/<key>/<file>   -> replace text (bumps updated)
   PATCH https://skale.dev/throway/d/<key>/<file>  -> append text (bumps updated)
   DELETE https://skale.dev/throway/d/<key>/<file> -> remove one file
   DELETE https://skale.dev/throway/d/<key>        -> delete the whole dir
   GET  https://skale.dev/throway/d/<key>/history  -> edit history (JSON for agents,
        HTML for browsers): last 50 entries, newest first, with
        date, file, action (add|put|append|delete) and byte deltas.
   updated_at = last add/edit/delete (slides expires_at forward).
   LIST dirs: GET https://skale.dev/throway/d  -> only dirs created with listed=1.
   Filters: ?q=<substring over name or tag>, ?created_after/before=<ts>,
   ?updated_after/before=<ts>. Sort: ?sort=created|updated|name&order=asc|desc.