openvibers/openvibe.contracts Commits
v0.30.2: live.follower.read; chat.message.send owned by chat; Live and Media declare their events
Changes
@@@ -4,6 +4,16 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) thfrom `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@@@ -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"]}nnew file mode 100644@@@ -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"++ ]++}@@@ -10,6 +10,7 @@"domains": [],"capabilities": ["chat.live_bridge.write",++ "chat.message.send","chat.presence.read"],"eventsProduced": [@@@ -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.*"],@@@ -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.*"@@@ -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",@@@ -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",
@@ -4,6 +4,16 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
@@ -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,
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`).
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
## 0.30.1 — 2026-09-23
- `billing.cashout.requested|paid|denied`: `cashout.payout_method` carries the method's `type` only
- `billing.cashout.requested|paid|denied`: `cashout.payout_method` carries the method's `type` only
@@ -1,10 +1,10 @@
@@ -1,10 +1,10 @@
{
{
"id": "chat.message.send",
"id": "chat.message.send",
"version": "1.0",
"version": "1.0",
- "owner": "live",
+ "owner": "chat",
"status": "active",
"status": "active",
"visibility": "first-party",
"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": [
"permissions": [
"chat:write"
"chat:write"
],
],
@@ -16,6 +16,7 @@
@@ -16,6 +16,7 @@
"chat.message.created"
"chat.message.created"
],
],
"implementedBy": [
"implementedBy": [
- "WS /ws/chat {type:\"chat\"}"
+ "WS /ws/chat {type:\"chat\"}",
+ "POST /internal/live/calls"
]
]
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,19 @@
@@ -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"
+ ]
+}
@@ -10,6 +10,7 @@
@@ -10,6 +10,7 @@
"domains": [],
"domains": [],
"capabilities": [
"capabilities": [
"chat.live_bridge.write",
"chat.live_bridge.write",
+ "chat.message.send",
"chat.presence.read"
"chat.presence.read"
],
],
"eventsProduced": [
"eventsProduced": [
@@ -15,14 +15,23 @@
@@ -15,14 +15,23 @@
"health": "/api/health",
"health": "/api/health",
"ready": "/api/ready",
"ready": "/api/ready",
"capabilities": [
"capabilities": [
- "chat.message.send",
"live.chat_context.read",
"live.chat_context.read",
"live.chat_effects.write",
"live.chat_effects.write",
"live.chat_mirror.write",
"live.chat_mirror.write",
+ "live.follower.read",
"live.tips_delivery.write"
"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": [
"namespacesOwned": [
"live.*"
"live.*"
],
],
@@ -16,7 +16,15 @@
@@ -16,7 +16,15 @@
"media.object.upload",
"media.object.upload",
"media.object.read"
"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": [],
"eventsConsumed": [],
"namespacesOwned": [
"namespacesOwned": [
"media.*"
"media.*"
@@ -1,12 +1,12 @@
@@ -1,12 +1,12 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.30.1",
+ "version": "0.30.2",
"lockfileVersion": 3,
"lockfileVersion": 3,
"requires": true,
"requires": true,
"packages": {
"packages": {
"": {
"": {
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.30.1",
+ "version": "0.30.2",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"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.",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"main": "index.js",
"types": "generated/typescript/index.d.ts",
"types": "generated/typescript/index.d.ts",