openvibers/openvibe.contracts Commits

v0.30.2: live.follower.read; chat.message.send owned by chat; Live and Media declare their events

OP OpenVibers committed 23 Sept 2026 · 6874873fbe · 8 files, +58 −10


Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex b0eb1abb..0bbf0912 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -4,6 +4,16 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
the notes were in the tag and commit messages (`git tag -n1`).
++## 0.30.2 — 2026-09-23
++
++- New capability `live.follower.read` (Live, internal): `GET /internal/followers`, used by OpenVibe.Network's
++ go-live notifications from `live.stream.started`.
++- `chat.message.send` is owned by `chat` (was `live`) and is also implemented by Chat's service API
++ (`POST /internal/live/calls`); it moves from Live's manifest to Chat's.
++- Live declares `eventsProduced` (`live.stream.started`, `live.stream.ended`, `live.release.deployed`) and
++ `eventsConsumed` (`openre.session.*`, `media.vod.*`, `media.clip.*`, `media.storage.*`); Media declares
++ its seven `media.*` event types.
++
## 0.30.1 — 2026-09-23
- `billing.cashout.requested|paid|denied`: `cashout.payout_method` carries the method's `type` only
ddiff --git a/manifests/capabilities/chat.message.send.json b/manifests/capabilities/chat.message.send.json
iindex 92d04ab1..db3d3558 100644
---- a/manifests/capabilities/chat.message.send.json
++++ b/manifests/capabilities/chat.message.send.json
@@@ -1,10 +1,10 @@
{
"id": "chat.message.send",
"version": "1.0",
-- "owner": "live",
++ "owner": "chat",
"status": "active",
"visibility": "first-party",
-- "description": "Send a chat message to a room the actor is a member of. Moves to OpenVibe.Chat in Wave 6.",
++ "description": "Send a chat message to a room the actor is a member of (browsers over the chat socket; first-party services over Chat's service API).",
"permissions": [
"chat:write"
],
@@@ -16,6 +16,7 @@
"chat.message.created"
],
"implementedBy": [
-- "WS /ws/chat {type:\"chat\"}"
++ "WS /ws/chat {type:\"chat\"}",
++ "POST /internal/live/calls"
]
}
ddiff --git a/manifests/capabilities/live.follower.read.json b/manifests/capabilities/live.follower.read.json
nnew file mode 100644
iindex 00000000..1ffa2109
---- /dev/null
++++ b/manifests/capabilities/live.follower.read.json
@@@ -0,0 +1,19 @@
++{
++ "id": "live.follower.read",
++ "version": "1.0",
++ "owner": "live",
++ "status": "active",
++ "visibility": "internal",
++ "description": "Read who follows the channel behind a stream (Network subject or Network user id per follower), for OpenVibe.Network's go-live notifications from live.stream.started. Loopback only.",
++ "permissions": [
++ "live:followers"
++ ],
++ "resourceConstraints": [
++ "none"
++ ],
++ "quotaClass": "standard",
++ "events": [],
++ "implementedBy": [
++ "GET /internal/followers"
++ ]
++}
ddiff --git a/manifests/services/chat.json b/manifests/services/chat.json
iindex 17e180d6..51728b4c 100644
---- a/manifests/services/chat.json
++++ b/manifests/services/chat.json
@@@ -10,6 +10,7 @@
"domains": [],
"capabilities": [
"chat.live_bridge.write",
++ "chat.message.send",
"chat.presence.read"
],
"eventsProduced": [
ddiff --git a/manifests/services/live.json b/manifests/services/live.json
iindex d4d02937..10942658 100644
---- a/manifests/services/live.json
++++ b/manifests/services/live.json
@@@ -15,14 +15,23 @@
"health": "/api/health",
"ready": "/api/ready",
"capabilities": [
-- "chat.message.send",
"live.chat_context.read",
"live.chat_effects.write",
"live.chat_mirror.write",
++ "live.follower.read",
"live.tips_delivery.write"
],
-- "eventsProduced": [],
-- "eventsConsumed": [],
++ "eventsProduced": [
++ "live.stream.started",
++ "live.stream.ended",
++ "live.release.deployed"
++ ],
++ "eventsConsumed": [
++ "openre.session.*",
++ "media.vod.*",
++ "media.clip.*",
++ "media.storage.*"
++ ],
"namespacesOwned": [
"live.*"
],
ddiff --git a/manifests/services/media.json b/manifests/services/media.json
iindex f2a44441..8f0830e6 100644
---- a/manifests/services/media.json
++++ b/manifests/services/media.json
@@@ -16,7 +16,15 @@
"media.object.upload",
"media.object.read"
],
-- "eventsProduced": [],
++ "eventsProduced": [
++ "media.clip.failed",
++ "media.clip.ready",
++ "media.object.uploaded",
++ "media.storage.alert",
++ "media.storage.recovered",
++ "media.vod.failed",
++ "media.vod.ready"
++ ],
"eventsConsumed": [],
"namespacesOwned": [
"media.*"
ddiff --git a/package-lock.json b/package-lock.json
iindex 15273039..911e0285 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -1,12 +1,12 @@
{
"name": "openvibe-contracts",
-- "version": "0.30.1",
++ "version": "0.30.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openvibe-contracts",
-- "version": "0.30.1",
++ "version": "0.30.2",
"license": "AGPL-3.0-only",
"dependencies": {
"ajv": "^8.17.1",
ddiff --git a/package.json b/package.json
iindex 1a84079a..ec248211 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.30.1",
++ "version": "0.30.2",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"types": "generated/typescript/index.d.ts",