openvibers/openvibe.media Commits
openvibe-shared v4.202.0 (was v4.201.0) (#409)
Changes
@@@ -49,7 +49,7 @@ without `DATABASE_URL`, development uses an embedded PGlite database in `data/pgthe account and revocation subscriptions)- Backblaze B2 and Cloudflare R2 (S3 API) when configured; `ffmpeg`/`ffprobe` on the host- `openvibe-contracts` v0.399.0, `openvibe-sdk` v0.147.0 (tokens, events outbox, usage readings, per-actor limits),-- `openvibe-shared` v4.201.0, pinned by release tarball++ `openvibe-shared` v4.202.0, pinned by release tarball## Capabilities@@@ -132,7 +132,7 @@ server/storage.orphans.scan (monthly storage orphan report, service-wide, report only),storage.move.cleanup (the alert for placement moves whose delete keeps failing, service-wide)client-ip.js trust proxy = loopback; req.ip is the only client address--(openvibe-shared v4.201.0, openvibe-contracts v0.399.0, openvibe-sdk v0.147.0: pinned release tarballs, installed by npm)++(openvibe-shared v4.202.0, openvibe-contracts v0.399.0, openvibe-sdk v0.147.0: pinned release tarballs, installed by npm)scripts/smoke-test.sh end-to-end smoke test (boots a temp instance)scripts/reconcile-objects.js / object-invariant.js / no-good-copy-report.js object-model operator toolsscripts/media-jobs.js list jobs, run the size-invariant scan (dry run by default), approve/cancel proposals@@@ -795,5 +795,5 @@ restart; afterwards `sudo ovhost rollback media --to <sha>`.<!-- versions:start -->- openvibe-contracts: v0.399.0- openvibe-sdk: v0.147.0--- openvibe-shared: v4.201.0++- openvibe-shared: v4.202.0<!-- versions:end -->@@@ -8,7 +8,7 @@"domain": "openvibe.media","contracts": "openvibe-contracts v0.399.0","sdk": "openvibe-sdk v0.147.0",-- "shared": "openvibe-shared v4.201.0",++ "shared": "openvibe-shared v4.202.0","capabilities": ["media.object.upload","media.object.read",@@@ -18,7 +18,7 @@"multer": "^1.4.5-lts.1","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.399.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.147.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.201.0",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.202.0","pg": "^8.23.0","sharp": "^0.33.4"},@@@ -2241,9 +2241,9 @@}},"node_modules/openvibe-shared": {-- "version": "4.201.0",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.201.0",-- "integrity": "sha512-dZuifDLCoMlg+Qg/2G7IE3NbCqd2fZuk0G32JODgFRWS+CaHHTUTwWBBieJkuaUa1IV2xETe8qtbdLwekhvatg==",++ "version": "4.202.0",++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.202.0",++ "integrity": "sha512-lSZavwvUc8nI7eS7ZzLjVaz2d2xVmvYGh81H83d+i1LPp7cbS7eK9HCiQS8ESK9N8eH0i/Ok+sqBFxeUwsnVPQ==","license": "MIT","dependencies": {"clean-css": "^5.3.3",@@@ -22,7 +22,7 @@"multer": "^1.4.5-lts.1","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.399.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.147.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.201.0",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.202.0","pg": "^8.23.0","sharp": "^0.33.4"},@@@ -290,7 +290,7 @@ const http = require('http');assert.ok(r.text.includes('<progress max="100" value="50"'), 'upload progress without JavaScript');for (const b of benIds) assert.ok(!r.text.includes(b));assert.ok(/<label for="f-q">/.test(r.text) && /<caption class="sr">/.test(r.text), 'labelled filters, captioned tables');-- assert.ok(!/\bfree\b/i.test(r.text), 'no cost claims in served HTML');++ assert.ok(!/\bfree\b(?!\s+tools)/i.test(r.text), 'no cost claims in served HTML (the shared footer\'s "Free tools" group is a place, not a price)');assert.ok(r.text.includes('"menu":{"before":[{"id":"media-mine","label":"Your media","href":"/me"'), 'the account menu links /me');assert.ok(!r.text.includes('href="/me/ops"'), 'no operator link for a user');assert.ok((await call('GET', '/me', { cookie: 'admin' })).text.includes('href="/me/ops"'), 'staff get one');@@@ -141,7 +141,7 @@ const http = require('http');assert.ok(!cards(pending).includes('https://openvibe.live/?ov_from=media'), 'no "go live" card without a player');// Paste pages are Community's: there is no viewer here (public/routes.js only redirects).-- assert.ok(!/\bfree\b/i.test(html + pageFrame.baseCss()), 'no cost claims in served HTML');++ assert.ok(!/\bfree\b(?!\s+tools)/i.test(html + pageFrame.baseCss()), 'no cost claims in served HTML (the shared footer\'s "Free tools" group is a place, not a price)');// ── End to end through the router: navigation → page, ?raw=1 → bytes path ──const express = require('express');
@@ -49,7 +49,7 @@ without `DATABASE_URL`, development uses an embedded PGlite database in `data/pg
@@ -49,7 +49,7 @@ without `DATABASE_URL`, development uses an embedded PGlite database in `data/pg
the account and revocation subscriptions)
the account and revocation subscriptions)
- Backblaze B2 and Cloudflare R2 (S3 API) when configured; `ffmpeg`/`ffprobe` on the host
- Backblaze B2 and Cloudflare R2 (S3 API) when configured; `ffmpeg`/`ffprobe` on the host
- `openvibe-contracts` v0.399.0, `openvibe-sdk` v0.147.0 (tokens, events outbox, usage readings, per-actor limits),
- `openvibe-contracts` v0.399.0, `openvibe-sdk` v0.147.0 (tokens, events outbox, usage readings, per-actor limits),
- `openvibe-shared` v4.201.0, pinned by release tarball
+ `openvibe-shared` v4.202.0, pinned by release tarball
## Capabilities
## Capabilities
@@ -132,7 +132,7 @@ server/
@@ -132,7 +132,7 @@ server/
storage.orphans.scan (monthly storage orphan report, service-wide, report only),
storage.orphans.scan (monthly storage orphan report, service-wide, report only),
storage.move.cleanup (the alert for placement moves whose delete keeps failing, service-wide)
storage.move.cleanup (the alert for placement moves whose delete keeps failing, service-wide)
client-ip.js trust proxy = loopback; req.ip is the only client address
client-ip.js trust proxy = loopback; req.ip is the only client address
-(openvibe-shared v4.201.0, openvibe-contracts v0.399.0, openvibe-sdk v0.147.0: pinned release tarballs, installed by npm)
+(openvibe-shared v4.202.0, openvibe-contracts v0.399.0, openvibe-sdk v0.147.0: pinned release tarballs, installed by npm)
scripts/smoke-test.sh end-to-end smoke test (boots a temp instance)
scripts/smoke-test.sh end-to-end smoke test (boots a temp instance)
scripts/reconcile-objects.js / object-invariant.js / no-good-copy-report.js object-model operator tools
scripts/reconcile-objects.js / object-invariant.js / no-good-copy-report.js object-model operator tools
scripts/media-jobs.js list jobs, run the size-invariant scan (dry run by default), approve/cancel proposals
scripts/media-jobs.js list jobs, run the size-invariant scan (dry run by default), approve/cancel proposals
@@ -795,5 +795,5 @@ restart; afterwards `sudo ovhost rollback media --to <sha>`.
@@ -795,5 +795,5 @@ restart; afterwards `sudo ovhost rollback media --to <sha>`.
<!-- versions:start -->
<!-- versions:start -->
- openvibe-contracts: v0.399.0
- openvibe-contracts: v0.399.0
- openvibe-sdk: v0.147.0
- openvibe-sdk: v0.147.0
-- openvibe-shared: v4.201.0
+- openvibe-shared: v4.202.0
<!-- versions:end -->
<!-- versions:end -->
@@ -8,7 +8,7 @@
@@ -8,7 +8,7 @@
"domain": "openvibe.media",
"domain": "openvibe.media",
"contracts": "openvibe-contracts v0.399.0",
"contracts": "openvibe-contracts v0.399.0",
"sdk": "openvibe-sdk v0.147.0",
"sdk": "openvibe-sdk v0.147.0",
- "shared": "openvibe-shared v4.201.0",
+ "shared": "openvibe-shared v4.202.0",
"capabilities": [
"capabilities": [
"media.object.upload",
"media.object.upload",
"media.object.read",
"media.object.read",
@@ -18,7 +18,7 @@
@@ -18,7 +18,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.399.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.399.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.147.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.147.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.201.0",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.202.0",
"pg": "^8.23.0",
"pg": "^8.23.0",
"sharp": "^0.33.4"
"sharp": "^0.33.4"
},
},
@@ -2241,9 +2241,9 @@
@@ -2241,9 +2241,9 @@
}
}
},
},
"node_modules/openvibe-shared": {
"node_modules/openvibe-shared": {
- "version": "4.201.0",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.201.0",
- "integrity": "sha512-dZuifDLCoMlg+Qg/2G7IE3NbCqd2fZuk0G32JODgFRWS+CaHHTUTwWBBieJkuaUa1IV2xETe8qtbdLwekhvatg==",
+ "version": "4.202.0",
+ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.202.0",
+ "integrity": "sha512-lSZavwvUc8nI7eS7ZzLjVaz2d2xVmvYGh81H83d+i1LPp7cbS7eK9HCiQS8ESK9N8eH0i/Ok+sqBFxeUwsnVPQ==",
"license": "MIT",
"license": "MIT",
"dependencies": {
"dependencies": {
"clean-css": "^5.3.3",
"clean-css": "^5.3.3",
@@ -22,7 +22,7 @@
@@ -22,7 +22,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.399.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.399.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.147.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.147.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.201.0",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.202.0",
"pg": "^8.23.0",
"pg": "^8.23.0",
"sharp": "^0.33.4"
"sharp": "^0.33.4"
},
},
@@ -290,7 +290,7 @@ const http = require('http');
@@ -290,7 +290,7 @@ const http = require('http');
assert.ok(r.text.includes('<progress max="100" value="50"'), 'upload progress without JavaScript');
assert.ok(r.text.includes('<progress max="100" value="50"'), 'upload progress without JavaScript');
for (const b of benIds) assert.ok(!r.text.includes(b));
for (const b of benIds) assert.ok(!r.text.includes(b));
assert.ok(/<label for="f-q">/.test(r.text) && /<caption class="sr">/.test(r.text), 'labelled filters, captioned tables');
assert.ok(/<label for="f-q">/.test(r.text) && /<caption class="sr">/.test(r.text), 'labelled filters, captioned tables');
- assert.ok(!/\bfree\b/i.test(r.text), 'no cost claims in served HTML');
+ assert.ok(!/\bfree\b(?!\s+tools)/i.test(r.text), 'no cost claims in served HTML (the shared footer\'s "Free tools" group is a place, not a price)');
assert.ok(r.text.includes('"menu":{"before":[{"id":"media-mine","label":"Your media","href":"/me"'), 'the account menu links /me');
assert.ok(r.text.includes('"menu":{"before":[{"id":"media-mine","label":"Your media","href":"/me"'), 'the account menu links /me');
assert.ok(!r.text.includes('href="/me/ops"'), 'no operator link for a user');
assert.ok(!r.text.includes('href="/me/ops"'), 'no operator link for a user');
assert.ok((await call('GET', '/me', { cookie: 'admin' })).text.includes('href="/me/ops"'), 'staff get one');
assert.ok((await call('GET', '/me', { cookie: 'admin' })).text.includes('href="/me/ops"'), 'staff get one');
@@ -141,7 +141,7 @@ const http = require('http');
@@ -141,7 +141,7 @@ const http = require('http');
assert.ok(!cards(pending).includes('https://openvibe.live/?ov_from=media'), 'no "go live" card without a player');
assert.ok(!cards(pending).includes('https://openvibe.live/?ov_from=media'), 'no "go live" card without a player');
// Paste pages are Community's: there is no viewer here (public/routes.js only redirects).
// Paste pages are Community's: there is no viewer here (public/routes.js only redirects).
- assert.ok(!/\bfree\b/i.test(html + pageFrame.baseCss()), 'no cost claims in served HTML');
+ assert.ok(!/\bfree\b(?!\s+tools)/i.test(html + pageFrame.baseCss()), 'no cost claims in served HTML (the shared footer\'s "Free tools" group is a place, not a price)');
// ── End to end through the router: navigation → page, ?raw=1 → bytes path ──
// ── End to end through the router: navigation → page, ?raw=1 → bytes path ──
const express = require('express');
const express = require('express');