partial-content 1.0.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.
Files changed (81) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/LICENSE +21 -0
  3. package/README.md +601 -0
  4. package/SECURITY.md +92 -0
  5. package/dist/azure.d.ts +79 -0
  6. package/dist/azure.d.ts.map +1 -0
  7. package/dist/azure.js +251 -0
  8. package/dist/azure.js.map +1 -0
  9. package/dist/content-disposition.d.ts +74 -0
  10. package/dist/content-disposition.d.ts.map +1 -0
  11. package/dist/content-disposition.js +253 -0
  12. package/dist/content-disposition.js.map +1 -0
  13. package/dist/fs.d.ts +86 -0
  14. package/dist/fs.d.ts.map +1 -0
  15. package/dist/fs.js +375 -0
  16. package/dist/fs.js.map +1 -0
  17. package/dist/gcs.d.ts +72 -0
  18. package/dist/gcs.d.ts.map +1 -0
  19. package/dist/gcs.js +202 -0
  20. package/dist/gcs.js.map +1 -0
  21. package/dist/hono.d.ts +92 -0
  22. package/dist/hono.d.ts.map +1 -0
  23. package/dist/hono.js +61 -0
  24. package/dist/hono.js.map +1 -0
  25. package/dist/http.d.ts +70 -0
  26. package/dist/http.d.ts.map +1 -0
  27. package/dist/http.js +281 -0
  28. package/dist/http.js.map +1 -0
  29. package/dist/index.d.ts +21 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +27 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/kernel.d.ts +541 -0
  34. package/dist/kernel.d.ts.map +1 -0
  35. package/dist/kernel.js +1218 -0
  36. package/dist/kernel.js.map +1 -0
  37. package/dist/memory.d.ts +55 -0
  38. package/dist/memory.d.ts.map +1 -0
  39. package/dist/memory.js +107 -0
  40. package/dist/memory.js.map +1 -0
  41. package/dist/mime.d.ts +49 -0
  42. package/dist/mime.d.ts.map +1 -0
  43. package/dist/mime.js +150 -0
  44. package/dist/mime.js.map +1 -0
  45. package/dist/node.d.ts +84 -0
  46. package/dist/node.d.ts.map +1 -0
  47. package/dist/node.js +215 -0
  48. package/dist/node.js.map +1 -0
  49. package/dist/object-store.d.ts +472 -0
  50. package/dist/object-store.d.ts.map +1 -0
  51. package/dist/object-store.js +335 -0
  52. package/dist/object-store.js.map +1 -0
  53. package/dist/r2.d.ts +94 -0
  54. package/dist/r2.d.ts.map +1 -0
  55. package/dist/r2.js +150 -0
  56. package/dist/r2.js.map +1 -0
  57. package/dist/s3.d.ts +49 -0
  58. package/dist/s3.d.ts.map +1 -0
  59. package/dist/s3.js +263 -0
  60. package/dist/s3.js.map +1 -0
  61. package/dist/web.d.ts +336 -0
  62. package/dist/web.d.ts.map +1 -0
  63. package/dist/web.js +1094 -0
  64. package/dist/web.js.map +1 -0
  65. package/docs/DESIGN.md +426 -0
  66. package/package.json +182 -0
  67. package/src/azure.ts +329 -0
  68. package/src/content-disposition.ts +300 -0
  69. package/src/fs.ts +469 -0
  70. package/src/gcs.ts +290 -0
  71. package/src/hono.ts +123 -0
  72. package/src/http.ts +351 -0
  73. package/src/index.ts +85 -0
  74. package/src/kernel.ts +1498 -0
  75. package/src/memory.ts +148 -0
  76. package/src/mime.ts +160 -0
  77. package/src/node.ts +261 -0
  78. package/src/object-store.ts +665 -0
  79. package/src/r2.ts +232 -0
  80. package/src/s3.ts +324 -0
  81. package/src/web.ts +1603 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"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"}
