Files
captoys/webapp
dckc 22ae9a2b61 build: tsconfig noEmit for diigo-cache and webapp
wrangler bundles; tsc only checks. Without noEmit a bare `tsc` wrote
compiled .js beside the sources (a stray webapp/src/index.js).

Generated-by: Claude Opus 5.5
2026-10-07 04:19:54 -05:00
..

webapp

DO-backed fluent web client factory: site-agnostic. Deploy once; instances are attenuated handles whose ids are bearer capabilities — anyone holding the id string can drive the instance; nobody without it can. TODO: this proxy-page flow (see diigo-cache README) vs running webapp as the primary worker (wrangler dev -c ../webapp/wrangler.jsonc -c ../diigo-cache/wrangler.jsonc) so its own port serves the mint form directly; reconsider when the UI grows past a form or two.

HTTP surface

  • GET / — the mint form. Prefill via query string: ?url=…&headers=<urlencoded JSON>&msPerCall=…&title=…; secret header keys (cookie, authorization, proxy-authorization) render blank — paste them at mint time; never echoed back. A dedicated cookie field is sugar for the cookie header (if the JSON also has one, they must agree).
  • GET /form?render=1&… — the same form for a proxying worker (diigo-cache's /_connect): the action is left as an ACTION placeholder for the proxy to point at its own relay.
  • POST / — mint. Form-encoded (that page) or JSON {url, headers, msPerCall} (service-style). Responds {id} (and x-webapp-id). The id is not logged: possession is authority.
  • POST /at/<id> — drive an instance by capability: JSON {path?, query?, method?, body?} → the fluent chain → {status, text} (or {error}; messages carry no header/param values).

RPC surface (same-account workers; binding entrypoint: "WebAppFactory")

  • fetch(request) — the HTTP surface above, over the binding
  • newWebApp({url, headers?, msPerCall?}) → {id, app} — the fluent stub; promise pipelining makes a whole pathjoin().query().get() chain a single round trip
  • at(id) — the fluent stub for a previously-minted instance

Run

npx wrangler dev   # → its own ready line (usually :8787 with the
                   # two-config diigo-cache run; standalone, :8788)

Status: mint + drive exercised end-to-end in the combined dev run (through diigo-cache's create flow, 2026-10-07); not yet deployed. See ../capsite-checklist.md — the single source for run/connect/deploy instructions.