@vielzeug/codex 26.10.16 → 26.10.18

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Helmuth Saatkamp
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/data/catalog.json CHANGED
@@ -35,7 +35,7 @@
35
35
  "rune"
36
36
  ],
37
37
  "slug": "archive",
38
- "version": "26.10.15"
38
+ "version": "26.10.17"
39
39
  },
40
40
  {
41
41
  "availableDocPages": [
@@ -108,7 +108,7 @@
108
108
  "coins"
109
109
  ],
110
110
  "slug": "arsenal",
111
- "version": "26.10.15"
111
+ "version": "26.10.17"
112
112
  },
113
113
  {
114
114
  "availableDocPages": [
@@ -160,7 +160,7 @@
160
160
  "refine"
161
161
  ],
162
162
  "slug": "assay",
163
- "version": "26.10.15"
163
+ "version": "26.10.17"
164
164
  },
165
165
  {
166
166
  "availableDocPages": [
@@ -199,7 +199,7 @@
199
199
  "vault"
200
200
  ],
201
201
  "slug": "beacon",
202
- "version": "0.1.0"
202
+ "version": "26.10.17"
203
203
  },
204
204
  {
205
205
  "availableDocPages": [
@@ -241,7 +241,7 @@
241
241
  "ward"
242
242
  ],
243
243
  "slug": "clockwork",
244
- "version": "26.10.15"
244
+ "version": "26.10.17"
245
245
  },
246
246
  {
247
247
  "availableDocPages": [
@@ -273,7 +273,7 @@
273
273
  "refine"
274
274
  ],
275
275
  "slug": "codex",
276
- "version": "26.10.15"
276
+ "version": "26.10.17"
277
277
  },
278
278
  {
279
279
  "availableDocPages": [
@@ -343,7 +343,7 @@
343
343
  "spell"
344
344
  ],
345
345
  "slug": "coins",
346
- "version": "26.10.15"
346
+ "version": "26.10.17"
347
347
  },
348
348
  {
349
349
  "availableDocPages": [
@@ -384,7 +384,7 @@
384
384
  "rune"
385
385
  ],
386
386
  "slug": "conduit",
387
- "version": "26.10.15"
387
+ "version": "26.10.17"
388
388
  },
389
389
  {
390
390
  "availableDocPages": [
@@ -426,7 +426,7 @@
426
426
  "postmaster"
427
427
  ],
428
428
  "slug": "courier",
429
- "version": "26.10.15"
429
+ "version": "26.10.17"
430
430
  },
431
431
  {
432
432
  "availableDocPages": [
@@ -472,7 +472,7 @@
472
472
  "refine"
473
473
  ],
474
474
  "slug": "dnd",
475
- "version": "26.10.15"
475
+ "version": "26.10.17"
476
476
  },
477
477
  {
478
478
  "availableDocPages": [
@@ -514,7 +514,7 @@
514
514
  "herald"
515
515
  ],
516
516
  "slug": "familiar",
517
- "version": "26.10.15"
517
+ "version": "26.10.17"
518
518
  },
519
519
  {
520
520
  "availableDocPages": [
@@ -581,7 +581,7 @@
581
581
  "courier"
582
582
  ],
583
583
  "slug": "flux",
584
- "version": "26.10.15"
584
+ "version": "26.10.17"
585
585
  },
586
586
  {
587
587
  "availableDocPages": [
@@ -621,7 +621,7 @@
621
621
  "ore"
622
622
  ],
623
623
  "slug": "focus",
624
- "version": "26.10.15"
624
+ "version": "26.10.17"
625
625
  },
626
626
  {
627
627
  "availableDocPages": [
@@ -662,7 +662,7 @@
662
662
  "assay"
663
663
  ],
664
664
  "slug": "forge",
665
- "version": "26.10.15"
665
+ "version": "26.10.17"
666
666
  },
667
667
  {
668
668
  "availableDocPages": [
@@ -700,7 +700,7 @@
700
700
  "keymap"
701
701
  ],
702
702
  "slug": "gesture",
703
- "version": "26.10.15"
703
+ "version": "26.10.17"
704
704
  },
