openvibers/openvibe.media Commits

N-1 fixtures re-recorded from a207b1d, the release now in production (npm run n-1:record).

OP OpenVibers committed 27 Sept 2026 · 793fafee26 · 2 files, +28 −15


Changes

ddiff --git a/test/fixtures/n-1/client.json b/test/fixtures/n-1/client.json
iindex c58cc08..49b13c2 100644
---- a/test/fixtures/n-1/client.json
++++ b/test/fixtures/n-1/client.json
@@@ -1,14 +1,14 @@
{
"service": "media",
-- "release": "be0facd28e64c0b8e7f7322b69e65a1953103070",
-- "recorded_at": "2026-09-27T22:05:42.752Z",
++ "release": "a207b1d28b12d333484d087ee37c2c2e3edeee5e",
++ "recorded_at": "2026-09-27T23:24:22.333Z",
"note": "N-1 fixture: written by `npm run n-1:record`, replayed by test/n-1.test.js",
"manifest": {
"service": "media",
-- "release": "be0facd28e64",
-- "released_at": "2026-09-27T21:43:34.000Z",
-- "booted_at": "2026-09-27T22:05:41.881Z",
-- "contracts_version": "0.54.0",
++ "release": "a207b1d28b12",
++ "released_at": "2026-09-27T22:52:43.000Z",
++ "booted_at": "2026-09-27T23:24:21.509Z",
++ "contracts_version": "0.71.0",
"packages": {
"openvibe-shared": "1.22.0",
"openvibe-sdk": "0.11.0"
@@@ -18,17 +18,20 @@
"components": {
"shell": {
"kind": "script",
-- "version": "be0facd28e64"
++ "version": "a207b1d28b12"
},
"server": {
"kind": "server",
-- "version": "be0facd28e64"
++ "version": "a207b1d28b12"
}
},
"assets": {},
"schema_generation": null,
"schema_compatible_from": null,
"contract_ranges": {},
++ "client_generation": null,
++ "min_client_generation": null,
++ "shell": null,
"metrics_url": "/release-metrics"
},
"dynamic_calls": 3,
@@@ -239,6 +242,11 @@
"objects[].size_bytes": "number",
"objects[].content_hash": "null",
"objects[].metadata": "object",
++ "objects[].metadata.title": "string",
++ "objects[].metadata.duration_seconds": "number",
++ "objects[].metadata.health_status": "string",
++ "objects[].metadata.managed_stream_id": "null",
++ "objects[].metadata.recording": "boolean",
"objects[].held": "boolean",
"objects[].readiness": "object",
"objects[].readiness.metadata": "boolean",
@@@ -249,12 +257,7 @@
"objects[].created_at": "string",
"objects[].updated_at": "string",
"objects[].deleted_at": "null",
-- "objects[].metadata.title": "string",
-- "objects[].metadata.duration_seconds": "number",
"objects[].metadata.auto_generated": "boolean",
-- "objects[].metadata.health_status": "string",
-- "objects[].metadata.managed_stream_id": "null",
-- "objects[].metadata.recording": "boolean",
"objects[].metadata.filename": "string",
"next_cursor": "null",
"limit": "number"
ddiff --git a/test/fixtures/n-1/worker.json b/test/fixtures/n-1/worker.json
iindex 3ccd854..fddbe5a 100644
---- a/test/fixtures/n-1/worker.json
++++ b/test/fixtures/n-1/worker.json
@@@ -1,7 +1,7 @@
{
"service": "media",
-- "release": "be0facd28e64c0b8e7f7322b69e65a1953103070",
-- "recorded_at": "2026-09-27T22:05:42.752Z",
++ "release": "a207b1d28b12d333484d087ee37c2c2e3edeee5e",
++ "recorded_at": "2026-09-27T23:24:22.333Z",
"note": "N-1 fixture: written by `npm run n-1:record`, replayed by test/n-1.test.js",
"user_version": 0,
"schema": [
@@@ -92,6 +92,7 @@
],
"ledger": {},
"lazy": [
++ "CREATE TABLE IF NOT EXISTS account_data_events ( id TEXT PRIMARY KEY, kind TEXT NOT NULL, subject TEXT NOT NULL, outcome TEXT, sent_at TEXT, applied_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) )",
"CREATE TABLE IF NOT EXISTS search_doc_pushes ( kind TEXT NOT NULL, media_id INTEGER NOT NULL, hash TEXT NOT NULL, revision INTEGER NOT NULL, deleted INTEGER NOT NULL DEFAULT 0, pushed_at DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (kind, media_id) )",
"CREATE TABLE IF NOT EXISTS subject_merges ( merge_id TEXT PRIMARY KEY, from_subject TEXT NOT NULL, into_subject TEXT NOT NULL, objects INTEGER NOT NULL DEFAULT 0, applied_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) )"
],
@@@ -115,6 +116,7 @@
"DELETE FROM paste_likes WHERE paste_id = ? AND user_id = ?",
"DELETE FROM pastes WHERE id = ?",
"DELETE FROM vods WHERE id = ?",
++ "INSERT INTO account_data_events (id, kind, subject, outcome) VALUES (?, ?, ?, ?)",
"INSERT INTO apps (app_id, name, api_key_hash, quota_bytes) VALUES (?, ?, '', ?)",
"INSERT INTO apps (app_id, name, api_key_hash, webhook_url, webhook_secret, allowed_origins, quota_bytes) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT(app_id) DO UPDATE SET name = excluded.name, api_key_hash = excluded.api_key_hash, webhook_url = excluded.webhook_url, webhook_secret = excluded.webhook_secret, allowed_origins = excluded.allowed_origins, quota_bytes = excluded.quota_bytes",
"INSERT INTO assets (app_id, kind, name, file_path, mime, user_id, username, channel_username, duration_seconds, meta_json) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(app_id, kind, name, channel_username) DO UPDATE SET file_path = excluded.file_path, mime = excluded.mime, user_id = excluded.user_id, username = excluded.username, duration_seconds = excluded.duration_seconds, meta_json = excluded.meta_json",
@@@ -153,11 +155,13 @@
"INSERT OR IGNORE INTO media_quota_reservations (object_id, app_id, namespace, bytes, expires_at) SELECT id, app_id, namespace, size_bytes, datetime('now', ?) FROM media_objects WHERE lifecycle_status = 'uploading' AND legacy_ref IS NULL",
"INSERT OR IGNORE INTO media_settings (key, value, description, type) VALUES (?, ?, ?, ?)",
"INSERT OR IGNORE INTO paste_likes (paste_id, user_id) VALUES (?, ?)",
++ "INSERT OR REPLACE INTO account_data_events (id, kind, subject, outcome, sent_at) VALUES (?, ?, ?, ?, ?)",
"INSERT OR REPLACE INTO media_settings (key, value, description, type) VALUES ('view_hash_secret', ?, 'Internal: salt for hashed visitor ids (do not share)', 'string')",
"INSERT OR REPLACE INTO media_settings (key, value, description, type) VALUES ('views_migrated_v2', '1', 'Internal: legacy content_views imported', 'boolean')",
"INSERT OR REPLACE INTO media_settings (key, value, type) VALUES ('namespaces.reservations_seeded', ?, 'string')",
"SELECT 'vod' k, id ref, title, description, ai_overview, thumbnail_url, duration_seconds, created_at, app_id, NULL slug, NULL type, NULL content, NULL language FROM vods WHERE is_public = 1 AND COALESCE(is_recording,0) = 0 AND COALESCE(clips_only,0) = 0 UNION ALL SELECT 'clip', id, title, description, ai_overview, thumbnail_url, duration_seconds, created_at, app_id, NULL, NULL, NULL, NULL FROM clips WHERE COALESCE(is_public,1) = 1 UNION ALL SELECT 'paste', id, title, NULL, NULL, NULL, NULL, created_at, app_id, slug, type, substr(COALESCE(content,''),1,300), language FROM pastes WHERE visibility = 'public' UNION ALL SELECT 'asset', id, name, username, channel_username, kind, duration_seconds, created_at, app_id, NULL, NULL, NULL, NULL FROM assets ORDER BY created_at DESC LIMIT 48 OFFSET 0",
"SELECT (SELECT COUNT(*) FROM vods WHERE is_public = 1 AND COALESCE(is_recording,0) = 0 AND COALESCE(clips_only,0) = 0) + (SELECT COUNT(*) FROM clips WHERE COALESCE(is_public,1) = 1) + (SELECT COUNT(*) FROM pastes WHERE visibility = 'public') + (SELECT COUNT(*) FROM assets) c",
++ "SELECT * FROM account_data_events WHERE id = ?",
"SELECT * FROM apps",
"SELECT * FROM apps WHERE api_key_hash = ?",
"SELECT * FROM apps WHERE app_id = ?",
@@@ -167,10 +171,12 @@
"SELECT * FROM assets WHERE kind = 'sound' ORDER BY created_at DESC LIMIT 48 OFFSET 0",
"SELECT * FROM clips WHERE COALESCE(is_public,1) = 1 ORDER BY created_at DESC LIMIT 48 OFFSET 0",
"SELECT * FROM clips WHERE id = ?",
++ "SELECT * FROM clips WHERE object_id = ?",
"SELECT * FROM files WHERE app_id = ? ORDER BY created_at DESC LIMIT ? OFFSET ?",
"SELECT * FROM files WHERE app_id NOT IN (SELECT app_id FROM apps WHERE project_id IS NOT NULL) ORDER BY created_at DESC LIMIT 48 OFFSET 0",
"SELECT * FROM files WHERE key = ?",
"SELECT * FROM files WHERE key = ? AND app_id = ?",
++ "SELECT * FROM files WHERE object_id = ?",
"SELECT * FROM media_holds WHERE id = ?",
"SELECT * FROM media_holds WHERE id = ? AND object_id = ?",
"SELECT * FROM media_invariant_violations WHERE object_id = ?",
@@@ -206,6 +212,7 @@
"SELECT * FROM vods WHERE id = ?",
"SELECT * FROM vods WHERE id = ? AND app_id = ?",
"SELECT * FROM vods WHERE is_public = 1 AND COALESCE(is_recording,0) = 0 AND COALESCE(clips_only,0) = 0 ORDER BY created_at DESC LIMIT 48 OFFSET 0",
++ "SELECT * FROM vods WHERE object_id = ?",
"SELECT * FROM vods WHERE quarantined_at IS NOT NULL AND quarantined_at <= datetime('now', ?) AND health_status IN ('corrupt','zero_byte','missing_file') AND COALESCE(is_recording, 0) = 0 ORDER BY quarantined_at ASC LIMIT ?",
"SELECT * FROM vods WHERE storage_key LIKE ?",
"SELECT *, COALESCE(duration_seconds, probe_duration_seconds, 0) AS duration_seconds FROM vods WHERE id = ?",
@@@ -347,6 +354,7 @@
"SELECT r.relation, r.to_object_id FROM media_relationships r JOIN media_objects s ON s.id = r.to_object_id WHERE r.from_object_id = ? AND r.relation IN ('derived_from', 'thumbnail_of', 'clip_of') AND s.owner_subject = ? ORDER BY r.id LIMIT 1",
"SELECT salt FROM media_object_view_salts WHERE day = ?",
"SELECT screenshot_path FROM pastes WHERE screenshot_path IS NOT NULL",
++ "SELECT sent_at FROM account_data_events WHERE id = ?",
"SELECT size_bytes FROM media_locations WHERE object_id = ? AND provider = 'local' AND state = 'present'",
"SELECT status FROM media_jobs WHERE id = ?",
"SELECT status FROM media_uploads WHERE id = ?",
@@@ -363,6 +371,7 @@
"SELECT value, type FROM media_settings WHERE key = ?",
"SELECT variant_name, derived_object_id FROM media_variants WHERE object_id = ? ORDER BY id",
"SELECT verified_at, status, detail FROM media_verifications WHERE object_id = ?",
++ "UPDATE account_data_events SET sent_at = ? WHERE id = ?",
"UPDATE clips SET auto_generated = ? WHERE id = ?",
"UPDATE clips SET cut_attempts = 0 WHERE id = ?",
"UPDATE clips SET file_path = ?, duration_seconds = ?, end_time = ?, status = 'ready', cut_error = NULL, cut_next_at = NULL WHERE id = ?",
@@@ -389,6 +398,7 @@
"UPDATE media_locations SET state = ?, size_bytes = COALESCE(?, size_bytes), verified_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP WHERE id = ? AND key = ?",
"UPDATE media_namespaces SET used_bytes = ?, used_objects = ?, reserved_bytes = ?, reserved_objects = ?, reconciled_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP WHERE namespace = ? AND app_id = ?",
"UPDATE media_objects SET content_hash = ?, metadata = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ? AND content_hash IS NULL",
++ "UPDATE media_objects SET lifecycle_status = 'deleted', deleted_at = COALESCE(deleted_at, CURRENT_TIMESTAMP), updated_at = CURRENT_TIMESTAMP WHERE id = ? AND lifecycle_status != 'deleted'",
"UPDATE media_objects SET lifecycle_status = 'deleted', deleted_at = CURRENT_TIMESTAMP, metadata = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?",
"UPDATE media_objects SET lifecycle_status = 'failed', metadata = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ? AND lifecycle_status = 'uploading'",
"UPDATE media_objects SET lifecycle_status = 'failed', updated_at = CURRENT_TIMESTAMP WHERE id = ? AND lifecycle_status = ?",