openvibers/openvibe.vip Commits

The OpenVibe Frame from this site's own pinned copy: /shared/* is served by openvibe-shared/serve (1.12.0) and every page references it by content hash (/shared/<file>?v=<hash>), so this site's pin decides what its pages run and its navbar and footer keep working while openvibe.network is down

OP OpenVibers committed 24 Sept 2026 · 86e6996ce1 · 6 files, +14 −10


Changes

ddiff --git a/package-lock.json b/package-lock.json
iindex bad7946..f1871b1 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -16,7 +16,7 @@
"jsonwebtoken": "^9.0.2",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.33.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.5.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.0"
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.12.0"
},
"engines": {
"node": ">=22.0.0"
@@@ -1008,9 +1008,9 @@
}
},
"node_modules/openvibe-shared": {
-- "version": "1.11.0",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.0",
-- "integrity": "sha512-edMW0I25HNFReLcfZ9ak+4q5sy2t7qq7EPG52tOerTBV2fU994C5we/02AD/9i2Vuq0+ayNBBisW0cg60L6DLQ==",
++ "version": "1.12.0",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.12.0",
++ "integrity": "sha512-Qpy4YVoPMs1q/0/08/5ZODI0+7ev+Krk75nsRPsTjNCm7Eu91tt1LPnUNLt4kYfRj6duS+N9icm02gksnlMiyA==",
"license": "MIT",
"dependencies": {
"jsonwebtoken": "^9.0.0"
ddiff --git a/package.json b/package.json
iindex 5741ee1..dffe0f1 100644
---- a/package.json
++++ b/package.json
@@@ -28,7 +28,7 @@
"jsonwebtoken": "^9.0.2",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.33.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.5.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.0"
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.12.0"
},
"engines": {
"node": ">=22.0.0"
ddiff --git a/server/app.js b/server/app.js
iindex 5ae6c72..77f9afd 100644
---- a/server/app.js
++++ b/server/app.js
@@@ -95,6 +95,8 @@ function createApp(opts = {}) {
app.use('/auth', createSessionRoutes(config, userAuth, { fetchImpl }));
{ const legal = require('openvibe-shared/legal'); app.get(legal.PATHS, legal.handler({ id: 'vip', service: 'vip', host: 'openvibe.vip', name: 'OpenVibe.VIP', profile: 'ugc' })); }
++ // This site's own pinned copy of the OpenVibe Frame's browser files (openvibe-shared/serve).
++ app.use('/shared', require('openvibe-shared/serve').handler());
app.use(express.static(PUBLIC_DIR, {
index: false, redirect: false,
setHeaders(res, filePath) {
ddiff --git a/server/web/layout.js b/server/web/layout.js
iindex d36831f..c1b477f 100644
---- a/server/web/layout.js
++++ b/server/web/layout.js
@@@ -7,6 +7,7 @@
* site's stylesheet and its small progressive script. Everything is useful without JavaScript.
*/
const crypto = require('crypto');
++const ovServe = require('openvibe-shared/serve');
const fs = require('fs');
const path = require('path');
const appIcon = require('openvibe-shared/app-icon');
@@@ -80,11 +81,11 @@ ${o.ogImage ? `<meta property="og:image" content="${esc(o.ogImage)}">` : ''}
<meta name="twitter:card" content="summary">
${appIcon.headTags({ site: 'vip' })}
${release ? release.metaTag() : ''}
--<script src="${NETWORK_URL}/shared/theme-loader.js" defer></script>
++<script src="${ovServe.url('theme-loader.js')}" defer></script>
<link rel="stylesheet" href="${asset('css/vip.css')}">
${jsonLd}
--<script src="${NETWORK_URL}/shared/navbar.js" defer></script>
--<script src="${NETWORK_URL}/shared/footer.js" defer></script>
++<script src="${ovServe.url('navbar.js')}" defer></script>
++<script src="${ovServe.url('footer.js')}" defer></script>
<script src="${asset('js/vip.js')}" defer></script>
</head>
<body>
ddiff --git a/server/web/routes.js b/server/web/routes.js
iindex 6087f82..62d4860 100644
---- a/server/web/routes.js
++++ b/server/web/routes.js
@@@ -14,6 +14,7 @@
* domain calls as the API and redirects back with a notice (?ok= / ?error=).
*/
const crypto = require('crypto');
++const ovServe = require('openvibe-shared/serve');
const frame = require('openvibe-shared/frame');
const express = require('express');
const { VipError, bool } = require('../util');
@@@ -79,7 +80,7 @@ function createWebRoutes({ domain, config, layout, userAuth }) {
});
// What shipped on OpenVibe.VIP: the shared update log every OpenVibe site has.
-- router.get('/updates', (req, res) => send(res, 200, { viewer: req.viewer, canonicalPath: '/updates', title: 'What shipped on OpenVibe.VIP', body: frame.updatesBody({ service: 'vip', siteName: 'OpenVibe.VIP' }) + frame.shippedScript() }));
++ router.get('/updates', (req, res) => send(res, 200, { viewer: req.viewer, canonicalPath: '/updates', title: 'What shipped on OpenVibe.VIP', body: frame.updatesBody({ service: 'vip', siteName: 'OpenVibe.VIP' }) + `<script src="${ovServe.url('shipped.js')}" defer></script>` }));
router.get('/', (req, res) => send(res, 200, {
active: 'home', viewer: req.viewer, canonicalPath: '/',
body: pages.home({ creators: creators.listPublic().map(creators.present) }),
ddiff --git a/test/api.test.js b/test/api.test.js
iindex 81d7800..e7734d9 100644
---- a/test/api.test.js
++++ b/test/api.test.js
@@@ -166,7 +166,7 @@ const { test, run } = harness('api');
assert.match(p.text, /\$4\.99<\/b> every 30 days/);
assert.match(p.text, /Sign in to join/);
assert.match(p.text, /<link rel="canonical" href="http:\/\/vip\.test\/lena">/);
-- assert.match(p.text, /openvibe\.network\/shared\/navbar\.js/);
++ assert.match(p.text, /\/shared\/navbar\.js\?v=[0-9a-f]{12}/);
assert.match(p.text, /<noscript>/);
assert.doesNotMatch(p.text, /\bfree\b|\$0|no ads/i);
const hist = await t.page(`/lena/plans/${plan.slug}`);