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
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
interaction_id | string | yes |
| |
creator | identity.subject-ref | yes | ||
action | enum | yes |
| |
by | enum | yes | Who acted, by role. |
|
moderation_state | enum | yes | The interaction's moderation state after this outcome. |
|
cancelled_effects | array of enum | yes | Deliveries this outcome cancelled before they happened (hidden only; empty otherwise). A consumer that queued the same paid message itself should drop it. |
|
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 }] }