TipsInteractionModeratedPayload tips.interaction.moderated@1

Generated at from openvibe-contracts v0.33.0 and openvibe-sdk v0.5.0.

Version
1.0.0
Owner
tips
Visibility
first-party
Status
active
Compatibility
backward
Decision
ADR-012
Schema
https://openvibe.network/contracts/events/payloads/tips.interaction.moderated.v1.json

tips.interaction.moderated v1 (OpenVibe.Tips server/domain/moderation.js record). A moderation outcome for a paid message (and the name that came with it): the creator's word filter starred words out at settlement (filtered) or held it for review before anything was shown (held); the creator, one of their moderators or a service hid it (hidden: queued chat, TTS and media deliveries were cancelled, the overlay alert retracted, public pages leave it out) or showed it again (restored; a held one is released then). The money is never touched: no refund, the goal and totals keep it. Envelope: subject { type: interaction, id: tint_… }, visibility internal, priority important, actor service:tips. Carries no supporter, message, reason text or moderator identity (Tips keeps those in its own moderation log). Never emitted for simulations.

Fields

FieldTypeRequiredDescriptionConstraints
interaction_idstringyes
  • pattern ^tint_[0-9A-HJKMNP-TV-Z]{26}$
creatoridentity.subject-refyes
actionenumyes
  • one of "filtered", "held", "hidden", "restored"
byenumyesWho acted, by role.
  • one of "filter", "creator", "moderator", "service"
moderation_stateenumyesThe interaction's moderation state after this outcome.
  • one of "visible", "held", "hidden"
cancelled_effectsarray of enumyesDeliveries this outcome cancelled before they happened (hidden only; empty otherwise). A consumer that queued the same paid message itself should drop it.
  • unique items
  • items: one of "chat_line", "paid_message", "tts", "media_request"

Examples

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

Valid: held-by-filter
{
  "interaction_id": "tint_01JAB3C4D5E6F7G8H9J0K1MNPQ",
  "creator": {
    "type": "user",
    "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
  },
  "action": "held",
  "by": "filter",
  "moderation_state": "held",
  "cancelled_effects": []
}
Valid: hidden-by-moderator
{
  "interaction_id": "tint_01JAB3C4D5E6F7G8H9J0K1MNPQ",
  "creator": {
    "type": "user",
    "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
  },
  "action": "hidden",
  "by": "moderator",
  "moderation_state": "hidden",
  "cancelled_effects": [
    "paid_message",
    "tts"
  ]
}
Valid: restored-by-creator
{
  "interaction_id": "tint_01JAB3C4D5E6F7G8H9J0K1MNPQ",
  "creator": {
    "type": "user",
    "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
  },
  "action": "restored",
  "by": "creator",
  "moderation_state": "visible",
  "cancelled_effects": []
}
Rejected: carries-the-message
{
  "interaction_id": "tint_01JAB3C4D5E6F7G8H9J0K1MNPQ",
  "creator": {
    "type": "user",
    "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
  },
  "action": "filtered",
  "by": "filter",
  "moderation_state": "visible",
  "cancelled_effects": [],
  "message": "the words the filter starred out"
}
Rejected: names-the-moderator
{
  "interaction_id": "tint_01JAB3C4D5E6F7G8H9J0K1MNPQ",
  "creator": {
    "type": "user",
    "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
  },
  "action": "hidden",
  "by": "moderator",
  "moderator": {
    "type": "user",
    "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
  },
  "moderation_state": "hidden",
  "cancelled_effects": []
}
Rejected: unknown-effect
{
  "interaction_id": "tint_01JAB3C4D5E6F7G8H9J0K1MNPQ",
  "creator": {
    "type": "user",
    "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
  },
  "action": "hidden",
  "by": "service",
  "moderation_state": "hidden",
  "cancelled_effects": [
    "refund"
  ]
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('tips.interaction.moderated@1', value);   // { valid, errors: [{ path, message }] }