openvibers/openvibe.contracts Commits

v0.6.0: OpenVibe.Events is alpha — manifest and capabilities events.event.publish/read, events.subscription.manage, events.delivery.admin

OP OpenVibers committed 23 Sept 2026 · ba93705cc5 · 6 files, +103 −6


Changes

ddiff --git a/manifests/capabilities/events.delivery.admin.json b/manifests/capabilities/events.delivery.admin.json
nnew file mode 100644
iindex 00000000..79c98890
---- /dev/null
++++ b/manifests/capabilities/events.delivery.admin.json
@@@ -0,0 +1,20 @@
++{
++ "id": "events.delivery.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/manifests/capabilities/events.event.publish.json b/manifests/capabilities/events.event.publish.json
nnew file mode 100644
iindex 00000000..b3bb1e2e
---- /dev/null
++++ b/manifests/capabilities/events.event.publish.json
@@@ -0,0 +1,20 @@
++{
++ "id": "events.event.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/manifests/capabilities/events.event.read.json b/manifests/capabilities/events.event.read.json
nnew file mode 100644
iindex 00000000..5e9de8d4
---- /dev/null
++++ b/manifests/capabilities/events.event.read.json
@@@ -0,0 +1,24 @@
++{
++ "id": "events.event.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/manifests/capabilities/events.subscription.manage.json b/manifests/capabilities/events.subscription.manage.json
nnew file mode 100644
iindex 00000000..7c38ec98
---- /dev/null
++++ b/manifests/capabilities/events.subscription.manage.json
@@@ -0,0 +1,23 @@
++{
++ "id": "events.subscription.manage",
++ "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/manifests/services/events.json b/manifests/services/events.json
iindex b900ff70..5acefddb 100644
---- a/manifests/services/events.json
++++ b/manifests/services/events.json
@@@ -1,16 +1,26 @@
{
"version": "0.1.0",
"contractRanges": {
-- "openvibe-contracts": "^0.1.0"
++ "openvibe-contracts": ">=0.5.1 <1.0.0"
},
"id": "events",
"name": "OpenVibe.Events",
-- "status": "placeholder",
++ "status": "alpha",
"repository": "OpenVibers/OpenVibe.Events",
-- "domains": [],
-- "capabilities": [],
++ "domains": [
++ "events.openvibe.network"
++ ],
++ "publicOrigin": "https://events.openvibe.network",
++ "health": "/api/health",
++ "ready": "/api/ready",
++ "capabilities": [
++ "events.event.publish",
++ "events.event.read",
++ "events.subscription.manage",
++ "events.delivery.admin"
++ ],
"eventsProduced": [],
"eventsConsumed": [],
"namespacesOwned": [],
-- "notes": "Durable events, subscriptions, delivery, retry, dead letters and replay for the network. Charter only; no runtime."
++ "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."
}
ddiff --git a/package.json b/package.json
iindex c4d3cf98..9af71af3 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.5.1",
++ "version": "0.6.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",