openvibers/openvibe.contracts Commits
v0.16.0: OpenRe.Stream is alpha — openre.stream.read|write, openre.key.rotate, openre.session.read|end, openre.output.read|write
Changes
nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "openre.key.rotate",++ "version": "1.0",++ "owner": "openre",++ "status": "active",++ "visibility": "first-party",++ "description": "Rotate a stream's ingest key: a new key is issued and returned once; the old one is revoked immediately or after a grace period, and running sessions can optionally be ended.",++ "permissions": [++ "openre:keys"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "openre-write",++ "events": [++ "openre.key.rotated"++ ],++ "implementedBy": [++ "POST /api/v1/streams/:id/keys/rotate"++ ]++}nnew file mode 100644@@@ -0,0 +1,22 @@++{++ "id": "openre.output.read",++ "version": "1.0",++ "owner": "openre",++ "status": "active",++ "visibility": "first-party",++ "description": "Read restream destinations (keys masked to their last four characters), outputs with health and progress, and bounded logs.",++ "permissions": [++ "openre:read"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "openre-read",++ "events": [],++ "implementedBy": [++ "GET /api/v1/streams/:id/destinations",++ "GET /api/v1/sessions/:id/outputs",++ "GET /api/v1/destinations/:id/logs",++ "GET /api/v1/outputs/:id/logs"++ ]++}nnew file mode 100644@@@ -0,0 +1,27 @@++{++ "id": "openre.output.write",++ "version": "1.0",++ "owner": "openre",++ "status": "active",++ "visibility": "first-party",++ "description": "Create, update, delete and test restream destinations (stream keys are write-only and sealed at rest; URLs must be rtmp/rtmps/srt with public hosts), and start or stop an output for the live session.",++ "permissions": [++ "openre:outputs"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "openre-write",++ "events": [++ "openre.output.healthy",++ "openre.output.failed"++ ],++ "implementedBy": [++ "POST /api/v1/streams/:id/destinations",++ "PATCH /api/v1/destinations/:id",++ "DELETE /api/v1/destinations/:id",++ "POST /api/v1/destinations/:id/test",++ "POST /api/v1/destinations/:id/start",++ "POST /api/v1/destinations/:id/stop"++ ]++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "openre.session.end",++ "version": "1.0",++ "owner": "openre",++ "status": "active",++ "visibility": "first-party",++ "description": "Ask the worker that owns a session to disconnect its encoder (the session then ends normally).",++ "permissions": [++ "openre:sessions"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "openre-write",++ "events": [++ "openre.session.ended"++ ],++ "implementedBy": [++ "POST /api/v1/sessions/:id/end"++ ]++}nnew file mode 100644@@@ -0,0 +1,22 @@++{++ "id": "openre.session.read",++ "version": "1.0",++ "owner": "openre",++ "status": "active",++ "visibility": "first-party",++ "description": "Read ingest sessions: lifecycle and transitions, worker and generation, media info, recording state and the playback descriptor; list worker generations.",++ "permissions": [++ "openre:read"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "openre-read",++ "events": [],++ "implementedBy": [++ "GET /api/v1/sessions",++ "GET /api/v1/sessions/:id",++ "GET /api/v1/sessions/:id/playback",++ "GET /api/v1/workers"++ ]++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "openre.stream.read",++ "version": "1.0",++ "owner": "openre",++ "status": "active",++ "visibility": "first-party",++ "description": "Read stream definitions: ingest URLs, key metadata (hint, status; never a key), settings and external references. Owners read their own; a service reads every stream, or the streams of the X-OV-Subject it acts for.",++ "permissions": [++ "openre:read"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "openre-read",++ "events": [],++ "implementedBy": [++ "GET /api/v1/streams",++ "GET /api/v1/streams/:id",++ "GET /api/v1/streams/:id/keys"++ ]++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "openre.stream.write",++ "version": "1.0",++ "owner": "openre",++ "status": "active",++ "visibility": "first-party",++ "description": "Create, update and archive stream definitions (creation issues the first ingest key, returned once). Archiving is refused while a session is open.",++ "permissions": [++ "openre:write"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "openre-write",++ "events": [],++ "implementedBy": [++ "POST /api/v1/streams",++ "PATCH /api/v1/streams/:id",++ "DELETE /api/v1/streams/:id"++ ]++}@@@ -1,16 +1,40 @@{"version": "0.1.0","contractRanges": {-- "openvibe-contracts": "^0.1.0"++ "openvibe-contracts": ">=0.13.0 <1.0.0"},"id": "openre","name": "OpenRe.Stream",-- "status": "placeholder",++ "status": "alpha","repository": "OpenVibers/OpenRe.Stream",-- "domains": [],-- "capabilities": [],-- "eventsProduced": [],++ "domains": [++ "openre.stream",++ "ingest.openre.stream"++ ],++ "publicOrigin": "https://openre.stream",++ "health": "/api/health",++ "ready": "/api/ready",++ "capabilities": [++ "openre.stream.read",++ "openre.stream.write",++ "openre.key.rotate",++ "openre.session.read",++ "openre.session.end",++ "openre.output.read",++ "openre.output.write"++ ],++ "eventsProduced": [++ "openre.session.started",++ "openre.session.ended",++ "openre.session.failed",++ "openre.output.healthy",++ "openre.output.failed",++ "openre.recording.requested",++ "openre.key.rotated"++ ],"eventsConsumed": [],-- "namespacesOwned": [],-- "notes": "Ingest and restream: stream definitions, keys, sessions, transport workers, outputs and output health. Charter only; no runtime."++ "namespacesOwned": [++ "openre.*"++ ],++ "notes": "Ingest and restream authority (ADR-009). Alpha: RTMP ingest and RTMP/SRT restream run in transport workers with generations and leases, separate from the API; WHIP, WebRTC/SFU and JSMPEG are still ingested by Live. Runs in parallel with Live; slots move one at a time behind Live's per-slot ingest_authority switch."}@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.15.0",++ "version": "0.16.0","description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.","main": "index.js","types": "generated/typescript/index.d.ts",
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "openre.key.rotate",
+ "version": "1.0",
+ "owner": "openre",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Rotate a stream's ingest key: a new key is issued and returned once; the old one is revoked immediately or after a grace period, and running sessions can optionally be ended.",
+ "permissions": [
+ "openre:keys"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "openre-write",
+ "events": [
+ "openre.key.rotated"
+ ],
+ "implementedBy": [
+ "POST /api/v1/streams/:id/keys/rotate"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
+{
+ "id": "openre.output.read",
+ "version": "1.0",
+ "owner": "openre",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Read restream destinations (keys masked to their last four characters), outputs with health and progress, and bounded logs.",
+ "permissions": [
+ "openre:read"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "openre-read",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/streams/:id/destinations",
+ "GET /api/v1/sessions/:id/outputs",
+ "GET /api/v1/destinations/:id/logs",
+ "GET /api/v1/outputs/:id/logs"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
+{
+ "id": "openre.output.write",
+ "version": "1.0",
+ "owner": "openre",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Create, update, delete and test restream destinations (stream keys are write-only and sealed at rest; URLs must be rtmp/rtmps/srt with public hosts), and start or stop an output for the live session.",
+ "permissions": [
+ "openre:outputs"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "openre-write",
+ "events": [
+ "openre.output.healthy",
+ "openre.output.failed"
+ ],
+ "implementedBy": [
+ "POST /api/v1/streams/:id/destinations",
+ "PATCH /api/v1/destinations/:id",
+ "DELETE /api/v1/destinations/:id",
+ "POST /api/v1/destinations/:id/test",
+ "POST /api/v1/destinations/:id/start",
+ "POST /api/v1/destinations/:id/stop"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "openre.session.end",
+ "version": "1.0",
+ "owner": "openre",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Ask the worker that owns a session to disconnect its encoder (the session then ends normally).",
+ "permissions": [
+ "openre:sessions"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "openre-write",
+ "events": [
+ "openre.session.ended"
+ ],
+ "implementedBy": [
+ "POST /api/v1/sessions/:id/end"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
+{
+ "id": "openre.session.read",
+ "version": "1.0",
+ "owner": "openre",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Read ingest sessions: lifecycle and transitions, worker and generation, media info, recording state and the playback descriptor; list worker generations.",
+ "permissions": [
+ "openre:read"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "openre-read",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/sessions",
+ "GET /api/v1/sessions/:id",
+ "GET /api/v1/sessions/:id/playback",
+ "GET /api/v1/workers"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "openre.stream.read",
+ "version": "1.0",
+ "owner": "openre",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Read stream definitions: ingest URLs, key metadata (hint, status; never a key), settings and external references. Owners read their own; a service reads every stream, or the streams of the X-OV-Subject it acts for.",
+ "permissions": [
+ "openre:read"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "openre-read",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/streams",
+ "GET /api/v1/streams/:id",
+ "GET /api/v1/streams/:id/keys"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "openre.stream.write",
+ "version": "1.0",
+ "owner": "openre",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Create, update and archive stream definitions (creation issues the first ingest key, returned once). Archiving is refused while a session is open.",
+ "permissions": [
+ "openre:write"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "openre-write",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/streams",
+ "PATCH /api/v1/streams/:id",
+ "DELETE /api/v1/streams/:id"
+ ]
+}
@@ -1,16 +1,40 @@
@@ -1,16 +1,40 @@
{
{
"version": "0.1.0",
"version": "0.1.0",
"contractRanges": {
"contractRanges": {
- "openvibe-contracts": "^0.1.0"
+ "openvibe-contracts": ">=0.13.0 <1.0.0"
},
},
"id": "openre",
"id": "openre",
"name": "OpenRe.Stream",
"name": "OpenRe.Stream",
- "status": "placeholder",
+ "status": "alpha",
"repository": "OpenVibers/OpenRe.Stream",
"repository": "OpenVibers/OpenRe.Stream",
- "domains": [],
- "capabilities": [],
- "eventsProduced": [],
+ "domains": [
+ "openre.stream",
+ "ingest.openre.stream"
+ ],
+ "publicOrigin": "https://openre.stream",
+ "health": "/api/health",
+ "ready": "/api/ready",
+ "capabilities": [
+ "openre.stream.read",
+ "openre.stream.write",
+ "openre.key.rotate",
+ "openre.session.read",
+ "openre.session.end",
+ "openre.output.read",
+ "openre.output.write"
+ ],
+ "eventsProduced": [
+ "openre.session.started",
+ "openre.session.ended",
+ "openre.session.failed",
+ "openre.output.healthy",
+ "openre.output.failed",
+ "openre.recording.requested",
+ "openre.key.rotated"
+ ],
"eventsConsumed": [],
"eventsConsumed": [],
- "namespacesOwned": [],
- "notes": "Ingest and restream: stream definitions, keys, sessions, transport workers, outputs and output health. Charter only; no runtime."
+ "namespacesOwned": [
+ "openre.*"
+ ],
+ "notes": "Ingest and restream authority (ADR-009). Alpha: RTMP ingest and RTMP/SRT restream run in transport workers with generations and leases, separate from the API; WHIP, WebRTC/SFU and JSMPEG are still ingested by Live. Runs in parallel with Live; slots move one at a time behind Live's per-slot ingest_authority switch."
}
}
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.15.0",
+ "version": "0.16.0",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"main": "index.js",
"types": "generated/typescript/index.d.ts",
"types": "generated/typescript/index.d.ts",