705
705
  {
706
706
  "availableDocPages": [
@@ -744,7 +744,7 @@
744
744
  "familiar"
745
745
  ],
746
746
  "slug": "herald",
747
- "version": "26.10.15"
747
+ "version": "26.10.17"
748
748
  },
749
749
  {
750
750
  "availableDocPages": [
@@ -787,7 +787,7 @@
787
787
  "tempo"
788
788
  ],
789
789
  "slug": "illusionist",
790
- "version": "26.10.15"
790
+ "version": "26.10.17"
791
791
  },
792
792
  {
793
793
  "availableDocPages": [
@@ -832,7 +832,7 @@
832
832
  "ore"
833
833
  ],
834
834
  "slug": "keymap",
835
- "version": "26.10.15"
835
+ "version": "26.10.17"
836
836
  },
837
837
  {
838
838
  "availableDocPages": [
@@ -879,7 +879,7 @@
879
879
  "vault"
880
880
  ],
881
881
  "slug": "ledger",
882
- "version": "26.10.15"
882
+ "version": "26.10.17"
883
883
  },
884
884
  {
885
885
  "availableDocPages": [
@@ -925,7 +925,7 @@
925
925
  "courier"
926
926
  ],
927
927
  "slug": "lingua",
928
- "version": "26.10.15"
928
+ "version": "26.10.17"
929
929
  },
930
930
  {
931
931
  "availableDocPages": [
@@ -963,7 +963,7 @@
963
963
  "herald"
964
964
  ],
965
965
  "slug": "mesh",
966
- "version": "26.10.15"
966
+ "version": "26.10.17"
967
967
  },
968
968
  {
969
969
  "availableDocPages": [
@@ -1000,7 +1000,7 @@
1000
1000
  "ore"
1001
1001
  ],
1002
1002
  "slug": "necromancer",
1003
- "version": "26.10.15"
1003
+ "version": "26.10.17"
1004
1004
  },
1005
1005
  {
1006
1006
  "availableDocPages": [
@@ -1040,7 +1040,7 @@
1040
1040
  "prism"
1041
1041
  ],
1042
1042
  "slug": "orbit",
1043
- "version": "26.10.15"
1043
+ "version": "26.10.17"
1044
1044
  },
1045
1045
  {
1046
1046
  "availableDocPages": [
@@ -1105,7 +1105,7 @@
1105
1105
  "orbit"
1106
1106
  ],
1107
1107
  "slug": "ore",
1108
- "version": "26.10.15"
1108
+ "version": "26.10.17"
1109
1109
  },
1110
1110
  {
1111
1111
  "availableDocPages": [
@@ -1149,7 +1149,7 @@
1149
1149
  "ripple"
1150
1150
  ],
1151
1151
  "slug": "postmaster",
1152
- "version": "26.10.15"
1152
+ "version": "26.10.17"
1153
1153
  },
1154
1154
  {
1155
1155
  "availableDocPages": [
@@ -1189,7 +1189,7 @@
1189
1189
  "orbit"
1190
1190
  ],
1191
1191
  "slug": "prism",
1192
- "version": "26.10.15"
1192
+ "version": "26.10.17"
1193
1193
  },
1194
1194
  {
1195
1195
  "availableDocPages": [
@@ -1253,7 +1253,7 @@
1253
1253
  "clockwork"
1254
1254
  ],
1255
1255
  "slug": "pulse",
1256
- "version": "26.10.15"
1256
+ "version": "26.10.17"
1257
1257
  },
1258
1258
  {
1259
1259
  "availableDocPages": [
@@ -1375,7 +1375,7 @@
1375
1375
  "keymap"
1376
1376
  ],
1377
1377
  "slug": "refine",
1378
- "version": "26.10.15"
1378
+ "version": "26.10.17"
1379
1379
  },
1380
1380
  {
1381
1381
  "availableDocPages": [
@@ -1420,7 +1420,7 @@
1420
1420
  "ledger"
1421
1421
  ],
1422
1422
  "slug": "ripple",
1423
- "version": "26.10.15"
1423
+ "version": "26.10.17"
1424
1424
  },
1425
1425
  {
1426
1426
  "availableDocPages": [
@@ -1474,7 +1474,7 @@
1474
1474
  "familiar"
1475
1475
  ],
1476
1476
  "slug": "rune",
1477
- "version": "26.10.15"
1477
+ "version": "26.10.17"
1478
1478
  },