package/docs/DESIGN.md ADDED
@@ -0,0 +1,426 @@
1
+ # Design Notes
2
+
3
+ Implementation details, RFC deviations, and architecture decisions for `partial-content`.
4
+
5
+ ## Scope
6
+
7
+ `partial-content` is the **protocol layer only**. It decides *what* status and headers a file request deserves; it never touches the bytes, the network, or your storage SDK.
8
+
9
+ **In scope**
10
+
11
+ - Range parsing and validation (single and multiple ranges)
12
+ - `multipart/byteranges` assembly with range coalescing + amplification defense
13
+ - The full conditional-request chain (412 → 304 → If-Range → 206/200)
14
+ - Write-side preconditions (If-Match / If-None-Match / If-Unmodified-Since)
15
+ - ETag derivation from storage metadata
16
+ - Security-hardened `Content-Disposition`
17
+
18
+ **Non-goals** (deliberately the caller's responsibility)
19
+
20
+ - **I/O.** No reads, writes, streaming, or network calls. You bring the bytes.
21
+ - **Authentication / authorization.** The library assumes the request was already deemed allowed. Gate access *before* calling it.
22
+ - **Caching policy.** It never emits `Cache-Control` on its own -- it only echoes a value you pass in `meta.cacheControl` (orchestrator) or `opts.cacheControl` (standalone builder). `Vary`, `Expires`, and `Date` are left to your runtime (see the [Response Header Matrix](#response-header-matrix)).
23
+ - **Precompressed variant negotiation (`.br` / `.gz` + `Content-Encoding`).**
24
+ That is static-asset serving (sirv, CDN edge config), not object serving.
25
+ Ranges apply to the *encoded* representation and each encoding needs its own
26
+ ETag -- a correctness minefield with no payoff for documents and media,
27
+ which are already compressed formats. Serve pre-compressed web assets from
28
+ a CDN; serve documents through this library.
29
+ - **Storage implementation.** `ObjectStore` is an interface; adapters are yours (or a thin wrapper over an SDK). Built-in adapters cover S3-compatible, R2, GCS, Azure, the local filesystem, any range-capable HTTP origin, and memory.
30
+
31
+ ### When you need a protocol layer (and when you don't)
32
+
33
+ You need this when you **proxy bytes through your own origin** — because each request must be authorized or audited, or because the browser talks to your origin rather than to storage (`<video>`/`<audio>` `Range` requests, PDF.js progressive loading, iframe CORS).
34
+
35
+ If you can instead hand the client a **short-lived signed URL** and let object storage or a CDN serve the bytes directly, the backend already speaks this protocol for you — and you may not need this library at all. Reach for `partial-content` precisely when that redirect *isn't* an option.
36
+
37
+ ## Evaluation Order
38
+
39
+ The [RFC 9110 Section 13.2.2](https://www.rfc-editor.org/rfc/rfc9110#section-13.2.2) evaluation chain:
40
+
41
+ ```
42
+ 1. isPreconditionFailure() -> 412 Precondition Failed
43
+ 2. isConditionalFresh() -> 304 Not Modified
44
+ 3. isRangeFresh() -> Should we honor the Range?
45
+ 4. parseRangeHeader() -> Parse and validate the Range
46
+ 5. buildRangeResponseHeaders() or build416Headers()
47
+ ```
48
+
49
+ `evaluateConditionalRequest()` implements this entire chain in a single call.
50
+
51
+ ## Design Decisions
52
+
53
+ **Multi-range is served as `multipart/byteranges`, with amplification defense.**
54
+ A `Range` with several parts (`bytes=0-100,200-300`) is served as a
55
+ `multipart/byteranges` 206. The single-range case keeps its own fast path
56
+ (`parseRangeHeader` + the single-round-trip Path B); multi-range takes a
57
+ separate path that never touches the hot single-seek code. Two things make this
58
+ safe rather than a DoS vector, informed by Go `net/http.ServeContent` and nginx:
59
+
60
+ - **Coalescing.** Overlapping and adjacent (touching) ranges are merged before
61
+ serving, so a client cannot force redundant bytes by requesting the same
62
+ region many times.
63
+ - **Amplification cap.** If the coalesced set still exceeds `maxRanges` distinct
64
+ parts (default 50), or already covers the whole representation, the ranges are
65
+ ignored and the full 200 is served, framing over the entire file is pure
66
+ overhead and the classic amplification vector.
67
+
68
+ The `Content-Length` is computed exactly from the framing and range spans (never
69
+ chunked). The first part is fetched eagerly so a pinned-read `ObjectChangedError`
70
+ surfaces before headers commit (same one-shot re-validation single-range gets);
71
+ the rest stream lazily, each pinned to the same representation. This relies on
72
+ each store serving exactly the requested (size-clamped) span per range, which
73
+ every bundled adapter does.
74
+
75
+ **Weak ETag matching for `If-None-Match`.** `If-None-Match` uses weak comparison
76
+ per RFC 9110 Section 8.8.3.2 Table 3 (the correct algorithm for this header).
77
+ We strip the `W/` prefix from both sides before comparing.
78
+
79
+ **Strong comparison for `If-Match`.** `If-Match` requires strong comparison per
80
+ RFC 9110 Section 8.8.3.2 Table 3. We enforce this strictly: if the server's ETag
81
+ is weak-prefixed (`W/`), the precondition always fails (412). This means
82
+ `evaluateConditionalWrite` cannot confirm a match for resources with only
83
+ weak validators (size+mtime), which is correct -- you cannot guarantee
84
+ byte equality with a weak validator, so OCC via `If-Match` requires a
85
+ content-hash ETag.
86
+
87
+ **If-Range requires strong validators.** RFC 7233 Section 3.2 requires If-Range\r
88
+ to use strong comparison (same as `If-Match`). If-Range with a weak validator is\r
89
+ actively dangerous: it could splice partial bytes from one representation onto a\r
90
+ cached body from another. When either the client's `If-Range` or the server's\r
91
+ ETag is weak-prefixed, we ignore the range and serve a full 200.
92
+
93
+ **If-Range date comparison is exact match.** RFC 9110 Section 13.1.5 requires
94
+ exact match for If-Range HTTP-date comparison (unlike If-Unmodified-Since which
95
+ uses `<=`), and Go stdlib enforces the same equality. The failure modes are
96
+ asymmetric: a strict mismatch costs at worst one full 200 re-download, while a
97
+ lenient `<=` would honor the range precisely when the dates differ -- the one
98
+ case where byte identity cannot be guaranteed -- splicing mismatched bytes onto
99
+ the client's cached body. Both sides are floored to whole seconds first, and a
100
+ well-behaved client echoes our emitted IMF-fixdate verbatim, so exact match
101
+ never misfires for correct revalidation.
102
+
103
+ **Case-insensitive range units.** Per RFC 9110 Section 14.1, range units are
104
+ compared case-insensitively. `Bytes=0-499` and `BYTES=0-499` are both valid.
105
+
106
+ ## Parsing Details
107
+
108
+ **Quote-aware ETag parsing.** Commas inside quoted ETag values are valid per
109
+ RFC 7232 Section 2.3. Our parser correctly handles `"ver,1", "ver,2"` as
110
+ two ETags, not four fragments. The parser is a single-pass state machine that
111
+ tracks quote boundaries rather than splitting on commas.
112
+
113
+ **Obsolete date format acceptance.** Per RFC 9110 Section 5.6.7, we accept all
114
+ three HTTP-date formats in conditional request headers: IMF-fixdate
115
+ (`Sun, 06 Nov 1994 08:49:37 GMT`), obsolete RFC 850 format
116
+ (`Sunday, 06-Nov-94 08:49:37 GMT`), and ANSI C asctime format
117
+ (`Sun Nov 6 08:49:37 1994`, interpreted as UTC per the RFC; naive
118
+ `Date.parse` would read it as server-local time). These three are also the
119
+ ONLY formats honored in client conditional headers: Sections 13.1.3/13.1.4
120
+ require ignoring `If-Modified-Since`/`If-Unmodified-Since` values that are
121
+ not valid HTTP-dates, so ISO 8601 and other `Date.parse`-able strings are
122
+ rejected on the wire. Backend metadata (`lastModified` from an adapter) stays
123
+ lenient -- that is our own input -- and output is always normalized to
124
+ IMF-fixdate.
125
+
126
+ **Sub-second timestamp handling.** Storage backends (S3, R2, Postgres) return
127
+ timestamps with millisecond precision (e.g., `2025-06-28T12:00:00.500Z`). HTTP
128
+ dates are floored to whole seconds in `Last-Modified`. All conditional request
129
+ comparisons (`If-Modified-Since`, `If-Unmodified-Since`, `If-Range`) also floor
130
+ both sides to prevent permanent false-stale results from sub-second skew.
131
+
132
+ The flooring has a FALSE-FRESH twin that date validators cannot escape: two
133
+ same-length writes within one second are indistinguishable to a
134
+ second-resolution validator, so a revalidating client can receive 304 for
135
+ changed bytes. The fs store closes this window by deriving its weak ETag
136
+ from the NANOSECOND mtime (`stat({ bigint: true })`); filesystems with
137
+ coarse timestamps (FAT: 2 s) retain a residual window, and content-hash
138
+ ETags (S3 digests) never had one. With the fs hot-object cache enabled, a
139
+ cached validator can additionally lag an overwrite by up to `ttlMs`, so the
140
+ stale-304 exposure with the cache on is bounded by `ttlMs`, not by
141
+ timestamp resolution -- size the TTL against acceptable staleness for
142
+ mutable keys, or reserve the cache for immutable/content-addressed ones.
143
+
144
+ **Orchestrator date pre-computation.** `evaluateConditionalRequest` pre-computes
145
+ the `toHttpDate()` result once and passes the normalized IMF-fixdate string to all
146
+ downstream calls (`isPreconditionFailure`, `isConditionalFresh`, `isRangeFresh`,
147
+ and the final header builder). Without this, the orchestrator would call
148
+ `Date.parse` + `toUTCString` up to 4 times on the same string.
149
+
150
+ **Zero-length file handling.** When `totalSize` is 0, `parseRangeHeader` returns
151
+ `null` (treat as non-range request, serve 200 with empty body). This includes
152
+ `bytes=0-0` on a zero-length file. Strictly, RFC 9110 Section 14.1.2 would have
153
+ this be unsatisfiable (416), but an empty 200 is the pragmatic response since
154
+ there are zero bytes to serve either way.
155
+
156
+ **Request `Cache-Control` is ignored during conditional evaluation.** Matching
157
+ Go stdlib and nginx: request cache directives (RFC 9111 Section 5.2.1) address
158
+ caches, not origin conditional evaluation, and a 304 IS the end-to-end
159
+ revalidation the client asked for. This matters in practice: spec-compliant
160
+ fetch clients (undici, browsers) automatically append `Cache-Control: no-cache`
161
+ to any request that carries manually-set conditional headers, so honoring the
162
+ directive would make 304 unreachable for every programmatic revalidation
163
+ (verified live against Node/undici). Hard reloads need no special case -- they
164
+ omit the validators entirely, which already evaluates as "not conditional."
165
+ Some legacy middleware treats request `no-cache` as "force 200"; that behavior
166
+ silently disables revalidation for exactly the clients that follow the fetch
167
+ spec, so we do not reproduce it.
168
+
169
+ **HEAD masks `Range` and `If-Range`.** RFC 9110 Section 14.2 defines range
170
+ handling for GET only, so a HEAD never yields 206 or 416; conditionals
171
+ (304/412) still apply to HEAD exactly as to GET per Section 13.1.
172
+
173
+ **Oversized range values are capped, not rejected.** Range positions beyond
174
+ `Number.MAX_SAFE_INTEGER` (attackers probing 64-bit parsers) are clamped to
175
+ the representation bounds instead of erroring; the response is still a
176
+ correct 206/200 for the actual object.
177
+
178
+ **Suffix ranges larger than the file serve the full body as 206.** RFC 9110
179
+ Section 14.1.2 resolves `bytes=-N` where N >= size to the entire
180
+ representation; we emit it as a 206 with full bounds rather than degrading
181
+ to 200, matching Go stdlib.
182
+
183
+ **A `Range` on a zero-length representation serves 200, not 416.** A strict
184
+ reading of RFC 9110 Section 14.1.2 could call any range on a 0-byte object
185
+ unsatisfiable (416), but Go `net/http.ServeContent` and nginx both serve the
186
+ empty 200, and returning 416 for `bytes=0-` on an empty file breaks real
187
+ clients. We match the battle-tested behavior: the range parser treats a
188
+ zero-size representation as "not a range request" and serves the empty 200.
189
+
190
+ **`Want-Repr-Digest` negotiation is parsed for `sha-256`, not as a full
191
+ Structured Fields document.** RFC 9530 digest negotiation is read with a
192
+ purpose-built parser that finds `sha-256` and its preference weight (and
193
+ ignores any parameters); it is not a general RFC 8941 parser, because the only
194
+ algorithm we emit is `sha-256`. Any other `Want-*` member is ignored, which is
195
+ the correct outcome (we cannot honor an algorithm we do not produce).
196
+
197
+ **Unknown totals in backend `Content-Range` are passed through as `*`.**
198
+ When an origin answers `bytes a-b/*` (RFC 7233 Section 4.2 -- a streaming
199
+ origin that does not know its full length), the adapter leaves
200
+ `ObjectStream.totalSize` `undefined` and the served 206 repeats `bytes a-b/*`
201
+ honestly. Nothing is fabricated: the 206's `Content-Length` is the range span
202
+ (known), and the served-range guard trusts the authoritative backend's ordered
203
+ bounds since there is no EOF to check against. Object stores (S3, R2, GCS,
204
+ Azure) always report a concrete total, so this only ever engages for the `http`
205
+ adapter in front of a proxied streaming origin.
206
+
207
+ ## Response Header Matrix
208
+
209
+ This library generates the following response headers:
210
+
211
+ | Header | 200 | 206 | 304 | 412 | 416 |
212
+ |--------|-----|-----|-----|-----|-----|
213
+ | `Accept-Ranges` | yes | yes | - | - | yes |
214
+ | `Content-Length` | yes | yes | - | yes¹ | yes¹ |
215
+ | `Content-Range` | - | yes | - | - | yes |
216
+ | `Content-Type` | yes | yes | - | - | - |
217
+ | `ETag` | yes | yes | yes | opt³ | - |
218
+ | `Last-Modified` | yes | yes | yes⁶ | - | - |
219
+ | `Repr-Digest` | opt⁴ | opt⁴ | - | - | - |
220
+ | `Content-Digest` | opt⁵ | - | - | - | - |
221
+ | `Cache-Control` | opt² | opt² | opt² | - | - |
222
+
223
+ ¹ `Content-Length: 0` on 412 and 416 for enterprise proxy compatibility.
224
+ HAProxy and Envoy require explicit Content-Length on bodyless responses
225
+ to avoid chunked-encoding timeouts.
226
+
227
+ ² Included when the caller passes `cacheControl` to `build304Headers`,
228
+ `buildRangeResponseHeaders`, or `evaluateConditionalRequest`. This library
229
+ never generates cache directives on its own.
230
+
231
+ ³ Included in 412 from `evaluateConditionalWrite` when `meta.etag` is available.
232
+ Returning the current ETag on a 412 lets OCC clients resync without a follow-up
233
+ GET. The standalone `build412Headers()` omits it (callers add it themselves).
234
+
235
+ ⁴ RFC 9530 `Repr-Digest`. Emitted when `meta.digest` (raw base64 SHA-256) is
236
+ provided. Uses Structured Fields Dictionary syntax: `sha-256=:<base64>:`.
237
+ Covers the full representation (independent of Content-Range or Content-Encoding),
238
+ so it remains stable across range requests. Storage backends provide the source:
239
+ S3 via `x-amz-checksum-sha256`, GCS via `x-goog-hash`.
240
+
241
+ ⁵ RFC 9530 `Content-Digest`. Identical to `Repr-Digest` on 200 responses
242
+ (content equals full representation). Omitted on 206 because computing a hash
243
+ of the range slice would require streaming through crypto, violating the
244
+ zero-I/O kernel contract.
245
+
246
+ ⁶ Omitted on 304 whenever an `ETag` is emitted: RFC 7232 Section 4.1 lists
247
+ `Last-Modified` among headers to send only "unless the reason for sending is
248
+ the entity-tag"; one strong validator suffices and this matches Go stdlib.
249
+
250
+ The following headers are **not** generated because they are the responsibility
251
+ of the HTTP runtime or application layer:
252
+
253
+ - **`Date`** - Set automatically by Bun, Node.js, Deno, Cloudflare Workers
254
+ - **`Vary`** - Application-specific (depends on content negotiation)
255
+ - **`Content-Location`** - Application-specific
256
+ - **`Expires`** - Use `Cache-Control` instead (per RFC 7234 Section 5.3)
257
+
258
+ RFC 9110 Section 15.3.7 requires `Date`, `Cache-Control`, `ETag`, `Expires`,
259
+ `Content-Location`, and `Vary` on 206 responses "if the field would have been
260
+ sent in a 200 (OK) response." This library handles ETag and Cache-Control;
261
+ the rest are either runtime-managed or application-specific.
262
+
263
+ ## Content-Disposition Security
264
+
265
+ **Dual-parameter approach (RFC 6266 Section 4.3).** When a filename contains
266
+ non-ASCII characters, `buildContentDisposition` emits both `filename` (ASCII
267
+ fallback with lossy transliteration) and `filename*` (UTF-8 percent-encoded
268
+ original). Browsers that understand `filename*` MUST prefer it over `filename`.
269
+
270
+ Security sanitization:
271
+
272
+ - CRLF injection prevention (strips `\r`, `\n`, control characters)
273
+ - Path traversal protection (strips `../`, `..\\`, extracts basename)
274
+ - Bidi override stripping (prevents RLO filename spoofing attacks)
275
+ - C1 control characters, NBSP, line/paragraph separators stripped
276
+ - Surrogate pair safety (handles truncated emoji gracefully)
277
+ - RFC 2616 quoted-string escaping (backslash and double-quote)
278
+ - RFC 8187 `filename*` encoding for non-ASCII characters
279
+
280
+ ## RFC 9530 Digest Fields (End-to-End Integrity)
281
+
282
+ `partial-content` ships first-class RFC 9530 (February 2024) support --
283
+ emission plus `Want-Repr-Digest` negotiation -- which none of the mainstream
284
+ JS file-serving libraries (`send`, `sirv`, the framework static middlewares)
285
+ offer. When a storage backend provides a SHA-256 hash of the full
286
+ representation, the kernel emits both `Repr-Digest` and `Content-Digest`
287
+ headers.
288
+
289
+ Key properties:
290
+
291
+ - **Repr-Digest** covers the *full representation*, not the transmitted bytes.
292
+ This means the same digest value appears on both full (200) and partial (206)
293
+ responses, allowing clients to verify integrity regardless of transfer strategy.
294
+ - **Content-Digest** is identical to `Repr-Digest` on 200 responses (content
295
+ equals the full representation). On 206, Content-Digest is omitted because
296
+ computing a hash of the range slice would require streaming through crypto,
297
+ violating the zero-I/O kernel contract. This is correct per RFC 9530 Section 2.
298
+ - **Want-Repr-Digest / Want-Content-Digest** request header parsing (RFC 9530
299
+ Section 4). The kernel respects client algorithm preferences: if the client
300
+ only wants `sha-512`, we omit our `sha-256` digest rather than sending an
301
+ unwanted algorithm. Weight 0 means explicitly unwanted. The negotiation is
302
+ exported as `clientWantsDigest()` and applied identically by the kernel
303
+ orchestrator and the web adapter, so suppression works at every layer.
304
+ - Uses **Structured Fields Dictionary** syntax per RFC 8941: `sha-256=:<base64>:`
305
+ - **Not emitted** on 304 (no body) or 412 (precondition failure).
306
+ - The library **never computes** digests itself (zero dependencies, no crypto).
307
+ It relies on the storage backend to provide the hash, which S3 and GCS already
308
+ compute at upload time.
309
+
310
+ Enterprise use case: SOC 2 / ISO 27001 compliance audits can verify that the
311
+ file delivered to the browser matches the file stored in object storage, using
312
+ only standard HTTP headers, with no application-layer checksums required.
313
+
314
+ ## Atomic Reads (HEAD->GET Consistency)
315
+
316
+ **Plain-range fast path (no HEAD at all).** A range request carrying no
317
+ conditional headers and no `If-Range` needs nothing from a HEAD: on stores
318
+ declaring `authoritativeRange` (S3, Azure, R2, http -- their 206
319
+ bounds/total are parsed from the backend's actual `Content-Range`), the
320
+ orchestrator issues a single GET. `bytes=a-b` and `bytes=a-` qualify (an
321
+ open end is sent as a large last-byte-pos, which RFC 9110 Section 14.1.2
322
+ lets the server clamp); suffix, multi-range, and malformed specs fall back
323
+ to the validating HEAD path. Validators, bounds, and digest all come from
324
+ the GET response itself, so the fast path is inherently TOCTOU-atomic. If
325
+ the backend rejects the range natively (start beyond EOF) the request
326
+ falls back to the HEAD path, which produces the correct 416 with real
327
+ bounds. This halves round-trips on the hottest media paths (video seeking,
328
+ PDF.js chunked loading).
329
+
330
+ For everything else, evaluating conditionals requires metadata (HEAD)
331
+ before bytes (GET), which opens a race: the object can change between the
332
+ two calls. The web adapter closes it in layers:
333
+
334
+ 1. **Pinned reads.** The GET carries the HEAD's raw ETag as
335
+ `GetObjectOptions.ifMatch`, mapped to each backend's native conditional
336
+ read: S3 `IfMatch`, R2 `onlyIf.etagMatches`, Azure `conditions.ifMatch`,
337
+ GCS generation-pinned stream. Either the exact validated bytes stream,
338
+ or the store throws `ObjectChangedError`.
339
+ Stores whose version identifier is not the ETag also issue an opaque
340
+ `ObjectMetadata.pin` token from `headObject`, which the orchestrator
341
+ round-trips verbatim into `GetObjectOptions.pin`. GCS encodes its
342
+ generation plus the size/validators in it, so a pinned `getObject`
343
+ streams directly from that immutable generation without re-fetching
344
+ metadata -- the HEAD->GET pair costs exactly one metadata round trip.
345
+ Foreign or stale pins are ignored and the adapter revalidates from
346
+ scratch. One narrow divergence: if a GCS pinned generation is *hard*
347
+ deleted mid-flight (an overwrite with both Object Versioning and
348
+ soft-delete off), `createReadStream` errors after the response headers
349
+ commit, so the client sees a torn transfer rather than an
350
+ `ObjectChangedError` + revalidation. Modern buckets default to
351
+ soft-delete, which keeps the pinned generation readable and masks this;
352
+ the outcome is a failed transfer the client retries, never spliced bytes.
353
+ 2. **One re-validation.** On `ObjectChangedError` the adapter re-runs
354
+ HEAD + evaluation once against the new state, so the client gets a
355
+ coherent answer (a stale `If-Range` now correctly yields a full 200 of
356
+ the new bytes). A second failure returns 502 -- the object is churning.
357
+ 3. **Response-side guard** (for stores that ignore the pin): validators are
358
+ taken from the GET response, 206 bounds come from the backend's actual
359
+ `Content-Range`, an absent Content-Range degrades to 200, and an
360
+ unparseable one fails loudly with 502.
361
+
362
+ The fs adapter needs no pin: it stats and streams from a single opened file
363
+ handle, and the Azure adapter's single `download()` call makes metadata and
364
+ body one response by construction. One caveat: with the opt-in fs cache
365
+ enabled, HEAD/conditional evaluation may serve a cached metadata snapshot
366
+ while a concurrent GET reads fresh from disk; every disk read writes its
367
+ metadata back to the cache so the views converge, and each individual
368
+ response remains internally coherent. The divergence is bounded by `ttlMs`
369
+ (see Sub-second timestamp handling above).
370
+
371
+ ## Audit Hook (onServe)
372
+
373
+ The web adapter provides a structured `onServe` callback for compliance
374
+ logging. It fires on every response that grants access (200, 206, 304, and
375
+ 302 signed-URL redirects) AND on protocol denials (412 failed precondition,
376
+ 416 unsatisfiable range) -- a 412 is an optimistic-concurrency conflict,
377
+ exactly the event change-control audit trails need. `bytesServed` is the
378
+ GRANTED Content-Length, captured when headers commit (a disconnecting
379
+ client may receive fewer bytes); treat it as access volume, not transfer
380
+ confirmation. A throwing hook never affects the response: the failure is
381
+ routed to `onError` with `operation: "audit"`. Each event carries:
382
+
383
+ - `key`: Storage key served
384
+ - `method`: `GET` or `HEAD` (distinguishes a metadata probe from a byte transfer)
385
+ - `status`: HTTP status (200, 206, 302, 304, or a 412/416 denial)
386
+ - `mime`: MIME type
387
+ - `bytesServed`: Content-Length (0 for 302, 304, 412, 416, and HEAD)
388
+ - `rangeStart` / `rangeEnd`: Present only on 206
389
+ - `etag`: ETag of the served representation
390
+
391
+ 302 redirects are audited because a signed URL grants the same file access as
392
+ a streamed body; omitting them would leave a hole in the access trail exactly
393
+ where the storage backend cannot stream ranges.
394
+
395
+ This satisfies SOC 2 CC7.2 (system operation monitoring) and ISO 27001 A.8.15
396
+ (logging) without coupling the library to any specific logging framework.
397
+
398
+ ### Transfer completion (onTransfer)
399
+
400
+ `onServe` reports bytes *granted* at header-commit time; `onTransfer` reports
401
+ bytes *actually transferred* once the response body reaches its terminal
402
+ state. It fires once per 200/206 GET with `bytesExpected` (the granted
403
+ Content-Length), `bytesTransferred` (bytes read through the body), and
404
+ `completed` (`true` on a full drain, `false` when the client disconnected or
405
+ cancelled early). Use `bytesTransferred` for true egress billing and
406
+ `completed === false` for download-abandonment analytics -- the honest signals
407
+ `onServe` structurally cannot give, because it fires before a single byte
408
+ leaves the process.
409
+
410
+ The metering is opt-in and zero-cost when unset: the body is returned
411
+ untouched, so byte bodies keep the runtime's static-body fast path. When
412
+ `onTransfer` is set, the body is routed through a counting stream (byte bodies
413
+ are wrapped too, so a byte store and a streaming store report identically) --
414
+ a deliberate cost you pay only when measuring. Like `onServe`, a throwing
415
+ `onTransfer` cannot corrupt the transfer: it fires from inside the body's
416
+ stream machinery, and its error is routed to `onError` (`operation: "audit"`).
417
+
418
+ ## Charset Enforcement
419
+
420
+ The web adapter enforces `charset=utf-8` on textual MIME types (`text/*`,
421
+ `application/json`, `application/xml`, `*+json`, `*+xml`,
422
+ `application/javascript`) by default. This prevents UTF-7 encoding-sniffing XSS
423
+ where legacy browsers auto-detect charset when none is declared, allowing
424
+ `+ADw-script+AD4-` to execute as JavaScript.
425
+
426
+ Controlled via `enforceCharset: false` for consumers who need raw MIME types.