openvibers/openvibe.host Commits
Pins: openvibe-shared 1.17.0 -> 1.17.1 (release notifications)
Changes
@@@ -126,8 +126,10 @@ All commands run on the production host. None of them prints a secret.## Before a site pins openvibe-shared 1.17.0The tab's EventSource is subject to the site's Content-Security-Policy, so `connect-src` must allow--`https://events.openvibe.network`. As of 2026-09-26, Live and Community allow it. Network, Wiki, Blog, Codes,--Search, Reviews, VIP, Tips, Host (Stage B dashboard), News, Deals and Coupons do not. Without it, the++`https://events.openvibe.network`. As of 2026-09-26, every site whose pages load release-watch under a CSP++allows it: Live and Community first, then, with their 1.17.1 pins, Network, Wiki, Blog, Codes, Search, Reviews,++VIP, Tips, Host (Stage B dashboard), News, Deals, Coupons, Trade and the Tools apps. Chat, Media, Games,++OpenRe.Stream and Sites send no CSP with those pages. A new site needs it too. Without it, thebrowser refuses the stream and logs one CSP error per page load (the browser check counts it).release-watch then stops, with state `blocked`, and keeps polling. Add the origin in the same change thatmoves the pin, or set `data-events="off"` on the `ov-release` meta tag.@@@ -18,7 +18,7 @@"express-rate-limit": "^7.5.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.58.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.11.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.17.0"++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.17.1"},"bin": {"ovhost": "bin/ovhost"@@@ -1437,9 +1437,9 @@}},"node_modules/openvibe-shared": {-- "version": "1.17.0",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.17.0",-- "integrity": "sha512-y/sFF7Ji+lj3Vd1L94Dd0Pn35W6YBzV0wR81AwHUcfcLNbjrrihUuSG5Y01g/GWxmQigOgvUrLXUkCZu8AybQg==",++ "version": "1.17.1",++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.17.1",++ "integrity": "sha512-IDwLw3PUxtqXS35QD0pnklsqHD+grHPk9RGpMJgihMXoY46+W5bcPO/2MN8AlCjHaO0WyNp0gYfp02il8Dy+rg==","license": "MIT","dependencies": {"jsonwebtoken": "^9.0.0"@@@ -33,7 +33,7 @@"express-rate-limit": "^7.5.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.58.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.11.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.17.0"++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.17.1"},"engines": {"node": ">=22.0.0"@@@ -51,7 +51,8 @@ const DASHBOARD_CSP = {'style-src': ["'self'", "'unsafe-inline'", 'https://openvibe.network', 'https://fonts.googleapis.com', 'https://cdnjs.cloudflare.com'],'font-src': ["'self'", 'data:', 'https://fonts.gstatic.com', 'https://cdnjs.cloudflare.com'],'img-src': ["'self'", 'data:', 'https:'],-- 'connect-src': ["'self'", 'https://openvibe.network'],++ // events.openvibe.network: release notifications (release-watch's EventSource, openvibe-shared 1.17).++ 'connect-src': ["'self'", 'https://openvibe.network', 'https://events.openvibe.network'],'frame-src': ["'self'", 'https://openvibe.network'],'frame-ancestors': ["'none'"],'object-src': ["'none'"],@@@ -55,6 +55,8 @@ const ORIGIN = 'https://openvibe.host';assert.match(r.text, /Sign in with OpenVibe/);assert.match(r.text, /Stage C\) are not available/);assert.match(r.headers['content-security-policy'], /frame-ancestors 'none'/);++ // Release notifications: release-watch's EventSource on the Events realtime stream (openvibe-shared 1.17).++ assert.match(r.headers['content-security-policy'], /connect-src 'self' https:\/\/openvibe\.network https:\/\/events\.openvibe\.network;/);assert.strictEqual(r.headers['x-frame-options'], 'DENY');assert.strictEqual(r.headers['cache-control'], 'private, no-store');// The public front page is indexable, with a canonical URL; nothing behind sign-in is.
@@ -126,8 +126,10 @@ All commands run on the production host. None of them prints a secret.
@@ -126,8 +126,10 @@ All commands run on the production host. None of them prints a secret.
## Before a site pins openvibe-shared 1.17.0
## Before a site pins openvibe-shared 1.17.0
The tab's EventSource is subject to the site's Content-Security-Policy, so `connect-src` must allow
The tab's EventSource is subject to the site's Content-Security-Policy, so `connect-src` must allow
-`https://events.openvibe.network`. As of 2026-09-26, Live and Community allow it. Network, Wiki, Blog, Codes,
-Search, Reviews, VIP, Tips, Host (Stage B dashboard), News, Deals and Coupons do not. Without it, the
+`https://events.openvibe.network`. As of 2026-09-26, every site whose pages load release-watch under a CSP
+allows it: Live and Community first, then, with their 1.17.1 pins, Network, Wiki, Blog, Codes, Search, Reviews,
+VIP, Tips, Host (Stage B dashboard), News, Deals, Coupons, Trade and the Tools apps. Chat, Media, Games,
+OpenRe.Stream and Sites send no CSP with those pages. A new site needs it too. Without it, the
browser refuses the stream and logs one CSP error per page load (the browser check counts it).
browser refuses the stream and logs one CSP error per page load (the browser check counts it).
release-watch then stops, with state `blocked`, and keeps polling. Add the origin in the same change that
release-watch then stops, with state `blocked`, and keeps polling. Add the origin in the same change that
moves the pin, or set `data-events="off"` on the `ov-release` meta tag.
moves the pin, or set `data-events="off"` on the `ov-release` meta tag.
@@ -18,7 +18,7 @@
@@ -18,7 +18,7 @@
"express-rate-limit": "^7.5.0",
"express-rate-limit": "^7.5.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.58.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.58.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.11.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.11.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.17.0"
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.17.1"
},
},
"bin": {
"bin": {
"ovhost": "bin/ovhost"
"ovhost": "bin/ovhost"
@@ -1437,9 +1437,9 @@
@@ -1437,9 +1437,9 @@
}
}
},
},
"node_modules/openvibe-shared": {
"node_modules/openvibe-shared": {
- "version": "1.17.0",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.17.0",
- "integrity": "sha512-y/sFF7Ji+lj3Vd1L94Dd0Pn35W6YBzV0wR81AwHUcfcLNbjrrihUuSG5Y01g/GWxmQigOgvUrLXUkCZu8AybQg==",
+ "version": "1.17.1",
+ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.17.1",
+ "integrity": "sha512-IDwLw3PUxtqXS35QD0pnklsqHD+grHPk9RGpMJgihMXoY46+W5bcPO/2MN8AlCjHaO0WyNp0gYfp02il8Dy+rg==",
"license": "MIT",
"license": "MIT",
"dependencies": {
"dependencies": {
"jsonwebtoken": "^9.0.0"
"jsonwebtoken": "^9.0.0"
@@ -33,7 +33,7 @@
@@ -33,7 +33,7 @@
"express-rate-limit": "^7.5.0",
"express-rate-limit": "^7.5.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.58.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.58.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.11.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.11.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.17.0"
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.17.1"
},
},
"engines": {
"engines": {
"node": ">=22.0.0"
"node": ">=22.0.0"
@@ -51,7 +51,8 @@ const DASHBOARD_CSP = {
@@ -51,7 +51,8 @@ const DASHBOARD_CSP = {
'style-src': ["'self'", "'unsafe-inline'", 'https://openvibe.network', 'https://fonts.googleapis.com', 'https://cdnjs.cloudflare.com'],
'style-src': ["'self'", "'unsafe-inline'", 'https://openvibe.network', 'https://fonts.googleapis.com', 'https://cdnjs.cloudflare.com'],
'font-src': ["'self'", 'data:', 'https://fonts.gstatic.com', 'https://cdnjs.cloudflare.com'],
'font-src': ["'self'", 'data:', 'https://fonts.gstatic.com', 'https://cdnjs.cloudflare.com'],
'img-src': ["'self'", 'data:', 'https:'],
'img-src': ["'self'", 'data:', 'https:'],
- 'connect-src': ["'self'", 'https://openvibe.network'],
+ // events.openvibe.network: release notifications (release-watch's EventSource, openvibe-shared 1.17).
+ 'connect-src': ["'self'", 'https://openvibe.network', 'https://events.openvibe.network'],
'frame-src': ["'self'", 'https://openvibe.network'],
'frame-src': ["'self'", 'https://openvibe.network'],
'frame-ancestors': ["'none'"],
'frame-ancestors': ["'none'"],
'object-src': ["'none'"],
'object-src': ["'none'"],
@@ -55,6 +55,8 @@ const ORIGIN = 'https://openvibe.host';
@@ -55,6 +55,8 @@ const ORIGIN = 'https://openvibe.host';
assert.match(r.text, /Sign in with OpenVibe/);
assert.match(r.text, /Sign in with OpenVibe/);
assert.match(r.text, /Stage C\) are not available/);
assert.match(r.text, /Stage C\) are not available/);
assert.match(r.headers['content-security-policy'], /frame-ancestors 'none'/);
assert.match(r.headers['content-security-policy'], /frame-ancestors 'none'/);
+ // Release notifications: release-watch's EventSource on the Events realtime stream (openvibe-shared 1.17).
+ assert.match(r.headers['content-security-policy'], /connect-src 'self' https:\/\/openvibe\.network https:\/\/events\.openvibe\.network;/);
assert.strictEqual(r.headers['x-frame-options'], 'DENY');
assert.strictEqual(r.headers['x-frame-options'], 'DENY');
assert.strictEqual(r.headers['cache-control'], 'private, no-store');
assert.strictEqual(r.headers['cache-control'], 'private, no-store');
// The public front page is indexable, with a canonical URL; nothing behind sign-in is.
// The public front page is indexable, with a canonical URL; nothing behind sign-in is.