1479
1479
  {
1480
1480
  "availableDocPages": [
@@ -1515,7 +1515,7 @@
1515
1515
  "refine"
1516
1516
  ],
1517
1517
  "slug": "sandbox",
1518
- "version": "26.10.15"
1518
+ "version": "26.10.17"
1519
1519
  },
1520
1520
  {
1521
1521
  "availableDocPages": [
@@ -1566,7 +1566,7 @@
1566
1566
  "ripple"
1567
1567
  ],
1568
1568
  "slug": "scout",
1569
- "version": "26.10.15"
1569
+ "version": "26.10.17"
1570
1570
  },
1571
1571
  {
1572
1572
  "availableDocPages": [
@@ -1619,7 +1619,7 @@
1619
1619
  "refine"
1620
1620
  ],
1621
1621
  "slug": "scroll",
1622
- "version": "26.10.15"
1622
+ "version": "26.10.17"
1623
1623
  },
1624
1624
  {
1625
1625
  "availableDocPages": [
@@ -1666,7 +1666,7 @@
1666
1666
  "gesture"
1667
1667
  ],
1668
1668
  "slug": "sentinel",
1669
- "version": "26.10.15"
1669
+ "version": "26.10.17"
1670
1670
  },
1671
1671
  {
1672
1672
  "availableDocPages": [
@@ -1706,7 +1706,7 @@
1706
1706
  "refine"
1707
1707
  ],
1708
1708
  "slug": "sigil",
1709
- "version": "26.10.15"
1709
+ "version": "26.10.17"
1710
1710
  },
1711
1711
  {
1712
1712
  "availableDocPages": [
@@ -1751,7 +1751,7 @@
1751
1751
  "wayfinder"
1752
1752
  ],
1753
1753
  "slug": "sourcerer",
1754
- "version": "26.10.15"
1754
+ "version": "26.10.17"
1755
1755
  },
1756
1756
  {
1757
1757
  "availableDocPages": [
@@ -1810,7 +1810,7 @@
1810
1810
  "vault"
1811
1811
  ],
1812
1812
  "slug": "spell",
1813
- "version": "26.10.15"
1813
+ "version": "26.10.17"
1814
1814
  },
1815
1815
  {
1816
1816
  "availableDocPages": [
@@ -1851,7 +1851,7 @@
1851
1851
  "ripple"
1852
1852
  ],
1853
1853
  "slug": "tandem",
1854
- "version": "26.10.15"
1854
+ "version": "26.10.17"
1855
1855
  },
1856
1856
  {
1857
1857
  "availableDocPages": [
@@ -1895,7 +1895,7 @@
1895
1895
  "herald"
1896
1896
  ],
1897
1897
  "slug": "tavern",
1898
- "version": "26.10.15"
1898
+ "version": "26.10.17"
1899
1899
  },
1900
1900
  {
1901
1901
  "availableDocPages": [
@@ -1963,7 +1963,7 @@
1963
1963
  "vault"
1964
1964
  ],
1965
1965
  "slug": "tempo",
1966
- "version": "26.10.15"
1966
+ "version": "26.10.17"
1967
1967
  },
1968
1968
  {
1969
1969
  "availableDocPages": [
@@ -2014,7 +2014,7 @@
2014
2014
  "ripple"
2015
2015
  ],
2016
2016
  "slug": "vault",
2017
- "version": "26.10.15"
2017
+ "version": "26.10.17"
2018
2018
  },
2019
2019
  {
2020
2020
  "availableDocPages": [
@@ -2060,7 +2060,7 @@
2060
2060
  "refine"
2061
2061
  ],
2062
2062
  "slug": "ward",
2063
- "version": "26.10.15"
2063
+ "version": "26.10.17"
2064
2064
  },
2065
2065
  {
2066
2066
  "availableDocPages": [
@@ -2114,8 +2114,8 @@
2114
2114
  "herald"
2115
2115
  ],
2116
2116
  "slug": "wayfinder",
2117
- "version": "26.10.15"
2117
+ "version": "26.10.17"
2118
2118
  }
2119
2119
  ],
