openvibers/openvibe.contracts Commits

Contracts: the product at openre.stream is OpenRestream (owner, 2026-10-09) (#75)

OP OpenVibers committed 9 Oct 2026 · 3b266b3c53 · 68 files, +200 −193

Every name people read says OpenRestream instead of OpenRe or OpenRe.Stream, and repository paths say
OpenVibers/OpenRestream (renamed on GitHub the same day). Ids are unchanged (openre, openre.*, ov_openre).

Contracts 0.125.1: manifests/services/openre.json and the repository manifest (now manifests/repositories/OpenRestream.json)
name OpenRestream; generated/ refreshed. compat vs v0.125.0: no breaking changes.

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 7e7585e2..4620a619 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -4,6 +4,13 @@ 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.125.1 — 2026-10-09
++
++- The product at openre.stream is **OpenRestream** (owner, 2026-10-09): an open restreaming platform. Every name
++ people read says so: `manifests/services/openre.json` (`name`, `site.name`, copy), the repository manifest (now
++ `manifests/repositories/OpenRestream.json`, repository `OpenVibers/OpenRestream`, renamed on GitHub the same day),
++ docs and schema descriptions. Ids are unchanged: service `openre`, `openre.*` capabilities and events.
++
## 0.125.0 — 2026-10-09
- OpenVibe.News, OpenVibe.Reviews, OpenVibe.Trade, OpenVibe.Coupons and OpenRe.Stream are live: each serves its own
ddiff --git a/contracts/bot/pair-result.v1.json b/contracts/bot/pair-result.v1.json
iindex 6d087ed1..90c5129a 100644
---- a/contracts/bot/pair-result.v1.json
++++ b/contracts/bot/pair-result.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/bot/pair-result.v1.json",
"title": "BotPairResult",
-- "description": "bot.pair-result@1: the 201 answers of OpenVibe.Bot's pairing routes (server/api/v1.js). POST /api/v1/pair → { device_id, credential, publish_key, whip_url?, robot_id, profile }; POST /api/v1/devices/bind (a Network node token) → the same without credential. The credential, the publish key and the WHIP URL are shown once and never again. Without OpenRe configured there is no key: video is not_configured instead.",
++ "description": "bot.pair-result@1: the 201 answers of OpenVibe.Bot's pairing routes (server/api/v1.js). POST /api/v1/pair → { device_id, credential, publish_key, whip_url?, robot_id, profile }; POST /api/v1/devices/bind (a Network node token) → the same without credential. The credential, the publish key and the WHIP URL are shown once and never again. Without OpenRestream configured there is no key: video is not_configured instead.",
"anyOf": [
{
"type": "object",
@@@ -40,7 +40,7 @@
"publish_key": {
"type": "string",
"minLength": 1,
-- "description": "The WHIP publish key, an ingest key OpenRe issued for the robot's stream: shown once."
++ "description": "The WHIP publish key, an ingest key OpenRestream issued for the robot's stream: shown once."
},
"whip_url": {
"type": "string",
ddiff --git a/contracts/events/payloads/host.release.published.v1.json b/contracts/events/payloads/host.release.published.v1.json
iindex e4680a35..20d36a52 100644
---- a/contracts/events/payloads/host.release.published.v1.json
++++ b/contracts/events/payloads/host.release.published.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/events/payloads/host.release.published.v1.json",
"title": "HostReleasePublishedPayload",
-- "description": "host.release.published v1 (roadmap WS-P task 9, ADR-016 amendment 1). A network service's release went live. OpenVibe.Host's operator plane (lib/announce.js) publishes it after `ovhost deploy|rollback <service>` went live and for `ovhost announce <service>` (services deployed by their own scripts: Live, Tools, Sites, OpenRe, Games). Envelope: subject { type: release, id: <service>:<release> }, visibility public (signed-out browsers get it over Events realtime), priority low, actor service:host. Open tabs whose /release.json names `service` (openvibe-shared release-watch 1.17.0, topics=host.release.published) check it when `release` is not the one they run. It carries identifiers only, never what changed. At most one per service and release unless an operator forces it; a retry reuses the event_id. Tenant sites' activations are host.deploy.activated, not this.",
++ "description": "host.release.published v1 (roadmap WS-P task 9, ADR-016 amendment 1). A network service's release went live. OpenVibe.Host's operator plane (lib/announce.js) publishes it after `ovhost deploy|rollback <service>` went live and for `ovhost announce <service>` (services deployed by their own scripts: Live, Tools, Sites, OpenRestream, Games). Envelope: subject { type: release, id: <service>:<release> }, visibility public (signed-out browsers get it over Events realtime), priority low, actor service:host. Open tabs whose /release.json names `service` (openvibe-shared release-watch 1.17.0, topics=host.release.published) check it when `release` is not the one they run. It carries identifiers only, never what changed. At most one per service and release unless an operator forces it; a retry reuses the event_id. Tenant sites' activations are host.deploy.activated, not this.",
"type": "object",
"required": [
"service",
ddiff --git a/contracts/events/payloads/live.stream.ended.v1.json b/contracts/events/payloads/live.stream.ended.v1.json
iindex c34711e3..e5e9279e 100644
---- a/contracts/events/payloads/live.stream.ended.v1.json
++++ b/contracts/events/payloads/live.stream.ended.v1.json
@@@ -83,7 +83,7 @@
"webrtc",
"rtmp"
],
-- "description": "How the stream is ingested (WHIP is webrtc; OpenRe and RTMP are rtmp)."
++ "description": "How the stream is ingested (WHIP is webrtc; OpenRestream and RTMP are rtmp)."
},
"is_nsfw": {
"type": "boolean"
ddiff --git a/contracts/events/payloads/live.stream.started.v1.json b/contracts/events/payloads/live.stream.started.v1.json
iindex 51d88726..3378b0a9 100644
---- a/contracts/events/payloads/live.stream.started.v1.json
++++ b/contracts/events/payloads/live.stream.started.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/events/payloads/live.stream.started.v1.json",
"title": "LiveStreamStartedPayload",
-- "description": "live.stream.started v1 (OpenVibe.Live server/events/stream-events.js envelopeFor, fired by server/db/database.js createStream). A streams row went live: WebRTC/JSMPEG from the dashboard, RTMP ingest, WHIP, or an OpenRe.Stream session mirrored into Live. Written to Live's event_outbox in the transaction that inserts the row, so the event exists if and only if the stream did. Carries public channel facts only (the stream is listed publicly already); consumers such as Network's go-live notifications decide who hears about it. Never the stream key, the Live user id or the description. Envelope: subject { type: stream, id: <stream_id as a string>, revision: 1 }, visibility public, priority important, actor the streamer's user subject when Live knows it, else service:live.",
++ "description": "live.stream.started v1 (OpenVibe.Live server/events/stream-events.js envelopeFor, fired by server/db/database.js createStream). A streams row went live: WebRTC/JSMPEG from the dashboard, RTMP ingest, WHIP, or an OpenRestream session mirrored into Live. Written to Live's event_outbox in the transaction that inserts the row, so the event exists if and only if the stream did. Carries public channel facts only (the stream is listed publicly already); consumers such as Network's go-live notifications decide who hears about it. Never the stream key, the Live user id or the description. Envelope: subject { type: stream, id: <stream_id as a string>, revision: 1 }, visibility public, priority important, actor the streamer's user subject when Live knows it, else service:live.",
"type": "object",
"required": ["stream_id", "channel", "title", "category", "protocol", "is_nsfw", "started_at"],
"additionalProperties": false,
@@@ -23,7 +23,7 @@
},
"title": { "type": "string" },
"category": { "type": ["string", "null"], "description": "null when the streamer chose none (the AI classifies the stream from what it shows)." },
-- "protocol": { "enum": ["jsmpeg", "webrtc", "rtmp"], "description": "How the stream is ingested (WHIP is webrtc; OpenRe and RTMP are rtmp)." },
++ "protocol": { "enum": ["jsmpeg", "webrtc", "rtmp"], "description": "How the stream is ingested (WHIP is webrtc; OpenRestream and RTMP are rtmp)." },
"is_nsfw": { "type": "boolean" },
"started_at": { "type": ["string", "null"], "format": "date-time", "description": "UTC. null only for a row without a start time, which createStream never writes." }
}
ddiff --git a/contracts/lineage/resolve-request.v1.json b/contracts/lineage/resolve-request.v1.json
iindex cc68a6b0..e2634f3d 100644
---- a/contracts/lineage/resolve-request.v1.json
++++ b/contracts/lineage/resolve-request.v1.json
@@@ -25,7 +25,7 @@
},
"slot_id": {
"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
-- "description": "A persistent stream slot (Live: managed_streams.id; OpenRe stream definitions refer to it as live:managed_stream:<id>)."
++ "description": "A persistent stream slot (Live: managed_streams.id; OpenRestream stream definitions refer to it as live:managed_stream:<id>)."
},
"vod_id": {
"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
ddiff --git a/contracts/openre/destination.v1.json b/contracts/openre/destination.v1.json
iindex 70587988..e9b17702 100644
---- a/contracts/openre/destination.v1.json
++++ b/contracts/openre/destination.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/destination.v1.json",
"title": "OpenreDestination",
-- "description": "openre.destination@1: one restream destination of a stream on OpenRe.Stream (server/store/outputs.js publicDest). The stream key and SRT passphrase are write-only: only whether they are set and a hint of the key are shown.",
++ "description": "openre.destination@1: one restream destination of a stream on OpenRestream (server/store/outputs.js publicDest). The stream key and SRT passphrase are write-only: only whether they are set and a hint of the key are shown.",
"type": "object",
"required": [
"id",
ddiff --git a/contracts/openre/key-rotate-request.v1.json b/contracts/openre/key-rotate-request.v1.json
iindex 2ce321b1..76a4e1b9 100644
---- a/contracts/openre/key-rotate-request.v1.json
++++ b/contracts/openre/key-rotate-request.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/key-rotate-request.v1.json",
"title": "OpenreKeyRotateRequest",
-- "description": "openre.key-rotate-request@1: the body of POST /api/v1/streams/:id/keys/rotate on OpenRe.Stream (openre.key.rotate). grace_seconds (0 by default, at most 7 days) keeps the old key working that long; end_sessions true also ends the stream's open sessions. An empty body rotates with no grace.",
++ "description": "openre.key-rotate-request@1: the body of POST /api/v1/streams/:id/keys/rotate on OpenRestream (openre.key.rotate). grace_seconds (0 by default, at most 7 days) keeps the old key working that long; end_sessions true also ends the stream's open sessions. An empty body rotates with no grace.",
"type": "object",
"properties": {
"grace_seconds": {
ddiff --git a/contracts/openre/key-rotate-result.v1.json b/contracts/openre/key-rotate-result.v1.json
iindex b9bbb78a..b9d4af0e 100644
---- a/contracts/openre/key-rotate-result.v1.json
++++ b/contracts/openre/key-rotate-result.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/key-rotate-result.v1.json",
"title": "OpenreKeyRotateResult",
-- "description": "openre.key-rotate-result@1: the answer of POST /api/v1/streams/:id/keys/rotate on OpenRe.Stream: the new key (shown once, Cache-Control no-store), the keys it retired (grace or revoked), when the grace ends, how many sessions were asked to end, and the ingest endpoints. openre.key.rotated is announced.",
++ "description": "openre.key-rotate-result@1: the answer of POST /api/v1/streams/:id/keys/rotate on OpenRestream: the new key (shown once, Cache-Control no-store), the keys it retired (grace or revoked), when the grace ends, how many sessions were asked to end, and the ingest endpoints. openre.key.rotated is announced.",
"type": "object",
"required": [
"key",
ddiff --git a/contracts/openre/output-read-result.v1.json b/contracts/openre/output-read-result.v1.json
iindex 7d8284d2..0191a19e 100644
---- a/contracts/openre/output-read-result.v1.json
++++ b/contracts/openre/output-read-result.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/output-read-result.v1.json",
"title": "OpenreOutputReadResult",
-- "description": "openre.output-read-result@1: answers of openre.output.read on OpenRe.Stream. GET /api/v1/streams/:id/destinations → { destinations }; GET /api/v1/sessions/:id/outputs → { outputs } (with health); GET /api/v1/destinations/:id/logs and GET /api/v1/outputs/:id/logs?limit= → { logs } (newest first, at most 500).",
++ "description": "openre.output-read-result@1: answers of openre.output.read on OpenRestream. GET /api/v1/streams/:id/destinations → { destinations }; GET /api/v1/sessions/:id/outputs → { outputs } (with health); GET /api/v1/destinations/:id/logs and GET /api/v1/outputs/:id/logs?limit= → { logs } (newest first, at most 500).",
"anyOf": [
{
"type": "object",
ddiff --git a/contracts/openre/output-write-request.v1.json b/contracts/openre/output-write-request.v1.json
iindex 10aca8c5..92a1f690 100644
---- a/contracts/openre/output-write-request.v1.json
++++ b/contracts/openre/output-write-request.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/output-write-request.v1.json",
"title": "OpenreOutputWriteRequest",
-- "description": "openre.output-write-request@1: the body of POST /api/v1/streams/:id/destinations (platform and server_url required) and PATCH /api/v1/destinations/:id (fields left out keep their value) on OpenRe.Stream (openre.output.write). server_url must pass the destination URL rules (rtmp, rtmps or srt, public hosts); stream_key (at most 512 characters, no spaces) and srt_passphrase (10 to 79 characters) are sealed and never read back — __keep__ leaves them unchanged, empty clears them. Numbers out of range become null: srt_latency_ms 20-8000, custom_video_bitrate 500-50000, custom_audio_bitrate 32-512, custom_fps 15-120; an unknown custom_encoder_preset becomes null. DELETE /api/v1/destinations/:id and POST /api/v1/destinations/:id/test|start|stop take no body.",
++ "description": "openre.output-write-request@1: the body of POST /api/v1/streams/:id/destinations (platform and server_url required) and PATCH /api/v1/destinations/:id (fields left out keep their value) on OpenRestream (openre.output.write). server_url must pass the destination URL rules (rtmp, rtmps or srt, public hosts); stream_key (at most 512 characters, no spaces) and srt_passphrase (10 to 79 characters) are sealed and never read back — __keep__ leaves them unchanged, empty clears them. Numbers out of range become null: srt_latency_ms 20-8000, custom_video_bitrate 500-50000, custom_audio_bitrate 32-512, custom_fps 15-120; an unknown custom_encoder_preset becomes null. DELETE /api/v1/destinations/:id and POST /api/v1/destinations/:id/test|start|stop take no body.",
"anyOf": [
{
"type": "object",
ddiff --git a/contracts/openre/output-write-result.v1.json b/contracts/openre/output-write-result.v1.json
iindex 5e75e64d..230151d0 100644
---- a/contracts/openre/output-write-result.v1.json
++++ b/contracts/openre/output-write-result.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/output-write-result.v1.json",
"title": "OpenreOutputWriteResult",
-- "description": "openre.output-write-result@1: answers of openre.output.write on OpenRe.Stream. POST …/destinations → 201 { destination }; PATCH /api/v1/destinations/:id → { destination }; DELETE → 204 with no body (409 openre.destination_running while it still runs); POST …/test → { ok, checks } (URL rules, DNS, TCP reachability; each check { check, ok, detail }); POST …/start → { output } (for the stream's live session; 409 when held, disabled, keyless or not live); POST …/stop → { stopping } (outputs asked to stop).",
++ "description": "openre.output-write-result@1: answers of openre.output.write on OpenRestream. POST …/destinations → 201 { destination }; PATCH /api/v1/destinations/:id → { destination }; DELETE → 204 with no body (409 openre.destination_running while it still runs); POST …/test → { ok, checks } (URL rules, DNS, TCP reachability; each check { check, ok, detail }); POST …/start → { output } (for the stream's live session; 409 when held, disabled, keyless or not live); POST …/stop → { stopping } (outputs asked to stop).",
"anyOf": [
{
"type": "object",
ddiff --git a/contracts/openre/output.v1.json b/contracts/openre/output.v1.json
iindex b7c8b4d8..0e1c9afc 100644
---- a/contracts/openre/output.v1.json
++++ b/contracts/openre/output.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/output.v1.json",
"title": "OpenreOutput",
-- "description": "openre.output@1: one restream output (a destination running for a live session) on OpenRe.Stream (server/store/outputs.js publicOutput), with its desired and actual state, restarts and progress.",
++ "description": "openre.output@1: one restream output (a destination running for a live session) on OpenRestream (server/store/outputs.js publicOutput), with its desired and actual state, restarts and progress.",
"type": "object",
"required": [
"id",
ddiff --git a/contracts/openre/session-end-result.v1.json b/contracts/openre/session-end-result.v1.json
iindex ebf90a61..b73d5c97 100644
---- a/contracts/openre/session-end-result.v1.json
++++ b/contracts/openre/session-end-result.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/session-end-result.v1.json",
"title": "OpenreSessionEndResult",
-- "description": "openre.session-end-result@1: the answer of POST /api/v1/sessions/:id/end on OpenRe.Stream (openre.session.end): 202 { requested: true, state } when the owning worker was asked to disconnect the encoder, 409 { requested: false, state } when the session could not be ended (already ending or over).",
++ "description": "openre.session-end-result@1: the answer of POST /api/v1/sessions/:id/end on OpenRestream (openre.session.end): 202 { requested: true, state } when the owning worker was asked to disconnect the encoder, 409 { requested: false, state } when the session could not be ended (already ending or over).",
"type": "object",
"required": [
"requested",
ddiff --git a/contracts/openre/session-read-result.v1.json b/contracts/openre/session-read-result.v1.json
iindex c5b042e4..15bc39bd 100644
---- a/contracts/openre/session-read-result.v1.json
++++ b/contracts/openre/session-read-result.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/session-read-result.v1.json",
"title": "OpenreSessionReadResult",
-- "description": "openre.session-read-result@1: answers of openre.session.read on OpenRe.Stream. GET /api/v1/sessions?stream_id=&state=&limit=&before= → { sessions } (the owner's; a service sees those of the subject it acts for); GET /api/v1/sessions/:id → { session } with transitions, outputs, recording and playback; GET /api/v1/sessions/:id/playback → { playback } (where to watch: flv and rtmp URLs, internal loopback and public); GET /api/v1/workers → { workers } (worker generations; staff and services only).",
++ "description": "openre.session-read-result@1: answers of openre.session.read on OpenRestream. GET /api/v1/sessions?stream_id=&state=&limit=&before= → { sessions } (the owner's; a service sees those of the subject it acts for); GET /api/v1/sessions/:id → { session } with transitions, outputs, recording and playback; GET /api/v1/sessions/:id/playback → { playback } (where to watch: flv and rtmp URLs, internal loopback and public); GET /api/v1/workers → { workers } (worker generations; staff and services only).",
"anyOf": [
{
"type": "object",
ddiff --git a/contracts/openre/stream-read-result.v1.json b/contracts/openre/stream-read-result.v1.json
iindex ade3ae52..eacfb08f 100644
---- a/contracts/openre/stream-read-result.v1.json
++++ b/contracts/openre/stream-read-result.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/stream-read-result.v1.json",
"title": "OpenreStreamReadResult",
-- "description": "openre.stream-read-result@1: answers of openre.stream.read on OpenRe.Stream. GET /api/v1/streams[?external_ref=<service>:<type>:<id>&limit=] → { streams } (the owner's, or the one bound to that external reference; staff may ask for all); GET /api/v1/streams/:id → { stream }; GET /api/v1/streams/:id/keys → { keys } (metadata only, never a key). Another owner's or an archived stream is 404 openre.stream_not_found.",
++ "description": "openre.stream-read-result@1: answers of openre.stream.read on OpenRestream. GET /api/v1/streams[?external_ref=<service>:<type>:<id>&limit=] → { streams } (the owner's, or the one bound to that external reference; staff may ask for all); GET /api/v1/streams/:id → { stream }; GET /api/v1/streams/:id/keys → { keys } (metadata only, never a key). Another owner's or an archived stream is 404 openre.stream_not_found.",
"anyOf": [
{
"type": "object",
ddiff --git a/contracts/openre/stream-write-request.v1.json b/contracts/openre/stream-write-request.v1.json
iindex a3c5f500..173b5d67 100644
---- a/contracts/openre/stream-write-request.v1.json
++++ b/contracts/openre/stream-write-request.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/stream-write-request.v1.json",
"title": "OpenreStreamWriteRequest",
-- "description": "openre.stream-write-request@1: the body of POST /api/v1/streams and PATCH /api/v1/streams/:id on OpenRe.Stream (openre.stream.write). A person creates streams for themselves; a service names the owner with X-OV-Subject (or owner_subject, which must then match). title is cleaned and cut to 140 characters (Untitled stream when blank), description to 2000; protocols is a non-empty subset of rtmp, whip, webrtc, jsmpeg; external_refs (create only, at most 10, each bound to one stream) link it to another service's record, e.g. { service: live, type: managed_stream, id: 12 }; state (update only) is active or disabled. Fields left out keep their value. DELETE /api/v1/streams/:id (archive; refused while live) takes no body. Refusals are 400 openre.invalid_* and 409 openre.ref_taken / openre.stream_live.",
++ "description": "openre.stream-write-request@1: the body of POST /api/v1/streams and PATCH /api/v1/streams/:id on OpenRestream (openre.stream.write). A person creates streams for themselves; a service names the owner with X-OV-Subject (or owner_subject, which must then match). title is cleaned and cut to 140 characters (Untitled stream when blank), description to 2000; protocols is a non-empty subset of rtmp, whip, webrtc, jsmpeg; external_refs (create only, at most 10, each bound to one stream) link it to another service's record, e.g. { service: live, type: managed_stream, id: 12 }; state (update only) is active or disabled. Fields left out keep their value. DELETE /api/v1/streams/:id (archive; refused while live) takes no body. Refusals are 400 openre.invalid_* and 409 openre.ref_taken / openre.stream_live.",
"anyOf": [
{
"type": "object",
ddiff --git a/contracts/openre/stream-write-result.v1.json b/contracts/openre/stream-write-result.v1.json
iindex 40a82b1a..75fa6388 100644
---- a/contracts/openre/stream-write-result.v1.json
++++ b/contracts/openre/stream-write-result.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/stream-write-result.v1.json",
"title": "OpenreStreamWriteResult",
-- "description": "openre.stream-write-result@1: answers of openre.stream.write on OpenRe.Stream. POST /api/v1/streams → 201 { stream, key } where key is the first ingest key, shown once (Cache-Control no-store); PATCH /api/v1/streams/:id → { stream }; DELETE /api/v1/streams/:id → 204 with no body.",
++ "description": "openre.stream-write-result@1: answers of openre.stream.write on OpenRestream. POST /api/v1/streams → 201 { stream, key } where key is the first ingest key, shown once (Cache-Control no-store); PATCH /api/v1/streams/:id → { stream }; DELETE /api/v1/streams/:id → 204 with no body.",
"type": "object",
"required": [
"stream"
ddiff --git a/contracts/openre/stream.v1.json b/contracts/openre/stream.v1.json
iindex c4ffca04..c9c9dfb6 100644
---- a/contracts/openre/stream.v1.json
++++ b/contracts/openre/stream.v1.json
@@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/stream.v1.json",
"title": "OpenreStream",
-- "description": "openre.stream@1: one stream definition as OpenRe.Stream's API shows it (server/api/v1.js publicDefinition): the owner's stream with its protocols, recording and playback settings, ingest endpoints, key metadata (hints only, never a key) and the open session if any.",
++ "description": "openre.stream@1: one stream definition as OpenRestream's API shows it (server/api/v1.js publicDefinition): the owner's stream with its protocols, recording and playback settings, ingest endpoints, key metadata (hints only, never a key) and the open session if any.",
"type": "object",
"required": [
"id",
ddiff --git a/docs/ESTATE.md b/docs/ESTATE.md
iindex 38cd4eef..4a161bdd 100644
---- a/docs/ESTATE.md
++++ b/docs/ESTATE.md
@@@ -12,7 +12,7 @@ service id); **Runtime** is `STATUS.json.runtime`; **Database** is inferred from
| Repository | Product | Authority it owns | Runtime | Database | Domain | SDK/Contracts pin | Deployment | Public/private | Current track |
|---|---|---|---|---|---|---|---|---|---|
| AFResume | — | — | — | — | — | — | — | — | — |
--| OpenRe.Stream | OpenRe.Stream | openre.* | node 22 | PostgreSQL | openre.stream, ingest.openre.stream | contracts v0.76.0, sdk v0.26.0, shared v2.10.1 | deployed | internal | W7 |
++| OpenRestream | OpenRestream | openre.* | node 22 | PostgreSQL | openre.stream, ingest.openre.stream | contracts v0.76.0, sdk v0.26.0, shared v2.10.1 | deployed | internal | W7 |
| OpenVibe.AI | OpenVibe.AI | ai.usage_summary | node 22 | PostgreSQL | ai.openvibe.services, ai.openvibe.network, openvibe.ai | contracts v0.86.0, sdk v0.26.0, shared v2.5.0 | deployed | live | W13 |
| OpenVibe.Billing | OpenVibe.Billing | billing.* | node >=22.0.0 | PostgreSQL | billing.openvibe.network | contracts v0.97.0, sdk v0.28.0, shared v2.9.0 | deployed | live | W8 |
| OpenVibe.Blog | Blog | blog.* | node 22 | PostgreSQL | openvibe.blog | contracts v0.97.0, sdk v0.26.0, shared v2.9.0, publishing v1.3.0 | deployed | live | W16 |
ddiff --git a/docs/adr/ADR-009-live-openre-boundary.md b/docs/adr/ADR-009-live-openre-boundary.md
iindex 2212380d..3fd178f8 100644
---- a/docs/adr/ADR-009-live-openre-boundary.md
++++ b/docs/adr/ADR-009-live-openre-boundary.md
@@@ -1,6 +1,6 @@
--# ADR-009: Live versus OpenRe boundary
++# ADR-009: Live versus OpenRestream boundary
--**Status:** Accepted 2026-09-23. OpenRe.Stream deployed the same day (RTMP ingest + restream; WHIP, SFU and JSMPEG not yet ported). No slot has moved: per-slot cutover waits for the ingest DNS name, the public RTMP port and a broadcaster window.
++**Status:** Accepted 2026-09-23. OpenRestream deployed the same day (RTMP ingest + restream; WHIP, SFU and JSMPEG not yet ported). No slot has moved: per-slot cutover waits for the ingest DNS name, the public RTMP port and a broadcaster window.
## Context and current evidence
@@@ -10,10 +10,10 @@
## Decision
--- **OpenRe.Stream owns transport:** stream definitions and keys, ingest sessions (RTMP, WHIP, WebRTC/SFU, JSMPEG), worker generations, restream destinations with health and logs, key rotation (`openre.key.rotate`), recording *requests* to Media, and the segment timeline.
--- **Live owns presentation:** channels, discovery, watch pages, creator UX, chat embedding and moderation surfaces. Live asks OpenRe for sessions and playback descriptors; it never touches an encoder, socket or RTP port.
++- **OpenRestream owns transport:** stream definitions and keys, ingest sessions (RTMP, WHIP, WebRTC/SFU, JSMPEG), worker generations, restream destinations with health and logs, key rotation (`openre.key.rotate`), recording *requests* to Media, and the segment timeline.
++- **Live owns presentation:** channels, discovery, watch pages, creator UX, chat embedding and moderation surfaces. Live asks OpenRestream for sessions and playback descriptors; it never touches an encoder, socket or RTP port.
- **Media owns recordings:** finalisation, storage and VOD objects stay in Media (ADR-006).
--- Transport runs in worker processes separate from the OpenRe API. An API deploy starts a new worker generation for *new* sessions and lets old workers drain; no deploy of Live or the OpenRe API ends a live transport.
++- Transport runs in worker processes separate from the OpenRestream API. An API deploy starts a new worker generation for *new* sessions and lets old workers drain; no deploy of Live or the OpenRestream API ends a live transport.
- Lifecycle is published as events (`openre.session.started|ended`, `openre.output.failed`), not internal POSTs.
## Alternatives considered
@@@ -23,15 +23,15 @@
## Migration consequences
--OpenRe runs in parallel with Live's ingest and takes one protocol at a time (RTMP → WHIP → JSMPEG → SFU), each behind a per-channel switch. Each switch waits for a maintenance window agreed with the active broadcasters. Every stream key is rotated at the RTMP cutover.
++OpenRestream runs in parallel with Live's ingest and takes one protocol at a time (RTMP → WHIP → JSMPEG → SFU), each behind a per-channel switch. Each switch waits for a maintenance window agreed with the active broadcasters. Every stream key is rotated at the RTMP cutover.
## Rollback
--Per protocol: flip the channel switch back to Live's in-process ingest. Live's ingest code stays until the last protocol has run on OpenRe for two weeks without a regression.
++Per protocol: flip the channel switch back to Live's in-process ingest. Live's ingest code stays until the last protocol has run on OpenRestream for two weeks without a regression.
## Acceptance tests
- Deploying Live during a broadcast does not interrupt transport or recording.
--- Deploying the OpenRe API does not end worker-owned transports.
++- Deploying the OpenRestream API does not end worker-owned transports.
- A failed restream destination never ends the source session.
- Every stream key that existed before the cutover has been rotated.
ddiff --git a/docs/adr/ADR-034-platform-north-star.md b/docs/adr/ADR-034-platform-north-star.md
iindex 4ac4d63e..b206456f 100644
---- a/docs/adr/ADR-034-platform-north-star.md
++++ b/docs/adr/ADR-034-platform-north-star.md
@@@ -131,7 +131,7 @@ There are two kinds of location, because most of what "near the user" buys is ch
**Edge nodes are small, cheap machines in many places.** They run one agent with a few roles and hold no tenant data:
- **probe**: ping, traceroute, DNS, TCP/UDP and HTTP checks toward a target;
- **relay**: TURN for WebRTC calls, and game-server query relays;
--- **ingest**: RTMP, SRT and WHIP accepted near the streamer, forwarded over the private network to the home region's OpenRe;
++- **ingest**: RTMP, SRT and WHIP accepted near the streamer, forwarded over the private network to the home region's OpenRestream;
- **cache**: media and page cache in front of R2 and origin.
Edge nodes are listed in the registry with their location (city, country, coordinates, provider), roles, capacity and health. The same deploy controller (section 7) manages them.
ddiff --git a/docs/adr/ADR-035-postgresql-and-valkey.md b/docs/adr/ADR-035-postgresql-and-valkey.md
iindex 237832ed..f6dc3188 100644
---- a/docs/adr/ADR-035-postgresql-and-valkey.md
++++ b/docs/adr/ADR-035-postgresql-and-valkey.md
@@@ -43,7 +43,7 @@
3. Switch reads and writes to PostgreSQL, keeping the SQLite file read-only for the N-1 window (ADR-016, 7 days) as the rollback.
4. Then delete the SQLite file after a final backup.
-- Order: Wiki, Blog, News, Reviews, Deals, Coupons, Trade, Tips, VIP, Search, Sources, Codes, Host, AI, Events, Chat, Community, Billing, Media, Tools, Games, OpenRe, Network, Live. Each migration is its own change, with its own rehearsal on a copy of the production data.
++ Order: Wiki, Blog, News, Reviews, Deals, Coupons, Trade, Tips, VIP, Search, Sources, Codes, Host, AI, Events, Chat, Community, Billing, Media, Tools, Games, OpenRestream, Network, Live. Each migration is its own change, with its own rehearsal on a copy of the production data.
7. **Sizing on the shared host**, until the data role has its own machine:
- PostgreSQL: `shared_buffers` 1 GB, `effective_cache_size` 4 GB, `work_mem` 16 MB, `max_connections` 120, pooled behind PgBouncer;
- Valkey: `maxmemory` 768 MB.
ddiff --git a/docs/adr/ADR-043-bot-devices-and-control.md b/docs/adr/ADR-043-bot-devices-and-control.md
iindex 2bea0633..e024476e 100644
---- a/docs/adr/ADR-043-bot-devices-and-control.md
++++ b/docs/adr/ADR-043-bot-devices-and-control.md
@@@ -12,7 +12,7 @@ a Cozmo-based robot).
- Chat commands (`!forward`, `!headup`, `!say`…) reached the robot with no permission check; Live fb3957f put them behind
the panel's rules as a stop-gap. Live also generates ~900 lines of Python per Cozmo owner (`routes.js`), because
buttons are table rows rather than a profile.
--- OpenRe's webrtc worker (75a5dd7) takes WHIP ingest and serves viewers; Media records; Events carries events; Network
++- OpenRestream's webrtc worker (75a5dd7) takes WHIP ingest and serves viewers; Media records; Events carries events; Network
issues service tokens and delegated grants.
- The owner's first robot, the Adeept ADR036, is a Raspberry Pi with Adeept's Robot HAT: a PCA9685 at I²C 0x5f drives the
four DC motors (channels 8–15) and the pan/tilt servos (0, 1); an ADS7830 at 0x48 reads battery voltage; ultrasonic,
@@@ -43,8 +43,8 @@ a Cozmo-based robot).
virtual environment with a systemd unit and the hardware watchdog.
4. **Control runs over one outbound WebSocket per device; video over WHIP.** The device dials Bot
(`wss://openvibe.bot/device`), authenticates with its credential, and keeps one connection for commands, telemetry and
-- heartbeats; this works behind any home router and on an ESP32. The camera publishes to OpenRe over WHIP; viewers watch
-- through OpenRe. Operators reach Bot over a WebSocket from the panel. A WebRTC data channel may be added later as a
++ heartbeats; this works behind any home router and on an ESP32. The camera publishes to OpenRestream over WHIP; viewers watch
++ through OpenRestream. Operators reach Bot over a WebSocket from the panel. A WebRTC data channel may be added later as a
second control transport when measured latency asks for it; the message set does not change.
5. **One message set** (JSON, fields `v`, `seq`, `ts` on every frame): server→device `hello`, `config` (limits, heartbeat,
the operator's allowed commands), `command` (`id` as an idempotency key, `kind` drive/actuator/ptz/say/display/halt,
@@@ -93,7 +93,7 @@ a Cozmo-based robot).
the `bot` service manifest and its events.
- Network: a `bot` service principal; the `bot.robot.control` grant for Live and Chat (on behalf of viewers) and for
Actor agents (delegated).
--- OpenRe: per-device publish keys for WHIP sessions created by Bot.
++- OpenRestream: per-device publish keys for WHIP sessions created by Bot.
- Live: the panel embed on channel pages, then the deletion in decision 10; Extensions `hardware/` becomes a pointer to
the Bot agent.
ddiff --git a/docs/adr/ADR-048-services-control-plane.md b/docs/adr/ADR-048-services-control-plane.md
iindex 983fdc02..fb62ad34 100644
---- a/docs/adr/ADR-048-services-control-plane.md
++++ b/docs/adr/ADR-048-services-control-plane.md
@@@ -101,7 +101,7 @@ below is in `lib/ids.js` except `act`, `run` and `zon`, which are proposed and n
Codes hosts no repositories, so `codes.repo` is gone. Media's index lists only its objects; its v1 vods and clips are
projections over objects (bigint ids) and are never listed. The person-owned resources — Bot robots and devices, Chat
--rooms, Community spaces, OpenRe.Stream streams and Games characters — are step 8 phase 2, served like Network's
++rooms, Community spaces, OpenRestream streams and Games characters — are step 8 phase 2, served like Network's
user-owned node principals: no OVRN, owner = user.
Events' `queue` is future until Events stores a queue row; `act`, `run` and `zon` are proposed but are not in
ddiff --git a/docs/adr/README.md b/docs/adr/README.md
iindex 72cced6b..e462f381 100644
---- a/docs/adr/README.md
++++ b/docs/adr/README.md
@@@ -12,7 +12,7 @@ Platform-wide decisions from the OpenVibe development roadmap (section 10). Each
| [ADR-006](ADR-006-media-objects.md) | Media object, location and namespace model | Accepted 2026-09-22; implementation in progress (OpenVibe.Media Wave 4); amended 2026-09-24 (placement classes, local provider, infrequent access deferred) |
| [ADR-007](ADR-007-data-ownership.md) | Logical data ownership and database technology | Accepted 2026-09-22; amended 2026-09-24 (PgBouncer, replicas, SERIALIZABLE money paths, Redis non-authoritative) |
| [ADR-008](ADR-008-shared-packages.md) | Shared package publication and release manifests | Accepted 2026-09-22; implementation in progress (OpenVibe.Shared) |
--| [ADR-009](ADR-009-live-openre-boundary.md) | Live versus OpenRe boundary | Accepted 2026-09-23; OpenRe deployed, no slot moved yet |
++| [ADR-009](ADR-009-live-openre-boundary.md) | Live versus OpenRestream boundary | Accepted 2026-09-23; OpenRestream deployed, no slot moved yet |
| [ADR-010](ADR-010-chat-boundary.md) | Chat versus Live/Community boundary | Accepted and executed 2026-09-23 (Chat serves Live's chat) |
| [ADR-011](ADR-011-community-pastes.md) | Community paste and comment ownership migration | Accepted and executed 2026-09-22 |
| [ADR-012](ADR-012-economic-classification.md) | Billing vs loyalty, credits and currency classification | Accepted 2026-09-22; gates Waves 8-10; amended 2026-09-24 (transaction-type mapping, OpenCoins stays in Network, table substitution) |
ddiff --git a/fixtures/wiki.proposal-request/valid/refresh.json b/fixtures/wiki.proposal-request/valid/refresh.json
iindex f22d0d67..c603d22c 100644
---- a/fixtures/wiki.proposal-request/valid/refresh.json
++++ b/fixtures/wiki.proposal-request/valid/refresh.json
@@@ -1 +1 @@
--{ "page_id": "pg_01JAB2C3D4E5F6G7H8J9K0MNPQ", "body": "Restreaming sends one encoder feed to several platforms. OpenRe.Stream does it server-side.", "expected_revision": 3, "workflow": { "id": "wiki.page_refresh", "run_id": "run_01JAB2C3D4E5F6G7H8J9K0MNPS", "model": "claude-sonnet-4-5" }, "note": "adds OpenRe" }
++{ "page_id": "pg_01JAB2C3D4E5F6G7H8J9K0MNPQ", "body": "Restreaming sends one encoder feed to several platforms. OpenRestream does it server-side.", "expected_revision": 3, "workflow": { "id": "wiki.page_refresh", "run_id": "run_01JAB2C3D4E5F6G7H8J9K0MNPS", "model": "claude-sonnet-4-5" }, "note": "adds OpenRestream" }
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex 9d390863..f4ceffb7 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -1887,7 +1887,7 @@
"slot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
-- "description": "A persistent stream slot (Live: managed_streams.id; OpenRe stream definitions refer to it as live:managed_stream:<id>)."
++ "description": "A persistent stream slot (Live: managed_streams.id; OpenRestream stream definitions refer to it as live:managed_stream:<id>)."
},
"vod_id": {
"type": "string",
@@@ -25311,7 +25311,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/events/payloads/live.stream.started.v1.json",
"title": "LiveStreamStartedPayload",
-- "description": "live.stream.started v1 (OpenVibe.Live server/events/stream-events.js envelopeFor, fired by server/db/database.js createStream). A streams row went live: WebRTC/JSMPEG from the dashboard, RTMP ingest, WHIP, or an OpenRe.Stream session mirrored into Live. Written to Live's event_outbox in the transaction that inserts the row, so the event exists if and only if the stream did. Carries public channel facts only (the stream is listed publicly already); consumers such as Network's go-live notifications decide who hears about it. Never the stream key, the Live user id or the description. Envelope: subject { type: stream, id: <stream_id as a string>, revision: 1 }, visibility public, priority important, actor the streamer's user subject when Live knows it, else service:live.",
++ "description": "live.stream.started v1 (OpenVibe.Live server/events/stream-events.js envelopeFor, fired by server/db/database.js createStream). A streams row went live: WebRTC/JSMPEG from the dashboard, RTMP ingest, WHIP, or an OpenRestream session mirrored into Live. Written to Live's event_outbox in the transaction that inserts the row, so the event exists if and only if the stream did. Carries public channel facts only (the stream is listed publicly already); consumers such as Network's go-live notifications decide who hears about it. Never the stream key, the Live user id or the description. Envelope: subject { type: stream, id: <stream_id as a string>, revision: 1 }, visibility public, priority important, actor the streamer's user subject when Live knows it, else service:live.",
"type": "object",
"required": [
"stream_id",
@@@ -25390,7 +25390,7 @@
"webrtc",
"rtmp"
],
-- "description": "How the stream is ingested (WHIP is webrtc; OpenRe and RTMP are rtmp)."
++ "description": "How the stream is ingested (WHIP is webrtc; OpenRestream and RTMP are rtmp)."
},
"is_nsfw": {
"type": "boolean"
@@@ -25495,7 +25495,7 @@
"webrtc",
"rtmp"
],
-- "description": "How the stream is ingested (WHIP is webrtc; OpenRe and RTMP are rtmp)."
++ "description": "How the stream is ingested (WHIP is webrtc; OpenRestream and RTMP are rtmp)."
},
"is_nsfw": {
"type": "boolean"
@@@ -59917,7 +59917,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/destination.v1.json",
"title": "OpenreDestination",
-- "description": "openre.destination@1: one restream destination of a stream on OpenRe.Stream (server/store/outputs.js publicDest). The stream key and SRT passphrase are write-only: only whether they are set and a hint of the key are shown.",
++ "description": "openre.destination@1: one restream destination of a stream on OpenRestream (server/store/outputs.js publicDest). The stream key and SRT passphrase are write-only: only whether they are set and a hint of the key are shown.",
"type": "object",
"required": [
"id",
@@@ -60073,7 +60073,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/key-rotate-request.v1.json",
"title": "OpenreKeyRotateRequest",
-- "description": "openre.key-rotate-request@1: the body of POST /api/v1/streams/:id/keys/rotate on OpenRe.Stream (openre.key.rotate). grace_seconds (0 by default, at most 7 days) keeps the old key working that long; end_sessions true also ends the stream's open sessions. An empty body rotates with no grace.",
++ "description": "openre.key-rotate-request@1: the body of POST /api/v1/streams/:id/keys/rotate on OpenRestream (openre.key.rotate). grace_seconds (0 by default, at most 7 days) keeps the old key working that long; end_sessions true also ends the stream's open sessions. An empty body rotates with no grace.",
"type": "object",
"properties": {
"grace_seconds": {
@@@ -60098,7 +60098,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/key-rotate-result.v1.json",
"title": "OpenreKeyRotateResult",
-- "description": "openre.key-rotate-result@1: the answer of POST /api/v1/streams/:id/keys/rotate on OpenRe.Stream: the new key (shown once, Cache-Control no-store), the keys it retired (grace or revoked), when the grace ends, how many sessions were asked to end, and the ingest endpoints. openre.key.rotated is announced.",
++ "description": "openre.key-rotate-result@1: the answer of POST /api/v1/streams/:id/keys/rotate on OpenRestream: the new key (shown once, Cache-Control no-store), the keys it retired (grace or revoked), when the grace ends, how many sessions were asked to end, and the ingest endpoints. openre.key.rotated is announced.",
"type": "object",
"required": [
"key",
@@@ -60207,7 +60207,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/output-read-result.v1.json",
"title": "OpenreOutputReadResult",
-- "description": "openre.output-read-result@1: answers of openre.output.read on OpenRe.Stream. GET /api/v1/streams/:id/destinations → { destinations }; GET /api/v1/sessions/:id/outputs → { outputs } (with health); GET /api/v1/destinations/:id/logs and GET /api/v1/outputs/:id/logs?limit= → { logs } (newest first, at most 500).",
++ "description": "openre.output-read-result@1: answers of openre.output.read on OpenRestream. GET /api/v1/streams/:id/destinations → { destinations }; GET /api/v1/sessions/:id/outputs → { outputs } (with health); GET /api/v1/destinations/:id/logs and GET /api/v1/outputs/:id/logs?limit= → { logs } (newest first, at most 500).",
"anyOf": [
{
"type": "object",
@@@ -60289,7 +60289,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/output-write-request.v1.json",
"title": "OpenreOutputWriteRequest",
-- "description": "openre.output-write-request@1: the body of POST /api/v1/streams/:id/destinations (platform and server_url required) and PATCH /api/v1/destinations/:id (fields left out keep their value) on OpenRe.Stream (openre.output.write). server_url must pass the destination URL rules (rtmp, rtmps or srt, public hosts); stream_key (at most 512 characters, no spaces) and srt_passphrase (10 to 79 characters) are sealed and never read back — __keep__ leaves them unchanged, empty clears them. Numbers out of range become null: srt_latency_ms 20-8000, custom_video_bitrate 500-50000, custom_audio_bitrate 32-512, custom_fps 15-120; an unknown custom_encoder_preset becomes null. DELETE /api/v1/destinations/:id and POST /api/v1/destinations/:id/test|start|stop take no body.",
++ "description": "openre.output-write-request@1: the body of POST /api/v1/streams/:id/destinations (platform and server_url required) and PATCH /api/v1/destinations/:id (fields left out keep their value) on OpenRestream (openre.output.write). server_url must pass the destination URL rules (rtmp, rtmps or srt, public hosts); stream_key (at most 512 characters, no spaces) and srt_passphrase (10 to 79 characters) are sealed and never read back — __keep__ leaves them unchanged, empty clears them. Numbers out of range become null: srt_latency_ms 20-8000, custom_video_bitrate 500-50000, custom_audio_bitrate 32-512, custom_fps 15-120; an unknown custom_encoder_preset becomes null. DELETE /api/v1/destinations/:id and POST /api/v1/destinations/:id/test|start|stop take no body.",
"anyOf": [
{
"type": "object",
@@@ -60395,7 +60395,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/output-write-result.v1.json",
"title": "OpenreOutputWriteResult",
-- "description": "openre.output-write-result@1: answers of openre.output.write on OpenRe.Stream. POST …/destinations → 201 { destination }; PATCH /api/v1/destinations/:id → { destination }; DELETE → 204 with no body (409 openre.destination_running while it still runs); POST …/test → { ok, checks } (URL rules, DNS, TCP reachability; each check { check, ok, detail }); POST …/start → { output } (for the stream's live session; 409 when held, disabled, keyless or not live); POST …/stop → { stopping } (outputs asked to stop).",
++ "description": "openre.output-write-result@1: answers of openre.output.write on OpenRestream. POST …/destinations → 201 { destination }; PATCH /api/v1/destinations/:id → { destination }; DELETE → 204 with no body (409 openre.destination_running while it still runs); POST …/test → { ok, checks } (URL rules, DNS, TCP reachability; each check { check, ok, detail }); POST …/start → { output } (for the stream's live session; 409 when held, disabled, keyless or not live); POST …/stop → { stopping } (outputs asked to stop).",
"anyOf": [
{
"type": "object",
@@@ -60473,7 +60473,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/output.v1.json",
"title": "OpenreOutput",
-- "description": "openre.output@1: one restream output (a destination running for a live session) on OpenRe.Stream (server/store/outputs.js publicOutput), with its desired and actual state, restarts and progress.",
++ "description": "openre.output@1: one restream output (a destination running for a live session) on OpenRestream (server/store/outputs.js publicOutput), with its desired and actual state, restarts and progress.",
"type": "object",
"required": [
"id",
@@@ -60572,7 +60572,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/session-end-result.v1.json",
"title": "OpenreSessionEndResult",
-- "description": "openre.session-end-result@1: the answer of POST /api/v1/sessions/:id/end on OpenRe.Stream (openre.session.end): 202 { requested: true, state } when the owning worker was asked to disconnect the encoder, 409 { requested: false, state } when the session could not be ended (already ending or over).",
++ "description": "openre.session-end-result@1: the answer of POST /api/v1/sessions/:id/end on OpenRestream (openre.session.end): 202 { requested: true, state } when the owning worker was asked to disconnect the encoder, 409 { requested: false, state } when the session could not be ended (already ending or over).",
"type": "object",
"required": [
"requested",
@@@ -60596,7 +60596,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/session-read-result.v1.json",
"title": "OpenreSessionReadResult",
-- "description": "openre.session-read-result@1: answers of openre.session.read on OpenRe.Stream. GET /api/v1/sessions?stream_id=&state=&limit=&before= → { sessions } (the owner's; a service sees those of the subject it acts for); GET /api/v1/sessions/:id → { session } with transitions, outputs, recording and playback; GET /api/v1/sessions/:id/playback → { playback } (where to watch: flv and rtmp URLs, internal loopback and public); GET /api/v1/workers → { workers } (worker generations; staff and services only).",
++ "description": "openre.session-read-result@1: answers of openre.session.read on OpenRestream. GET /api/v1/sessions?stream_id=&state=&limit=&before= → { sessions } (the owner's; a service sees those of the subject it acts for); GET /api/v1/sessions/:id → { session } with transitions, outputs, recording and playback; GET /api/v1/sessions/:id/playback → { playback } (where to watch: flv and rtmp URLs, internal loopback and public); GET /api/v1/workers → { workers } (worker generations; staff and services only).",
"anyOf": [
{
"type": "object",
@@@ -60937,7 +60937,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/stream-read-result.v1.json",
"title": "OpenreStreamReadResult",
-- "description": "openre.stream-read-result@1: answers of openre.stream.read on OpenRe.Stream. GET /api/v1/streams[?external_ref=<service>:<type>:<id>&limit=] → { streams } (the owner's, or the one bound to that external reference; staff may ask for all); GET /api/v1/streams/:id → { stream }; GET /api/v1/streams/:id/keys → { keys } (metadata only, never a key). Another owner's or an archived stream is 404 openre.stream_not_found.",
++ "description": "openre.stream-read-result@1: answers of openre.stream.read on OpenRestream. GET /api/v1/streams[?external_ref=<service>:<type>:<id>&limit=] → { streams } (the owner's, or the one bound to that external reference; staff may ask for all); GET /api/v1/streams/:id → { stream }; GET /api/v1/streams/:id/keys → { keys } (metadata only, never a key). Another owner's or an archived stream is 404 openre.stream_not_found.",
"anyOf": [
{
"type": "object",
@@@ -61036,7 +61036,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/stream-write-request.v1.json",
"title": "OpenreStreamWriteRequest",
-- "description": "openre.stream-write-request@1: the body of POST /api/v1/streams and PATCH /api/v1/streams/:id on OpenRe.Stream (openre.stream.write). A person creates streams for themselves; a service names the owner with X-OV-Subject (or owner_subject, which must then match). title is cleaned and cut to 140 characters (Untitled stream when blank), description to 2000; protocols is a non-empty subset of rtmp, whip, webrtc, jsmpeg; external_refs (create only, at most 10, each bound to one stream) link it to another service's record, e.g. { service: live, type: managed_stream, id: 12 }; state (update only) is active or disabled. Fields left out keep their value. DELETE /api/v1/streams/:id (archive; refused while live) takes no body. Refusals are 400 openre.invalid_* and 409 openre.ref_taken / openre.stream_live.",
++ "description": "openre.stream-write-request@1: the body of POST /api/v1/streams and PATCH /api/v1/streams/:id on OpenRestream (openre.stream.write). A person creates streams for themselves; a service names the owner with X-OV-Subject (or owner_subject, which must then match). title is cleaned and cut to 140 characters (Untitled stream when blank), description to 2000; protocols is a non-empty subset of rtmp, whip, webrtc, jsmpeg; external_refs (create only, at most 10, each bound to one stream) link it to another service's record, e.g. { service: live, type: managed_stream, id: 12 }; state (update only) is active or disabled. Fields left out keep their value. DELETE /api/v1/streams/:id (archive; refused while live) takes no body. Refusals are 400 openre.invalid_* and 409 openre.ref_taken / openre.stream_live.",
"anyOf": [
{
"type": "object",
@@@ -61153,7 +61153,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/stream-write-result.v1.json",
"title": "OpenreStreamWriteResult",
-- "description": "openre.stream-write-result@1: answers of openre.stream.write on OpenRe.Stream. POST /api/v1/streams → 201 { stream, key } where key is the first ingest key, shown once (Cache-Control no-store); PATCH /api/v1/streams/:id → { stream }; DELETE /api/v1/streams/:id → 204 with no body.",
++ "description": "openre.stream-write-result@1: answers of openre.stream.write on OpenRestream. POST /api/v1/streams → 201 { stream, key } where key is the first ingest key, shown once (Cache-Control no-store); PATCH /api/v1/streams/:id → { stream }; DELETE /api/v1/streams/:id → 204 with no body.",
"type": "object",
"required": [
"stream"
@@@ -61197,7 +61197,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/openre/stream.v1.json",
"title": "OpenreStream",
-- "description": "openre.stream@1: one stream definition as OpenRe.Stream's API shows it (server/api/v1.js publicDefinition): the owner's stream with its protocols, recording and playback settings, ingest endpoints, key metadata (hints only, never a key) and the open session if any.",
++ "description": "openre.stream@1: one stream definition as OpenRestream's API shows it (server/api/v1.js publicDefinition): the owner's stream with its protocols, recording and playback settings, ingest endpoints, key metadata (hints only, never a key) and the open session if any.",
"type": "object",
"required": [
"id",
@@@ -62557,7 +62557,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/events/payloads/host.release.published.v1.json",
"title": "HostReleasePublishedPayload",
-- "description": "host.release.published v1 (roadmap WS-P task 9, ADR-016 amendment 1). A network service's release went live. OpenVibe.Host's operator plane (lib/announce.js) publishes it after `ovhost deploy|rollback <service>` went live and for `ovhost announce <service>` (services deployed by their own scripts: Live, Tools, Sites, OpenRe, Games). Envelope: subject { type: release, id: <service>:<release> }, visibility public (signed-out browsers get it over Events realtime), priority low, actor service:host. Open tabs whose /release.json names `service` (openvibe-shared release-watch 1.17.0, topics=host.release.published) check it when `release` is not the one they run. It carries identifiers only, never what changed. At most one per service and release unless an operator forces it; a retry reuses the event_id. Tenant sites' activations are host.deploy.activated, not this.",
++ "description": "host.release.published v1 (roadmap WS-P task 9, ADR-016 amendment 1). A network service's release went live. OpenVibe.Host's operator plane (lib/announce.js) publishes it after `ovhost deploy|rollback <service>` went live and for `ovhost announce <service>` (services deployed by their own scripts: Live, Tools, Sites, OpenRestream, Games). Envelope: subject { type: release, id: <service>:<release> }, visibility public (signed-out browsers get it over Events realtime), priority low, actor service:host. Open tabs whose /release.json names `service` (openvibe-shared release-watch 1.17.0, topics=host.release.published) check it when `release` is not the one they run. It carries identifiers only, never what changed. At most one per service and release unless an operator forces it; a retry reuses the event_id. Tenant sites' activations are host.deploy.activated, not this.",
"type": "object",
"required": [
"service",
@@@ -70783,7 +70783,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/bot/pair-result.v1.json",
"title": "BotPairResult",
-- "description": "bot.pair-result@1: the 201 answers of OpenVibe.Bot's pairing routes (server/api/v1.js). POST /api/v1/pair → { device_id, credential, publish_key, whip_url?, robot_id, profile }; POST /api/v1/devices/bind (a Network node token) → the same without credential. The credential, the publish key and the WHIP URL are shown once and never again. Without OpenRe configured there is no key: video is not_configured instead.",
++ "description": "bot.pair-result@1: the 201 answers of OpenVibe.Bot's pairing routes (server/api/v1.js). POST /api/v1/pair → { device_id, credential, publish_key, whip_url?, robot_id, profile }; POST /api/v1/devices/bind (a Network node token) → the same without credential. The credential, the publish key and the WHIP URL are shown once and never again. Without OpenRestream configured there is no key: video is not_configured instead.",
"anyOf": [
{
"type": "object",
@@@ -70821,7 +70821,7 @@
"publish_key": {
"type": "string",
"minLength": 1,
-- "description": "The WHIP publish key, an ingest key OpenRe issued for the robot's stream: shown once."
++ "description": "The WHIP publish key, an ingest key OpenRestream issued for the robot's stream: shown once."
},
"whip_url": {
"type": "string",
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex 4668cf55..357b7516 100644
---- a/generated/openapi/actor.json
++++ b/generated/openapi/actor.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Actor API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/ai.json b/generated/openapi/ai.json
iindex 6d6650b0..55d33125 100644
---- a/generated/openapi/ai.json
++++ b/generated/openapi/ai.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.AI API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/billing.json b/generated/openapi/billing.json
iindex 32c07267..dbf52dcd 100644
---- a/generated/openapi/billing.json
++++ b/generated/openapi/billing.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Billing API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/blog.json b/generated/openapi/blog.json
iindex 53b6dd7e..feb5f4fc 100644
---- a/generated/openapi/blog.json
++++ b/generated/openapi/blog.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Blog API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/bot.json b/generated/openapi/bot.json
iindex 42732f99..a0cee729 100644
---- a/generated/openapi/bot.json
++++ b/generated/openapi/bot.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Bot API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/chat.json b/generated/openapi/chat.json
iindex ca4d0e63..802d063b 100644
---- a/generated/openapi/chat.json
++++ b/generated/openapi/chat.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Chat API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/community.json b/generated/openapi/community.json
iindex e97cfba1..2ddf27c9 100644
---- a/generated/openapi/community.json
++++ b/generated/openapi/community.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Community API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/coupons.json b/generated/openapi/coupons.json
iindex 6e98484e..190dff2a 100644
---- a/generated/openapi/coupons.json
++++ b/generated/openapi/coupons.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Coupons API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/deals.json b/generated/openapi/deals.json
iindex facdafda..30782c4f 100644
---- a/generated/openapi/deals.json
++++ b/generated/openapi/deals.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Deals API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/events.json b/generated/openapi/events.json
iindex 131d9d7b..aaf03a90 100644
---- a/generated/openapi/events.json
++++ b/generated/openapi/events.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Events API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/food.json b/generated/openapi/food.json
iindex e14ee0cb..c155c98f 100644
---- a/generated/openapi/food.json
++++ b/generated/openapi/food.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Food API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/games.json b/generated/openapi/games.json
iindex d94173c2..10b74435 100644
---- a/generated/openapi/games.json
++++ b/generated/openapi/games.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Games API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/host.json b/generated/openapi/host.json
iindex dab96547..64aff815 100644
---- a/generated/openapi/host.json
++++ b/generated/openapi/host.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Host API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/index.json b/generated/openapi/index.json
iindex 8ce87c84..faae58bc 100644
---- a/generated/openapi/index.json
++++ b/generated/openapi/index.json
@@@ -129,7 +129,7 @@
},
{
"service": "openre",
-- "name": "OpenRe.Stream",
++ "name": "OpenRestream",
"origin": "https://openre.stream",
"operations": 22,
"capabilities": 7
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex ccf9100a..754ddae7 100644
---- a/generated/openapi/inventory.json
++++ b/generated/openapi/inventory.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Inventory API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/live.json b/generated/openapi/live.json
iindex dea74f48..a821f9e9 100644
---- a/generated/openapi/live.json
++++ b/generated/openapi/live.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Live API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
@@@ -1341,9 +1341,9 @@
"schema": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
-- "description": "A persistent stream slot (Live: managed_streams.id; OpenRe stream definitions refer to it as live:managed_stream:<id>)."
++ "description": "A persistent stream slot (Live: managed_streams.id; OpenRestream stream definitions refer to it as live:managed_stream:<id>)."
},
-- "description": "A persistent stream slot (Live: managed_streams.id; OpenRe stream definitions refer to it as live:managed_stream:<id>)."
++ "description": "A persistent stream slot (Live: managed_streams.id; OpenRestream stream definitions refer to it as live:managed_stream:<id>)."
},
{
"name": "vod_id",
@@@ -2078,7 +2078,7 @@
"slot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
-- "description": "A persistent stream slot (Live: managed_streams.id; OpenRe stream definitions refer to it as live:managed_stream:<id>)."
++ "description": "A persistent stream slot (Live: managed_streams.id; OpenRestream stream definitions refer to it as live:managed_stream:<id>)."
},
"vod_id": {
"type": "string",
ddiff --git a/generated/openapi/media.json b/generated/openapi/media.json
iindex 5aaeb40a..616310e5 100644
---- a/generated/openapi/media.json
++++ b/generated/openapi/media.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Media API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/network.json b/generated/openapi/network.json
iindex 587843f4..5ba7d30d 100644
---- a/generated/openapi/network.json
++++ b/generated/openapi/network.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Network API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/news.json b/generated/openapi/news.json
iindex da8e6fed..044eb59a 100644
---- a/generated/openapi/news.json
++++ b/generated/openapi/news.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.News API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/openre.json b/generated/openapi/openre.json
iindex dedf92d8..5eb8f2b8 100644
---- a/generated/openapi/openre.json
++++ b/generated/openapi/openre.json
@@@ -2,9 +2,9 @@
"openapi": "3.1.0",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
-- "title": "OpenRe.Stream API",
-- "version": "0.125.0",
-- "description": "Routes of OpenRe.Stream as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "title": "OpenRestream API",
++ "version": "0.125.1",
++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
@@@ -1478,7 +1478,7 @@
},
"openre.destination.v1": {
"title": "OpenreDestination",
-- "description": "openre.destination@1: one restream destination of a stream on OpenRe.Stream (server/store/outputs.js publicDest). The stream key and SRT passphrase are write-only: only whether they are set and a hint of the key are shown.",
++ "description": "openre.destination@1: one restream destination of a stream on OpenRestream (server/store/outputs.js publicDest). The stream key and SRT passphrase are write-only: only whether they are set and a hint of the key are shown.",
"type": "object",
"required": [
"id",
@@@ -1627,7 +1627,7 @@
},
"openre.key-rotate-request.v1": {
"title": "OpenreKeyRotateRequest",
-- "description": "openre.key-rotate-request@1: the body of POST /api/v1/streams/:id/keys/rotate on OpenRe.Stream (openre.key.rotate). grace_seconds (0 by default, at most 7 days) keeps the old key working that long; end_sessions true also ends the stream's open sessions. An empty body rotates with no grace.",
++ "description": "openre.key-rotate-request@1: the body of POST /api/v1/streams/:id/keys/rotate on OpenRestream (openre.key.rotate). grace_seconds (0 by default, at most 7 days) keeps the old key working that long; end_sessions true also ends the stream's open sessions. An empty body rotates with no grace.",
"type": "object",
"properties": {
"grace_seconds": {
@@@ -1645,7 +1645,7 @@
},
"openre.key-rotate-result.v1": {
"title": "OpenreKeyRotateResult",
-- "description": "openre.key-rotate-result@1: the answer of POST /api/v1/streams/:id/keys/rotate on OpenRe.Stream: the new key (shown once, Cache-Control no-store), the keys it retired (grace or revoked), when the grace ends, how many sessions were asked to end, and the ingest endpoints. openre.key.rotated is announced.",
++ "description": "openre.key-rotate-result@1: the answer of POST /api/v1/streams/:id/keys/rotate on OpenRestream: the new key (shown once, Cache-Control no-store), the keys it retired (grace or revoked), when the grace ends, how many sessions were asked to end, and the ingest endpoints. openre.key.rotated is announced.",
"type": "object",
"required": [
"key",
@@@ -1747,7 +1747,7 @@
},
"openre.output-read-result.v1": {
"title": "OpenreOutputReadResult",
-- "description": "openre.output-read-result@1: answers of openre.output.read on OpenRe.Stream. GET /api/v1/streams/:id/destinations → { destinations }; GET /api/v1/sessions/:id/outputs → { outputs } (with health); GET /api/v1/destinations/:id/logs and GET /api/v1/outputs/:id/logs?limit= → { logs } (newest first, at most 500).",
++ "description": "openre.output-read-result@1: answers of openre.output.read on OpenRestream. GET /api/v1/streams/:id/destinations → { destinations }; GET /api/v1/sessions/:id/outputs → { outputs } (with health); GET /api/v1/destinations/:id/logs and GET /api/v1/outputs/:id/logs?limit= → { logs } (newest first, at most 500).",
"anyOf": [
{
"type": "object",
@@@ -1822,7 +1822,7 @@
},
"openre.output-write-request.v1": {
"title": "OpenreOutputWriteRequest",
-- "description": "openre.output-write-request@1: the body of POST /api/v1/streams/:id/destinations (platform and server_url required) and PATCH /api/v1/destinations/:id (fields left out keep their value) on OpenRe.Stream (openre.output.write). server_url must pass the destination URL rules (rtmp, rtmps or srt, public hosts); stream_key (at most 512 characters, no spaces) and srt_passphrase (10 to 79 characters) are sealed and never read back — __keep__ leaves them unchanged, empty clears them. Numbers out of range become null: srt_latency_ms 20-8000, custom_video_bitrate 500-50000, custom_audio_bitrate 32-512, custom_fps 15-120; an unknown custom_encoder_preset becomes null. DELETE /api/v1/destinations/:id and POST /api/v1/destinations/:id/test|start|stop take no body.",
++ "description": "openre.output-write-request@1: the body of POST /api/v1/streams/:id/destinations (platform and server_url required) and PATCH /api/v1/destinations/:id (fields left out keep their value) on OpenRestream (openre.output.write). server_url must pass the destination URL rules (rtmp, rtmps or srt, public hosts); stream_key (at most 512 characters, no spaces) and srt_passphrase (10 to 79 characters) are sealed and never read back — __keep__ leaves them unchanged, empty clears them. Numbers out of range become null: srt_latency_ms 20-8000, custom_video_bitrate 500-50000, custom_audio_bitrate 32-512, custom_fps 15-120; an unknown custom_encoder_preset becomes null. DELETE /api/v1/destinations/:id and POST /api/v1/destinations/:id/test|start|stop take no body.",
"anyOf": [
{
"type": "object",
@@@ -1921,7 +1921,7 @@
},
"openre.output-write-result.v1": {
"title": "OpenreOutputWriteResult",
-- "description": "openre.output-write-result@1: answers of openre.output.write on OpenRe.Stream. POST …/destinations → 201 { destination }; PATCH /api/v1/destinations/:id → { destination }; DELETE → 204 with no body (409 openre.destination_running while it still runs); POST …/test → { ok, checks } (URL rules, DNS, TCP reachability; each check { check, ok, detail }); POST …/start → { output } (for the stream's live session; 409 when held, disabled, keyless or not live); POST …/stop → { stopping } (outputs asked to stop).",
++ "description": "openre.output-write-result@1: answers of openre.output.write on OpenRestream. POST …/destinations → 201 { destination }; PATCH /api/v1/destinations/:id → { destination }; DELETE → 204 with no body (409 openre.destination_running while it still runs); POST …/test → { ok, checks } (URL rules, DNS, TCP reachability; each check { check, ok, detail }); POST …/start → { output } (for the stream's live session; 409 when held, disabled, keyless or not live); POST …/stop → { stopping } (outputs asked to stop).",
"anyOf": [
{
"type": "object",
@@@ -1992,7 +1992,7 @@
},
"openre.output.v1": {
"title": "OpenreOutput",
-- "description": "openre.output@1: one restream output (a destination running for a live session) on OpenRe.Stream (server/store/outputs.js publicOutput), with its desired and actual state, restarts and progress.",
++ "description": "openre.output@1: one restream output (a destination running for a live session) on OpenRestream (server/store/outputs.js publicOutput), with its desired and actual state, restarts and progress.",
"type": "object",
"required": [
"id",
@@@ -2084,7 +2084,7 @@
},
"openre.session-end-result.v1": {
"title": "OpenreSessionEndResult",
-- "description": "openre.session-end-result@1: the answer of POST /api/v1/sessions/:id/end on OpenRe.Stream (openre.session.end): 202 { requested: true, state } when the owning worker was asked to disconnect the encoder, 409 { requested: false, state } when the session could not be ended (already ending or over).",
++ "description": "openre.session-end-result@1: the answer of POST /api/v1/sessions/:id/end on OpenRestream (openre.session.end): 202 { requested: true, state } when the owning worker was asked to disconnect the encoder, 409 { requested: false, state } when the session could not be ended (already ending or over).",
"type": "object",
"required": [
"requested",
@@@ -2101,7 +2101,7 @@
},
"openre.session-read-result.v1": {
"title": "OpenreSessionReadResult",
-- "description": "openre.session-read-result@1: answers of openre.session.read on OpenRe.Stream. GET /api/v1/sessions?stream_id=&state=&limit=&before= → { sessions } (the owner's; a service sees those of the subject it acts for); GET /api/v1/sessions/:id → { session } with transitions, outputs, recording and playback; GET /api/v1/sessions/:id/playback → { playback } (where to watch: flv and rtmp URLs, internal loopback and public); GET /api/v1/workers → { workers } (worker generations; staff and services only).",
++ "description": "openre.session-read-result@1: answers of openre.session.read on OpenRestream. GET /api/v1/sessions?stream_id=&state=&limit=&before= → { sessions } (the owner's; a service sees those of the subject it acts for); GET /api/v1/sessions/:id → { session } with transitions, outputs, recording and playback; GET /api/v1/sessions/:id/playback → { playback } (where to watch: flv and rtmp URLs, internal loopback and public); GET /api/v1/workers → { workers } (worker generations; staff and services only).",
"anyOf": [
{
"type": "object",
@@@ -2435,7 +2435,7 @@
},
"openre.stream-read-result.v1": {
"title": "OpenreStreamReadResult",
-- "description": "openre.stream-read-result@1: answers of openre.stream.read on OpenRe.Stream. GET /api/v1/streams[?external_ref=<service>:<type>:<id>&limit=] → { streams } (the owner's, or the one bound to that external reference; staff may ask for all); GET /api/v1/streams/:id → { stream }; GET /api/v1/streams/:id/keys → { keys } (metadata only, never a key). Another owner's or an archived stream is 404 openre.stream_not_found.",
++ "description": "openre.stream-read-result@1: answers of openre.stream.read on OpenRestream. GET /api/v1/streams[?external_ref=<service>:<type>:<id>&limit=] → { streams } (the owner's, or the one bound to that external reference; staff may ask for all); GET /api/v1/streams/:id → { stream }; GET /api/v1/streams/:id/keys → { keys } (metadata only, never a key). Another owner's or an archived stream is 404 openre.stream_not_found.",
"anyOf": [
{
"type": "object",
@@@ -2527,7 +2527,7 @@
},
"openre.stream-write-request.v1": {
"title": "OpenreStreamWriteRequest",
-- "description": "openre.stream-write-request@1: the body of POST /api/v1/streams and PATCH /api/v1/streams/:id on OpenRe.Stream (openre.stream.write). A person creates streams for themselves; a service names the owner with X-OV-Subject (or owner_subject, which must then match). title is cleaned and cut to 140 characters (Untitled stream when blank), description to 2000; protocols is a non-empty subset of rtmp, whip, webrtc, jsmpeg; external_refs (create only, at most 10, each bound to one stream) link it to another service's record, e.g. { service: live, type: managed_stream, id: 12 }; state (update only) is active or disabled. Fields left out keep their value. DELETE /api/v1/streams/:id (archive; refused while live) takes no body. Refusals are 400 openre.invalid_* and 409 openre.ref_taken / openre.stream_live.",
++ "description": "openre.stream-write-request@1: the body of POST /api/v1/streams and PATCH /api/v1/streams/:id on OpenRestream (openre.stream.write). A person creates streams for themselves; a service names the owner with X-OV-Subject (or owner_subject, which must then match). title is cleaned and cut to 140 characters (Untitled stream when blank), description to 2000; protocols is a non-empty subset of rtmp, whip, webrtc, jsmpeg; external_refs (create only, at most 10, each bound to one stream) link it to another service's record, e.g. { service: live, type: managed_stream, id: 12 }; state (update only) is active or disabled. Fields left out keep their value. DELETE /api/v1/streams/:id (archive; refused while live) takes no body. Refusals are 400 openre.invalid_* and 409 openre.ref_taken / openre.stream_live.",
"anyOf": [
{
"type": "object",
@@@ -2637,7 +2637,7 @@
},
"openre.stream-write-result.v1": {
"title": "OpenreStreamWriteResult",
-- "description": "openre.stream-write-result@1: answers of openre.stream.write on OpenRe.Stream. POST /api/v1/streams → 201 { stream, key } where key is the first ingest key, shown once (Cache-Control no-store); PATCH /api/v1/streams/:id → { stream }; DELETE /api/v1/streams/:id → 204 with no body.",
++ "description": "openre.stream-write-result@1: answers of openre.stream.write on OpenRestream. POST /api/v1/streams → 201 { stream, key } where key is the first ingest key, shown once (Cache-Control no-store); PATCH /api/v1/streams/:id → { stream }; DELETE /api/v1/streams/:id → 204 with no body.",
"type": "object",
"required": [
"stream"
@@@ -2674,7 +2674,7 @@
},
"openre.stream.v1": {
"title": "OpenreStream",
-- "description": "openre.stream@1: one stream definition as OpenRe.Stream's API shows it (server/api/v1.js publicDefinition): the owner's stream with its protocols, recording and playback settings, ingest endpoints, key metadata (hints only, never a key) and the open session if any.",
++ "description": "openre.stream@1: one stream definition as OpenRestream's API shows it (server/api/v1.js publicDefinition): the owner's stream with its protocols, recording and playback settings, ingest endpoints, key metadata (hints only, never a key) and the open session if any.",
"type": "object",
"required": [
"id",
ddiff --git a/generated/openapi/reviews.json b/generated/openapi/reviews.json
iindex b0f713b0..42510ac8 100644
---- a/generated/openapi/reviews.json
++++ b/generated/openapi/reviews.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Reviews API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/run.json b/generated/openapi/run.json
iindex 028fe3c7..8ebb33f3 100644
---- a/generated/openapi/run.json
++++ b/generated/openapi/run.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Run API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/search.json b/generated/openapi/search.json
iindex e91beabb..37658ba8 100644
---- a/generated/openapi/search.json
++++ b/generated/openapi/search.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Search API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/services.json b/generated/openapi/services.json
iindex 3194230c..5a99c8de 100644
---- a/generated/openapi/services.json
++++ b/generated/openapi/services.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Services API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/sources.json b/generated/openapi/sources.json
iindex a0e87383..ba0dedc2 100644
---- a/generated/openapi/sources.json
++++ b/generated/openapi/sources.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Sources API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/tips.json b/generated/openapi/tips.json
iindex 5746e684..e7686956 100644
---- a/generated/openapi/tips.json
++++ b/generated/openapi/tips.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tips API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/tools.json b/generated/openapi/tools.json
iindex 4ad96fd1..750a1ee5 100644
---- a/generated/openapi/tools.json
++++ b/generated/openapi/tools.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tools API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/trade.json b/generated/openapi/trade.json
iindex c6cb8f48..0a54a9ab 100644
---- a/generated/openapi/trade.json
++++ b/generated/openapi/trade.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Trade API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/vip.json b/generated/openapi/vip.json
iindex d4f6eed0..5df47f3a 100644
---- a/generated/openapi/vip.json
++++ b/generated/openapi/vip.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.VIP API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/watch.json b/generated/openapi/watch.json
iindex 7b2f909f..77bd4e74 100644
---- a/generated/openapi/watch.json
++++ b/generated/openapi/watch.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Watch API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/wiki.json b/generated/openapi/wiki.json
iindex 130e0bfa..297c2d1a 100644
---- a/generated/openapi/wiki.json
++++ b/generated/openapi/wiki.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Wiki API",
-- "version": "0.125.0",
-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.125.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.125.1",
++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.125.1): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/typescript/index.d.ts b/generated/typescript/index.d.ts
iindex 83e8a070..5a2bb5e7 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -4110,7 +4110,7 @@ export interface LineageResolveRequest {
*/
stream_id?: string;
/**
-- * A persistent stream slot (Live: managed_streams.id; OpenRe stream definitions refer to it as live:managed_stream:<id>).
++ * A persistent stream slot (Live: managed_streams.id; OpenRestream stream definitions refer to it as live:managed_stream:<id>).
*/
slot_id?: string;
/**
@@@ -31808,7 +31808,7 @@ export interface EventsUsageRecordedPayload {
/** [email protected] (owner: live) */
/**
-- * live.stream.started v1 (OpenVibe.Live server/events/stream-events.js envelopeFor, fired by server/db/database.js createStream). A streams row went live: WebRTC/JSMPEG from the dashboard, RTMP ingest, WHIP, or an OpenRe.Stream session mirrored into Live. Written to Live's event_outbox in the transaction that inserts the row, so the event exists if and only if the stream did. Carries public channel facts only (the stream is listed publicly already); consumers such as Network's go-live notifications decide who hears about it. Never the stream key, the Live user id or the description. Envelope: subject { type: stream, id: <stream_id as a string>, revision: 1 }, visibility public, priority important, actor the streamer's user subject when Live knows it, else service:live.
++ * live.stream.started v1 (OpenVibe.Live server/events/stream-events.js envelopeFor, fired by server/db/database.js createStream). A streams row went live: WebRTC/JSMPEG from the dashboard, RTMP ingest, WHIP, or an OpenRestream session mirrored into Live. Written to Live's event_outbox in the transaction that inserts the row, so the event exists if and only if the stream did. Carries public channel facts only (the stream is listed publicly already); consumers such as Network's go-live notifications decide who hears about it. Never the stream key, the Live user id or the description. Envelope: subject { type: stream, id: <stream_id as a string>, revision: 1 }, visibility public, priority important, actor the streamer's user subject when Live knows it, else service:live.
*/
export interface LiveStreamStartedPayload {
/**
@@@ -31842,7 +31842,7 @@ export interface LiveStreamStartedPayload {
*/
category: string | null;
/**
-- * How the stream is ingested (WHIP is webrtc; OpenRe and RTMP are rtmp).
++ * How the stream is ingested (WHIP is webrtc; OpenRestream and RTMP are rtmp).
*/
protocol: "jsmpeg" | "webrtc" | "rtmp";
is_nsfw: boolean;
@@@ -31888,7 +31888,7 @@ export interface LiveStreamEndedPayload {
*/
category: string | null;
/**
-- * How the stream is ingested (WHIP is webrtc; OpenRe and RTMP are rtmp).
++ * How the stream is ingested (WHIP is webrtc; OpenRestream and RTMP are rtmp).
*/
protocol: "jsmpeg" | "webrtc" | "rtmp";
is_nsfw: boolean;
@@@ -53620,7 +53620,7 @@ export type SpaceThreadReadResult =
/** [email protected] (owner: openre) */
/**
-- * openre.destination@1: one restream destination of a stream on OpenRe.Stream (server/store/outputs.js publicDest). The stream key and SRT passphrase are write-only: only whether they are set and a hint of the key are shown.
++ * openre.destination@1: one restream destination of a stream on OpenRestream (server/store/outputs.js publicDest). The stream key and SRT passphrase are write-only: only whether they are set and a hint of the key are shown.
*/
export interface OpenreDestination {
id: string;
@@@ -53652,7 +53652,7 @@ export interface OpenreDestination {
/** [email protected] (owner: openre) */
/**
-- * openre.key-rotate-request@1: the body of POST /api/v1/streams/:id/keys/rotate on OpenRe.Stream (openre.key.rotate). grace_seconds (0 by default, at most 7 days) keeps the old key working that long; end_sessions true also ends the stream's open sessions. An empty body rotates with no grace.
++ * openre.key-rotate-request@1: the body of POST /api/v1/streams/:id/keys/rotate on OpenRestream (openre.key.rotate). grace_seconds (0 by default, at most 7 days) keeps the old key working that long; end_sessions true also ends the stream's open sessions. An empty body rotates with no grace.
*/
export interface OpenreKeyRotateRequest {
/**
@@@ -53664,7 +53664,7 @@ export interface OpenreKeyRotateRequest {
/** [email protected] (owner: openre) */
/**
-- * openre.key-rotate-result@1: the answer of POST /api/v1/streams/:id/keys/rotate on OpenRe.Stream: the new key (shown once, Cache-Control no-store), the keys it retired (grace or revoked), when the grace ends, how many sessions were asked to end, and the ingest endpoints. openre.key.rotated is announced.
++ * openre.key-rotate-result@1: the answer of POST /api/v1/streams/:id/keys/rotate on OpenRestream: the new key (shown once, Cache-Control no-store), the keys it retired (grace or revoked), when the grace ends, how many sessions were asked to end, and the ingest endpoints. openre.key.rotated is announced.
*/
export interface OpenreKeyRotateResult {
key: {
@@@ -53697,7 +53697,7 @@ export interface OpenreKeyRotateResult {
/** [email protected] (owner: openre) */
/**
-- * openre.output-read-result@1: answers of openre.output.read on OpenRe.Stream. GET /api/v1/streams/:id/destinations → { destinations }; GET /api/v1/sessions/:id/outputs → { outputs } (with health); GET /api/v1/destinations/:id/logs and GET /api/v1/outputs/:id/logs?limit= → { logs } (newest first, at most 500).
++ * openre.output-read-result@1: answers of openre.output.read on OpenRestream. GET /api/v1/streams/:id/destinations → { destinations }; GET /api/v1/sessions/:id/outputs → { outputs } (with health); GET /api/v1/destinations/:id/logs and GET /api/v1/outputs/:id/logs?limit= → { logs } (newest first, at most 500).
*/
export type OpenreOutputReadResult =
| {
@@@ -53720,7 +53720,7 @@ export type OpenreOutputReadResult =
/** [email protected] (owner: openre) */
/**
-- * openre.output-write-request@1: the body of POST /api/v1/streams/:id/destinations (platform and server_url required) and PATCH /api/v1/destinations/:id (fields left out keep their value) on OpenRe.Stream (openre.output.write). server_url must pass the destination URL rules (rtmp, rtmps or srt, public hosts); stream_key (at most 512 characters, no spaces) and srt_passphrase (10 to 79 characters) are sealed and never read back — __keep__ leaves them unchanged, empty clears them. Numbers out of range become null: srt_latency_ms 20-8000, custom_video_bitrate 500-50000, custom_audio_bitrate 32-512, custom_fps 15-120; an unknown custom_encoder_preset becomes null. DELETE /api/v1/destinations/:id and POST /api/v1/destinations/:id/test|start|stop take no body.
++ * openre.output-write-request@1: the body of POST /api/v1/streams/:id/destinations (platform and server_url required) and PATCH /api/v1/destinations/:id (fields left out keep their value) on OpenRestream (openre.output.write). server_url must pass the destination URL rules (rtmp, rtmps or srt, public hosts); stream_key (at most 512 characters, no spaces) and srt_passphrase (10 to 79 characters) are sealed and never read back — __keep__ leaves them unchanged, empty clears them. Numbers out of range become null: srt_latency_ms 20-8000, custom_video_bitrate 500-50000, custom_audio_bitrate 32-512, custom_fps 15-120; an unknown custom_encoder_preset becomes null. DELETE /api/v1/destinations/:id and POST /api/v1/destinations/:id/test|start|stop take no body.
*/
export type OpenreOutputWriteRequest =
| {
@@@ -53742,7 +53742,7 @@ export type OpenreOutputWriteRequest =
/** [email protected] (owner: openre) */
/**
-- * openre.output-write-result@1: answers of openre.output.write on OpenRe.Stream. POST …/destinations → 201 { destination }; PATCH /api/v1/destinations/:id → { destination }; DELETE → 204 with no body (409 openre.destination_running while it still runs); POST …/test → { ok, checks } (URL rules, DNS, TCP reachability; each check { check, ok, detail }); POST …/start → { output } (for the stream's live session; 409 when held, disabled, keyless or not live); POST …/stop → { stopping } (outputs asked to stop).
++ * openre.output-write-result@1: answers of openre.output.write on OpenRestream. POST …/destinations → 201 { destination }; PATCH /api/v1/destinations/:id → { destination }; DELETE → 204 with no body (409 openre.destination_running while it still runs); POST …/test → { ok, checks } (URL rules, DNS, TCP reachability; each check { check, ok, detail }); POST …/start → { output } (for the stream's live session; 409 when held, disabled, keyless or not live); POST …/stop → { stopping } (outputs asked to stop).
*/
export type OpenreOutputWriteResult =
| {
@@@ -53765,7 +53765,7 @@ export type OpenreOutputWriteResult =
/** [email protected] (owner: openre) */
/**
-- * openre.output@1: one restream output (a destination running for a live session) on OpenRe.Stream (server/store/outputs.js publicOutput), with its desired and actual state, restarts and progress.
++ * openre.output@1: one restream output (a destination running for a live session) on OpenRestream (server/store/outputs.js publicOutput), with its desired and actual state, restarts and progress.
*/
export interface OpenreOutput {
id: string;
@@@ -53789,7 +53789,7 @@ export interface OpenreOutput {
/** [email protected] (owner: openre) */
/**
-- * openre.session-end-result@1: the answer of POST /api/v1/sessions/:id/end on OpenRe.Stream (openre.session.end): 202 { requested: true, state } when the owning worker was asked to disconnect the encoder, 409 { requested: false, state } when the session could not be ended (already ending or over).
++ * openre.session-end-result@1: the answer of POST /api/v1/sessions/:id/end on OpenRestream (openre.session.end): 202 { requested: true, state } when the owning worker was asked to disconnect the encoder, 409 { requested: false, state } when the session could not be ended (already ending or over).
*/
export interface OpenreSessionEndResult {
requested: boolean;
@@@ -53798,7 +53798,7 @@ export interface OpenreSessionEndResult {
/** [email protected] (owner: openre) */
/**
-- * openre.session-read-result@1: answers of openre.session.read on OpenRe.Stream. GET /api/v1/sessions?stream_id=&state=&limit=&before= → { sessions } (the owner's; a service sees those of the subject it acts for); GET /api/v1/sessions/:id → { session } with transitions, outputs, recording and playback; GET /api/v1/sessions/:id/playback → { playback } (where to watch: flv and rtmp URLs, internal loopback and public); GET /api/v1/workers → { workers } (worker generations; staff and services only).
++ * openre.session-read-result@1: answers of openre.session.read on OpenRestream. GET /api/v1/sessions?stream_id=&state=&limit=&before= → { sessions } (the owner's; a service sees those of the subject it acts for); GET /api/v1/sessions/:id → { session } with transitions, outputs, recording and playback; GET /api/v1/sessions/:id/playback → { playback } (where to watch: flv and rtmp URLs, internal loopback and public); GET /api/v1/workers → { workers } (worker generations; staff and services only).
*/
export type OpenreSessionReadResult =
| {
@@@ -53878,7 +53878,7 @@ export type OpenreSessionReadResult =
/** [email protected] (owner: openre) */
/**
-- * openre.stream-read-result@1: answers of openre.stream.read on OpenRe.Stream. GET /api/v1/streams[?external_ref=<service>:<type>:<id>&limit=] → { streams } (the owner's, or the one bound to that external reference; staff may ask for all); GET /api/v1/streams/:id → { stream }; GET /api/v1/streams/:id/keys → { keys } (metadata only, never a key). Another owner's or an archived stream is 404 openre.stream_not_found.
++ * openre.stream-read-result@1: answers of openre.stream.read on OpenRestream. GET /api/v1/streams[?external_ref=<service>:<type>:<id>&limit=] → { streams } (the owner's, or the one bound to that external reference; staff may ask for all); GET /api/v1/streams/:id → { stream }; GET /api/v1/streams/:id/keys → { keys } (metadata only, never a key). Another owner's or an archived stream is 404 openre.stream_not_found.
*/
export type OpenreStreamReadResult =
| {
@@@ -53901,7 +53901,7 @@ export type OpenreStreamReadResult =
/** [email protected] (owner: openre) */
/**
-- * openre.stream-write-request@1: the body of POST /api/v1/streams and PATCH /api/v1/streams/:id on OpenRe.Stream (openre.stream.write). A person creates streams for themselves; a service names the owner with X-OV-Subject (or owner_subject, which must then match). title is cleaned and cut to 140 characters (Untitled stream when blank), description to 2000; protocols is a non-empty subset of rtmp, whip, webrtc, jsmpeg; external_refs (create only, at most 10, each bound to one stream) link it to another service's record, e.g. { service: live, type: managed_stream, id: 12 }; state (update only) is active or disabled. Fields left out keep their value. DELETE /api/v1/streams/:id (archive; refused while live) takes no body. Refusals are 400 openre.invalid_* and 409 openre.ref_taken / openre.stream_live.
++ * openre.stream-write-request@1: the body of POST /api/v1/streams and PATCH /api/v1/streams/:id on OpenRestream (openre.stream.write). A person creates streams for themselves; a service names the owner with X-OV-Subject (or owner_subject, which must then match). title is cleaned and cut to 140 characters (Untitled stream when blank), description to 2000; protocols is a non-empty subset of rtmp, whip, webrtc, jsmpeg; external_refs (create only, at most 10, each bound to one stream) link it to another service's record, e.g. { service: live, type: managed_stream, id: 12 }; state (update only) is active or disabled. Fields left out keep their value. DELETE /api/v1/streams/:id (archive; refused while live) takes no body. Refusals are 400 openre.invalid_* and 409 openre.ref_taken / openre.stream_live.
*/
export type OpenreStreamWriteRequest =
| {
@@@ -54278,7 +54278,7 @@ export type OpenreStreamWriteRequest =
/** [email protected] (owner: openre) */
/**
-- * openre.stream-write-result@1: answers of openre.stream.write on OpenRe.Stream. POST /api/v1/streams → 201 { stream, key } where key is the first ingest key, shown once (Cache-Control no-store); PATCH /api/v1/streams/:id → { stream }; DELETE /api/v1/streams/:id → 204 with no body.
++ * openre.stream-write-result@1: answers of openre.stream.write on OpenRestream. POST /api/v1/streams → 201 { stream, key } where key is the first ingest key, shown once (Cache-Control no-store); PATCH /api/v1/streams/:id → { stream }; DELETE /api/v1/streams/:id → 204 with no body.
*/
export interface OpenreStreamWriteResult {
stream: OpenreStream;
@@@ -54295,7 +54295,7 @@ export interface OpenreStreamWriteResult {
/** [email protected] (owner: openre) */
/**
-- * openre.stream@1: one stream definition as OpenRe.Stream's API shows it (server/api/v1.js publicDefinition): the owner's stream with its protocols, recording and playback settings, ingest endpoints, key metadata (hints only, never a key) and the open session if any.
++ * openre.stream@1: one stream definition as OpenRestream's API shows it (server/api/v1.js publicDefinition): the owner's stream with its protocols, recording and playback settings, ingest endpoints, key metadata (hints only, never a key) and the open session if any.
*/
export interface OpenreStream {
id: string;
@@@ -54686,7 +54686,7 @@ export interface HostDeployActivatedPayload {
/** [email protected] (owner: host) */
/**
-- * host.release.published v1 (roadmap WS-P task 9, ADR-016 amendment 1). A network service's release went live. OpenVibe.Host's operator plane (lib/announce.js) publishes it after `ovhost deploy|rollback <service>` went live and for `ovhost announce <service>` (services deployed by their own scripts: Live, Tools, Sites, OpenRe, Games). Envelope: subject { type: release, id: <service>:<release> }, visibility public (signed-out browsers get it over Events realtime), priority low, actor service:host. Open tabs whose /release.json names `service` (openvibe-shared release-watch 1.17.0, topics=host.release.published) check it when `release` is not the one they run. It carries identifiers only, never what changed. At most one per service and release unless an operator forces it; a retry reuses the event_id. Tenant sites' activations are host.deploy.activated, not this.
++ * host.release.published v1 (roadmap WS-P task 9, ADR-016 amendment 1). A network service's release went live. OpenVibe.Host's operator plane (lib/announce.js) publishes it after `ovhost deploy|rollback <service>` went live and for `ovhost announce <service>` (services deployed by their own scripts: Live, Tools, Sites, OpenRestream, Games). Envelope: subject { type: release, id: <service>:<release> }, visibility public (signed-out browsers get it over Events realtime), priority low, actor service:host. Open tabs whose /release.json names `service` (openvibe-shared release-watch 1.17.0, topics=host.release.published) check it when `release` is not the one they run. It carries identifiers only, never what changed. At most one per service and release unless an operator forces it; a retry reuses the event_id. Tenant sites' activations are host.deploy.activated, not this.
*/
export interface HostReleasePublishedPayload {
/**
@@@ -57922,7 +57922,7 @@ export interface BotPairRequest {
/** [email protected] (owner: bot) */
/**
-- * bot.pair-result@1: the 201 answers of OpenVibe.Bot's pairing routes (server/api/v1.js). POST /api/v1/pair → { device_id, credential, publish_key, whip_url?, robot_id, profile }; POST /api/v1/devices/bind (a Network node token) → the same without credential. The credential, the publish key and the WHIP URL are shown once and never again. Without OpenRe configured there is no key: video is not_configured instead.
++ * bot.pair-result@1: the 201 answers of OpenVibe.Bot's pairing routes (server/api/v1.js). POST /api/v1/pair → { device_id, credential, publish_key, whip_url?, robot_id, profile }; POST /api/v1/devices/bind (a Network node token) → the same without credential. The credential, the publish key and the WHIP URL are shown once and never again. Without OpenRestream configured there is no key: video is not_configured instead.
*/
export type BotPairResult =
| {
@@@ -57934,7 +57934,7 @@ export type BotPairResult =
*/
credential?: string;
/**
-- * The WHIP publish key, an ingest key OpenRe issued for the robot's stream: shown once.
++ * The WHIP publish key, an ingest key OpenRestream issued for the robot's stream: shown once.
*/
publish_key: string;
/**
ddiff --git a/governance/README.md b/governance/README.md
iindex fcb93874..59078688 100644
---- a/governance/README.md
++++ b/governance/README.md
@@@ -70,7 +70,7 @@ before anyone relies on either.
| OpenVibe.Trade | AGPL-3.0-only | AGPL-3.0 | consistent |
| OpenVibe.VIP | AGPL-3.0-only | AGPL-3.0 | consistent |
| OpenVibe.Wiki | AGPL-3.0-only | AGPL-3.0 | consistent |
--| OpenRe.Stream | AGPL-3.0-only | AGPL-3.0 | consistent |
++| OpenRestream | AGPL-3.0-only | AGPL-3.0 | consistent |
Dependency review: every repository pins its OpenVibe packages to release tags, CI runs the tests and the
pin-drift check, and gitleaks scans history. A licence review of third-party dependencies is part of WS-R
ddiff --git a/manifests/policy/staff-roles.json b/manifests/policy/staff-roles.json
iindex fa725a3b..e386cfd7 100644
---- a/manifests/policy/staff-roles.json
++++ b/manifests/policy/staff-roles.json
@@@ -215,7 +215,7 @@
{
"id": "staff.site.view",
"minRole": "admin",
-- "description": "Read operations data: diagnostics, statistics, all streams, storage, analytics, OpenRe status, money state and AI usage.",
++ "description": "Read operations data: diagnostics, statistics, all streams, storage, analytics, OpenRestream status, money state and AI usage.",
"gates": {
"live": [
"admin/routes.js:52 → 55,67,305,483,522,569,969,1025,1125",
ddiff --git a/manifests/products/openvibe.help.json b/manifests/products/openvibe.help.json
iindex 32324ebc..f176317a 100644
---- a/manifests/products/openvibe.help.json
++++ b/manifests/products/openvibe.help.json
@@@ -39,7 +39,7 @@
},
{
"question": "Which sites does it cover?",
-- "answer": "Every OpenVibe product site, live or coming, from OpenVibe.Live to OpenRe.Stream. Each one has its own page with its questions and where it lives."
++ "answer": "Every OpenVibe product site, live or coming, from OpenVibe.Live to OpenRestream. Each one has its own page with its questions and where it lives."
}
],
"keywords": "openvibe help, openvibe support, help center, support tickets, troubleshooting",
ddiff --git a/manifests/products/openvibe.video.json b/manifests/products/openvibe.video.json
iindex 94a164b6..3c390f4a 100644
---- a/manifests/products/openvibe.video.json
++++ b/manifests/products/openvibe.video.json
@@@ -36,7 +36,7 @@
"note": "Streams, recordings and clips live on OpenVibe.Live today."
},
{
-- "label": "OpenRe.Stream",
++ "label": "OpenRestream",
"url": "https://openre.stream",
"note": "Restreaming to many platforms is the sibling product."
}
ddiff --git a/manifests/repositories/OpenRe.Stream.json b/manifests/repositories/OpenRe.Stream.json
ddeleted file mode 100644
iindex 10eada23..00000000
---- a/manifests/repositories/OpenRe.Stream.json
++++ /dev/null
@@@ -1,26 +0,0 @@
--{
-- "name": "OpenRe.Stream",
-- "repository": "OpenVibers/OpenRe.Stream",
-- "service": "openre",
-- "product": "OpenRe.Stream",
-- "stage": "alpha",
-- "version": "0.1.0",
-- "runtime": "node 22",
-- "database": "PostgreSQL",
-- "migrations": 3,
-- "authority": [
-- "openre.*"
-- ],
-- "domains": [
-- "openre.stream",
-- "ingest.openre.stream"
-- ],
-- "pins": {
-- "openvibe-contracts": "v0.76.0",
-- "openvibe-sdk": "v0.26.0",
-- "openvibe-shared": "v2.10.1"
-- },
-- "deployed": true,
-- "exposure": "internal",
-- "track": "W7"
--}
ddiff --git a/manifests/repositories/OpenRestream.json b/manifests/repositories/OpenRestream.json
nnew file mode 100644
iindex 00000000..5356b2f7
---- /dev/null
++++ b/manifests/repositories/OpenRestream.json
@@@ -0,0 +1,26 @@
++{
++ "name": "OpenRestream",
++ "repository": "OpenVibers/OpenRestream",
++ "service": "openre",
++ "product": "OpenRestream",
++ "stage": "alpha",
++ "version": "0.1.0",
++ "runtime": "node 22",
++ "database": "PostgreSQL",
++ "migrations": 3,
++ "authority": [
++ "openre.*"
++ ],
++ "domains": [
++ "openre.stream",
++ "ingest.openre.stream"
++ ],
++ "pins": {
++ "openvibe-contracts": "v0.76.0",
++ "openvibe-sdk": "v0.26.0",
++ "openvibe-shared": "v2.10.1"
++ },
++ "deployed": true,
++ "exposure": "internal",
++ "track": "W7"
++}
ddiff --git a/manifests/services/openre.json b/manifests/services/openre.json
iindex d22c6820..c4d33a9f 100644
---- a/manifests/services/openre.json
++++ b/manifests/services/openre.json
@@@ -4,9 +4,9 @@
"openvibe-contracts": ">=0.13.0 <1.0.0"
},
"id": "openre",
-- "name": "OpenRe.Stream",
++ "name": "OpenRestream",
"status": "alpha",
-- "repository": "OpenVibers/OpenRe.Stream",
++ "repository": "OpenVibers/OpenRestream",
"domains": [
"openre.stream",
"ingest.openre.stream"
@@@ -20,7 +20,7 @@
"publicSite": "service"
},
"site": {
-- "name": "OpenRe.Stream",
++ "name": "OpenRestream",
"icon": "stream",
"tagline": "Restream anywhere",
"what": "Ingest once and send the stream to every platform at once; keys, destinations and output health in one place.",
@@@ -28,7 +28,7 @@
"position": 18,
"tld": "stream",
"accent": "#ef4444",
-- "description": "OpenRe.Stream is OpenVibe's open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.",
++ "description": "OpenRestream is OpenVibe's open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRestream ingest channel by channel.",
"pillars": [
{
"title": "Browser go-live",
@@@ -88,9 +88,9 @@
"url": "https://openvibe.live/docs/go-live-in-your-browser"
}
},
-- "launch": "the stream slots to move from OpenVibe.Live's ingest to OpenRe.Stream, one at a time; no stream uses it yet",
++ "launch": "the stream slots to move from OpenVibe.Live's ingest to OpenRestream, one at a time; no stream uses it yet",
"relationships": {
-- "plannedRepo": "OpenRe.Stream",
++ "plannedRepo": "OpenRestream",
"meanwhile": [
{
"label": "Go live on OpenVibe.Live",
ddiff --git a/package.json b/package.json
iindex 6ba64cab..67ae0222 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.125.0",
++ "version": "0.125.1",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"types": "generated/typescript/index.d.ts",