openvibers/openvibe.media Commits
Note the read-only paste surface is being retired (#20)
Changes
@@@ -19,7 +19,7 @@"media.lifecycle.transition"],"capabilitiesRegistered": true,-- "pastes": "OpenVibe.Community is the paste authority since 2026-09-22 (PASTES_MOVED_TO); Media's paste API is read-only and every write answers 410 pastes.moved",++ "pastes": "OpenVibe.Community is the paste authority since 2026-09-22 (PASTES_MOVED_TO); Media's paste API is read-only and every write answers 410 pastes.moved, /p/:slug 301s to Community and Media serves screenshot bytes only (the read-only API is being retired, T10 step 2)","deployed": true,"deployment": "Public at https://openvibe.media: deployed with `sudo ovhost deploy media` (restart refused while a VOD records; --wait-idle), /opt/openvibe.media, unit openvibe-media on 127.0.0.1:4100 behind the openvibe.media nginx vhost, principal media.","features": [@@@ -124,6 +124,9 @@ router.get('/', async (req, res) => {FROM vods WHERE app_id = ?`, [req.appId]) || {};const clipStats = await db.get('SELECT COUNT(*) AS count FROM clips WHERE app_id = ?', [req.appId]) || {};++ // Paste rows are frozen (pastes moved to OpenVibe.Community, 2026-09-22) and++ // the read-only paste API is being retired (T10 step 2); the count stays++ // while the table exists (it feeds /api/v2/me and operator stats).const pasteStats = await db.get(`SELECT COUNT(*) AS count,SUM(CASE WHEN type = 'screenshot' THEN 1 ELSE 0 END) AS screenshots@@@ -2,8 +2,11 @@* OpenVibe.Media — Pastes API, read-only (mounted at /api/v1/:app/pastes)** OpenVibe.Community owns pastes since the 2026-09-22 cutover (PASTES_MOVED_TO).-- * Media keeps the rows and answers reads for anything still pointed here; public-- * pages live at /p/:slug (HTML) and /p/:slug/raw.++ * This read-only surface is being retired (T10 step 2): nothing calls the app++ * API any more, so the router and its GET handlers go; the `pastes` table and++ * the screenshot leaves below stay until Pics owns the bytes. Media keeps the++ * rows and answers reads for anything still pointed here; public pages live at++ * /p/:slug (HTML) and /p/:slug/raw.** GET / list (?limit&offset&type&search&user_id&include_unlisted&sort)* GET /config paste limits (+ the caller's count today)
@@ -19,7 +19,7 @@
@@ -19,7 +19,7 @@
"media.lifecycle.transition"
"media.lifecycle.transition"
],
],
"capabilitiesRegistered": true,
"capabilitiesRegistered": true,
- "pastes": "OpenVibe.Community is the paste authority since 2026-09-22 (PASTES_MOVED_TO); Media's paste API is read-only and every write answers 410 pastes.moved",
+ "pastes": "OpenVibe.Community is the paste authority since 2026-09-22 (PASTES_MOVED_TO); Media's paste API is read-only and every write answers 410 pastes.moved, /p/:slug 301s to Community and Media serves screenshot bytes only (the read-only API is being retired, T10 step 2)",
"deployed": true,
"deployed": true,
"deployment": "Public at https://openvibe.media: deployed with `sudo ovhost deploy media` (restart refused while a VOD records; --wait-idle), /opt/openvibe.media, unit openvibe-media on 127.0.0.1:4100 behind the openvibe.media nginx vhost, principal media.",
"deployment": "Public at https://openvibe.media: deployed with `sudo ovhost deploy media` (restart refused while a VOD records; --wait-idle), /opt/openvibe.media, unit openvibe-media on 127.0.0.1:4100 behind the openvibe.media nginx vhost, principal media.",
"features": [
"features": [
@@ -124,6 +124,9 @@ router.get('/', async (req, res) => {
@@ -124,6 +124,9 @@ router.get('/', async (req, res) => {
FROM vods WHERE app_id = ?
FROM vods WHERE app_id = ?
`, [req.appId]) || {};
`, [req.appId]) || {};
const clipStats = await db.get('SELECT COUNT(*) AS count FROM clips WHERE app_id = ?', [req.appId]) || {};
const clipStats = await db.get('SELECT COUNT(*) AS count FROM clips WHERE app_id = ?', [req.appId]) || {};
+ // Paste rows are frozen (pastes moved to OpenVibe.Community, 2026-09-22) and
+ // the read-only paste API is being retired (T10 step 2); the count stays
+ // while the table exists (it feeds /api/v2/me and operator stats).
const pasteStats = await db.get(`
const pasteStats = await db.get(`
SELECT COUNT(*) AS count,
SELECT COUNT(*) AS count,
SUM(CASE WHEN type = 'screenshot' THEN 1 ELSE 0 END) AS screenshots
SUM(CASE WHEN type = 'screenshot' THEN 1 ELSE 0 END) AS screenshots
@@ -2,8 +2,11 @@
@@ -2,8 +2,11 @@
* OpenVibe.Media — Pastes API, read-only (mounted at /api/v1/:app/pastes)
* OpenVibe.Media — Pastes API, read-only (mounted at /api/v1/:app/pastes)
*
*
* OpenVibe.Community owns pastes since the 2026-09-22 cutover (PASTES_MOVED_TO).
* OpenVibe.Community owns pastes since the 2026-09-22 cutover (PASTES_MOVED_TO).
- * Media keeps the rows and answers reads for anything still pointed here; public
- * pages live at /p/:slug (HTML) and /p/:slug/raw.
+ * This read-only surface is being retired (T10 step 2): nothing calls the app
+ * API any more, so the router and its GET handlers go; the `pastes` table and
+ * the screenshot leaves below stay until Pics owns the bytes. Media keeps the
+ * rows and answers reads for anything still pointed here; public pages live at
+ * /p/:slug (HTML) and /p/:slug/raw.
*
*
* GET / list (?limit&offset&type&search&user_id&include_unlisted&sort)
* GET / list (?limit&offset&type&search&user_id&include_unlisted&sort)
* GET /config paste limits (+ the caller's count today)
* GET /config paste limits (+ the caller's count today)