2120
- "version": "26.10.15"
2120
+ "version": "26.10.17"
2121
2121
  }
@@ -1,6 +1,6 @@
1
1
  # Vielzeug: Full Documentation
2
2
 
3
- > Complete documentation for 43 packages. Version: 26.10.15
3
+ > Complete documentation for 43 packages. Version: 26.10.17
4
4
 
5
5
  ---
6
6
 
@@ -312,7 +312,11 @@ Magic links expire after 15 minutes and work once. The durable per-email budget
312
312
  The issuer-global admission budget is durable D1 state in `auth_sign_in_budget`:
313
313
  20 requests per 60-second window before account creation or email delivery.
314
314
  This supplements, rather than replaces, the durable per-email budget. No external
315
- rate-limiter binding is required.
315
+ rate-limiter binding is required for sign-in admission; the budgets do not cover
316
+ `POST /auth/verify` or `GET /auth/session`, which deployments rate-limit at the
317
+ edge. Edge rules should block rather than challenge `GET /auth/session`: clients
318
+ check it with a `fetch`, which cannot solve a challenge interstitial. The verify
319
+ GET is a browser navigation from the email link, so a challenge is solvable there.
316
320
  Admission spends are not refunded after later database or email failures.
317
321
  Request emails are trimmed and lowercased before validation. `SENDER_ADDRESS`
318
322
  must already be canonical; `OPERATOR_EMAILS` entries are trimmed and lowercased
@@ -477,7 +481,7 @@ Effective hide, unhide, operator removal and publisher erasure append audit rows
477
481
  | `ARCHIVE_OPERATOR_ROLE` | `'archive-operator'` |
478
482
  | `SESSION_COOKIE_NAME`, `SESSION_COOKIE_PATH` | `'archive_session'`, `'/api/v1'` |
479
483
  | `SESSION_MAX_AGE_SECONDS` | `2592000` |
480
- | `OPERATOR_SESSION_MAX_AGE_SECONDS` | `3600` (60 minutes); shared root contract |
484
+ | `OPERATOR_SESSION_MAX_AGE_SECONDS` | `3600` (60 minutes); shared root contract |
481
485
  | `ACCOUNT_HEADER` | `'X-Archive-Account'`; required issuer-account UUID on coordinated erasure |
482
486
  | `PUBLISHER_HEADER`, `REQUEST_MARKER_HEADER` | `'x-archive-publisher'`, `'x-archive-request'` |
483
487
  | `ILL_FORMED_TEXT`, `isWellFormedText(value: string): boolean` | Reject control characters and lone UTF-16 surrogates |
@@ -1033,7 +1037,10 @@ well-formed, or the route answers 503 without naming what is missing:
1033
1037
  Both limiter bindings must run 60-second windows (`simple` limiters:
1034
1038
  `period: 60`): the platform binding does not expose its period at runtime, so the
1035
1039
  Worker's 429 `Retry-After` header is fixed at 60 seconds — a longer window would
1036
- make the header lie.
1040
+ make the header lie. The read limit keys on `cf-connecting-ip`, which Cloudflare
1041
+ sets authoritatively for requests that reach the Worker through its network. Keep
1042
+ that network path: never front the Worker with a proxy that forwards a
1043
+ client-supplied header of the same name.
1037
1044
 
