screentinker/server
ScreenTinker 24c94deda0
Some checks are pending
CI / Unit tests (node --test) (push) Waiting to run
CI / Unit tests (node:sqlite fallback, Node 24) (push) Waiting to run
CI / OpenAPI spec lint (push) Waiting to run
CI / Android unit tests (Kotlin schedule evaluator vectors) (push) Waiting to run
CI / Licence gate + SBOM (production deps) (push) Waiting to run
CI / Boot smoke + version check (push) Waiting to run
Repair a missing sqlite driver on hosts that have no built-in one
1.9.38 made better-sqlite3 optional so a compiler-less host installs cleanly and falls
back to node:sqlite. That fallback is Node 24 in practice — absent on 20.x, flagged off
on 22.x — and this project's declared floor is 22.9. On those runtimes a missing native
driver is not a slower server, it is no server.

Found by running the suite the way CI does rather than the way it is convenient to:
`npm ci` on a machine that declines to run install scripts reported success, silently
left no better-sqlite3 on disk, and 291 tests failed with "server did not boot" and
nothing anywhere explaining why. npm drops an optional dependency in that situation
where it would have installed a required one.

missingDeps() now treats optionalDependencies as required whenever node:sqlite is
unavailable, so preflight repairs it as it would any other missing package. The
decision is split into requiredDeps(pkg, builtinDriver) so both kinds of host can be
tested from either runtime, rather than only the one the suite happens to run on.

Full suite 1782 pass / 0 fail on the native driver and on the fallback.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014kfhrUPit5MCqxeTQyqr56
2026-08-18 23:29:47 -05:00
..
config fix(logging): gate CF-Connecting-IP on a Cloudflare peer, not any trusted proxy 2026-07-26 10:23:04 -05:00
db Choose the SQLite driver at runtime, and ship the FFmpeg licence with the binaries 2026-08-18 20:57:05 -05:00
lib Repair a missing sqlite driver on hosts that have no built-in one 2026-08-18 23:29:47 -05:00
middleware Merge branch 'fix/recovery-grants' into release/auth-campaign 2026-07-26 16:22:59 -05:00
player Run the ScreenTinker server on the player it serves (#288) 2026-08-18 15:16:09 -05:00
routes White-label: stop naming the upstream product to a reseller's customers (#292) 2026-08-18 22:55:56 -05:00
scripts Drop sharp: pure-JS image ops on a worker thread (#263) 2026-08-13 11:40:13 -05:00
services #240: stop the morning wave buying itself a blocking checkpoint 2026-08-06 20:22:21 -05:00
test Repair a missing sqlite driver on hosts that have no built-in one 2026-08-18 23:29:47 -05:00
ws Run the ScreenTinker server on the player it serves (#288) 2026-08-18 15:16:09 -05:00
.gitignore feat(email): Microsoft Graph send + alert spam protection + preferences UI 2026-05-12 18:16:40 -05:00
config.js SSO: prove domain ownership by DNS, and fix what the second review found 2026-08-10 19:23:46 -05:00
package-lock.json chore(release): v1.9.39 2026-08-18 23:20:47 -05:00
package.json chore(release): v1.9.39 2026-08-18 23:20:47 -05:00
server.js White-label: stop naming the upstream product to a reseller's customers (#292) 2026-08-18 22:55:56 -05:00
smoke-ui.js Keep the smoke test out of npm test, and update the lockfile 2026-07-28 20:34:34 -05:00
version.js chore(version): single-source VERSION, env-configurable data paths, bump tooling 2026-06-10 12:56:03 -05:00