openvibers/openrestream Commits
openvibe-shared v4.108.0 (was v4.107.4) (#202)
Changes
@@@ -315,5 +315,5 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by [<!-- versions:start -->- openvibe-contracts: v0.222.0- openvibe-sdk: v0.82.0--- openvibe-shared: v4.107.4++- openvibe-shared: v4.108.0<!-- versions:end -->@@@ -10,7 +10,7 @@"domain": "openre.stream","contracts": "openvibe-contracts v0.222.0","sdk": "openvibe-sdk v0.82.0",-- "shared": "openvibe-shared v4.107.4",++ "shared": "openvibe-shared v4.108.0","protocols": {"rtmp": "ingest ported (openre-rtmp-ingest)","restream": "RTMP source to RTMP/RTMPS/SRT destinations ported (openre-restream-worker)",@@@ -17,7 +17,7 @@"node-media-server": "2.7.4","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.222.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.4",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.108.0","pg": "^8.23.0","sdp-transform": "^3.0.0","ws": "^8.18.0"@@@ -1957,9 +1957,9 @@}},"node_modules/openvibe-shared": {-- "version": "4.107.4",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.4",-- "integrity": "sha512-tThN0m3KMncEHVcBOvE+ysHjsZTlVIDLG1P+/i2Mulmxfc/AUpebAXhpWWrut50OChZ8o+HeePxsSrPI8mUQOQ==",++ "version": "4.108.0",++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.108.0",++ "integrity": "sha512-NPzwjxpzGIpFpIm4uw3+VwHfsxbJ2+cD9yuhRzSwolSwqv2kCmwaVtHJ0DA9gKO3K8PCBfIP3UpKzpuSbYEJ+g==","license": "MIT","dependencies": {"jsonwebtoken": "^9.0.0",@@@ -33,7 +33,7 @@"node-media-server": "2.7.4","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.222.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.4",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.108.0","pg": "^8.23.0","sdp-transform": "^3.0.0","ws": "^8.18.0"@@@ -60,8 +60,19 @@ function createDiscoveryRoutes({ config, releaseLastmod }) {] },],});-- router.get('/llms.txt', (_req, res) => res.type('text/plain').set('Cache-Control', cache.htmlHeaders()).send(-- seo.llmsTxt(llmsSite())));++ // AGT-5: the home and /updates link their Markdown twins (openvibe-shared 4.108.0's markdown mode); the sitemap and++ // robots.txt are files and keep their URL. The machine-readable files are ## Optional, last.++ router.get('/llms.txt', (_req, res) => {++ const d = llmsSite();++ const machine = (d.sections || []).find((x) => x.title === 'Machine-readable');++ res.type('text/plain').set('Cache-Control', cache.htmlHeaders()).send(seo.llmsTxt({++ ...d,++ markdown: true,++ base: config.baseUrl,++ sections: (d.sections || []).filter((x) => x !== machine),++ optional: [...(machine ? machine.links : []), { title: 'Full text for language models', url: abs('/llms-full.txt') }],++ }));++ });// The same, in full (SEO-33): what the site is, then every page llms.txt lists with what it holds.router.get('/llms-full.txt', (_req, res) => {const d = llmsSite();@@@ -62,6 +62,12 @@ t('llms.txt is plain text, leads with open restreaming (OpenVibe Live on by defa// Only the RTMP ingest and restream workers run in production: WHIP and JSMPEG are ported, not served yet.assert.match(r.text, /WHIP \(RFC 9725\) to https:\/\/ingest\.openre\.stream\/whip\/<ingest key>, open to browsers/);assert.doesNotMatch(r.text, /do not run in production yet/, 'the workers run');++ // AGT-5: own pages at their Markdown twins, other sites and files as they are, ## Optional last.++ assert.match(r.text, /\[OpenRestream home\]\(https?:\/\/[^)]*\/index\.md\)/);++ assert.match(r.text, /\[What shipped\]\(https?:\/\/[^)]*\/updates\.md\)/);++ assert.ok(r.text.includes('(https://github.com/OpenVibers/OpenRestream)'));++ assert.match(r.text, /\(https?:\/\/[^)]*\/sitemap\.xml\)/);++ assert.ok(r.text.includes('\n## Optional\n') && r.text.lastIndexOf('\n## ') === r.text.indexOf('\n## Optional\n'), 'Optional is last');} finally {await api.close();}
@@ -315,5 +315,5 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by [
@@ -315,5 +315,5 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by [
<!-- versions:start -->
<!-- versions:start -->
- openvibe-contracts: v0.222.0
- openvibe-contracts: v0.222.0
- openvibe-sdk: v0.82.0
- openvibe-sdk: v0.82.0
-- openvibe-shared: v4.107.4
+- openvibe-shared: v4.108.0
<!-- versions:end -->
<!-- versions:end -->
@@ -10,7 +10,7 @@
@@ -10,7 +10,7 @@
"domain": "openre.stream",
"domain": "openre.stream",
"contracts": "openvibe-contracts v0.222.0",
"contracts": "openvibe-contracts v0.222.0",
"sdk": "openvibe-sdk v0.82.0",
"sdk": "openvibe-sdk v0.82.0",
- "shared": "openvibe-shared v4.107.4",
+ "shared": "openvibe-shared v4.108.0",
"protocols": {
"protocols": {
"rtmp": "ingest ported (openre-rtmp-ingest)",
"rtmp": "ingest ported (openre-rtmp-ingest)",
"restream": "RTMP source to RTMP/RTMPS/SRT destinations ported (openre-restream-worker)",
"restream": "RTMP source to RTMP/RTMPS/SRT destinations ported (openre-restream-worker)",
@@ -17,7 +17,7 @@
@@ -17,7 +17,7 @@
"node-media-server": "2.7.4",
"node-media-server": "2.7.4",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.222.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.222.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.4",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.108.0",
"pg": "^8.23.0",
"pg": "^8.23.0",
"sdp-transform": "^3.0.0",
"sdp-transform": "^3.0.0",
"ws": "^8.18.0"
"ws": "^8.18.0"
@@ -1957,9 +1957,9 @@
@@ -1957,9 +1957,9 @@
}
}
},
},
"node_modules/openvibe-shared": {
"node_modules/openvibe-shared": {
- "version": "4.107.4",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.4",
- "integrity": "sha512-tThN0m3KMncEHVcBOvE+ysHjsZTlVIDLG1P+/i2Mulmxfc/AUpebAXhpWWrut50OChZ8o+HeePxsSrPI8mUQOQ==",
+ "version": "4.108.0",
+ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.108.0",
+ "integrity": "sha512-NPzwjxpzGIpFpIm4uw3+VwHfsxbJ2+cD9yuhRzSwolSwqv2kCmwaVtHJ0DA9gKO3K8PCBfIP3UpKzpuSbYEJ+g==",
"license": "MIT",
"license": "MIT",
"dependencies": {
"dependencies": {
"jsonwebtoken": "^9.0.0",
"jsonwebtoken": "^9.0.0",
@@ -33,7 +33,7 @@
@@ -33,7 +33,7 @@
"node-media-server": "2.7.4",
"node-media-server": "2.7.4",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.222.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.222.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.4",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.108.0",
"pg": "^8.23.0",
"pg": "^8.23.0",
"sdp-transform": "^3.0.0",
"sdp-transform": "^3.0.0",
"ws": "^8.18.0"
"ws": "^8.18.0"
@@ -60,8 +60,19 @@ function createDiscoveryRoutes({ config, releaseLastmod }) {
@@ -60,8 +60,19 @@ function createDiscoveryRoutes({ config, releaseLastmod }) {
] },
] },
],
],
});
});
- router.get('/llms.txt', (_req, res) => res.type('text/plain').set('Cache-Control', cache.htmlHeaders()).send(
- seo.llmsTxt(llmsSite())));
+ // AGT-5: the home and /updates link their Markdown twins (openvibe-shared 4.108.0's markdown mode); the sitemap and
+ // robots.txt are files and keep their URL. The machine-readable files are ## Optional, last.
+ router.get('/llms.txt', (_req, res) => {
+ const d = llmsSite();
+ const machine = (d.sections || []).find((x) => x.title === 'Machine-readable');
+ res.type('text/plain').set('Cache-Control', cache.htmlHeaders()).send(seo.llmsTxt({
+ ...d,
+ markdown: true,
+ base: config.baseUrl,
+ sections: (d.sections || []).filter((x) => x !== machine),
+ optional: [...(machine ? machine.links : []), { title: 'Full text for language models', url: abs('/llms-full.txt') }],
+ }));
+ });
// The same, in full (SEO-33): what the site is, then every page llms.txt lists with what it holds.
// The same, in full (SEO-33): what the site is, then every page llms.txt lists with what it holds.
router.get('/llms-full.txt', (_req, res) => {
router.get('/llms-full.txt', (_req, res) => {
const d = llmsSite();
const d = llmsSite();
@@ -62,6 +62,12 @@ t('llms.txt is plain text, leads with open restreaming (OpenVibe Live on by defa
@@ -62,6 +62,12 @@ t('llms.txt is plain text, leads with open restreaming (OpenVibe Live on by defa
// Only the RTMP ingest and restream workers run in production: WHIP and JSMPEG are ported, not served yet.
// Only the RTMP ingest and restream workers run in production: WHIP and JSMPEG are ported, not served yet.
assert.match(r.text, /WHIP \(RFC 9725\) to https:\/\/ingest\.openre\.stream\/whip\/<ingest key>, open to browsers/);
assert.match(r.text, /WHIP \(RFC 9725\) to https:\/\/ingest\.openre\.stream\/whip\/<ingest key>, open to browsers/);
assert.doesNotMatch(r.text, /do not run in production yet/, 'the workers run');
assert.doesNotMatch(r.text, /do not run in production yet/, 'the workers run');
+ // AGT-5: own pages at their Markdown twins, other sites and files as they are, ## Optional last.
+ assert.match(r.text, /\[OpenRestream home\]\(https?:\/\/[^)]*\/index\.md\)/);
+ assert.match(r.text, /\[What shipped\]\(https?:\/\/[^)]*\/updates\.md\)/);
+ assert.ok(r.text.includes('(https://github.com/OpenVibers/OpenRestream)'));
+ assert.match(r.text, /\(https?:\/\/[^)]*\/sitemap\.xml\)/);
+ assert.ok(r.text.includes('\n## Optional\n') && r.text.lastIndexOf('\n## ') === r.text.indexOf('\n## Optional\n'), 'Optional is last');
} finally {
} finally {
await api.close();
await api.close();
}
}