1038
1045
  Generated Env types (wrangler's `worker-configuration.d.ts`) satisfy the package's
1039
1046
  structural `ArchiveWorkerEnv` — no `@cloudflare/workers-types` dependency, no casts.
@@ -1081,6 +1088,19 @@ The issuer first admits sign-in requests through its singleton durable
1081
1088
  `auth_sign_in_budget` table: 20 requests per 60 seconds before creating accounts
1082
1089
  or delivering email. No rate-limiter binding is required. It then
1083
1090
  permits three sign-in emails per email in an hourly durable window.
1091
+ Those durable budgets guard `POST /auth/sign-in` only. `POST /auth/verify` and
1092
+ `GET /auth/session` stay public: tokens are 256-bit, single-use and expire in
1093
+ 15 minutes, so guessing is not the risk — but every request still costs the
1094
+ issuer: the verify GET renders the confirmation page, the verify POST performs a
1095
+ D1 token write, and the session check performs an RS256 verification plus an
1096
+ account read for a well-formed signed token. Put per-client-IP Cloudflare
1097
+ rate-limit rules (or an equivalent edge control) in front of both routes in
1098
+ production. Prefer a block action: applications check `GET /auth/session` with
1099
+ a `fetch`, and a fetch cannot solve a challenge interstitial, so challenging
1100
+ that route breaks legitimate sign-in. The verify GET is a browser navigation
1101
+ opened from the email link, so a challenge is solvable there if you want one.
1102
+ Set thresholds with CGNAT headroom (shared mobile/office egress IPs) and tune
1103
+ from observed traffic.
1084
1104
  Later database or delivery failures do not refund global admission.
1085
1105
  Using or expiring a link never refunds sends; failed delivery also spends the
1086
1106
  allowance. Links expire after 15 minutes. Operator sessions expire after 60 minutes
@@ -1296,8 +1316,11 @@ database or schema failures. It never writes, sends email or probes the catalog.
1296
1316
  Operator authority is the session token's optional `roles` claim carrying
1297
1317
  `ARCHIVE_OPERATOR_ROLE` (`'archive-operator'`) — minted by your issuer, verified with
1298
1318
  the same signature, audience and issuer checks as any session, and never a separate
1299
- credential. Moderation routes additionally require a registered publisher row: one
1300
- accountable identity per action.
1319
+ credential. Mint operator sessions with a lifetime of at most
1320
+ `OPERATOR_SESSION_MAX_AGE_SECONDS` (3600 seconds): the catalog rejects any token
1321
+ carrying the operator role whose signed lifetime or age exceeds it, so reusing the
1322
+ ordinary long session expiry 401s operator sessions immediately. Moderation routes
1323
+ additionally require a registered publisher row: one accountable identity per action.
1301
1324
 
1302
1325
  - **Report** — any registered publisher reports a visible entry with a bounded
1303
1326
  free-text reason (`reportReasonChars`). Idempotent per (entry, reporter): the same
@@ -1422,6 +1445,8 @@ export function useRecipes() {
1422
1445
  - Grant the operator role claim only through your issuer, and only to accounts that
1423
1446
  are also registered publishers.
1424
1447
  - Wire a sanitized `tap()` sink and register the rate-limit pepper as a production secret.
1448
+ - Rate-limit the issuer's public `verify` and `session` routes at the edge; the
1449
+ durable budgets cover sign-in admission only.
1425
1450
 
1426
1451
  ### Examples
1427
1452
 
@@ -16911,8 +16936,9 @@ boolean attributes (`?attr=`), explicit property bindings (`.prop=`), events (`@
16911
16936
  `.stop`/`.prevent`/`.once`/`.capture` modifiers), refs (`ref=`), and nested templates.
16912
16937
 
16913
16938
  `.prop=${value}` always writes the element property (never an attribute): the explicit channel for structured
16914
- values (arrays, objects, callbacks). Prototype-polluting names (`__proto__`, `constructor`, `prototype`) are
16915
- rejected at compile time.
16939
+ values (arrays, objects, callbacks). Prototype-polluting names (`__proto__`, `constructor`, `prototype`) and
16940
+ raw-HTML-parsing names (`innerHTML`, `outerHTML`, `srcdoc`) are rejected at compile time: render sanitized
16941
+ HTML through the `unsafeHtml()` directive instead of a property binding.
16916
16942
 
16917
16943
  `@event.stop`, `.prevent`, `.once`, and `.capture` are shorthand for the matching listener behavior
16918
16944
  (`stopPropagation`/`preventDefault` applied before the handler runs; `once`/`capture` passed as listener
package/data/llms.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  # Vielzeug
2
2
 
3
- > 43 focused TypeScript packages. Version: 26.10.15
3
+ > 43 focused TypeScript packages. Version: 26.10.17
4
4
 
5
5
  Install any package independently: `pnpm add @vielzeug/<name>`
6
6
 
@@ -4,5 +4,5 @@
4
4
  "refine": "refine.json",
5
5
  "schemaVersion": 1,
6
6
  "search": "search.json",
7
- "version": "26.10.15"
7
+ "version": "26.10.17"
8
8
  }