ChatModerationQueueResult chat.moderation-queue-result@1

Generated at from openvibe-contracts v0.97.0 and openvibe-sdk v0.26.0.

Version
1.0.0
Owner
chat
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/chat/moderation-queue-result.v1.json

chat.moderation-queue-result@1: what OpenVibe.Chat's moderation queue reads answer (capability chat.moderation.queue.read), one shape per route, for OpenVibe.Live's moderator pages: GET /internal/chat/moderation/pending-ip?channel_id → { pending_ip } (a channel's messages held for IP approval, status pending, oldest first); GET /internal/chat/moderation/relay-users?channel_id → { relay_users } (relay names hidden or banned on the channel or everywhere, newest first); GET /internal/chat/moderation/relay-users/:id → { relay_user } (one, null when unknown); GET /internal/chat/moderation/tts-override?identity_key → { tts_override } (null when none). Internal: rows carry IP addresses. A failure is chat.ingress-ack@1's error.

Fields

This schema has no named fields.

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: error
{
  "ok": false,
  "error": "channel_id required"
}
Valid: pending-ip
{
  "pending_ip": [
    {
      "id": 311,
      "channel_id": 77,
      "stream_id": 4211,
      "ip_address": "203.0.113.24",
      "user_id": null,
      "anon_id": "anon48213",
      "username": "anon48213",
      "message": "first time here",
      "status": "pending",
      "reviewed_by": null,
      "created_at": "2026-10-04 21:02:40"
    }
  ]
}
Valid: relay-user-unknown
{
  "relay_user": null
}
Valid: relay-users
{
  "relay_users": [
    {
      "id": 58,
      "channel_id": 77,
      "platform": "kick",
      "external_username": "spam_bot_9",
      "action": "ban",
      "reason": "link spam",
      "created_by": 512,
      "created_by_username": "pixelfox",
      "created_at": "2026-10-03 18:40:00"
    },
    {
      "id": 12,
      "channel_id": null,
      "platform": "kick",
      "external_username": "spam_bot_9",
      "action": "hide",
      "reason": null,
      "created_by": 512,
      "created_by_username": null,
      "created_at": "2026-10-03 18:40:00"
    }
  ]
}
Valid: tts-override
{
  "tts_override": {
    "identity_key": "user:512",
    "voice": "en-US-Wavenet-D",
    "pitch": 2,
    "speed": 110,
    "gap": 0,
    "set_by": 77,
    "updated_at": "2026-10-01 09:12:55"
  }
}
Rejected: bad-status
{
  "pending_ip": [
    {
      "id": 311,
      "channel_id": 77,
      "stream_id": 4211,
      "ip_address": "203.0.113.24",
      "user_id": null,
      "anon_id": "anon48213",
      "username": "anon48213",
      "message": "first time here",
      "status": "held",
      "reviewed_by": null,
      "created_at": "2026-10-04 21:02:40"
    }
  ]
}
Rejected: row-missing-columns
{
  "relay_user": {
    "id": 58,
    "platform": "kick"
  }
}
Rejected: two-shapes
{
  "relay_user": null,
  "tts_override": null
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('chat.moderation-queue-result@1', value);   // { valid, errors: [{ path, message }] }