-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathpnpm-workspace.yaml
More file actions
237 lines (235 loc) · 15.2 KB
/
Copy pathpnpm-workspace.yaml
File metadata and controls
237 lines (235 loc) · 15.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
packages:
- packages/*
- packages/apps/*
- packages/drivers/*
- packages/plugins/*
- packages/qa/*
- packages/triggers/*
- packages/services/*
- packages/adapters/*
- packages/connectors/*
- apps/*
- examples/*
onlyBuiltDependencies:
- better-sqlite3
- esbuild
- mongodb-memory-server
- msw
- sharp
# Transitive-dependency version pins. pnpm v10 reads `overrides` from THIS file
# — the `pnpm.overrides` block in package.json is silently ignored — so all
# pins must live here (previously orphaned in package.json: minimatch, tar).
#
# ⛔ SELECTOR SHAPE — the one rule every OSV pin below now follows (#6095).
# An OSV pin states a FLOOR ("nothing below the patched line"), so its selector
# must cover the whole major it guards and its target must be a range that
# floats up inside that major. Concretely:
# 'pkg@>=<affected floor> <next major above the target>': '^<patched>'
# Never write the selector's exclusive upper bound AT the target's own version
# line (`pkg@<X.Y.Z` -> `^X.Y.Z`). That shape self-invalidates the day X.Y.Z
# itself gets an advisory: you lift the target and the selector silently stops
# covering the very versions you need to rewrite — the live specimen is
# `undici@>=7.23.0 <7.28.0` on the day 7.28.0 was flagged (#4961, #5032).
# With the bound at the major boundary, ONLY the target moves from now on.
# Equally never let the bound sit BELOW the target floor: the old
# `@hono/node-server@<2.0.5` -> `^2.0.10` left the whole 2.0.5 .. 2.0.10 band
# covered by nobody at all (#6095 fixed it).
# For a 0.x line the "major boundary" is the caret boundary (0.35.x -> <0.36.0),
# because that is where semver's compatibility break actually falls.
# `scripts/check-override-consistency.mjs` reports (never fails on) any entry
# that drifts back into the old shape. Two carve-outs deliberately keep it:
# the better-auth pre-release family (a compat pin, not an OSV floor — it is
# retired wholesale when 1.7.0 stable ships) and the three zero-consumer pins
# awaiting a #5835-style ruling (@tootallnate/once, react-router, @sveltejs/kit).
# - esbuild: GHSA-gv7w-rqvm-qjhr (high). tsup/tsx/vite pulled 0.27.7 / 0.28.0
# (< 0.28.1); force the patched line everywhere.
# - form-data: GHSA-hmw2-7cc7-3qxx (high) — CRLF injection via unescaped
# multipart field names. Pulled 4.0.5 transitively through @vscode/vsce;
# force the patched >=4.0.6 line. Fails `pnpm audit --audit-level=high` (CI).
# CONSUMER GONE (#5825): retiring packages/vscode-objectstack took @vscode/vsce
# with it, and form-data no longer resolves anywhere in the tree — this
# selector now matches nothing. Kept as defense-in-depth so a future
# transitive reintroduction lands on the patched line instead of silently
# re-arming the advisory; dropping a security pin is its own decision, not a
# rider on a package retirement. Retire it deliberately or not at all.
# - undici: GHSA-vmh5-mc38-953g (high) — TLS cert validation bypass via
# dropped requestTls in SOCKS5 ProxyAgent. Pulled 7.27.2 through
# @vscode/vsce > cheerio (declares undici ^7.19.0); force the patched
# 7.28.0 line (stays in the 7.x major cheerio supports). CI audit gate.
# Then five more advisories landed on 7.28.0 itself — the version this pin
# had settled on (GHSA-4cwx-7wf7-3272 7.4 high, GHSA-jr45-8vmc-qm54 5.9,
# GHSA-8xcm-r25x-g524 / GHSA-v3r7-h72x-cjcm 4.8, GHSA-m8rv-5g2x-5cg5 4.2) —
# so the target moves to ^7.29.0 (#5032). NOTE the recurring trap this
# specimen taught: an exclusive upper bound stops covering the very version
# it pinned once that version is itself flagged — same shape as the
# brace-expansion 5.0.8 → 5.0.9 lift (#4945). That is why the selector is
# now `>=7.23.0 <8.0.0` (#6095): the bound sits at the major boundary, so a
# future lift moves the TARGET alone and the pin never silently misfires.
# CONSUMER GONE (#5825): cheerio came in only through @vscode/vsce, which
# left with packages/vscode-objectstack. The two undici copies that remain
# are @ai-sdk/provider-utils' 7.29.0 and jsdom's 8.9.0. Under the old
# `<7.29.0` bound BOTH sat outside the selector and it matched nothing;
# under the `<8.0.0` bound of #6095 the 7.29.0 copy is back in scope (it
# already satisfies the ^7.29.0 target, so nothing moved — measured), which
# is exactly the point: the next 7.x advisory will now catch it. jsdom's
# 8.9.0 is a different major and stays outside, unaffected. Kept as
# defense-in-depth on the same reasoning as form-data above.
# - @better-auth/scim: GHSA-j8v8-g9cx-5qf4 (high) — account/provider
# takeover. The advisory is patched only in >=1.7.0-beta.4 — there is NO
# stable patched release yet (npm `latest` is still on the 1.6.x line), so
# a pre-release pin is what clears the CI audit gate; revert to a stable
# `^1.7.x` line the moment one ships.
# Held at 1.7.0-rc.1 while the rest of the family moves to rc.2: rc.2 is a
# ground-up rewrite of this plugin — the `scimProvider` model and its
# generate-token endpoint are gone, replaced by code-defined connections
# plus six new models (scimUser, scimGroup, scimGroupMember, scimSubject,
# scimConnectionBinding, scimIdentityTombstone). Adopting it means new
# platform objects, retiring `sys_scim_provider`, and a new way for a
# tenant to register a connection — a feature migration (ADR-0071), not a
# version bump. rc.1's peer range accepts rc.2 core, and it still carries
# the advisory fix.
# - @better-auth/oauth-provider: GHSA-p2fr-6hmx-4528 — same better-auth
# monorepo and same situation as @better-auth/scim above. The fix first
# ships in the 1.7.0 pre-release line. Pin to 1.7.0-rc.2. The 1.7
# oauth-provider is exercised on the sign-in path and imports symbols
# (e.g. CLIENT_ASSERTION_TYPE) that only exist in @better-auth/core 1.7.x,
# so the ENTIRE better-auth family must move to 1.7.0-rc.2 together —
# mixing a 1.7 plugin with 1.6.x core throws "Cannot set properties of
# undefined (setting 'modelName')" during better-auth init and 500s every
# auth endpoint at runtime, and mixing rc.2 with rc.1 is the same class of
# hazard. The full family is pinned below; revert all of them to a stable
# `^1.7.x` line the moment one ships.
# IMPORTANT: these overrides do NOT ship with published packages — a
# downstream `npx create-objectstack` install resolves plugin-auth's own
# declared ranges. plugin-auth therefore pins the same exact 1.7.0-rc.2 in
# its dependencies (a `^1.6.23` range there resolved to the broken 1.6.23
# mix and 500'd every fresh 15.1.0 project). Keep both in sync — CI
# enforces this via scripts/check-override-consistency.mjs.
# - uuid: GHSA-w5hq-g745-h8pq (high) — pulled 8.3.2 transitively; the fix
# first lands in 11.1.1. Pin to the ^11.1.1 LTS line (uuid `legacy-11`
# dist-tag) rather than the latest major to keep the jump conservative.
# - postcss: GHSA-qx2v-qp2m-jg93 — a transitive path still resolves 8.4.31
# (the direct `apps/docs` dep already tracks ^8.5.x); force the patched
# ^8.5.10 line so the transitive copy is deduped onto it.
# - cookie: GHSA-pxg6-pf52-xh8x — pulled 0.6.0 transitively; force the
# patched 0.7.0 line (drop-in compatible).
# - svelte: GHSA-9rmh-mm8f-r9h6, GHSA-f3cj-j4f6-wq85, GHSA-pr6f-5x2q-rwfp,
# GHSA-rcqx-6q8c-2c42 — auto-installed (auto-install-peers) as an *optional*
# peer-of-a-peer via better-auth > @sveltejs/kit at 5.55.3. An `overrides`
# entry alone can't rewrite this resolution (pnpm rewrites the peer range
# but leaves the locked 5.55.3), so the patched line is pinned by BOTH this
# override AND a `svelte: ^5.55.7` devDependency in the root (private)
# package.json, which gives the peer a concrete version to dedupe onto.
# Keep both in sync; removing the root devDependency reintroduces 5.55.3.
# - @tootallnate/once: GHSA-vpq2-c234-7xj6 (low) — pulled 1.1.2 through a
# legacy agent chain; force the patched 2.0.1 line.
overrides:
esbuild: '>=0.28.1'
'minimatch@<11.0.0': '^10.2.3'
'tar@>=2.0.0 <8.0.0': '^7.5.11'
'form-data@<5.0.0': '>=4.0.6'
'undici@>=7.23.0 <8.0.0': '^7.29.0'
# better-auth family — kept on one line (see @better-auth/oauth-provider note).
'better-auth@<1.7.0-rc.2': '1.7.0-rc.2'
'@better-auth/core@<1.7.0-rc.2': '1.7.0-rc.2'
# scim is deliberately held one pre-release BEHIND the rest of the family —
# see the @better-auth/scim note above. Do not "align" it without doing the
# connection/credential migration first.
'@better-auth/scim@<1.7.0-rc.1': '1.7.0-rc.1'
'@better-auth/oauth-provider@<1.7.0-rc.2': '1.7.0-rc.2'
'@better-auth/sso@<1.7.0-rc.2': '1.7.0-rc.2'
'@better-auth/drizzle-adapter@<1.7.0-rc.2': '1.7.0-rc.2'
'@better-auth/kysely-adapter@<1.7.0-rc.2': '1.7.0-rc.2'
'@better-auth/memory-adapter@<1.7.0-rc.2': '1.7.0-rc.2'
'@better-auth/mongo-adapter@<1.7.0-rc.2': '1.7.0-rc.2'
'@better-auth/prisma-adapter@<1.7.0-rc.2': '1.7.0-rc.2'
'@better-auth/telemetry@<1.7.0-rc.2': '1.7.0-rc.2'
'uuid@<12.0.0': '^11.1.1'
'postcss@<9.0.0': '^8.5.10'
'cookie@<0.8.0': '^0.7.0'
svelte: '^5.55.7'
'@tootallnate/once@<2.0.1': '2.0.1'
# OSV batch 2026-07 — transitive-only fixes (no publishable package declares these):
# brace-expansion GHSA-mh99-v99m-4gvg (via minimatch@10.x), then GHSA-rgw5-rvv9-x895
# (7.5 high) which affects 5.0.8 itself — the version the first pin landed on — so the
# target moves to ^5.0.9 — the selector keeps its <6.0.0 major boundary (#6095), which is
# what makes this a target-only lift. Still transitive-only through minimatch (ts-morph, eslint,
# @typescript-eslint, glob, archiver — @vscode/vsce left with #5825's retirement,
# the rest still pull it, so this pin stays live); sharp GHSA-f88m-g3jw-g9cj
# (next optionalDep ^0.34.5 excludes the fix); react-router GHSA-qwww-vcr4-c8h2 has no
# 7.x fix — fumadocs-core peer allows 8.x and docs uses the next adapter, so jump to 8;
# @sveltejs/kit GHSA-866w-xmhq-wj7x/GHSA-wqjv-9729-c5q2 (better-auth optional peer);
# @hono/node-server GHSA-frvp-7c67-39w9 has no 1.x fix — @modelcontextprotocol/sdk
# declares ^1.19.9 and only imports getRequestListener, which 2.x still exports.
# ⚠️ @hono/node-server is the exception to this block's "transitive-only" heading:
# plugin-hono-server declares it directly (^2.0.12). Under the <3.0.0 bound that
# declaration is now in the selector's scope and the lockfile records ^2.0.10 as its
# specifier — the resolved version is unchanged at 2.0.12, because the ^2.0.10 target
# floats to the newest 2.x (measured, #6095).
'brace-expansion@>=5.0.0 <6.0.0': '^5.0.9'
'sharp@>=0.34.0 <0.36.0': '^0.35.0'
'react-router@<8.3.0': '^8.3.0'
'@sveltejs/kit@<2.69.1': '^2.69.1'
'@hono/node-server@<3.0.0': '^2.0.10'
# OSV batch 2026-08 (#5032) — all three name a fixed version, so they are
# upgrades, not exemptions (the osv-scanner.toml route #4965 defines is for
# advisories with NO fix and does not apply here):
# fast-uri GHSA-7p8r-x3mc-p8w7 (7.5 high) — transitive-only via ajv@8.20.0
# (declares ^3.0.1), which reaches @modelcontextprotocol/sdk, objectql,
# secretlint and table. Nothing declares fast-uri directly.
# hono GHSA-8j4g-w8fx-2239 (5.3) — the one entry here that is NOT
# transitive-only: two versions resolved, 4.12.32 from our own packages
# and 4.12.33 pulled by @modelcontextprotocol/sdk. The override moves the
# transitive copy; the declared ranges are bumped to ^4.12.34 in lockstep
# (plugin-hono-server dependency, plugin-auth + @objectstack/hono
# devDependencies) so a downstream install — which never sees these
# overrides — resolves the same patched line that CI tested. The
# @objectstack/hono PEER range stays the permissive ^4.12.8 on purpose: a
# peer states what host hono we work against, and a host that pins an old
# hono owns that copy; narrowing it fixes nothing here and only breaks
# compatibility. check-override-consistency.mjs covers both forms.
'fast-uri@<4.0.0': '^3.1.5'
'hono@<5.0.0': '^4.12.34'
# OSV 2026-08-07 (#6407) — transitive-only, and the same "it has a fix, so
# take the fix" disposition as the batch above:
# dompurify GHSA-55q2-fjhq-7xh7 (5.1 medium) — an IN_PLACE hook removal
# leaves a detached subtree executable (XSS). Advisory range is
# introduced:0 → fixed:3.4.13, i.e. every version up to and including
# 3.4.12 is affected, so the selector's floor is the package floor and
# only the upper bound needs stating. Transitive-only via mermaid
# (apps/docs declares mermaid ^11.16.0; mermaid@11.16.1 declares
# dompurify ^3.3.3). Nothing in this workspace declares dompurify
# directly, so there is no publishable manifest to keep in lockstep —
# check-override-consistency.mjs will list this as an override it cannot
# cross-check against a declared range, which is correct for this shape.
# ^3.4.13 sits INSIDE mermaid's own ^3.3.3 range, so this is a dedupe onto
# the patched line rather than a forced upgrade past what mermaid supports.
# Bound at the 4.0.0 major boundary per this block's header rule — never
# `<3.4.13`, which would self-invalidate the day 3.4.13 is itself flagged
# (the undici 7.28.0 / brace-expansion 5.0.8 specimens, #4961 / #5032).
'dompurify@<4.0.0': '^3.4.13'
# OSV 2026-08-08 (#6529) — same "it names a fixed version, so take the fix"
# disposition as the two batches above; no exemption is involved.
# nanoid GHSA-2v37-7h3g-55p8 / CVE-2026-67213 (8.2 high) — a custom
# alphabet generator loops forever when `size` is zero, so an
# attacker-influenced size is a denial of service. The advisory carries
# TWO affected ranges: introduced:0 → fixed:3.3.17, and
# introduced:4.0.0 → fixed:5.1.6. Only the first one is live here.
# Transitive-only via postcss@8.5.25, which declares nanoid ^3.3.16 and
# was the single consumer pulling the flagged 3.3.16 (measured: one
# `nanoid:` edge in the whole lockfile). Nothing in this workspace
# declares a 3.x nanoid directly, so — exactly as for dompurify above —
# check-override-consistency.mjs lists this as an override it cannot
# cross-check against a declared range, which is correct for this shape.
# ^3.3.17 sits INSIDE postcss's own ^3.3.16 range, so this is a dedupe
# onto the patched line, not a forced upgrade past what postcss supports.
# ⚠️ The four drivers that declare nanoid ^6.0.0 (driver-mongodb,
# driver-sql, driver-sqlite-wasm, driver-turso) are deliberately OUT of
# this selector: 6.0.0 is above the advisory's second fixed line (5.1.6)
# and is not affected, and the <4.0.0 bound is what keeps it that way —
# a bound written at the package ceiling would have dragged that whole
# major back onto the 3.x line.
# Bound at the 4.0.0 major boundary per this block's header rule — never
# `<3.3.17`, which would self-invalidate the day 3.3.17 is itself flagged
# (the undici 7.28.0 / brace-expansion 5.0.8 specimens, #4961 / #5032).
'nanoid@<4.0.0': '^3.3.17'