NetworkFollowCreatedPayload network.follow.created@1

Generated at from openvibe-contracts v0.76.0 and openvibe-sdk v0.20.1.

Version
1.0.0
Owner
network
Visibility
first-party
Status
active
Compatibility
backward
Decision
ADR-030
Schema
https://openvibe.network/contracts/events/payloads/network.follow.created.v1.json

network.follow.created v1 (OpenVibe.Network; roadmap WS-E task 4, ADR-030). A person followed something: today a Live channel, whose target id is the channel owner's subject. Follows are the network's, kept by Network and keyed by subjects; products such as Live keep a projection they can rebuild. Written to Network's outbox in the transaction that stores the follow. A consumer applies the latest revision per (follower, target) and ignores an older one. Following again what is already followed changes nothing and sends nothing. Envelope: subject { type: user, id: <follower> }, visibility subject, actor the follower.

Fields

FieldTypeRequiredDescriptionConstraints
followerstringyesWho follows.
  • pattern ^usr_[0-9A-HJKMNP-TV-Z]{26}$
target_typeenumyesWhat kind of thing is followed. channel: a Live channel, named by its owner's subject.
  • one of "channel"
target_idstringyesThe followed target: for a channel, the channel owner's subject.
  • pattern ^usr_[0-9A-HJKMNP-TV-Z]{26}$
notify_emailboolean
notify_pushboolean
revisionintegeryesGrows with every change of this pair.
  • minimum 1
  • maximum 9007199254740991
atstring
  • format date-time

Examples

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

Valid: follow
{
  "follower": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "target_type": "channel",
  "target_id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR",
  "notify_email": true,
  "notify_push": true,
  "revision": 1,
  "at": "2026-09-26T16:00:00Z"
}
Valid: minimal
{
  "follower": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "target_type": "channel",
  "target_id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR",
  "revision": 1
}
Rejected: live-id
{
  "follower": "42",
  "target_type": "channel",
  "target_id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR",
  "revision": 1
}
Rejected: unknown-type
{
  "follower": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "target_type": "streamer",
  "target_id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR",
  "revision": 1
}

Validate

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