@plurnk/plurnk-schemes-http 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.env.defaults CHANGED
@@ -27,10 +27,11 @@ PLURNK_SCHEMES_HTTP_IDLE_TIMEOUT=900000
27
27
  # blocked mobile content). Required read: unset crashes at render, naming the var.
28
28
  PLURNK_SCHEMES_HTTP_MOBILE=1
29
29
  # Per-URL freshness TTL in ms: a re-read of a URL fetched within this window
30
- # serves the stored copy with ZERO round-trips (no conditional GET). 0 = no
31
- # window — every read revalidates via ETag/304 (the always-fresh default).
30
+ # serves the stored copy with ZERO round-trips (no conditional GET). This makes
31
+ # a just-materialized web entry immediately readable like any other entry.
32
+ # 0 opts into revalidation on every read via ETag/304.
32
33
  # Required read: unset crashes, naming the var.
33
- PLURNK_SCHEMES_HTTP_TTL_MS=0
34
+ PLURNK_SCHEMES_HTTP_TTL_MS=300000
34
35
  # Max HTTP redirect hops the SSRF-guarded fetch follows (WebFetcher). Each hop is
35
36
  # re-guarded — a public URL redirecting into private space is refused. 0 follows
36
37
  # none (strictest). Required read: unset crashes, naming the var.
