openvibers/openvibe.community 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
Changes
@@@ -19,7 +19,7 @@"multer": "^2.4.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.35.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.7.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.1"++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.12.0"},"engines": {"node": ">=20.0.0"@@@ -1082,9 +1082,9 @@}},"node_modules/openvibe-shared": {-- "version": "1.11.1",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.1",-- "integrity": "sha512-hBaZlZRVZjkGfsPQE16rQIou2lUuusADea3Evx1tVjB84FTHGHS7ZALfcXaNOk7dR53HOVTJrQ0njmScdreUiw==",++ "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"@@@ -28,7 +28,7 @@"multer": "^2.4.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.35.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.7.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.1"++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.12.0"},"engines": {"node": ">=20.0.0"@@@ -183,6 +183,8 @@ function createApp(opts = {}) {app.get('/api/ready', readiness.handler);// ── Static assets (content-hashed ?v= → immutable) ───────++ // 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, etag: true, redirect: false,setHeaders(res, filePath) {@@@ -7,6 +7,7 @@* Network), this site's small stylesheet and its progressive script.*/const crypto = require('crypto');++const ovServe = require('openvibe-shared/serve');const fs = require('fs');const path = require('path');const config = require('../config');@@@ -124,12 +125,12 @@ ${o.modified ? `<meta property="article:modified_time" content="${escapeHtml(o.m<meta name="twitter:image" content="${escapeHtml(ogImage)}">${require('openvibe-shared/app-icon').headTags({ site: 'community', iconBase: '/assets' })}${(o.feeds || [{ title: `${SITE_NAME} — latest pastes`, href: '/feed.xml' }]).map((f) => `<link rel="alternate" type="application/rss+xml" title="${escapeHtml(f.title)}" href="${escapeHtml(f.href)}">`).join('\n')}--<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/community.css')}"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" crossorigin="anonymous" referrerpolicy="no-referrer">${jsonLdScript(o.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/community.js')}" defer></script></head><body class="${escapeHtml(o.bodyClass || '')}">@@@ -6,6 +6,7 @@* comforts (copy, in-place pagination, the create form's upload path).*/const config = require('../config');++const ovServe = require('openvibe-shared/serve');const live = require('../live-client');const seo = require('../seo');const { renderPage, SITE_NAME, DEFAULT_OG_IMAGE } = require('./layout');@@@ -154,7 +155,7 @@ function updatesPage() {title: 'What shipped on OpenVibe.Community',description: 'Every change deployed to OpenVibe.Community, newest first, with the Patch notes that gather them.',canonicalPath: '/updates',-- body: frame.updatesBody({ service: 'community', siteName: 'OpenVibe.Community' }) + frame.shippedScript(),++ body: frame.updatesBody({ service: 'community', siteName: 'OpenVibe.Community' }) + `<script src="${ovServe.url('shipped.js')}" defer></script>`,});}@@@ -16,9 +16,9 @@ const { boot, check, done } = require('./helpers/app');has(r.text, '<meta property="og:type" content="website">');has(r.text, '<meta name="twitter:card" content="summary">');has(r.text, '"@type":"WebSite"');-- has(r.text, 'https://openvibe.network/shared/theme-loader.js');-- has(r.text, 'https://openvibe.network/shared/navbar.js');-- has(r.text, 'https://openvibe.network/shared/footer.js');++ has(r.text, '/shared/theme-loader.js?v=');++ has(r.text, '/shared/navbar.js?v=');++ has(r.text, '/shared/footer.js?v=');has(r.text, '<h1>Share it with a link. Talk about it here.</h1>');has(r.text, '<h2>Latest pastes</h2>');has(r.text, '<h2>Most viewed</h2>');
@@ -19,7 +19,7 @@
@@ -19,7 +19,7 @@
"multer": "^2.4.0",
"multer": "^2.4.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.35.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.35.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.7.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.7.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.1"
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.12.0"
},
},
"engines": {
"engines": {
"node": ">=20.0.0"
"node": ">=20.0.0"
@@ -1082,9 +1082,9 @@
@@ -1082,9 +1082,9 @@
}
}
},
},
"node_modules/openvibe-shared": {
"node_modules/openvibe-shared": {
- "version": "1.11.1",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.1",
- "integrity": "sha512-hBaZlZRVZjkGfsPQE16rQIou2lUuusADea3Evx1tVjB84FTHGHS7ZALfcXaNOk7dR53HOVTJrQ0njmScdreUiw==",
+ "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",
"license": "MIT",
"dependencies": {
"dependencies": {
"jsonwebtoken": "^9.0.0"
"jsonwebtoken": "^9.0.0"
@@ -28,7 +28,7 @@
@@ -28,7 +28,7 @@
"multer": "^2.4.0",
"multer": "^2.4.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.35.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.35.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.7.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.7.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.1"
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.12.0"
},
},
"engines": {
"engines": {
"node": ">=20.0.0"
"node": ">=20.0.0"
@@ -183,6 +183,8 @@ function createApp(opts = {}) {
@@ -183,6 +183,8 @@ function createApp(opts = {}) {
app.get('/api/ready', readiness.handler);
app.get('/api/ready', readiness.handler);
// ── Static assets (content-hashed ?v= → immutable) ───────
// ── Static assets (content-hashed ?v= → immutable) ───────
+ // 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, {
app.use(express.static(PUBLIC_DIR, {
index: false, etag: true, redirect: false,
index: false, etag: true, redirect: false,
setHeaders(res, filePath) {
setHeaders(res, filePath) {
@@ -7,6 +7,7 @@
@@ -7,6 +7,7 @@
* Network), this site's small stylesheet and its progressive script.
* Network), this site's small stylesheet and its progressive script.
*/
*/
const crypto = require('crypto');
const crypto = require('crypto');
+const ovServe = require('openvibe-shared/serve');
const fs = require('fs');
const fs = require('fs');
const path = require('path');
const path = require('path');
const config = require('../config');
const config = require('../config');
@@ -124,12 +125,12 @@ ${o.modified ? `<meta property="article:modified_time" content="${escapeHtml(o.m
@@ -124,12 +125,12 @@ ${o.modified ? `<meta property="article:modified_time" content="${escapeHtml(o.m
<meta name="twitter:image" content="${escapeHtml(ogImage)}">
<meta name="twitter:image" content="${escapeHtml(ogImage)}">
${require('openvibe-shared/app-icon').headTags({ site: 'community', iconBase: '/assets' })}
${require('openvibe-shared/app-icon').headTags({ site: 'community', iconBase: '/assets' })}
${(o.feeds || [{ title: `${SITE_NAME} — latest pastes`, href: '/feed.xml' }]).map((f) => `<link rel="alternate" type="application/rss+xml" title="${escapeHtml(f.title)}" href="${escapeHtml(f.href)}">`).join('\n')}
${(o.feeds || [{ title: `${SITE_NAME} — latest pastes`, href: '/feed.xml' }]).map((f) => `<link rel="alternate" type="application/rss+xml" title="${escapeHtml(f.title)}" href="${escapeHtml(f.href)}">`).join('\n')}
-<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/community.css')}">
<link rel="stylesheet" href="${asset('css/community.css')}">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" crossorigin="anonymous" referrerpolicy="no-referrer">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" crossorigin="anonymous" referrerpolicy="no-referrer">
${jsonLdScript(o.jsonLd)}
${jsonLdScript(o.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/community.js')}" defer></script>
<script src="${asset('js/community.js')}" defer></script>
</head>
</head>
<body class="${escapeHtml(o.bodyClass || '')}">
<body class="${escapeHtml(o.bodyClass || '')}">
@@ -6,6 +6,7 @@
@@ -6,6 +6,7 @@
* comforts (copy, in-place pagination, the create form's upload path).
* comforts (copy, in-place pagination, the create form's upload path).
*/
*/
const config = require('../config');
const config = require('../config');
+const ovServe = require('openvibe-shared/serve');
const live = require('../live-client');
const live = require('../live-client');
const seo = require('../seo');
const seo = require('../seo');
const { renderPage, SITE_NAME, DEFAULT_OG_IMAGE } = require('./layout');
const { renderPage, SITE_NAME, DEFAULT_OG_IMAGE } = require('./layout');
@@ -154,7 +155,7 @@ function updatesPage() {
@@ -154,7 +155,7 @@ function updatesPage() {
title: 'What shipped on OpenVibe.Community',
title: 'What shipped on OpenVibe.Community',
description: 'Every change deployed to OpenVibe.Community, newest first, with the Patch notes that gather them.',
description: 'Every change deployed to OpenVibe.Community, newest first, with the Patch notes that gather them.',
canonicalPath: '/updates',
canonicalPath: '/updates',
- body: frame.updatesBody({ service: 'community', siteName: 'OpenVibe.Community' }) + frame.shippedScript(),
+ body: frame.updatesBody({ service: 'community', siteName: 'OpenVibe.Community' }) + `<script src="${ovServe.url('shipped.js')}" defer></script>`,
});
});
}
}
@@ -16,9 +16,9 @@ const { boot, check, done } = require('./helpers/app');
@@ -16,9 +16,9 @@ const { boot, check, done } = require('./helpers/app');
has(r.text, '<meta property="og:type" content="website">');
has(r.text, '<meta property="og:type" content="website">');
has(r.text, '<meta name="twitter:card" content="summary">');
has(r.text, '<meta name="twitter:card" content="summary">');
has(r.text, '"@type":"WebSite"');
has(r.text, '"@type":"WebSite"');
- has(r.text, 'https://openvibe.network/shared/theme-loader.js');
- has(r.text, 'https://openvibe.network/shared/navbar.js');
- has(r.text, 'https://openvibe.network/shared/footer.js');
+ has(r.text, '/shared/theme-loader.js?v=');
+ has(r.text, '/shared/navbar.js?v=');
+ has(r.text, '/shared/footer.js?v=');
has(r.text, '<h1>Share it with a link. Talk about it here.</h1>');
has(r.text, '<h1>Share it with a link. Talk about it here.</h1>');
has(r.text, '<h2>Latest pastes</h2>');
has(r.text, '<h2>Latest pastes</h2>');
has(r.text, '<h2>Most viewed</h2>');
has(r.text, '<h2>Most viewed</h2>');