openvibers/openvibe.events Commits

Propose the events.publish/subscribe/read/admin capability manifests and the events service manifest for openvibe-contracts

OP OpenVibers committed 23 Sept 2026 · 43103e7db1 · 5 files, +113 −0


Changes

ddiff --git a/docs/capabilities-proposal/events.admin.json b/docs/capabilities-proposal/events.admin.json
nnew file mode 100644
iindex 0000000..107719c
---- /dev/null
++++ b/docs/capabilities-proposal/events.admin.json
@@@ -0,0 +1,20 @@
++{
++ "id": "events.admin",
++ "version": "1.0",
++ "owner": "events",
++ "status": "active",
++ "visibility": "internal",
++ "description": "Operator access: inspect deliveries (including the dead-letter queue) and replay events to any subscription.",
++ "permissions": [
++ "events:admin"
++ ],
++ "resourceConstraints": [
++ "none"
++ ],
++ "quotaClass": "events-admin",
++ "events": [],
++ "implementedBy": [
++ "GET /api/v1/deliveries",
++ "POST /api/v1/deliveries/replay"
++ ]
++}
ddiff --git a/docs/capabilities-proposal/events.publish.json b/docs/capabilities-proposal/events.publish.json
nnew file mode 100644
iindex 0000000..dd2c32a
---- /dev/null
++++ b/docs/capabilities-proposal/events.publish.json
@@@ -0,0 +1,20 @@
++{
++ "id": "events.publish",
++ "version": "1.0",
++ "owner": "events",
++ "status": "active",
++ "visibility": "internal",
++ "description": "Publish durable events (events.event-envelope@1) as the calling service: source must be the principal's service slug and event_type must use a prefix that source owns. Idempotent on event_id.",
++ "inputSchema": "events.event-envelope@1",
++ "permissions": [
++ "events:write"
++ ],
++ "resourceConstraints": [
++ "owner"
++ ],
++ "quotaClass": "events-publish",
++ "events": [],
++ "implementedBy": [
++ "POST /api/v1/events"
++ ]
++}
ddiff --git a/docs/capabilities-proposal/events.read.json b/docs/capabilities-proposal/events.read.json
nnew file mode 100644
iindex 0000000..0dd2a0c
---- /dev/null
++++ b/docs/capabilities-proposal/events.read.json
@@@ -0,0 +1,24 @@
++{
++ "id": "events.read",
++ "version": "1.0",
++ "owner": "events",
++ "status": "active",
++ "visibility": "internal",
++ "description": "Read retained events of every visibility with a seq cursor (pull consumers), keep per-consumer checkpoints, and open realtime streams as a service principal.",
++ "outputSchema": "events.event-envelope@1",
++ "permissions": [
++ "events:read"
++ ],
++ "resourceConstraints": [
++ "none"
++ ],
++ "quotaClass": "events-read",
++ "events": [],
++ "implementedBy": [
++ "GET /api/v1/events",
++ "GET /api/v1/events/:event_id",
++ "GET /api/v1/checkpoints",
++ "PUT /api/v1/checkpoints",
++ "GET /realtime/stream"
++ ]
++}
ddiff --git a/docs/capabilities-proposal/events.subscribe.json b/docs/capabilities-proposal/events.subscribe.json
nnew file mode 100644
iindex 0000000..60e32a2
---- /dev/null
++++ b/docs/capabilities-proposal/events.subscribe.json
@@@ -0,0 +1,23 @@
++{
++ "id": "events.subscribe",
++ "version": "1.0",
++ "owner": "events",
++ "status": "active",
++ "visibility": "internal",
++ "description": "Create, list, disable and enable the calling service's own webhook subscriptions (topic pattern + allow-listed internal endpoint, HMAC-signed deliveries with retry and dead letters).",
++ "permissions": [
++ "events:subscribe"
++ ],
++ "resourceConstraints": [
++ "owner"
++ ],
++ "quotaClass": "events-subscribe",
++ "events": [],
++ "implementedBy": [
++ "POST /api/v1/subscriptions",
++ "GET /api/v1/subscriptions",
++ "GET /api/v1/subscriptions/:id",
++ "POST /api/v1/subscriptions/:id/disable",
++ "POST /api/v1/subscriptions/:id/enable"
++ ]
++}
ddiff --git a/docs/capabilities-proposal/service-manifest.events.json b/docs/capabilities-proposal/service-manifest.events.json
nnew file mode 100644
iindex 0000000..cd29c69
---- /dev/null
++++ b/docs/capabilities-proposal/service-manifest.events.json
@@@ -0,0 +1,26 @@
++{
++ "version": "0.1.0",
++ "contractRanges": {
++ "openvibe-contracts": ">=0.5.1 <1.0.0"
++ },
++ "id": "events",
++ "name": "OpenVibe.Events",
++ "status": "alpha",
++ "repository": "OpenVibers/OpenVibe.Events",
++ "domains": [
++ "events.openvibe.network"
++ ],
++ "publicOrigin": "https://events.openvibe.network",
++ "health": "/api/health",
++ "ready": "/api/ready",
++ "capabilities": [
++ "events.publish",
++ "events.subscribe",
++ "events.read",
++ "events.admin"
++ ],
++ "eventsProduced": [],
++ "eventsConsumed": [],
++ "namespacesOwned": [],
++ "notes": "Durable events, subscriptions, signed delivery with retry, dead letters and replay; SSE realtime gateway at /realtime/stream until ADR-005 decides where Realtime lives."
++}