package/SPEC.md CHANGED
@@ -8,9 +8,9 @@
8
8
  static manifest: SchemeManifest = {
9
9
  name: "http",
10
10
  // Seed defaults (pre-fetch placeholders). `body` is retyped per-call via
11
- // notifyChunk's mimetype arg — to the response Content-Type, or text/html
12
- // for a rendered page. `header` is always text/plain.
13
- channels: { body: "application/octet-stream", header: "text/plain" },
11
+ // notifyChunk's mimetype arg. Rendered HTML projects into body while the
12
+ // faithful DOM is archived in html. `header` is always text/plain.
13
+ channels: { body: "application/octet-stream", header: "text/plain", html: "text/html" },
14
14
  defaultChannel: "body",
15
15
  category: "data",
16
16
  scope: "workspace",
@@ -23,7 +23,7 @@ static manifest: SchemeManifest = {
23
23
 
24
24
  `package.json#plurnk`: `{ "kind": "scheme", "name": "http" }`.
25
25
 
26
- **Open question — dual prefix.** plurnk-service's `SchemeRegistry` keys handlers by a single name (`register("http", …)`); there is no alias mechanism today. This package serves both `http://` and `https://`. How the second prefix registers (registry alias, the handler claiming both, or a convention) is a plurnk-service concern — tracked with the consumer, not resolved here.
26
+ `https` routes through the registered `http` handler, but routing is not identity: entries retain the addressed protocol and fold authority into their storage pathname (`https` + `/example.com/page`). Thus two hosts never collide and `http://` never aliases `https://`.
27
27
 
28
28
  ## §2 Op surface {§op-surface}
29
29
 
@@ -37,15 +37,17 @@ Results use the `passthrough` family (read-only / network shape) — http entrie
37
37
 
38
38
  All verbs share one streaming core:
39
39
 
40
- 1. `ctx.subscriptions.open(pathname, handle)` — registers the subscription for cancel routing; returns the worker+teardown-composed `AbortSignal`. The handle's `cancel()` aborts a local `AbortController` wired to the `fetch`/render.
40
+ 1. `ctx.subscriptions.open(pathname, handle, { publishedChannel })` — registers the subscription for cancel routing and selects the one channel published to the requesting loop; returns the worker+teardown-composed `AbortSignal`. The handle's `cancel()` aborts a local `AbortController` wired to the `fetch`/render.
41
41
  2. `fetch(url, { signal })` — GET (READ) or POST (SEND[200], body from `SendBody.raw`); read the response `Content-Type`.
42
42
  3. **Render gate ({§render-lifecycle}):** a GET whose response is HTML routes to the render path; a GET whose response is `text/event-stream` routes to the SSE path ({§sse}); everything else (POST responses, non-HTML bodies) streams raw.
43
- 4. Response status + headers → `notifyChunk("header", …, "text/plain")`.
44
- 5. Body → `notifyChunk("body", chunk, mimetype)` — labelled with its real type (the response Content-Type, or `text/html` rendered). Byte path streams chunks as they arrive; render path writes the serialized DOM in one chunk.
43
+ 4. Response status + headers are persisted in `header`.
44
+ 5. Non-HTML body is persisted in `body` under its response type. Rendered HTML → `projection.readable(finalDom, "text/html")`, then the readable result goes to `body` and the faithful DOM to `html`. A page with no readable projection fails; raw DOM never silently becomes the model-facing body.
45
45
  6. `close("done", …)` on clean end; `close("error", reason)` on failure.
46
46
 
47
47
  Returns `102 Processing` on success (the subscription drives the channel content). The composed signal aborting (loop.cancel) and the local handle (SEND[499]) both tear the fetch/render down.
48
48
 
49
+ Channel publication follows the manifest contract: a fragmentless READ publishes only `defaultChannel` (`body`) and renders under the exact fragmentless URL. An explicit fragment publishes that named channel. All channels still persist, but auxiliary transport metadata and faithful DOM do not become ambient model results merely because they were acquired alongside the readable projection. Unit and core integration coverage pin both publication filtering and durable auxiliary persistence.
50
+
49
51
  ## §4 Status mapping
50
52
 
51
53
  | Outcome | status |
@@ -72,23 +74,32 @@ The **render path** takes one runtime dependency, `playwright`, **lazy-imported*
72
74
 
73
75
  - **Gate:** a GET whose response `Content-Type` is `text/html` / `application/xhtml+xml` renders; the probe-fetch body is discarded and the browser does its own navigation. POST never renders.
74
76
  - **Render:** warm chromium (one per `Browser`), per-worker `BrowserContext` keyed on `ctx.workerId`, **mobile-emulated by default** (Pixel-5-class viewport + UA — responsive sites serve lighter layouts; `PLURNK_SCHEMES_HTTP_MOBILE=0` renders desktop), navigate with `waitUntil: "networkidle"` + a salvage path (timed-out-but-rendered pages with substantive body text), serialize the final DOM via `page.content()`.
75
- - **Body:** the serialized DOM is delivered as one `body` chunk labelled `text/html`; the mimetype layer projects everything (`content`/`symbols`/`deepXml`/embedding) off it. http never cleans or extracts — the body is the faithful, final page (schemes-http#1).
77
+ - **Body:** the consumer's configured mimetype family projects the serialized DOM. Its readable markdown is the decisive `body` used by READ, FIND, embeddings, weights, and the model; the faithful final DOM is archived under `html` for XPath and inspection. Direct READ and search prefetch therefore expose the same kind of model-facing content.
76
78
  - **Host rewrite (bounded, first-party):** {§host-rewrite} a GitHub `…/blob/…` URL is fetched as its `raw.githubusercontent.com` source (line-navigable, exact) — the blob page is a CSP-locked JS SPA and code wants source, not a rendered viewer. This is the ONLY host rewrite; Wikipedia was measured through the extractor and deliberately gets none (desktop already extracts the full clean article; rewrites regressed it — schemes-http#4).
77
79
  - **Config:** `.env.defaults` at the package root is the authoritative list (family-namespaced `PLURNK_SCHEMES_HTTP_*`), shipped in the tarball; the daemon assembles it into the boot floor set-if-unset (service SPEC §operator-config-env-defaults, schemes#31). Required render-path numerics — `FETCH_TIMEOUT`, `SALVAGE_MIN_BODY_CHARS`, `IDLE_TIMEOUT` — fail hard when unset (no in-code defaults). `MOBILE` is floor-defaulted to `1` and a required read (unset crashes). Absence-is-a-mode knobs: `PLAYWRIGHT_WS`, `NO_SANDBOX`, `CHROMIUM_HEAP_MB`.
78
- - **Freshness (READ):** {§revalidation} one predicate (`#storedCopyServable`), two phases. Pre-fetch: a stored copy whose materialization stamp (`x-plurnk-fetched-at`, HEADER channel) is inside `PLURNK_SCHEMES_HTTP_TTL_MS` serves with zero round-trips — identical for model READs and lane-1 prefetch (#405); `0` disables the window. The stamp resets only when the origin vouches (fetch or 304), never on a cache serve. Past the window a repeat READ recovers the prior fetch's validators from its own stored entry (`ETag`→`If-None-Match`, `Last-Modified`→`If-Modified-Since`) and revalidates. A `304` re-serves the stored body and **skips the render** — a first-class READ (the model sees an ordinary streaming result, never a cache status; `revalidated 304` rides the close summary). The TTL is the #333 milestone landed at that same one-predicate boundary (blessed by service#341; delivered per #405). `SEND[410]` drops the stored copy, forcing the next READ to full-fetch.
80
+ - **Freshness (READ):** {§revalidation} one predicate (`#storedCopyServable`), two phases. Pre-fetch: a stored copy whose materialization stamp (`x-plurnk-fetched-at`, HEADER channel) is inside `PLURNK_SCHEMES_HTTP_TTL_MS` serves with zero round-trips — identical for model READs and lane-1 prefetch (#405). The shipped five-minute window makes a just-materialized search result immediately readable as an ordinary entry; `0` explicitly opts into revalidation on every read. The stamp resets only when the origin vouches (fetch or 304), never on a cache serve. Past the window a repeat READ recovers the prior fetch's validators from its own stored entry (`ETag`→`If-None-Match`, `Last-Modified`→`If-Modified-Since`) and revalidates. A `304` re-serves the stored body and **skips the render** — a first-class READ (the model sees an ordinary streaming result, never a cache status; `revalidated 304` rides the close summary). The TTL is the #333 milestone landed at that same one-predicate boundary (blessed by service#341; delivered per #405). `SEND[410]` drops the stored copy, forcing the next READ to full-fetch.
79
81
  - **Cancel:** the composed `AbortSignal` / SEND[499] handle aborts the render by closing the page (in-flight `goto` rejects promptly).
80
82
 
81
83
  - **SSE (READ):** {§sse} a GET whose response is `text/event-stream` is parsed, not streamed raw: events split on a blank line, and each event's `data` field(s) — joined by `\n`, the `data:`/comment framing stripped, `\r\n` normalized — dispatch as one `notifyChunk("body", …, "text/plain")`. The model reads event payloads, not the wire. Comment lines (`:`) and non-`data` fields (`event`/`id`/`retry`) drop day-one; reconnection (`Last-Event-ID`) is a follow-up (#468). A long-lived GET — events land across turns until the origin closes; the close summary counts events.
82
84
 
83
85
  ## §7 Prefetch primitive {§prefetch}
84
86
 
85
- `WebFetcher` is the guarded fetch/render seam core's entry-materialization calls (#454):
87
+ `WebFetcher` is the guarded acquisition seam core's entry-materialization calls (#454):
86
88
 
87
89
  ```ts
88
- new WebFetcher().fetch(url: string, opts?: { signal?: AbortSignal }): Promise<{ body: string; mimetype: string } | null>
90
+ new WebFetcher().fetch(url, opts): Promise<{
91
+ body: string;
92
+ mimetype: string;
93
+ render?: () => Promise<{ body: string; mimetype: string } | null>;
94
+ } | null>
89
95
  ```
90
96
 
91
- - **`{ body, mimetype }`** — the rendered (HTML → playwright/salvage) or raw (textual) body of a live, public, textual URL.
97
+ - **Primary body** — the guarded HTTP response. Core projects HTML through
98
+ the MIME handler first; a useful model-facing projection wins.
99
+ - **Lazy `render()`** — present for HTML. Core invokes guarded
100
+ Playwright/salvage only when the primary MIME projection is empty, then
101
+ projects the rendered DOM through the same handler. Browser mutation must
102
+ not replace already-useful server-rendered content (#596).
92
103
  - **`null`** — dead: SSRF-refused, unreachable, non-2xx, non-textual (binary pruned), or empty. Dead-ness is a **value, not a throw** — the liveness verdict core prunes on.
93
104
  - **SSRF guard** (`Guard`): http(s) only, no localhost, every resolved address public (RFC-reserved v4/v6 ranges blocked), with **manual per-hop redirect re-guarding**; the chromium render is guarded too via request interception. Hops capped by `PLURNK_SCHEMES_HTTP_REDIRECTS`. Residual DNS-rebinding sliver (runtime re-resolves after the check) accepted day-one.
94
105
  - **Textual set**: `text/*`, `application/{json,xml,xhtml+xml}`, `+json`/`+xml` suffixes.
package/dist/Http.d.ts CHANGED
@@ -6,11 +6,13 @@ interface Renderer {
6
6
  signal?: AbortSignal;
7
7
  headers?: ReadonlyArray<readonly [string, string]>;
8
8
  }): Promise<RenderResult>;
9
+ close?(): Promise<void>;
9
10
  }
10
11
  export default class Http implements SchemeHandler {
11
12
  #private;
12
13
  static manifest: SchemeManifest;
13
14
  constructor(browser?: Renderer);
15
+ close(): Promise<void>;
14
16
  read(statement: ReadStatement, ctx: SchemeCtx): Promise<PassthroughResult>;
15
17
  edit(statement: EditStatement, ctx: SchemeCtx): Promise<PassthroughResult>;
16
18
  kill(statement: KillStatement, ctx: SchemeCtx): Promise<PassthroughResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"Http.d.ts","sourceRoot":"","sources":["../src/Http.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EACR,SAAS,EAET,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EAGhB,MAAM,wBAAwB,CAAC;AAGhC,OAAgB,EAA6B,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAkBrF,UAAU,QAAQ;IACd,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACpJ;AAED,MAAM,CAAC,OAAO,OAAO,IAAK,YAAW,aAAa;;IAC9C,MAAM,CAAC,QAAQ,EAAE,cAAc,CAoB7B;IAKF,YAAY,OAAO,GAAE,QAAwB,EAE5C;IAKK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAK/E;IAIK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQ/E;IAIK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAK/E;IAQK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqB/E;CAwRJ"}
1
+ {"version":3,"file":"Http.d.ts","sourceRoot":"","sources":["../src/Http.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACR,SAAS,EAET,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EAGhB,MAAM,wBAAwB,CAAC;AAGhC,OAAgB,EAA6B,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAkBrF,UAAU,QAAQ;IACd,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACjJ,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,OAAO,IAAK,YAAW,aAAa;;IAC9C,MAAM,CAAC,QAAQ,EAAE,cAAc,CAoB7B;IAKF,YAAY,OAAO,GAAE,QAAwB,EAE5C;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAKK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAK/E;IAIK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQ/E;IAIK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAK/E;IAQK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqB/E;CA8SJ"}
package/dist/Http.js CHANGED
@@ -1,7 +1,6 @@
1
1
  // http(s):// scheme handler — the first greenfield `@plurnk/plurnk-schemes-*`
2
- // sibling, authored entirely against the DB-free capability ctx (SchemeCtx).
3
- // It never imports plurnk-service and never touches a raw DB handle (schemes SPEC §forbidden);
4
- // the substrate is reached only through intent, via the injected caps.
2
+ // sibling, authored entirely against the stable SchemeCtx contract. It never
3
+ // imports private service modules or depends on database layout.
5
4
  //
6
5
  // Surface — the HTTP method is the OP (grammar#46): READ→GET, SEND→POST,
7
6
  // EDIT→PUT, KILL→DELETE. Every request streams its response the same way
@@ -20,9 +19,8 @@
20
19
  // The SEND `[code]` is loop disposition (102/200/…), never the HTTP status —
21
20
  // the real 2xx/4xx comes back in the response `header`/`body` channels.
22
21
  //
23
- // Network exception: the schemes SPEC §forbidden table bars connections "unless specifically
24
- // a network scheme." This IS that scheme — `fetch` is the whole point. No
25
- // runtime deps: `fetch` and `AbortController` are Node built-ins.
22
+ // `fetch` is the scheme's purpose. No runtime dependencies: `fetch` and
23
+ // `AbortController` are Node built-ins.
26
24
  var _a;
27
25
  import { Results } from "@plurnk/plurnk-schemes";
28
26
  import { readFile } from "node:fs/promises";
@@ -45,10 +43,10 @@ class Http {
45
43
  name: "http",
46
44
  // Channel mimetypes here are SEED DEFAULTS (pre-fetch placeholders).
47
45
  // body is retyped per-call via notifyChunk's mimetype arg — to the real
48
- // response Content-Type, or text/html for a rendered page; octet-stream
46
+ // response Content-Type, or projected markdown for a rendered page; octet-stream
49
47
  // is the honest "unknown until fetched". header is always the status
50
48
  // line + headers (text/plain).
51
- channels: { [BODY]: "application/octet-stream", [HEADER]: "text/plain" },
49
+ channels: { [BODY]: "application/octet-stream", [HEADER]: "text/plain", html: "text/html" },
52
50
  defaultChannel: BODY,
53
51
  category: "data",
54
52
  scope: "workspace",
@@ -68,6 +66,9 @@ class Http {
68
66
  constructor(browser = new Browser()) {
69
67
  this.#browser = browser;
70
68
  }
69
+ async close() {
70
+ await this.#browser.close?.();
71
+ }
71
72
  // READ → fetch; an HTML page is rendered, everything else streams raw.
72
73
  // Returns 102 Processing; the subscription drives the channel content the
73
74
  // model sees next turn. (ws/wss dispatch to the Ws scheme directly — #473.)
@@ -112,7 +113,7 @@ class Http {
112
113
  return this.#fetchStream(statement.target, ctx, "POST", body);
113
114
  }
114
115
  if (status === 410) {
115
- const { status: delStatus } = await ctx.entries.delete(statement.target.pathname);
116
+ const { status: delStatus } = await ctx.entries.delete(_a.#pathname(statement.target));
116
117
  return { shape: "passthrough", status: delStatus };
117
118
  }
118
119
  if (status === 499) {
@@ -126,15 +127,19 @@ class Http {
126
127
  }
127
128
  // The streaming core, shared by every verb. Opens the subscription
128
129
  // (registering the abort handle for SEND[499] routing), fetches, then EITHER
129
- // renders (a GET of an HTML page is re-acquired through the browser and its
130
- // final DOM becomes the body) OR streams the raw bytes (every non-GET
130
+ // renders (a GET of an HTML page is re-acquired through the browser, its
131
+ // readable projection becomes body, and its final DOM is archived) OR streams the raw bytes (every non-GET
131
132
  // response and every non-HTML body). Request headers from the target's `{…}`
132
133
  // blocks (grammar#46) ride into both the fetch and the render. Each chunk is
133
134
  // labelled with its real mimetype via notifyChunk. Settles via close().
134
135
  async #fetchStream(target, ctx, method, body) {
135
136
  const url = _a.#rewriteHostileHost(_a.#urlFrom(target));
136
- const pathname = target.pathname;
137
+ const pathname = _a.#pathname(target);
137
138
  const headers = target.headers ?? []; // [key,value][] — opaque to grammar, honored here
139
+ const publishedChannel = target.fragment ?? _a.manifest.defaultChannel;
140
+ if (!(publishedChannel in _a.manifest.channels)) {
141
+ return _a.#bad(400, "http", "unknown_channel", `no channel #${publishedChannel}; channels: ${Object.keys(_a.manifest.channels).join(", ")}`);
142
+ }
138
143
  // Conditional revalidation (GET only, service#341): recover the prior
139
144
  // fetch's validators + body from THIS scheme's own stored entry (entries
140
145
  // cap, own namespace — sanctioned). If the origin answers 304, we re-serve
@@ -150,7 +155,12 @@ class Http {
150
155
  const pb = prior.entry?.channels[BODY];
151
156
  if (pb !== undefined && pb.content.length > 0) {
152
157
  const ph = prior.entry?.channels[HEADER]?.content ?? "";
153
- cached = { header: ph, body: { content: pb.content, mimetype: pb.mimetype } };
158
+ const html = prior.entry?.channels.html;
159
+ cached = {
160
+ header: ph,
161
+ body: { content: pb.content, mimetype: pb.mimetype },
162
+ ...(html === undefined || html.content.length === 0 ? {} : { html: { content: html.content, mimetype: html.mimetype } }),
163
+ };
154
164
  conditional.push(..._a.#validators(ph));
155
165
  }
156
166
  }
@@ -161,8 +171,10 @@ class Http {
161
171
  // serving from cache.
162
172
  if (cached !== undefined && _a.#storedCopyServable(_a.#fetchedAt(cached.header), null)) {
163
173
  await ctx.entries.write(pathname, _a.#seedEntry());
164
- await ctx.subscriptions.open(pathname, { cancel: () => { } });
174
+ await ctx.subscriptions.open(pathname, { cancel: () => { } }, { publishedChannel });
165
175
  await ctx.subscriptions.notifyChunk(HEADER, cached.header, "text/plain");
176
+ if (cached.html !== undefined)
177
+ await ctx.subscriptions.notifyChunk("html", cached.html.content, cached.html.mimetype);
166
178
  await ctx.subscriptions.notifyChunk(BODY, cached.body.content, cached.body.mimetype);
167
179
  await ctx.subscriptions.close("done", `ttl-fresh; ${cached.body.content.length} chars from cache`);
168
180
  return { shape: "passthrough", status: 102 };
@@ -178,7 +190,7 @@ class Http {
178
190
  await ctx.entries.write(pathname, _a.#seedEntry());
179
191
  // open() returns the worker+teardown-composed signal — fires on loop.cancel
180
192
  // OR our local teardown. Wire it so either path aborts the fetch/render.
181
- const composed = await ctx.subscriptions.open(pathname, handle);
193
+ const composed = await ctx.subscriptions.open(pathname, handle, { publishedChannel });
182
194
  const onAbort = () => local.abort();
183
195
  composed.addEventListener("abort", onAbort, { once: true });
184
196
  try {
@@ -202,13 +214,15 @@ class Http {
202
214
  // channels, restoring the cached header + body.
203
215
  if (cached !== undefined && _a.#storedCopyServable(_a.#fetchedAt(cached.header), response)) {
204
216
  await ctx.subscriptions.notifyChunk(HEADER, _a.#stamp(cached.header), "text/plain");
217
+ if (cached.html !== undefined)
218
+ await ctx.subscriptions.notifyChunk("html", cached.html.content, cached.html.mimetype);
205
219
  await ctx.subscriptions.notifyChunk(BODY, cached.body.content, cached.body.mimetype);
206
220
  await ctx.subscriptions.close("done", `revalidated 304; ${cached.body.content.length} chars from cache`);
207
221
  return { shape: "passthrough", status: 102 };
208
222
  }
209
223
  const contentType = response.headers.get("content-type") ?? "";
210
224
  // Always-render: a GET of an HTML page is re-acquired through the
211
- // browser so the body is the final rendered DOM. The probe-fetch
225
+ // browser so the body is projected from the final rendered DOM. The probe-fetch
212
226
  // body is discarded — the browser does its own navigation. Only GET
213
227
  // renders; POST/PUT/DELETE can't be replayed as a browser navigation.
214
228
  const isHtml = method === "GET"
@@ -216,9 +230,13 @@ class Http {
216
230
  if (isHtml) {
217
231
  await response.body?.cancel();
218
232
  const result = await this.#browser.render(url, { workerId: ctx.workerId, signal: local.signal, headers });
233
+ const projected = await ctx.projection.readable(result.html, "text/html");
234
+ if (projected === null)
235
+ throw new Error("rendered HTML has no readable projection");
219
236
  await _a.#writeHeader(ctx, result.status, result.statusText, result.headers);
220
- await ctx.subscriptions.notifyChunk(BODY, result.html, "text/html");
221
- await ctx.subscriptions.close("done", `rendered HTTP ${result.status}; ${result.html.length} chars`);
237
+ await ctx.subscriptions.notifyChunk("html", result.html, "text/html");
238
+ await ctx.subscriptions.notifyChunk(BODY, projected.content, projected.mimetype);
239
+ await ctx.subscriptions.close("done", `rendered HTTP ${result.status}; ${projected.content.length} readable chars`);
222
240
  return { shape: "passthrough", status: 102 };
223
241
  }
224
242
  // SSE: an event stream is parsed into its `data` payloads (SPEC §sse),
@@ -323,6 +341,13 @@ class Http {
323
341
  static #urlFrom(target) {
324
342
  return target.raw;
325
343
  }
344
+ // Entry storage has no authority column. The host is part of a web
345
+ // resource's identity, so fold it into the pathname exactly as the search
346
+ // prefetch sink does. Routing (`https` rides the HTTP handler) remains
347
+ // separate from storage (`https` remains https).
348
+ static #pathname(target) {
349
+ return target.hostname ? `/${target.hostname}${target.pathname}` : target.pathname;
350
+ }
326
351
  // Known-hostile-host rewrite — the ONE bounded, first-party exception
327
352
  // (SPEC §host-rewrite, schemes-http#4). A GitHub blob page is a CSP-locked JS SPA that renders
328
353
  // nothing useful, and code wants SOURCE (line-navigable) not markdown pulled
package/dist/Http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Http.js","sourceRoot":"","sources":["../src/Http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Http.js","sourceRoot":"","sources":["../src/Http.ts"],"names":[],"mappings":"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"}
@@ -6,16 +6,24 @@ interface Renderer {
6
6
  headers?: ReadonlyArray<readonly [string, string]>;
7
7
  guard?: (url: string) => Promise<boolean>;
8
8
  }): Promise<RenderResult>;
9
+ close?(): Promise<void>;
10
+ }
11
+ export interface WebFetchResult {
12
+ body: string;
13
+ mimetype: string;
14
+ header?: string;
15
+ render?: () => Promise<{
16
+ body: string;
17
+ mimetype: string;
18
+ } | null>;
9
19
  }
10
20
  export default class WebFetcher {
11
21
  #private;
12
22
  constructor(browser?: Renderer);
23
+ close(): Promise<void>;
13
24
  fetch(url: string, opts?: {
14
25
  signal?: AbortSignal;
15
- }): Promise<{
16
- body: string;
17
- mimetype: string;
18
- } | null>;
26
+ }): Promise<WebFetchResult | null>;
19
27
  }
20
28
  export {};
21
29
  //# sourceMappingURL=WebFetcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebFetcher.d.ts","sourceRoot":"","sources":["../src/WebFetcher.ts"],"names":[],"mappings":"AAMA,OAAgB,EAA6B,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAerF,UAAU,QAAQ;IACd,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC7C,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC7B;AAED,MAAM,CAAC,OAAO,OAAO,UAAU;;IAI3B,YAAY,OAAO,GAAE,QAAwB,EAE5C;IAEK,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAkC5G;CACJ"}
1
+ {"version":3,"file":"WebFetcher.d.ts","sourceRoot":"","sources":["../src/WebFetcher.ts"],"names":[],"mappings":"AAKA,OAAgB,EAA6B,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAerF,UAAU,QAAQ;IACd,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC7C,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IAGjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAIhB,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACrE;AAED,MAAM,CAAC,OAAO,OAAO,UAAU;;IAI3B,YAAY,OAAO,GAAE,QAAwB,EAE5C;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAEK,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAqDxF;CASJ"}
@@ -1,8 +1,7 @@
1
- // The guarded fetch/render prefetch primitive core's entrySink calls (#454).
2
- // ONE seam (SPEC §prefetch): `fetch(url) → { body, mimetype } | null`. Dead-ness is a VALUE,
3
- // never a throw — null covers SSRF-refused, unreachable, non-2xx, non-textual,
4
- // and empty. Everything behind it (plain fetch vs playwright/salvage, redirect
5
- // hops, per-page timeout, the SSRF guard) is ours.
1
+ // The guarded acquisition primitive core's entrySink calls (#454). The byte
2
+ // response is primary; HTML carries a lazy guarded browser fallback for core
3
+ // to invoke only when MIME projection is empty. Dead-ness is a value, never a
4
+ // throw — null covers SSRF-refused, unreachable, non-2xx, non-textual, and empty.
6
5
  import Browser, { BROWSER_UA, requireNumEnv } from "./Browser.js";
7
6
  import Guard from "./Guard.js";
8
7
  // Day-one textual set (owner ruling, #454): text/* plus the +json/+xml family.
@@ -19,12 +18,21 @@ export default class WebFetcher {
19
18
  constructor(browser = new Browser()) {
20
19
  this.#browser = browser;
21
20
  }
21
+ async close() {
22
+ await this.#browser.close?.();
23
+ }
22
24
  async fetch(url, opts) {
23
- const timeout = AbortSignal.timeout(requireNumEnv("PLURNK_SCHEMES_HTTP_FETCH_TIMEOUT"));
24
- const signal = opts?.signal ? AbortSignal.any([opts.signal, timeout]) : timeout;
25
+ // Bound the byte probe independently. Browser.render owns its own
26
+ // navigation timeout and must be allowed to observe Playwright's
27
+ // TimeoutError so Browser.#safeGoto can salvage an already-rendered DOM.
28
+ // Sharing this timeout with render used to close the page at the exact
29
+ // same instant as goto timed out, converting salvageable news pages into
30
+ // "Target closed" and returning null (#596).
31
+ const probeTimeout = AbortSignal.timeout(requireNumEnv("PLURNK_SCHEMES_HTTP_FETCH_TIMEOUT"));
32
+ const probeSignal = opts?.signal ? AbortSignal.any([opts.signal, probeTimeout]) : probeTimeout;
25
33
  let response;
26
34
  try {
27
- response = await Guard.fetch(url, { method: "GET", body: undefined, headers: [["User-Agent", BROWSER_UA]] }, signal);
35
+ response = await Guard.fetch(url, { method: "GET", body: undefined, headers: [["User-Agent", BROWSER_UA]] }, probeSignal);
28
36
  }
29
37
  catch {
30
38
  return null; // SSRF-refused or unreachable — both dead
@@ -34,30 +42,51 @@ export default class WebFetcher {
34
42
  await response.body?.cancel();
35
43
  return null;
36
44
  } // non-2xx dead
37
- // HTML → render (playwright/salvage); the guard re-checks every navigation
38
- // and subresource, so a public page redirecting into private space is
39
- // refused at the browser too, not just the probe fetch.
45
+ const header = WebFetcher.#header(response);
46
+ // Preserve server-rendered HTML as the primary acquisition. The MIME
47
+ // layer decides whether its model-facing projection is useful; only an
48
+ // empty projection invokes the lazy browser fallback. Unconditionally
49
+ // rendering valid SSR pages is slower and can mutate the DOM until
50
+ // Readability selects unrelated feed/chrome content (#596).
40
51
  if (isHtml(mimetype)) {
41
- await response.body?.cancel();
42
- try {
43
- const rendered = await this.#browser.render(url, {
44
- workerId: 0,
45
- signal,
46
- headers: [["User-Agent", BROWSER_UA]],
47
- guard: Guard.isPublicUrl,
48
- });
49
- return rendered.html.length > 0 ? { body: rendered.html, mimetype: "text/html" } : null;
50
- }
51
- catch {
52
- return null; // render failure (nav error, timeout, guard-aborted) is dead
53
- }
52
+ const body = await response.text();
53
+ if (body.length === 0)
54
+ return null;
55
+ return {
56
+ body,
57
+ mimetype,
58
+ header,
59
+ render: async () => {
60
+ try {
61
+ const rendered = await this.#browser.render(url, {
62
+ workerId: 0,
63
+ // Caller cancellation still spans the whole operation.
64
+ // The renderer supplies its own per-navigation deadline.
65
+ signal: opts?.signal,
66
+ headers: [["User-Agent", BROWSER_UA]],
67
+ guard: Guard.isPublicUrl,
68
+ });
69
+ return rendered.html.length > 0 ? { body: rendered.html, mimetype: "text/html" } : null;
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ },
75
+ };
54
76
  }
55
77
  if (!isTextual(mimetype)) {
56
78
  await response.body?.cancel();
57
79
  return null;
58
80
  } // binary pruned
59
81
  const body = await response.text();
60
- return body.length > 0 ? { body, mimetype } : null; // empty is dead
82
+ return body.length > 0 ? { body, mimetype, header } : null; // empty is dead
83
+ }
84
+ static #header(response) {
85
+ return [
86
+ `HTTP ${response.status} ${response.statusText}`,
87
+ ...[...response.headers].map(([key, value]) => `${key}: ${value}`),
88
+ `x-plurnk-fetched-at: ${new Date().toISOString()}`,
89
+ ].join("\n");
61
90
  }
62
91
  }
63
92
  //# sourceMappingURL=WebFetcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebFetcher.js","sourceRoot":"","sources":["../src/WebFetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebFetcher.js","sourceRoot":"","sources":["../src/WebFetcher.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,5 +4,6 @@ export { default as Ws } from "./Ws.ts";
4
4
  export { default as Browser } from "./Browser.ts";
5
5
  export type { ChromiumEngine, ChromiumFactory, RenderResult } from "./Browser.ts";
6
6
  export { default as WebFetcher } from "./WebFetcher.ts";
7
+ export type { WebFetchResult } from "./WebFetcher.ts";
7
8
  export { default as Guard, GuardBlockedError } from "./Guard.ts";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAK5C,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAIxC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIlF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAK5C,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAIxC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGlF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -10,8 +10,7 @@ export { default as Ws } from "./Ws.js";
10
10
  // Standalone render foundation — exported so a future plurnk browser-
11
11
  // troubleshooting MCP package can sit on the same warm-Chromium pool.
12
12
  export { default as Browser } from "./Browser.js";
13
- // The guarded fetch/render prefetch seam core's entrySink calls (#454):
14
- // `new WebFetcher().fetch(url) → { body, mimetype } | null`.
13
+ // The guarded prefetch acquisition seam core's entrySink calls (#454).
15
14
  export { default as WebFetcher } from "./WebFetcher.js";
16
15
  export { default as Guard, GuardBlockedError } from "./Guard.js";
17
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,0EAA0E;AAC1E,kFAAkF;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAE5C,+EAA+E;AAC/E,gFAAgF;AAChF,iEAAiE;AACjE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAExC,sEAAsE;AACtE,sEAAsE;AACtE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAGlD,wEAAwE;AACxE,6DAA6D;AAC7D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,0EAA0E;AAC1E,kFAAkF;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAE5C,+EAA+E;AAC/E,gFAAgF;AAChF,iEAAiE;AACjE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAExC,sEAAsE;AACtE,sEAAsE;AACtE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAGlD,uEAAuE;AACvE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
package/docs/http.md CHANGED
@@ -2,8 +2,10 @@
2
2
 
3
3
  Fetch a URL. HTML is rendered (headless browser, post-JS) and returned as
4
4
  **markdown by default** (main content; nav/ads/chrome stripped). Non-HTML
5
- returns raw bytes under its `Content-Type`. Every request streams its response:
6
- status `102` now, the body/header channels fill, you READ the entry next turn.
5
+ returns its readable content under the response `Content-Type`. Every request
6
+ streams its response: status `102` now, then an ordinary fragmentless READ
7
+ returns the sanitized body. Auxiliary transport/archive channels are never
8
+ presented by default.
7
9
 
8
10
  Re-reading a URL **revalidates** it: the prior fetch's validators (`ETag`/
9
11
  `Last-Modified`) go out on the next READ, and if the page is unchanged the
@@ -19,9 +21,10 @@ The HTTP method is the **op**:
19
21
  - `EDIT(http(s)://…):body:` — PUT the body (replaces the whole resource; no `<L>`).
20
22
  - `KILL(http(s)://…)` — DELETE the resource.
21
23
 
22
- Channels:
24
+ The ordinary URL is the model-facing markdown for HTML, or readable response
25
+ content for other textual types. Diagnostic channels require explicit access:
23
26
 
24
- - `#body` — response body (rendered HTML as `text/html`, else raw under its `Content-Type`)
27
+ - `#html` — faithful rendered DOM for HTML (`text/html`)
25
28
  - `#header` — response status line + headers (`text/plain`)
26
29
 
27
30
  Request headers ride **inside the target** as trailing `{Key: value}` blocks —
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plurnk/plurnk-schemes-http",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "http(s):// URI scheme handler for the plurnk agent runtime — fetch + streaming response body.",
5
5
  "keywords": [
6
6
  "plurnk",
@@ -64,10 +64,10 @@
64
64
  "prepublishOnly": "npm outdated && npm audit --audit-level=moderate && npm test",
65
65
  "prepack": "npm run build"
66
66
  },
67
- "dependencies": {
68
- "playwright": "1.61.1"
69
- },
70
67
  "peerDependencies": {
71
- "@plurnk/plurnk-schemes": "1.2.0"
68
+ "@plurnk/plurnk-schemes": "~1.3.0"
69
+ },
70
+ "dependencies": {
71
+ "playwright": "1.62.0"
72
72
  }
73
73
  }