openvibers/openvibe.tools Commits
openvibe-shared v4.108.0 (was v4.107.4) (#209)
Changes
@@@ -31,7 +31,7 @@ offline against the Network's public key (JWKS).OpenVibe.Search (tool documents), OpenVibe.Community (the paste hand-over), OpenVibe.Billing (job usagereadings)- host programs some tools need (ffmpeg, yt-dlp, qpdf, poppler, libheif; [Host packages](#host-packages-some-tools-need))--- in each app: `openvibe-contracts` v0.92.0 (img, audio, docs, gateway), `openvibe-sdk` v0.12.0 and `openvibe-shared` v4.107.4, pinned++- in each app: `openvibe-contracts` v0.92.0 (img, audio, docs, gateway), `openvibe-sdk` v0.12.0 and `openvibe-shared` v4.108.0, pinnedby release tarball, and `apps/_shared` (openvibe-tools-shared) by relative path## Capabilities@@@ -642,5 +642,5 @@ counters and salt use Valkey through `VALKEY_URL`, with process-local state when<!-- versions:start -->- openvibe-contracts: v0.222.0- openvibe-sdk: v0.82.0--- openvibe-shared: v4.107.4++- openvibe-shared: v4.108.0<!-- versions:end -->@@@ -18,7 +18,7 @@"domain": "openvibe.tools and *.openvibe.tools","contracts": "openvibe-contracts v0.222.0 (the gateway, img, audio and docs apps' package.json; the root package.json pins none)","sdk": "openvibe-sdk v0.82.0 (the gateway's package.json; the other apps are still on v0.67.0)",-- "shared": "openvibe-shared v4.107.4 (each app's package.json; the root package.json pins none)",++ "shared": "openvibe-shared v4.108.0 (each app's package.json; the root package.json pins none)","capabilities": ["tools.job.create","tools.job.read",@@@ -25,7 +25,7 @@"multer": "^1.4.5-lts.1","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","uuid": "^11.1.0"}}@@@ -24,7 +24,7 @@"multer": "^1.4.5-lts.1","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","pdf-lib": "^1.17.1","sharp": "^0.33.5","uuid": "^11.1.0"@@@ -20,6 +20,6 @@"express-rate-limit": "^7.1.5","helmet": "^7.1.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"}}@@@ -23,7 +23,7 @@"jsonwebtoken": "^9.0.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-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","bwip-js": "4.11.4","zxing-wasm": "3.1.5"}@@@ -660,20 +660,36 @@ function sitemapEntries() {// /llms-full.txt carries the same pages with their full description. One source, so the two can// never disagree about what is public. The noindex search page and the site's own /tool/*,// /developers and /updates pages were never in llms.txt and stay out of both.++// AGT-5: the site's own pages go in first, at their Markdown twins; every tool is on another subdomain.function llmsSections() {const { tools, families } = registry.get();-- return families.filter(f => f.path).map(f => ({-- title: f.name,-- links: tools.filter(t => t.family === f.id).map(t => ({ title: t.name, url: t.url, note: t.tagline, text: t.description || t.tagline })),-- }));++ return [++ { title: 'This site', links: [++ { title: NAME, url: SITE + '/', note: 'the home page, and the week\'s most opened tools', text: 'The home page of OpenVibe.Tools: the tool families and the week\'s most opened tools.' },++ { title: 'Every tool', url: SITE + '/all-tools', note: 'the whole catalogue on one page, by family', text: 'Every online tool OpenVibe.Tools serves, grouped by family, on one page.' },++ ] },++ ...families.filter(f => f.path).map(f => ({++ title: f.name,++ links: tools.filter(t => t.family === f.id).map(t => ({ title: t.name, url: t.url, note: t.tagline, text: t.description || t.tagline })),++ })),++ ];}function llmsSummary() {const { tools } = registry.get();return `${tools.length} online tools for files, text, code and networks. Open source and community-run. A machine-readable catalog is at ${SITE}/api/catalog.json.`;}function llmsTxtBody() {-- return seo.llmsTxt({ name: NAME, summary: llmsSummary(),-- sections: [{ title: 'API', links: [{ title: 'Developer guide', url: SITE + '/developers', note: 'run any tool from code' }, { title: 'OpenAPI 3.1', url: SITE + '/api/v1/openapi.json' }, { title: 'Tool registry (JSON)', url: SITE + '/api/v1/tools' }, { title: 'Full text (llms-full.txt)', url: SITE + '/llms-full.txt', note: 'the public pages below as one plain-text document' }] }].concat(llmsSections()) });++ // AGT-5: each of this site's own pages is linked at its Markdown twin (markdown: true, base: SITE). Every tool++ // is on another subdomain, so its link keeps its URL; /developers has no twin yet (llms-twins-probe, 11-03), so++ // it keeps its URL and says (HTML). The API stays in a main section: it is what an agent came for.++ return seo.llmsTxt({ name: NAME, markdown: true, base: SITE, summary: llmsSummary(),++ sections: [{ title: 'API', links: [{ title: 'Developer guide', url: SITE + '/developers', html: true, note: 'run any tool from code' }, { title: 'OpenAPI 3.1', url: SITE + '/api/v1/openapi.json' }, { title: 'Tool registry (JSON)', url: SITE + '/api/v1/tools' }] }].concat(llmsSections()),++ // llmstxt.org's "## Optional": what an agent may skip when it needs a shorter context.++ optional: [++ { title: 'Full text (llms-full.txt)', url: SITE + '/llms-full.txt', note: 'the public pages above as one plain-text document' },++ { title: 'Sitemap', url: SITE + '/sitemap.xml' },++ { title: 'robots.txt', url: SITE + '/robots.txt' },++ ] });}// /llms-full.txt: the same header and summary as /llms.txt, then every public page llms.txt lists// with its text, under the same sections. The 512 KB ceiling keeps the answer a document, not a@@@ -48,6 +48,18 @@ function serve(app) {assert.ok(!body.includes('/auth/') && !body.includes('/search') && !body.includes('Disallow'), 'no private paths');// llms.txt points at the full document.assert.ok(idx.includes('/llms-full.txt'), 'llms.txt lists llms-full.txt');++ // AGT-5: each of the site's own pages at its Markdown twin, the twin-less /developers marked (HTML), an++ // Optional section last. A tool on another subdomain keeps its URL.++ assert.ok(idx.includes('[Developer guide](https://openvibe.tools/developers) (HTML)'), 'the twin-less guide keeps its URL');++ assert.ok(idx.includes('[Sitemap](https://openvibe.tools/sitemap.xml)'), 'the sitemap is listed in Optional');++ assert.match(idx, /\n## Optional\n/);++ assert.strictEqual(idx.lastIndexOf('\n## '), idx.indexOf('\n## Optional'), 'Optional is the last section');++ const own = [...idx.matchAll(/\]\((https:\/\/openvibe\.tools[^)\s]*)\)( \(HTML\))?/g)];++ assert.ok(own.length >= 4, String(own.length));++ for (const [, url, html] of own) {++ const p = new URL(url).pathname;++ assert.ok(p.endsWith('.md') || /\.[a-z0-9]+$/.test(p) || p.startsWith('/api/') || html, `${url} is a twin, a file or marked (HTML)`);++ }} finally { srv.close(); }// ── IndexNow key file ───────────────────────────────────@@@ -24,7 +24,7 @@"multer": "^1.4.5-lts.1","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","sharp": "^0.33.5","to-ico": "^1.1.5","uuid": "^11.1.0"@@@ -15,7 +15,7 @@"pg": "^8.23.0","@electric-sql/pglite": "^0.5.8","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","cheerio": "^1.0.0-rc.12","cookie-parser": "^1.4.7","cors": "^2.8.5",@@@ -20,7 +20,7 @@"express-rate-limit": "^7.1.5","dotenv": "^16.3.1","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"},"license": "MIT"}@@@ -21,7 +21,7 @@"pg": "^8.23.0","@electric-sql/pglite": "^0.5.8","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","jsonwebtoken": "^9.0.2","uuid": "^11.1.0"}
@@ -31,7 +31,7 @@ offline against the Network's public key (JWKS).
@@ -31,7 +31,7 @@ offline against the Network's public key (JWKS).
OpenVibe.Search (tool documents), OpenVibe.Community (the paste hand-over), OpenVibe.Billing (job usage
OpenVibe.Search (tool documents), OpenVibe.Community (the paste hand-over), OpenVibe.Billing (job usage
readings)
readings)
- host programs some tools need (ffmpeg, yt-dlp, qpdf, poppler, libheif; [Host packages](#host-packages-some-tools-need))
- host programs some tools need (ffmpeg, yt-dlp, qpdf, poppler, libheif; [Host packages](#host-packages-some-tools-need))
-- in each app: `openvibe-contracts` v0.92.0 (img, audio, docs, gateway), `openvibe-sdk` v0.12.0 and `openvibe-shared` v4.107.4, pinned
+- in each app: `openvibe-contracts` v0.92.0 (img, audio, docs, gateway), `openvibe-sdk` v0.12.0 and `openvibe-shared` v4.108.0, pinned
by release tarball, and `apps/_shared` (openvibe-tools-shared) by relative path
by release tarball, and `apps/_shared` (openvibe-tools-shared) by relative path
## Capabilities
## Capabilities
@@ -642,5 +642,5 @@ counters and salt use Valkey through `VALKEY_URL`, with process-local state when
@@ -642,5 +642,5 @@ counters and salt use Valkey through `VALKEY_URL`, with process-local state when
<!-- 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 -->
@@ -18,7 +18,7 @@
@@ -18,7 +18,7 @@
"domain": "openvibe.tools and *.openvibe.tools",
"domain": "openvibe.tools and *.openvibe.tools",
"contracts": "openvibe-contracts v0.222.0 (the gateway, img, audio and docs apps' package.json; the root package.json pins none)",
"contracts": "openvibe-contracts v0.222.0 (the gateway, img, audio and docs apps' package.json; the root package.json pins none)",
"sdk": "openvibe-sdk v0.82.0 (the gateway's package.json; the other apps are still on v0.67.0)",
"sdk": "openvibe-sdk v0.82.0 (the gateway's package.json; the other apps are still on v0.67.0)",
- "shared": "openvibe-shared v4.107.4 (each app's package.json; the root package.json pins none)",
+ "shared": "openvibe-shared v4.108.0 (each app's package.json; the root package.json pins none)",
"capabilities": [
"capabilities": [
"tools.job.create",
"tools.job.create",
"tools.job.read",
"tools.job.read",
@@ -25,7 +25,7 @@
@@ -25,7 +25,7 @@
"multer": "^1.4.5-lts.1",
"multer": "^1.4.5-lts.1",
"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",
"uuid": "^11.1.0"
"uuid": "^11.1.0"
}
}
}
}
@@ -24,7 +24,7 @@
@@ -24,7 +24,7 @@
"multer": "^1.4.5-lts.1",
"multer": "^1.4.5-lts.1",
"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",
"pdf-lib": "^1.17.1",
"pdf-lib": "^1.17.1",
"sharp": "^0.33.5",
"sharp": "^0.33.5",
"uuid": "^11.1.0"
"uuid": "^11.1.0"
@@ -20,6 +20,6 @@
@@ -20,6 +20,6 @@
"express-rate-limit": "^7.1.5",
"express-rate-limit": "^7.1.5",
"helmet": "^7.1.0",
"helmet": "^7.1.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"
}
}
}
}
@@ -23,7 +23,7 @@
@@ -23,7 +23,7 @@
"jsonwebtoken": "^9.0.0",
"jsonwebtoken": "^9.0.0",
"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",
"bwip-js": "4.11.4",
"bwip-js": "4.11.4",
"zxing-wasm": "3.1.5"
"zxing-wasm": "3.1.5"
}
}
@@ -660,20 +660,36 @@ function sitemapEntries() {
@@ -660,20 +660,36 @@ function sitemapEntries() {
// /llms-full.txt carries the same pages with their full description. One source, so the two can
// /llms-full.txt carries the same pages with their full description. One source, so the two can
// never disagree about what is public. The noindex search page and the site's own /tool/*,
// never disagree about what is public. The noindex search page and the site's own /tool/*,
// /developers and /updates pages were never in llms.txt and stay out of both.
// /developers and /updates pages were never in llms.txt and stay out of both.
+// AGT-5: the site's own pages go in first, at their Markdown twins; every tool is on another subdomain.
function llmsSections() {
function llmsSections() {
const { tools, families } = registry.get();
const { tools, families } = registry.get();
- return families.filter(f => f.path).map(f => ({
- title: f.name,
- links: tools.filter(t => t.family === f.id).map(t => ({ title: t.name, url: t.url, note: t.tagline, text: t.description || t.tagline })),
- }));
+ return [
+ { title: 'This site', links: [
+ { title: NAME, url: SITE + '/', note: 'the home page, and the week\'s most opened tools', text: 'The home page of OpenVibe.Tools: the tool families and the week\'s most opened tools.' },
+ { title: 'Every tool', url: SITE + '/all-tools', note: 'the whole catalogue on one page, by family', text: 'Every online tool OpenVibe.Tools serves, grouped by family, on one page.' },
+ ] },
+ ...families.filter(f => f.path).map(f => ({
+ title: f.name,
+ links: tools.filter(t => t.family === f.id).map(t => ({ title: t.name, url: t.url, note: t.tagline, text: t.description || t.tagline })),
+ })),
+ ];
}
}
function llmsSummary() {
function llmsSummary() {
const { tools } = registry.get();
const { tools } = registry.get();
return `${tools.length} online tools for files, text, code and networks. Open source and community-run. A machine-readable catalog is at ${SITE}/api/catalog.json.`;
return `${tools.length} online tools for files, text, code and networks. Open source and community-run. A machine-readable catalog is at ${SITE}/api/catalog.json.`;
}
}
function llmsTxtBody() {
function llmsTxtBody() {
- return seo.llmsTxt({ name: NAME, summary: llmsSummary(),
- sections: [{ title: 'API', links: [{ title: 'Developer guide', url: SITE + '/developers', note: 'run any tool from code' }, { title: 'OpenAPI 3.1', url: SITE + '/api/v1/openapi.json' }, { title: 'Tool registry (JSON)', url: SITE + '/api/v1/tools' }, { title: 'Full text (llms-full.txt)', url: SITE + '/llms-full.txt', note: 'the public pages below as one plain-text document' }] }].concat(llmsSections()) });
+ // AGT-5: each of this site's own pages is linked at its Markdown twin (markdown: true, base: SITE). Every tool
+ // is on another subdomain, so its link keeps its URL; /developers has no twin yet (llms-twins-probe, 11-03), so
+ // it keeps its URL and says (HTML). The API stays in a main section: it is what an agent came for.
+ return seo.llmsTxt({ name: NAME, markdown: true, base: SITE, summary: llmsSummary(),
+ sections: [{ title: 'API', links: [{ title: 'Developer guide', url: SITE + '/developers', html: true, note: 'run any tool from code' }, { title: 'OpenAPI 3.1', url: SITE + '/api/v1/openapi.json' }, { title: 'Tool registry (JSON)', url: SITE + '/api/v1/tools' }] }].concat(llmsSections()),
+ // llmstxt.org's "## Optional": what an agent may skip when it needs a shorter context.
+ optional: [
+ { title: 'Full text (llms-full.txt)', url: SITE + '/llms-full.txt', note: 'the public pages above as one plain-text document' },
+ { title: 'Sitemap', url: SITE + '/sitemap.xml' },
+ { title: 'robots.txt', url: SITE + '/robots.txt' },
+ ] });
}
}
// /llms-full.txt: the same header and summary as /llms.txt, then every public page llms.txt lists
// /llms-full.txt: the same header and summary as /llms.txt, then every public page llms.txt lists
// with its text, under the same sections. The 512 KB ceiling keeps the answer a document, not a
// with its text, under the same sections. The 512 KB ceiling keeps the answer a document, not a
@@ -48,6 +48,18 @@ function serve(app) {
@@ -48,6 +48,18 @@ function serve(app) {
assert.ok(!body.includes('/auth/') && !body.includes('/search') && !body.includes('Disallow'), 'no private paths');
assert.ok(!body.includes('/auth/') && !body.includes('/search') && !body.includes('Disallow'), 'no private paths');
// llms.txt points at the full document.
// llms.txt points at the full document.
assert.ok(idx.includes('/llms-full.txt'), 'llms.txt lists llms-full.txt');
assert.ok(idx.includes('/llms-full.txt'), 'llms.txt lists llms-full.txt');
+ // AGT-5: each of the site's own pages at its Markdown twin, the twin-less /developers marked (HTML), an
+ // Optional section last. A tool on another subdomain keeps its URL.
+ assert.ok(idx.includes('[Developer guide](https://openvibe.tools/developers) (HTML)'), 'the twin-less guide keeps its URL');
+ assert.ok(idx.includes('[Sitemap](https://openvibe.tools/sitemap.xml)'), 'the sitemap is listed in Optional');
+ assert.match(idx, /\n## Optional\n/);
+ assert.strictEqual(idx.lastIndexOf('\n## '), idx.indexOf('\n## Optional'), 'Optional is the last section');
+ const own = [...idx.matchAll(/\]\((https:\/\/openvibe\.tools[^)\s]*)\)( \(HTML\))?/g)];
+ assert.ok(own.length >= 4, String(own.length));
+ for (const [, url, html] of own) {
+ const p = new URL(url).pathname;
+ assert.ok(p.endsWith('.md') || /\.[a-z0-9]+$/.test(p) || p.startsWith('/api/') || html, `${url} is a twin, a file or marked (HTML)`);
+ }
} finally { srv.close(); }
} finally { srv.close(); }
// ── IndexNow key file ───────────────────────────────────
// ── IndexNow key file ───────────────────────────────────
@@ -24,7 +24,7 @@
@@ -24,7 +24,7 @@
"multer": "^1.4.5-lts.1",
"multer": "^1.4.5-lts.1",
"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",
"sharp": "^0.33.5",
"sharp": "^0.33.5",
"to-ico": "^1.1.5",
"to-ico": "^1.1.5",
"uuid": "^11.1.0"
"uuid": "^11.1.0"
@@ -15,7 +15,7 @@
@@ -15,7 +15,7 @@
"pg": "^8.23.0",
"pg": "^8.23.0",
"@electric-sql/pglite": "^0.5.8",
"@electric-sql/pglite": "^0.5.8",
"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",
"cheerio": "^1.0.0-rc.12",
"cheerio": "^1.0.0-rc.12",
"cookie-parser": "^1.4.7",
"cookie-parser": "^1.4.7",
"cors": "^2.8.5",
"cors": "^2.8.5",
@@ -20,7 +20,7 @@
@@ -20,7 +20,7 @@
"express-rate-limit": "^7.1.5",
"express-rate-limit": "^7.1.5",
"dotenv": "^16.3.1",
"dotenv": "^16.3.1",
"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"
},
},
"license": "MIT"
"license": "MIT"
}
}
@@ -21,7 +21,7 @@
@@ -21,7 +21,7 @@
"pg": "^8.23.0",
"pg": "^8.23.0",
"@electric-sql/pglite": "^0.5.8",
"@electric-sql/pglite": "^0.5.8",
"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",
"jsonwebtoken": "^9.0.2",
"jsonwebtoken": "^9.0.2",
"uuid": "^11.1.0"
"uuid": "^11.1.0"
}
}