openvibers/openvibe.live Commits
N-1 fixtures re-recorded from 8cead36, the release now in production (npm run n-1:record).
Changes
@@@ -1,13 +1,13 @@{"service": "live",-- "release": "6e7ed605cbdcd7e39054e37bab11cbdc9c82e4f8",-- "recorded_at": "2026-09-29T12:51:16.005Z",++ "release": "8cead3637816b496cbd5657753a8ca8e8555a1e8",++ "recorded_at": "2026-09-29T16:51:44.167Z","note": "N-1 fixture: written by `npm run n-1:record`, replayed by test/n-1.test.js","manifest": {"service": "live",-- "release": "6e7ed605cbdc",-- "released_at": "2026-09-29T12:50:54.000Z",-- "booted_at": "2026-09-29T12:51:13.457Z",++ "release": "8cead3637816",++ "released_at": "2026-09-29T15:31:20.000Z",++ "booted_at": "2026-09-29T16:51:37.750Z","contracts_version": "0.71.0","packages": {"openvibe-shared": "1.30.1",@@@ -22,11 +22,11 @@},"shell": {"kind": "script",-- "version": "489455d0aadf"++ "version": "680853c062b9"},"server": {"kind": "server",-- "version": "d477dffd900c"++ "version": "83b6fbd34fe3"}},"assets": {@@@ -1048,9 +1048,7 @@"status": 401,"kind": "json","from": [-- "public/js/app-channel.js",-- "public/js/channel-uploads.js",-- "public/js/dashboard-moderation.js"++ "public/js/app-channel.js"]},{@@@ -1136,78 +1134,7 @@"channels[].moderators": "array"},"from": [-- "public/js/app-channel.js",-- "public/js/channel-uploads.js",-- "public/js/dashboard-moderation.js"-- ]-- },-- {-- "method": "GET",-- "path": "/api/channels/1/moderation/chat-search",-- "auth": "anon",-- "status": 401,-- "kind": "json",-- "from": [-- "public/js/dashboard-moderation.js"-- ]-- },-- {-- "method": "GET",-- "path": "/api/channels/1/moderation/chat-search",-- "auth": "user",-- "status": 500,-- "kind": "json",-- "from": [-- "public/js/dashboard-moderation.js"-- ]-- },-- {-- "method": "GET",-- "path": "/api/channels/1/moderation/logs?limit=12",-- "auth": "anon",-- "status": 401,-- "kind": "json",-- "from": [-- "public/js/dashboard-moderation.js"-- ]-- },-- {-- "method": "GET",-- "path": "/api/channels/1/moderation/logs?limit=12",-- "auth": "user",-- "status": 200,-- "kind": "json",-- "reads": {-- "actions": "array"-- },-- "from": [-- "public/js/dashboard-moderation.js"-- ]-- },-- {-- "method": "GET",-- "path": "/api/chat-ai/global",-- "auth": "anon",-- "status": 200,-- "kind": "json",-- "reads": {-- "insight": "null"-- },-- "from": [-- "public/js/app-chatpage.js"-- ]-- },-- {-- "method": "GET",-- "path": "/api/chat-ai/global",-- "auth": "user",-- "status": 200,-- "kind": "json",-- "reads": {-- "insight": "null"-- },-- "from": [-- "public/js/app-chatpage.js"++ "public/js/app-channel.js"]},{@@@ -1250,130 +1177,6 @@"public/js/app-channel.js"]},-- {-- "method": "GET",-- "path": "/api/chat-ai/timeline/n1star?offset=0&limit=5",-- "auth": "anon",-- "status": 200,-- "kind": "json",-- "reads": {-- "username": "string",-- "display_name": "string",-- "overview": "null",-- "chatInsight": "null",-- "combinedOverview": "null",-- "sessionCount": "number",-- "momentCount": "number",-- "index": "array",-- "sessions": "array",-- "offset": "number",-- "limit": "number",-- "hasMore": "boolean"-- },-- "from": [-- "public/js/app-channel.js"-- ]-- },-- {-- "method": "GET",-- "path": "/api/chat-ai/timeline/n1star?offset=0&limit=5",-- "auth": "user",-- "status": 200,-- "kind": "json",-- "reads": {-- "username": "string",-- "display_name": "string",-- "overview": "null",-- "chatInsight": "null",-- "combinedOverview": "null",-- "sessionCount": "number",-- "momentCount": "number",-- "index": "array",-- "sessions": "array",-- "offset": "number",-- "limit": "number",-- "hasMore": "boolean"-- },-- "from": [-- "public/js/app-channel.js"-- ]-- },-- {-- "method": "GET",-- "path": "/api/chat-ai/timeline/n1star?offset=0&limit=12",-- "auth": "anon",-- "status": 200,-- "kind": "json",-- "reads": {-- "username": "string",-- "display_name": "string",-- "overview": "null",-- "chatInsight": "null",-- "combinedOverview": "null",-- "sessionCount": "number",-- "momentCount": "number",-- "index": "array",-- "sessions": "array",-- "offset": "number",-- "limit": "number",-- "hasMore": "boolean"-- },-- "from": [-- "public/js/app-channel.js"-- ]-- },-- {-- "method": "GET",-- "path": "/api/chat-ai/timeline/n1star?offset=0&limit=12",-- "auth": "user",-- "status": 200,-- "kind": "json",-- "reads": {-- "username": "string",-- "display_name": "string",-- "overview": "null",-- "chatInsight": "null",-- "combinedOverview": "null",-- "sessionCount": "number",-- "momentCount": "number",-- "index": "array",-- "sessions": "array",-- "offset": "number",-- "limit": "number",-- "hasMore": "boolean"-- },-- "from": [-- "public/js/app-channel.js"-- ]-- },-- {-- "method": "GET",-- "path": "/api/chat-ai/timeline",-- "auth": "anon",-- "status": 200,-- "kind": "json",-- "reads": {-- "events": "array",-- "hasMore": "boolean"-- },-- "from": [-- "public/js/app-chatpage.js"-- ]-- },-- {-- "method": "GET",-- "path": "/api/chat-ai/timeline",-- "auth": "user",-- "status": 200,-- "kind": "json",-- "reads": {-- "events": "array",-- "hasMore": "boolean"-- },-- "from": [-- "public/js/app-chatpage.js"-- ]-- },{"method": "GET","path": "/api/chat-ai/transcript/1",@@@ -2429,7 +2232,7 @@"stats.users": "number","stats.anons": "number","stats.follows": "number",-- "stats.emotes": "number",++ "stats.emotes": "null","stats.pastes": "null","stats.aiMemories": "number","stats.pasteImages": "null",@@@ -2578,7 +2381,7 @@"stats.users": "number","stats.anons": "number","stats.follows": "number",-- "stats.emotes": "number",++ "stats.emotes": "null","stats.pastes": "null","stats.aiMemories": "number","stats.pasteImages": "null",@@@ -7492,7 +7295,7 @@},{"method": "GET",-- "path": "/js/app.js?v=d5e9ad82a98c",++ "path": "/js/app.js?v=533fb6104669","auth": "anon","accept": "html","status": 200,@@@ -7536,7 +7339,7 @@},{"method": "GET",-- "path": "/js/chat.js?v=3c4e68a87c4e",++ "path": "/js/chat.js?v=214e3c481b2f","auth": "anon","accept": "html","status": 200,@@@ -7833,7 +7636,7 @@},{"method": "GET",-- "path": "/js/channel-uploads.js?v=03eb0f258adf",++ "path": "/js/channel-uploads.js?v=5e4c26112cbf","auth": "anon","accept": "html","status": 200,@@@ -7866,7 +7669,7 @@},{"method": "GET",-- "path": "/js/app-channel.js?v=7c6c1787240c",++ "path": "/js/app-channel.js?v=24bb1b7828ce","auth": "anon","accept": "html","status": 200,@@@ -8065,46 +7868,6 @@"public/js/dashboard.js"]},-- {-- "method": "PUT",-- "path": "/api/channels/1/moderation",-- "auth": "anon",-- "status": 401,-- "kind": "json",-- "from": [-- "public/js/app-channel.js"-- ]-- },-- {-- "method": "POST",-- "path": "/api/channels/1/moderation/messages/1/delete",-- "auth": "anon",-- "status": 401,-- "kind": "json",-- "from": [-- "public/js/dashboard-moderation.js"-- ]-- },-- {-- "method": "POST",-- "path": "/api/channels/1/mods",-- "auth": "anon",-- "status": 401,-- "kind": "json",-- "from": [-- "public/js/dashboard-moderation.js"-- ]-- },-- {-- "method": "DELETE",-- "path": "/api/channels/1/mods/1",-- "auth": "anon",-- "status": 401,-- "kind": "json",-- "from": [-- "public/js/dashboard-moderation.js"-- ]-- },{"method": "POST","path": "/api/clips/bulk",@@@ -1,7 +1,7 @@{"service": "live",-- "release": "6e7ed605cbdcd7e39054e37bab11cbdc9c82e4f8",-- "recorded_at": "2026-09-29T12:51:16.005Z",++ "release": "8cead3637816b496cbd5657753a8ca8e8555a1e8",++ "recorded_at": "2026-09-29T16:51:44.167Z","note": "N-1 fixture: written by `npm run n-1:record`, replayed by test/n-1.test.js","user_version": 0,"schema": [@@@ -257,19 +257,19 @@"schema_migrations": [{"id": "001_vibes_decimal_to_bits",-- "applied_at": "2026-09-29 12:51:12",++ "applied_at": "2026-09-29 16:51:35","mode": "adopted","duration_ms": 0},{"id": "002_pastes_ai_columns",-- "applied_at": "2026-09-29 12:51:12",++ "applied_at": "2026-09-29 16:51:35","mode": "applied",-- "duration_ms": 6++ "duration_ms": 13},{"id": "004_hot_path_indexes",-- "applied_at": "2026-09-29 12:51:12",++ "applied_at": "2026-09-29 16:51:35","mode": "applied","duration_ms": 1}@@@ -639,7 +639,6 @@"SELECT 1 FROM approved_ips WHERE channel_id = ? AND ip_address = ?","SELECT 1 FROM channel_ai_config WHERE user_id = ?","SELECT 1 FROM channel_moderation_settings WHERE channel_id = ?",-- "SELECT 1 FROM channel_moderation_settings WHERE channel_id = ? LIMIT 1","SELECT 1 FROM channel_moderators WHERE user_id = ? AND channel_id = ?","SELECT 1 FROM channel_points WHERE user_id = ? AND streamer_id = ?","SELECT 1 FROM chat_messages cm JOIN streams s ON cm.stream_id = s.id WHERE s.channel_id = ? AND cm.is_deleted = 0 AND (cm.user_id = ? OR cm.anon_id = ?) LIMIT 1",@@@ -727,7 +726,6 @@"SELECT COUNT(*) AS count FROM donation_goals WHERE created_at >= datetime('now', ?)","SELECT COUNT(*) AS count FROM donation_goals WHERE is_active = 1","SELECT COUNT(*) AS count FROM donation_goals WHERE reached_at IS NOT NULL OR current_amount >= target_amount",-- "SELECT COUNT(*) AS count FROM emotes","SELECT COUNT(*) AS count FROM emotes WHERE created_at >= datetime('now', '-14 days') AND created_at < datetime('now', '-7 days')","SELECT COUNT(*) AS count FROM emotes WHERE created_at >= datetime('now', ?)","SELECT COUNT(*) AS count FROM follows",@@@ -755,7 +753,6 @@"SELECT COUNT(*) AS n FROM arena_mic_moments WHERE said_at >= ?","SELECT COUNT(*) AS n FROM arena_mic_moments WHERE stream_id = ?","SELECT COUNT(*) AS n FROM channel_ai_bots WHERE channel_user_id = ?",-- "SELECT COUNT(*) AS n FROM channel_moderators WHERE channel_id = ?","SELECT COUNT(*) AS n FROM channel_sounds WHERE channel_owner_id = ?","SELECT COUNT(*) AS n FROM chat_messages WHERE stream_id = ? AND message_type = 'soundboard'","SELECT COUNT(*) AS n FROM chat_messages WHERE timestamp >= ? AND COALESCE(is_deleted, 0) = 0",@@@ -764,7 +761,6 @@"SELECT COUNT(*) AS n FROM control_configs WHERE user_id = ?","SELECT COUNT(*) AS n FROM donation_goals WHERE user_id = ? AND is_active = 1","SELECT COUNT(*) AS n FROM easter_egg_solves WHERE egg_date = ?",-- "SELECT COUNT(*) AS n FROM emotes WHERE user_id = ?","SELECT COUNT(*) AS n FROM follows WHERE created_at >= ?","SELECT COUNT(*) AS n FROM follows WHERE streamer_id = ?","SELECT COUNT(*) AS n FROM follows WHERE streamer_id = ? AND created_at >= ?",@@@ -942,7 +938,6 @@"SELECT id, stream_id, vod_id, start_sec, text FROM stream_timeline_events WHERE user_id = ? AND kind = 'speech' AND created_at >= datetime('now', ?) AND LENGTH(text) BETWEEN 25 AND 220 ORDER BY created_at DESC LIMIT 1500","SELECT id, title, slug FROM managed_streams WHERE user_id = ? AND (? IS NULL OR id != ?) ORDER BY sort_order ASC, id ASC","SELECT id, title, started_at, viewer_count FROM streams WHERE user_id = ? AND is_live = 1 ORDER BY started_at DESC LIMIT 1",-- "SELECT id, ts, label, detail FROM chat_timeline_events WHERE scope = ? AND subject_id = ? ORDER BY ts DESC, id DESC LIMIT ?","SELECT id, user_id FROM channels WHERE id = ?","SELECT id, user_id, anon_id, username, message, message_type, source_platform, reply_to_id, timestamp FROM chat_messages WHERE channel_user_id = ? AND id > ? AND is_deleted = 0 AND message_type IN ('chat','donation') AND (auto_delete_at IS NULL OR auto_delete_at > CURRENT_TIMESTAMP) ORDER BY id DESC LIMIT ?","SELECT id, user_id, channel_id, managed_stream_id, title, is_live, started_at, ended_at, created_at FROM streams",@@@ -950,7 +945,7 @@"SELECT id, user_id, slug FROM managed_streams WHERE id = ?","SELECT id, user_id, slug, title, protocol, streaming_method, openre_stream_id FROM managed_streams WHERE ingest_authority = 'openre' ORDER BY id","SELECT id, user_id, slug, title, sort_order, created_at FROM managed_streams",-- "SELECT id, user_id, title FROM channels",++ "SELECT id, user_id, title, emote_sources FROM channels","SELECT id, username FROM users WHERE id = ?","SELECT id, username FROM users WHERE username = ? COLLATE NOCASE","SELECT id, username, display_name, avatar_url, profile_color FROM users WHERE id != ? AND is_banned = 0 AND id NOT IN (SELECT blocked_id FROM dm_blocks WHERE blocker_id = ?) AND id NOT IN (SELECT blocker_id FROM dm_blocks WHERE blocked_id = ?) AND (username LIKE ? COLLATE NOCASE OR display_name LIKE ? COLLATE NOCASE) LIMIT ?",@@@ -977,7 +972,6 @@"SELECT m.*, u.username, u.display_name, u.avatar_url, u.profile_color FROM dm_messages m JOIN users u ON u.id = m.sender_id WHERE m.conversation_id = ? ORDER BY m.created_at DESC LIMIT ?","SELECT m.id AS msid, m.title, m.slug, m.user_id, s.id AS stream_id, s.is_live FROM managed_streams m LEFT JOIN streams s ON s.managed_stream_id = m.id AND s.is_live = 1 WHERE m.id = ?","SELECT m.text, m.quality, m.said_at, m.aimed_at, u.username, u.display_name FROM arena_mic_moments m JOIN users u ON u.id = m.user_id WHERE m.said_at >= ? AND m.quality >= 7 ORDER BY m.quality DESC, m.said_at DESC LIMIT 3",-- "SELECT ma.*, actor.username AS actor_username, target.username AS target_username FROM moderation_actions ma LEFT JOIN users actor ON ma.actor_user_id = actor.id LEFT JOIN users target ON ma.target_user_id = target.id WHERE ma.scope_type = ? AND ma.scope_id = ? ORDER BY ma.created_at DESC LIMIT ? OFFSET ?","SELECT media_id FROM search_media_pushes WHERE kind = ? AND deleted = 0","SELECT message FROM chat_messages WHERE stream_id = ? AND COALESCE(is_deleted, 0) = 0 AND message IS NOT NULL AND message <> '' AND timestamp >= datetime('now', ?) ORDER BY timestamp DESC LIMIT ?","SELECT metadata FROM chat_messages WHERE id = ?",@@@ -1069,7 +1063,6 @@"SELECT t.*, u.username, u.display_name FROM transactions t JOIN users u ON t.from_user_id = u.id WHERE t.type = 'cashout' AND t.status = 'escrow' ORDER BY t.created_at ASC","SELECT t.amount, t.created_at, fu.username AS from_username, fu.display_name AS from_display, tu.username AS to_username, tu.display_name AS to_display FROM transactions t LEFT JOIN users fu ON fu.id = t.from_user_id JOIN users tu ON tu.id = t.to_user_id WHERE t.type = 'donation' ORDER BY t.id DESC LIMIT 1","SELECT tag_id FROM user_equipped_tag WHERE user_id = ?",-- "SELECT tag_id, source, granted_at FROM user_tags WHERE user_id = ?","SELECT target_user_id, COUNT(*) AS n FROM arena_mic_moments WHERE user_id = ? AND target_user_id IS NOT NULL GROUP BY target_user_id ORDER BY n DESC LIMIT 5","SELECT text FROM arena_mic_moments WHERE user_id = ? AND created_at >= datetime('now', '-6 hours') ORDER BY id DESC LIMIT 40","SELECT text FROM stream_timeline_events WHERE user_id = ? AND kind = 'speech' AND LENGTH(text) BETWEEN 30 AND 160 ORDER BY created_at DESC LIMIT 60",@@@ -1106,7 +1099,6 @@"SELECT user_id AS id FROM streams WHERE (started_at >= @from AND started_at < @to) OR (ended_at >= @from AND ended_at < @to) UNION SELECT streamer_id FROM follows WHERE created_at >= @from AND created_at < @to UNION SELECT id FROM users WHERE updated_at >= @from AND updated_at < @to UNION SELECT user_id FROM channels WHERE updated_at >= @from AND updated_at < @to","SELECT user_id AS k, overview AS v FROM streamer_overviews WHERE overview LIKE '{%\"description\"%'","SELECT user_id AS u, balance FROM channel_points WHERE streamer_id = ?",-- "SELECT user_id FROM channel_moderators WHERE channel_id = ?","SELECT user_id FROM linked_accounts WHERE service = 'network' AND (subject_id = ? OR service_user_id = ?) ORDER BY subject_id = ? DESC LIMIT 1","SELECT user_id FROM linked_accounts WHERE service = 'network' AND service_user_id = ?","SELECT user_id FROM linked_accounts WHERE service = 'network' AND service_user_id = ? ORDER BY id DESC LIMIT 1",
@@ -1,13 +1,13 @@
@@ -1,13 +1,13 @@
{
{
"service": "live",
"service": "live",
- "release": "6e7ed605cbdcd7e39054e37bab11cbdc9c82e4f8",
- "recorded_at": "2026-09-29T12:51:16.005Z",
+ "release": "8cead3637816b496cbd5657753a8ca8e8555a1e8",
+ "recorded_at": "2026-09-29T16:51:44.167Z",
"note": "N-1 fixture: written by `npm run n-1:record`, replayed by test/n-1.test.js",
"note": "N-1 fixture: written by `npm run n-1:record`, replayed by test/n-1.test.js",
"manifest": {
"manifest": {
"service": "live",
"service": "live",
- "release": "6e7ed605cbdc",
- "released_at": "2026-09-29T12:50:54.000Z",
- "booted_at": "2026-09-29T12:51:13.457Z",
+ "release": "8cead3637816",
+ "released_at": "2026-09-29T15:31:20.000Z",
+ "booted_at": "2026-09-29T16:51:37.750Z",
"contracts_version": "0.71.0",
"contracts_version": "0.71.0",
"packages": {
"packages": {
"openvibe-shared": "1.30.1",
"openvibe-shared": "1.30.1",
@@ -22,11 +22,11 @@
@@ -22,11 +22,11 @@
},
},
"shell": {
"shell": {
"kind": "script",
"kind": "script",
- "version": "489455d0aadf"
+ "version": "680853c062b9"
},
},
"server": {
"server": {
"kind": "server",
"kind": "server",
- "version": "d477dffd900c"
+ "version": "83b6fbd34fe3"
}
}
},
},
"assets": {
"assets": {
@@ -1048,9 +1048,7 @@
@@ -1048,9 +1048,7 @@
"status": 401,
"status": 401,
"kind": "json",
"kind": "json",
"from": [
"from": [
- "public/js/app-channel.js",
- "public/js/channel-uploads.js",
- "public/js/dashboard-moderation.js"
+ "public/js/app-channel.js"
]
]
},
},
{
{
@@ -1136,78 +1134,7 @@
@@ -1136,78 +1134,7 @@
"channels[].moderators": "array"
"channels[].moderators": "array"
},
},
"from": [
"from": [
- "public/js/app-channel.js",
- "public/js/channel-uploads.js",
- "public/js/dashboard-moderation.js"
- ]
- },
- {
- "method": "GET",
- "path": "/api/channels/1/moderation/chat-search",
- "auth": "anon",
- "status": 401,
- "kind": "json",
- "from": [
- "public/js/dashboard-moderation.js"
- ]
- },
- {
- "method": "GET",
- "path": "/api/channels/1/moderation/chat-search",
- "auth": "user",
- "status": 500,
- "kind": "json",
- "from": [
- "public/js/dashboard-moderation.js"
- ]
- },
- {
- "method": "GET",
- "path": "/api/channels/1/moderation/logs?limit=12",
- "auth": "anon",
- "status": 401,
- "kind": "json",
- "from": [
- "public/js/dashboard-moderation.js"
- ]
- },
- {
- "method": "GET",
- "path": "/api/channels/1/moderation/logs?limit=12",
- "auth": "user",
- "status": 200,
- "kind": "json",
- "reads": {
- "actions": "array"
- },
- "from": [
- "public/js/dashboard-moderation.js"
- ]
- },
- {
- "method": "GET",
- "path": "/api/chat-ai/global",
- "auth": "anon",
- "status": 200,
- "kind": "json",
- "reads": {
- "insight": "null"
- },
- "from": [
- "public/js/app-chatpage.js"
- ]
- },
- {
- "method": "GET",
- "path": "/api/chat-ai/global",
- "auth": "user",
- "status": 200,
- "kind": "json",
- "reads": {
- "insight": "null"
- },
- "from": [
- "public/js/app-chatpage.js"
+ "public/js/app-channel.js"
]
]
},
},
{
{
@@ -1250,130 +1177,6 @@
@@ -1250,130 +1177,6 @@
"public/js/app-channel.js"
"public/js/app-channel.js"
]
]
},
},
- {
- "method": "GET",
- "path": "/api/chat-ai/timeline/n1star?offset=0&limit=5",
- "auth": "anon",
- "status": 200,
- "kind": "json",
- "reads": {
- "username": "string",
- "display_name": "string",
- "overview": "null",
- "chatInsight": "null",
- "combinedOverview": "null",
- "sessionCount": "number",
- "momentCount": "number",
- "index": "array",
- "sessions": "array",
- "offset": "number",
- "limit": "number",
- "hasMore": "boolean"
- },
- "from": [
- "public/js/app-channel.js"
- ]
- },
- {
- "method": "GET",
- "path": "/api/chat-ai/timeline/n1star?offset=0&limit=5",
- "auth": "user",
- "status": 200,
- "kind": "json",
- "reads": {
- "username": "string",
- "display_name": "string",
- "overview": "null",
- "chatInsight": "null",
- "combinedOverview": "null",
- "sessionCount": "number",
- "momentCount": "number",
- "index": "array",
- "sessions": "array",
- "offset": "number",
- "limit": "number",
- "hasMore": "boolean"
- },
- "from": [
- "public/js/app-channel.js"
- ]
- },
- {
- "method": "GET",
- "path": "/api/chat-ai/timeline/n1star?offset=0&limit=12",
- "auth": "anon",
- "status": 200,
- "kind": "json",
- "reads": {
- "username": "string",
- "display_name": "string",
- "overview": "null",
- "chatInsight": "null",
- "combinedOverview": "null",
- "sessionCount": "number",
- "momentCount": "number",
- "index": "array",
- "sessions": "array",
- "offset": "number",
- "limit": "number",
- "hasMore": "boolean"
- },
- "from": [
- "public/js/app-channel.js"
- ]
- },
- {
- "method": "GET",
- "path": "/api/chat-ai/timeline/n1star?offset=0&limit=12",
- "auth": "user",
- "status": 200,
- "kind": "json",
- "reads": {
- "username": "string",
- "display_name": "string",
- "overview": "null",
- "chatInsight": "null",
- "combinedOverview": "null",
- "sessionCount": "number",
- "momentCount": "number",
- "index": "array",
- "sessions": "array",
- "offset": "number",
- "limit": "number",
- "hasMore": "boolean"
- },
- "from": [
- "public/js/app-channel.js"
- ]
- },
- {
- "method": "GET",
- "path": "/api/chat-ai/timeline",
- "auth": "anon",
- "status": 200,
- "kind": "json",
- "reads": {
- "events": "array",
- "hasMore": "boolean"
- },
- "from": [
- "public/js/app-chatpage.js"
- ]
- },
- {
- "method": "GET",
- "path": "/api/chat-ai/timeline",
- "auth": "user",
- "status": 200,
- "kind": "json",
- "reads": {
- "events": "array",
- "hasMore": "boolean"
- },
- "from": [
- "public/js/app-chatpage.js"
- ]
- },
{
{
"method": "GET",
"method": "GET",
"path": "/api/chat-ai/transcript/1",
"path": "/api/chat-ai/transcript/1",
@@ -2429,7 +2232,7 @@
@@ -2429,7 +2232,7 @@
"stats.users": "number",
"stats.users": "number",
"stats.anons": "number",
"stats.anons": "number",
"stats.follows": "number",
"stats.follows": "number",
- "stats.emotes": "number",
+ "stats.emotes": "null",
"stats.pastes": "null",
"stats.pastes": "null",
"stats.aiMemories": "number",
"stats.aiMemories": "number",
"stats.pasteImages": "null",
"stats.pasteImages": "null",
@@ -2578,7 +2381,7 @@
@@ -2578,7 +2381,7 @@
"stats.users": "number",
"stats.users": "number",
"stats.anons": "number",
"stats.anons": "number",
"stats.follows": "number",
"stats.follows": "number",
- "stats.emotes": "number",
+ "stats.emotes": "null",
"stats.pastes": "null",
"stats.pastes": "null",
"stats.aiMemories": "number",
"stats.aiMemories": "number",
"stats.pasteImages": "null",
"stats.pasteImages": "null",
@@ -7492,7 +7295,7 @@
@@ -7492,7 +7295,7 @@
},
},
{
{
"method": "GET",
"method": "GET",
- "path": "/js/app.js?v=d5e9ad82a98c",
+ "path": "/js/app.js?v=533fb6104669",
"auth": "anon",
"auth": "anon",
"accept": "html",
"accept": "html",
"status": 200,
"status": 200,
@@ -7536,7 +7339,7 @@
@@ -7536,7 +7339,7 @@
},
},
{
{
"method": "GET",
"method": "GET",
- "path": "/js/chat.js?v=3c4e68a87c4e",
+ "path": "/js/chat.js?v=214e3c481b2f",
"auth": "anon",
"auth": "anon",
"accept": "html",
"accept": "html",
"status": 200,
"status": 200,
@@ -7833,7 +7636,7 @@
@@ -7833,7 +7636,7 @@
},
},
{
{
"method": "GET",
"method": "GET",
- "path": "/js/channel-uploads.js?v=03eb0f258adf",
+ "path": "/js/channel-uploads.js?v=5e4c26112cbf",
"auth": "anon",
"auth": "anon",
"accept": "html",
"accept": "html",
"status": 200,
"status": 200,
@@ -7866,7 +7669,7 @@
@@ -7866,7 +7669,7 @@
},
},
{
{
"method": "GET",
"method": "GET",
- "path": "/js/app-channel.js?v=7c6c1787240c",
+ "path": "/js/app-channel.js?v=24bb1b7828ce",
"auth": "anon",
"auth": "anon",
"accept": "html",
"accept": "html",
"status": 200,
"status": 200,
@@ -8065,46 +7868,6 @@
@@ -8065,46 +7868,6 @@
"public/js/dashboard.js"
"public/js/dashboard.js"
]
]
},
},
- {
- "method": "PUT",
- "path": "/api/channels/1/moderation",
- "auth": "anon",
- "status": 401,
- "kind": "json",
- "from": [
- "public/js/app-channel.js"
- ]
- },
- {
- "method": "POST",
- "path": "/api/channels/1/moderation/messages/1/delete",
- "auth": "anon",
- "status": 401,
- "kind": "json",
- "from": [
- "public/js/dashboard-moderation.js"
- ]
- },
- {
- "method": "POST",
- "path": "/api/channels/1/mods",
- "auth": "anon",
- "status": 401,
- "kind": "json",
- "from": [
- "public/js/dashboard-moderation.js"
- ]
- },
- {
- "method": "DELETE",
- "path": "/api/channels/1/mods/1",
- "auth": "anon",
- "status": 401,
- "kind": "json",
- "from": [
- "public/js/dashboard-moderation.js"
- ]
- },
{
{
"method": "POST",
"method": "POST",
"path": "/api/clips/bulk",
"path": "/api/clips/bulk",
@@ -1,7 +1,7 @@
@@ -1,7 +1,7 @@
{
{
"service": "live",
"service": "live",
- "release": "6e7ed605cbdcd7e39054e37bab11cbdc9c82e4f8",
- "recorded_at": "2026-09-29T12:51:16.005Z",
+ "release": "8cead3637816b496cbd5657753a8ca8e8555a1e8",
+ "recorded_at": "2026-09-29T16:51:44.167Z",
"note": "N-1 fixture: written by `npm run n-1:record`, replayed by test/n-1.test.js",
"note": "N-1 fixture: written by `npm run n-1:record`, replayed by test/n-1.test.js",
"user_version": 0,
"user_version": 0,
"schema": [
"schema": [
@@ -257,19 +257,19 @@
@@ -257,19 +257,19 @@
"schema_migrations": [
"schema_migrations": [
{
{
"id": "001_vibes_decimal_to_bits",
"id": "001_vibes_decimal_to_bits",
- "applied_at": "2026-09-29 12:51:12",
+ "applied_at": "2026-09-29 16:51:35",
"mode": "adopted",
"mode": "adopted",
"duration_ms": 0
"duration_ms": 0
},
},
{
{
"id": "002_pastes_ai_columns",
"id": "002_pastes_ai_columns",
- "applied_at": "2026-09-29 12:51:12",
+ "applied_at": "2026-09-29 16:51:35",
"mode": "applied",
"mode": "applied",
- "duration_ms": 6
+ "duration_ms": 13
},
},
{
{
"id": "004_hot_path_indexes",
"id": "004_hot_path_indexes",
- "applied_at": "2026-09-29 12:51:12",
+ "applied_at": "2026-09-29 16:51:35",
"mode": "applied",
"mode": "applied",
"duration_ms": 1
"duration_ms": 1
}
}
@@ -639,7 +639,6 @@
@@ -639,7 +639,6 @@
"SELECT 1 FROM approved_ips WHERE channel_id = ? AND ip_address = ?",
"SELECT 1 FROM approved_ips WHERE channel_id = ? AND ip_address = ?",
"SELECT 1 FROM channel_ai_config WHERE user_id = ?",
"SELECT 1 FROM channel_ai_config WHERE user_id = ?",
"SELECT 1 FROM channel_moderation_settings WHERE channel_id = ?",
"SELECT 1 FROM channel_moderation_settings WHERE channel_id = ?",
- "SELECT 1 FROM channel_moderation_settings WHERE channel_id = ? LIMIT 1",
"SELECT 1 FROM channel_moderators WHERE user_id = ? AND channel_id = ?",
"SELECT 1 FROM channel_moderators WHERE user_id = ? AND channel_id = ?",
"SELECT 1 FROM channel_points WHERE user_id = ? AND streamer_id = ?",
"SELECT 1 FROM channel_points WHERE user_id = ? AND streamer_id = ?",
"SELECT 1 FROM chat_messages cm JOIN streams s ON cm.stream_id = s.id WHERE s.channel_id = ? AND cm.is_deleted = 0 AND (cm.user_id = ? OR cm.anon_id = ?) LIMIT 1",
"SELECT 1 FROM chat_messages cm JOIN streams s ON cm.stream_id = s.id WHERE s.channel_id = ? AND cm.is_deleted = 0 AND (cm.user_id = ? OR cm.anon_id = ?) LIMIT 1",
@@ -727,7 +726,6 @@
@@ -727,7 +726,6 @@
"SELECT COUNT(*) AS count FROM donation_goals WHERE created_at >= datetime('now', ?)",
"SELECT COUNT(*) AS count FROM donation_goals WHERE created_at >= datetime('now', ?)",
"SELECT COUNT(*) AS count FROM donation_goals WHERE is_active = 1",
"SELECT COUNT(*) AS count FROM donation_goals WHERE is_active = 1",
"SELECT COUNT(*) AS count FROM donation_goals WHERE reached_at IS NOT NULL OR current_amount >= target_amount",
"SELECT COUNT(*) AS count FROM donation_goals WHERE reached_at IS NOT NULL OR current_amount >= target_amount",
- "SELECT COUNT(*) AS count FROM emotes",
"SELECT COUNT(*) AS count FROM emotes WHERE created_at >= datetime('now', '-14 days') AND created_at < datetime('now', '-7 days')",
"SELECT COUNT(*) AS count FROM emotes WHERE created_at >= datetime('now', '-14 days') AND created_at < datetime('now', '-7 days')",
"SELECT COUNT(*) AS count FROM emotes WHERE created_at >= datetime('now', ?)",
"SELECT COUNT(*) AS count FROM emotes WHERE created_at >= datetime('now', ?)",
"SELECT COUNT(*) AS count FROM follows",
"SELECT COUNT(*) AS count FROM follows",
@@ -755,7 +753,6 @@
@@ -755,7 +753,6 @@
"SELECT COUNT(*) AS n FROM arena_mic_moments WHERE said_at >= ?",
"SELECT COUNT(*) AS n FROM arena_mic_moments WHERE said_at >= ?",
"SELECT COUNT(*) AS n FROM arena_mic_moments WHERE stream_id = ?",
"SELECT COUNT(*) AS n FROM arena_mic_moments WHERE stream_id = ?",
"SELECT COUNT(*) AS n FROM channel_ai_bots WHERE channel_user_id = ?",
"SELECT COUNT(*) AS n FROM channel_ai_bots WHERE channel_user_id = ?",
- "SELECT COUNT(*) AS n FROM channel_moderators WHERE channel_id = ?",
"SELECT COUNT(*) AS n FROM channel_sounds WHERE channel_owner_id = ?",
"SELECT COUNT(*) AS n FROM channel_sounds WHERE channel_owner_id = ?",
"SELECT COUNT(*) AS n FROM chat_messages WHERE stream_id = ? AND message_type = 'soundboard'",
"SELECT COUNT(*) AS n FROM chat_messages WHERE stream_id = ? AND message_type = 'soundboard'",
"SELECT COUNT(*) AS n FROM chat_messages WHERE timestamp >= ? AND COALESCE(is_deleted, 0) = 0",
"SELECT COUNT(*) AS n FROM chat_messages WHERE timestamp >= ? AND COALESCE(is_deleted, 0) = 0",
@@ -764,7 +761,6 @@
@@ -764,7 +761,6 @@
"SELECT COUNT(*) AS n FROM control_configs WHERE user_id = ?",
"SELECT COUNT(*) AS n FROM control_configs WHERE user_id = ?",
"SELECT COUNT(*) AS n FROM donation_goals WHERE user_id = ? AND is_active = 1",
"SELECT COUNT(*) AS n FROM donation_goals WHERE user_id = ? AND is_active = 1",
"SELECT COUNT(*) AS n FROM easter_egg_solves WHERE egg_date = ?",
"SELECT COUNT(*) AS n FROM easter_egg_solves WHERE egg_date = ?",
- "SELECT COUNT(*) AS n FROM emotes WHERE user_id = ?",
"SELECT COUNT(*) AS n FROM follows WHERE created_at >= ?",
"SELECT COUNT(*) AS n FROM follows WHERE created_at >= ?",
"SELECT COUNT(*) AS n FROM follows WHERE streamer_id = ?",
"SELECT COUNT(*) AS n FROM follows WHERE streamer_id = ?",
"SELECT COUNT(*) AS n FROM follows WHERE streamer_id = ? AND created_at >= ?",
"SELECT COUNT(*) AS n FROM follows WHERE streamer_id = ? AND created_at >= ?",
@@ -942,7 +938,6 @@
@@ -942,7 +938,6 @@
"SELECT id, stream_id, vod_id, start_sec, text FROM stream_timeline_events WHERE user_id = ? AND kind = 'speech' AND created_at >= datetime('now', ?) AND LENGTH(text) BETWEEN 25 AND 220 ORDER BY created_at DESC LIMIT 1500",
"SELECT id, stream_id, vod_id, start_sec, text FROM stream_timeline_events WHERE user_id = ? AND kind = 'speech' AND created_at >= datetime('now', ?) AND LENGTH(text) BETWEEN 25 AND 220 ORDER BY created_at DESC LIMIT 1500",
"SELECT id, title, slug FROM managed_streams WHERE user_id = ? AND (? IS NULL OR id != ?) ORDER BY sort_order ASC, id ASC",
"SELECT id, title, slug FROM managed_streams WHERE user_id = ? AND (? IS NULL OR id != ?) ORDER BY sort_order ASC, id ASC",
"SELECT id, title, started_at, viewer_count FROM streams WHERE user_id = ? AND is_live = 1 ORDER BY started_at DESC LIMIT 1",
"SELECT id, title, started_at, viewer_count FROM streams WHERE user_id = ? AND is_live = 1 ORDER BY started_at DESC LIMIT 1",
- "SELECT id, ts, label, detail FROM chat_timeline_events WHERE scope = ? AND subject_id = ? ORDER BY ts DESC, id DESC LIMIT ?",
"SELECT id, user_id FROM channels WHERE id = ?",
"SELECT id, user_id FROM channels WHERE id = ?",
"SELECT id, user_id, anon_id, username, message, message_type, source_platform, reply_to_id, timestamp FROM chat_messages WHERE channel_user_id = ? AND id > ? AND is_deleted = 0 AND message_type IN ('chat','donation') AND (auto_delete_at IS NULL OR auto_delete_at > CURRENT_TIMESTAMP) ORDER BY id DESC LIMIT ?",
"SELECT id, user_id, anon_id, username, message, message_type, source_platform, reply_to_id, timestamp FROM chat_messages WHERE channel_user_id = ? AND id > ? AND is_deleted = 0 AND message_type IN ('chat','donation') AND (auto_delete_at IS NULL OR auto_delete_at > CURRENT_TIMESTAMP) ORDER BY id DESC LIMIT ?",
"SELECT id, user_id, channel_id, managed_stream_id, title, is_live, started_at, ended_at, created_at FROM streams",
"SELECT id, user_id, channel_id, managed_stream_id, title, is_live, started_at, ended_at, created_at FROM streams",
@@ -950,7 +945,7 @@
@@ -950,7 +945,7 @@
"SELECT id, user_id, slug FROM managed_streams WHERE id = ?",
"SELECT id, user_id, slug FROM managed_streams WHERE id = ?",
"SELECT id, user_id, slug, title, protocol, streaming_method, openre_stream_id FROM managed_streams WHERE ingest_authority = 'openre' ORDER BY id",
"SELECT id, user_id, slug, title, protocol, streaming_method, openre_stream_id FROM managed_streams WHERE ingest_authority = 'openre' ORDER BY id",
"SELECT id, user_id, slug, title, sort_order, created_at FROM managed_streams",
"SELECT id, user_id, slug, title, sort_order, created_at FROM managed_streams",
- "SELECT id, user_id, title FROM channels",
+ "SELECT id, user_id, title, emote_sources FROM channels",
"SELECT id, username FROM users WHERE id = ?",
"SELECT id, username FROM users WHERE id = ?",
"SELECT id, username FROM users WHERE username = ? COLLATE NOCASE",
"SELECT id, username FROM users WHERE username = ? COLLATE NOCASE",
"SELECT id, username, display_name, avatar_url, profile_color FROM users WHERE id != ? AND is_banned = 0 AND id NOT IN (SELECT blocked_id FROM dm_blocks WHERE blocker_id = ?) AND id NOT IN (SELECT blocker_id FROM dm_blocks WHERE blocked_id = ?) AND (username LIKE ? COLLATE NOCASE OR display_name LIKE ? COLLATE NOCASE) LIMIT ?",
"SELECT id, username, display_name, avatar_url, profile_color FROM users WHERE id != ? AND is_banned = 0 AND id NOT IN (SELECT blocked_id FROM dm_blocks WHERE blocker_id = ?) AND id NOT IN (SELECT blocker_id FROM dm_blocks WHERE blocked_id = ?) AND (username LIKE ? COLLATE NOCASE OR display_name LIKE ? COLLATE NOCASE) LIMIT ?",
@@ -977,7 +972,6 @@
@@ -977,7 +972,6 @@
"SELECT m.*, u.username, u.display_name, u.avatar_url, u.profile_color FROM dm_messages m JOIN users u ON u.id = m.sender_id WHERE m.conversation_id = ? ORDER BY m.created_at DESC LIMIT ?",
"SELECT m.*, u.username, u.display_name, u.avatar_url, u.profile_color FROM dm_messages m JOIN users u ON u.id = m.sender_id WHERE m.conversation_id = ? ORDER BY m.created_at DESC LIMIT ?",
"SELECT m.id AS msid, m.title, m.slug, m.user_id, s.id AS stream_id, s.is_live FROM managed_streams m LEFT JOIN streams s ON s.managed_stream_id = m.id AND s.is_live = 1 WHERE m.id = ?",
"SELECT m.id AS msid, m.title, m.slug, m.user_id, s.id AS stream_id, s.is_live FROM managed_streams m LEFT JOIN streams s ON s.managed_stream_id = m.id AND s.is_live = 1 WHERE m.id = ?",
"SELECT m.text, m.quality, m.said_at, m.aimed_at, u.username, u.display_name FROM arena_mic_moments m JOIN users u ON u.id = m.user_id WHERE m.said_at >= ? AND m.quality >= 7 ORDER BY m.quality DESC, m.said_at DESC LIMIT 3",
"SELECT m.text, m.quality, m.said_at, m.aimed_at, u.username, u.display_name FROM arena_mic_moments m JOIN users u ON u.id = m.user_id WHERE m.said_at >= ? AND m.quality >= 7 ORDER BY m.quality DESC, m.said_at DESC LIMIT 3",
- "SELECT ma.*, actor.username AS actor_username, target.username AS target_username FROM moderation_actions ma LEFT JOIN users actor ON ma.actor_user_id = actor.id LEFT JOIN users target ON ma.target_user_id = target.id WHERE ma.scope_type = ? AND ma.scope_id = ? ORDER BY ma.created_at DESC LIMIT ? OFFSET ?",
"SELECT media_id FROM search_media_pushes WHERE kind = ? AND deleted = 0",
"SELECT media_id FROM search_media_pushes WHERE kind = ? AND deleted = 0",
"SELECT message FROM chat_messages WHERE stream_id = ? AND COALESCE(is_deleted, 0) = 0 AND message IS NOT NULL AND message <> '' AND timestamp >= datetime('now', ?) ORDER BY timestamp DESC LIMIT ?",
"SELECT message FROM chat_messages WHERE stream_id = ? AND COALESCE(is_deleted, 0) = 0 AND message IS NOT NULL AND message <> '' AND timestamp >= datetime('now', ?) ORDER BY timestamp DESC LIMIT ?",
"SELECT metadata FROM chat_messages WHERE id = ?",
"SELECT metadata FROM chat_messages WHERE id = ?",
@@ -1069,7 +1063,6 @@
@@ -1069,7 +1063,6 @@
"SELECT t.*, u.username, u.display_name FROM transactions t JOIN users u ON t.from_user_id = u.id WHERE t.type = 'cashout' AND t.status = 'escrow' ORDER BY t.created_at ASC",
"SELECT t.*, u.username, u.display_name FROM transactions t JOIN users u ON t.from_user_id = u.id WHERE t.type = 'cashout' AND t.status = 'escrow' ORDER BY t.created_at ASC",
"SELECT t.amount, t.created_at, fu.username AS from_username, fu.display_name AS from_display, tu.username AS to_username, tu.display_name AS to_display FROM transactions t LEFT JOIN users fu ON fu.id = t.from_user_id JOIN users tu ON tu.id = t.to_user_id WHERE t.type = 'donation' ORDER BY t.id DESC LIMIT 1",
"SELECT t.amount, t.created_at, fu.username AS from_username, fu.display_name AS from_display, tu.username AS to_username, tu.display_name AS to_display FROM transactions t LEFT JOIN users fu ON fu.id = t.from_user_id JOIN users tu ON tu.id = t.to_user_id WHERE t.type = 'donation' ORDER BY t.id DESC LIMIT 1",
"SELECT tag_id FROM user_equipped_tag WHERE user_id = ?",
"SELECT tag_id FROM user_equipped_tag WHERE user_id = ?",
- "SELECT tag_id, source, granted_at FROM user_tags WHERE user_id = ?",
"SELECT target_user_id, COUNT(*) AS n FROM arena_mic_moments WHERE user_id = ? AND target_user_id IS NOT NULL GROUP BY target_user_id ORDER BY n DESC LIMIT 5",
"SELECT target_user_id, COUNT(*) AS n FROM arena_mic_moments WHERE user_id = ? AND target_user_id IS NOT NULL GROUP BY target_user_id ORDER BY n DESC LIMIT 5",
"SELECT text FROM arena_mic_moments WHERE user_id = ? AND created_at >= datetime('now', '-6 hours') ORDER BY id DESC LIMIT 40",
"SELECT text FROM arena_mic_moments WHERE user_id = ? AND created_at >= datetime('now', '-6 hours') ORDER BY id DESC LIMIT 40",
"SELECT text FROM stream_timeline_events WHERE user_id = ? AND kind = 'speech' AND LENGTH(text) BETWEEN 30 AND 160 ORDER BY created_at DESC LIMIT 60",
"SELECT text FROM stream_timeline_events WHERE user_id = ? AND kind = 'speech' AND LENGTH(text) BETWEEN 30 AND 160 ORDER BY created_at DESC LIMIT 60",
@@ -1106,7 +1099,6 @@
@@ -1106,7 +1099,6 @@
"SELECT user_id AS id FROM streams WHERE (started_at >= @from AND started_at < @to) OR (ended_at >= @from AND ended_at < @to) UNION SELECT streamer_id FROM follows WHERE created_at >= @from AND created_at < @to UNION SELECT id FROM users WHERE updated_at >= @from AND updated_at < @to UNION SELECT user_id FROM channels WHERE updated_at >= @from AND updated_at < @to",
"SELECT user_id AS id FROM streams WHERE (started_at >= @from AND started_at < @to) OR (ended_at >= @from AND ended_at < @to) UNION SELECT streamer_id FROM follows WHERE created_at >= @from AND created_at < @to UNION SELECT id FROM users WHERE updated_at >= @from AND updated_at < @to UNION SELECT user_id FROM channels WHERE updated_at >= @from AND updated_at < @to",
"SELECT user_id AS k, overview AS v FROM streamer_overviews WHERE overview LIKE '{%\"description\"%'",
"SELECT user_id AS k, overview AS v FROM streamer_overviews WHERE overview LIKE '{%\"description\"%'",
"SELECT user_id AS u, balance FROM channel_points WHERE streamer_id = ?",
"SELECT user_id AS u, balance FROM channel_points WHERE streamer_id = ?",
- "SELECT user_id FROM channel_moderators WHERE channel_id = ?",
"SELECT user_id FROM linked_accounts WHERE service = 'network' AND (subject_id = ? OR service_user_id = ?) ORDER BY subject_id = ? DESC LIMIT 1",
"SELECT user_id FROM linked_accounts WHERE service = 'network' AND (subject_id = ? OR service_user_id = ?) ORDER BY subject_id = ? DESC LIMIT 1",
"SELECT user_id FROM linked_accounts WHERE service = 'network' AND service_user_id = ?",
"SELECT user_id FROM linked_accounts WHERE service = 'network' AND service_user_id = ?",
"SELECT user_id FROM linked_accounts WHERE service = 'network' AND service_user_id = ? ORDER BY id DESC LIMIT 1",
"SELECT user_id FROM linked_accounts WHERE service = 'network' AND service_user_id = ? ORDER BY id DESC LIMIT 1",