openvibers/openvibe.network Commits

openvibe-shared v4.12.0 (was v4.11.0) (#328)

OP OpenVibers committed 19 days ago · c2fdf702d6 · 6 files, +12 −11

* openvibe-shared v4.12.0 (was v4.11.0)

Opened by scripts/pin-bump.js in OpenVibers/OpenVibe.Shared after the v4.12.0 release.

* Shared 4.12.0: seasons name their light half (Hayride, Snowfall); home JS budget 70 KB brotli (68.0 measured)

Changes

ddiff --git a/README.md b/README.md
iindex 73763d90..85c0d9e0 100644
---- a/README.md
++++ b/README.md
@@@ -50,7 +50,7 @@ Identity and account service for the OpenVibe network. Manages user accounts, OA
## Depends on
- `openvibe-contracts` v0.213.0 (registry manifests, capability checks), `openvibe-sdk` v0.64.0 (PostgreSQL
-- and Valkey adapters, events, per-actor limits, universal telemetry), `openvibe-shared` v4.11.0, pinned by release tarball
++ and Valkey adapters, events, per-actor limits, universal telemetry), `openvibe-shared` v4.12.0, pinned by release tarball
- OpenVibe.Events (Network's outbox relay; the events it consumes), OpenVibe.AI (the `network.site_copy`
workflow), OpenVibe.Blog (the changelog feed it proxies)
- email (Resend), Discord and GitHub when their secrets are set ([Provider secrets](#provider-secrets))
@@@ -759,5 +759,5 @@ MIT (`license` in [package.json](package.json)).
<!-- versions:start -->
- openvibe-contracts: v0.213.0
- openvibe-sdk: v0.64.0
--- openvibe-shared: v4.11.0
++- openvibe-shared: v4.12.0
<!-- versions:end -->
ddiff --git a/STATUS.json b/STATUS.json
iindex 4203f6a5..eae46f96 100644
---- a/STATUS.json
++++ b/STATUS.json
@@@ -8,7 +8,7 @@
"domain": "openvibe.network (with auth., api., admin., my. and themes.openvibe.network in its manifest)",
"contracts": "openvibe-contracts v0.213.0",
"sdk": "openvibe-sdk v0.64.0",
-- "shared": "openvibe-shared v4.11.0",
++ "shared": "openvibe-shared v4.12.0",
"capabilities": [
"identity.subject.resolve",
"mods.grant.manage",
ddiff --git a/package-lock.json b/package-lock.json
iindex 3929e1be..8592ba76 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -22,7 +22,7 @@
"multer": "^1.4.5-lts.1",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.213.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.64.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.11.0",
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.12.0",
"pg": "^8.23.0",
"uuid": "^11.1.0",
"web-push": "^3.6.7"
@@@ -1364,9 +1364,9 @@
}
},
"node_modules/openvibe-shared": {
-- "version": "4.11.0",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.11.0",
-- "integrity": "sha512-/OKVLcD4PN/C9g8Nwox+OE7cY7PHDfYduh6Kbe3f12V19bb9n2fDciK5ND4IlYCq3T5CHChL3vZyJIaPdWKrCA==",
++ "version": "4.12.0",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.12.0",
++ "integrity": "sha512-k0i63sCPfHtz1KF5MJSI+CGv5VwBf4ISRzxJRQdorkeMKOTtABlAQfiH1uf9kJsd5/Wn7VUTTHlhhOLSX6ZTzw==",
"license": "MIT",
"dependencies": {
"jsonwebtoken": "^9.0.0"
ddiff --git a/package.json b/package.json
iindex fe0452cf..f14bb32c 100644
---- a/package.json
++++ b/package.json
@@@ -26,7 +26,7 @@
"multer": "^1.4.5-lts.1",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.213.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.64.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.11.0",
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.12.0",
"pg": "^8.23.0",
"uuid": "^11.1.0",
"web-push": "^3.6.7"
ddiff --git a/test/perf-budget.test.js b/test/perf-budget.test.js
iindex 900abc3d..0a6dc629 100644
---- a/test/perf-budget.test.js
++++ b/test/perf-budget.test.js
@@@ -16,7 +16,7 @@ const BUDGETS = {
htmlBrotliKB: 30, // 28.5 with the FAQ, numbers and groups (2026-10-22); 26.1 with Play; 25.1 (31 sites, contracts 0.135.0); 24.1 (shared 2.21.0, the same glyphs); 20.5 (contracts 0.116.0)
jsFiles: 8, // 7 with boost.js, was 6 (2026-10-13, plan T11 step 3: one more script on every boosted page; it loads route-transition.js on the first move only)
jsRawKB: 274, // 269.3 with shared 4.11.0's seasonal navbar (Pumpkin Night and the season badge, +2.6); 249.8 with boost.js (13.1); 228.3
-- jsBrotliKB: 66, // 64.5 with shared 4.11.0's navbar; 60.3 with boost.js (3.8); 53.9
++ jsBrotliKB: 70, // 68.0 with shared 4.12.0 (light/dark switch, seasonal mark, theme pairs); 64.5 with shared 4.11.0's navbar; 60.3 with boost.js (3.8); 53.9
cssFiles: 2, // 1 (Font Awesome, cross-origin)
externalFiles: 3, // 1 locally; production adds Cloudflare's beacon
};
ddiff --git a/test/themes-review.test.js b/test/themes-review.test.js
iindex 38c52f04..5cffe407 100644
---- a/test/themes-review.test.js
++++ b/test/themes-review.test.js
@@@ -115,13 +115,14 @@ const token = async (id) => signToken(await db.prepare('SELECT * FROM users WHER
// ── Seasons: what stands in for the default theme when, for apps and the SDK ──
r = await call('GET', '/api/themes/seasons?date=2026-10-25');
assert.deepStrictEqual(r.body.seasons.map((x) => [x.id, x.theme, x.from, x.to]), [['halloween', 'halloween', '10-01', '10-31'], ['winter', 'frost', '12-01', '12-31']]);
-- assert.deepStrictEqual(r.body.now, { id: 'halloween', name: 'Halloween', theme: 'halloween' });
++ // openvibe-shared 4.12: a season names its light half too (Midnight Pumpkin ↔ Hayride).
++ assert.deepStrictEqual(r.body.now, { id: 'halloween', name: 'Halloween', theme: 'halloween', light: 'hayride' });
assert.strictEqual((await call('GET', '/api/themes/seasons?date=2026-11-05')).body.now, null);
assert.strictEqual((await call('GET', '/api/themes/seasons?date=2026-12-24')).body.now.id, 'winter');
const cat = (await call('GET', '/api/themes')).body.themes;
const pumpkin = cat.find((t) => t.id === 'halloween');
assert.ok(!pumpkin || (pumpkin.season && pumpkin.season.id === 'halloween'), 'a seasonal theme in the catalog says its season');
-- assert.ok(cat.filter((t) => t.season).every((t) => ['halloween', 'frost'].includes(t.id)), 'and only those');
++ assert.ok(cat.filter((t) => t.season).every((t) => ['halloween', 'hayride', 'frost', 'snowfall'].includes(t.id)), 'and only those (and their light halves)');
server.close();
fs.rmSync(dir, { recursive: true, force: true });