openvibers/openvibe.contracts Commits
0.230.0: OpenVibe.Today is live at openvibe.today (the Today room v1: schedules, Remind, calendar feeds, the brief; today.event.scheduled|updated|cancelled) (#238)
Changes
@@@ -4,6 +4,20 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) thfrom `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,the notes were in the tag and commit messages (`git tag -n1`).++## 0.230.0 — 2026-10-28++++- **OpenVibe.Today** (`today`, live at openvibe.today, port 5100, database `ov_today`; plan 2026-10-28 §5.3, the Today++ room). v1 is the network's calendar authority:++ - stream and event schedules;++ - reminders sent as Network notifications;++ - calendar feeds: a channel's public one and a person's private one (RFC 5545);++ - the daily brief.++++ It publishes `today.event.scheduled`, `today.event.updated` and `today.event.cancelled` (new payload contracts,++ first-party) from an outbox. It consumes `live.stream.started` and `live.stream.ended` to move a stream live and++ then ended. The site block (Today, icon `today`, position 40, legal profile `account`) puts it in News & answers.++ `today.*` is its namespace.++## 0.229.0 — 2026-10-28- **The Action Center** (plan 2026-10-28 §3.10, NOTIF-5): one list of a person's agent work on every site.@@@ -7622,6 +7622,33 @@"visibility": "public","compatibility": "backward","status": "active"++ },++ {++ "id": "today.event.scheduled",++ "version": "1.0.0",++ "owner": "today",++ "schema": "events/payloads/today.event.scheduled.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "today.event.updated",++ "version": "1.0.0",++ "owner": "today",++ "schema": "events/payloads/today.event.updated.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "today.event.cancelled",++ "version": "1.0.0",++ "owner": "today",++ "schema": "events/payloads/today.event.cancelled.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"}]}nnew file mode 100644@@@ -0,0 +1,93 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/today.event.cancelled.v1.json",++ "title": "TodayEventCancelledPayload",++ "description": "today.event.cancelled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its owner cancelled it: calendars that subscribe drop it (STATUS:CANCELLED), and OpenVibe.Network clears the followers' notices. Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "event_id",++ "kind",++ "channel",++ "title",++ "starts_at",++ "ends_at",++ "tz",++ "status",++ "visibility",++ "url",++ "seq"++ ],++ "properties": {++ "event_id": {++ "type": "string",++ "pattern": "^tev_[0-9A-HJKMNP-TV-Z]{20}$",++ "description": "Today's id for the calendar entry (not the envelope's evt_ id)."++ },++ "kind": {++ "enum": [++ "stream",++ "event"++ ]++ },++ "channel": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 64,++ "description": "The owner's Live username for a stream; null for an event."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ },++ "starts_at": {++ "type": "string",++ "format": "date-time"++ },++ "ends_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ },++ "tz": {++ "type": "string",++ "minLength": 1,++ "maxLength": 64,++ "description": "The IANA zone it was scheduled in."++ },++ "status": {++ "enum": [++ "scheduled",++ "live",++ "done",++ "cancelled"++ ]++ },++ "visibility": {++ "enum": [++ "public",++ "followers"++ ]++ },++ "url": {++ "type": [++ "string",++ "null"++ ],++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 2048,++ "description": "Where it happens (a stream: its Live channel page)."++ },++ "seq": {++ "type": "integer",++ "minimum": 0,++ "description": "The calendar SEQUENCE: up by one with every change."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,93 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/today.event.scheduled.v1.json",++ "title": "TodayEventScheduledPayload",++ "description": "today.event.scheduled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). A person put a stream or an event on OpenVibe.Today's calendar (POST /api/v1/events or the schedule form). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "event_id",++ "kind",++ "channel",++ "title",++ "starts_at",++ "ends_at",++ "tz",++ "status",++ "visibility",++ "url",++ "seq"++ ],++ "properties": {++ "event_id": {++ "type": "string",++ "pattern": "^tev_[0-9A-HJKMNP-TV-Z]{20}$",++ "description": "Today's id for the calendar entry (not the envelope's evt_ id)."++ },++ "kind": {++ "enum": [++ "stream",++ "event"++ ]++ },++ "channel": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 64,++ "description": "The owner's Live username for a stream; null for an event."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ },++ "starts_at": {++ "type": "string",++ "format": "date-time"++ },++ "ends_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ },++ "tz": {++ "type": "string",++ "minLength": 1,++ "maxLength": 64,++ "description": "The IANA zone it was scheduled in."++ },++ "status": {++ "enum": [++ "scheduled",++ "live",++ "done",++ "cancelled"++ ]++ },++ "visibility": {++ "enum": [++ "public",++ "followers"++ ]++ },++ "url": {++ "type": [++ "string",++ "null"++ ],++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 2048,++ "description": "Where it happens (a stream: its Live channel page)."++ },++ "seq": {++ "type": "integer",++ "minimum": 0,++ "description": "The calendar SEQUENCE: up by one with every change."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,93 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/today.event.updated.v1.json",++ "title": "TodayEventUpdatedPayload",++ "description": "today.event.updated v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its title, times, zone, description or visibility changed (seq went up), or it went live or ended (live.stream.started / ended). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "event_id",++ "kind",++ "channel",++ "title",++ "starts_at",++ "ends_at",++ "tz",++ "status",++ "visibility",++ "url",++ "seq"++ ],++ "properties": {++ "event_id": {++ "type": "string",++ "pattern": "^tev_[0-9A-HJKMNP-TV-Z]{20}$",++ "description": "Today's id for the calendar entry (not the envelope's evt_ id)."++ },++ "kind": {++ "enum": [++ "stream",++ "event"++ ]++ },++ "channel": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 64,++ "description": "The owner's Live username for a stream; null for an event."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ },++ "starts_at": {++ "type": "string",++ "format": "date-time"++ },++ "ends_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ },++ "tz": {++ "type": "string",++ "minLength": 1,++ "maxLength": 64,++ "description": "The IANA zone it was scheduled in."++ },++ "status": {++ "enum": [++ "scheduled",++ "live",++ "done",++ "cancelled"++ ]++ },++ "visibility": {++ "enum": [++ "public",++ "followers"++ ]++ },++ "url": {++ "type": [++ "string",++ "null"++ ],++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 2048,++ "description": "Where it happens (a stream: its Live channel page)."++ },++ "seq": {++ "type": "integer",++ "minimum": 0,++ "description": "The calendar SEQUENCE: up by one with every change."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "event_id": "evt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "kind": "stream",++ "channel": "carol",++ "title": "Robot build, part 2",++ "starts_at": "2026-10-30T03:00:00.000Z",++ "ends_at": "2026-10-30T05:00:00.000Z",++ "tz": "America/Los_Angeles",++ "status": "cancelled",++ "visibility": "public",++ "url": "https://openvibe.live/@carol",++ "seq": 1++}nnew file mode 100644@@@ -0,0 +1,14 @@++{++ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",++ "kind": "stream",++ "channel": "carol",++ "title": "Robot build, part 2",++ "starts_at": "2026-10-30T03:00:00.000Z",++ "ends_at": "2026-10-30T05:00:00.000Z",++ "tz": "America/Los_Angeles",++ "status": "cancelled",++ "visibility": "public",++ "url": "https://openvibe.live/@carol",++ "seq": 1,++ "owner_subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",++ "kind": "event",++ "channel": null,++ "title": "Robot build, part 2",++ "starts_at": "2026-10-30T03:00:00.000Z",++ "ends_at": null,++ "tz": "America/Los_Angeles",++ "status": "cancelled",++ "visibility": "public",++ "url": null,++ "seq": 1++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",++ "kind": "stream",++ "channel": "carol",++ "title": "Robot build, part 2",++ "starts_at": "2026-10-30T03:00:00.000Z",++ "ends_at": "2026-10-30T05:00:00.000Z",++ "tz": "America/Los_Angeles",++ "status": "cancelled",++ "visibility": "public",++ "url": "https://openvibe.live/@carol",++ "seq": 1++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "event_id": "evt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "kind": "stream",++ "channel": "carol",++ "title": "Robot build, part 2",++ "starts_at": "2026-10-30T03:00:00.000Z",++ "ends_at": "2026-10-30T05:00:00.000Z",++ "tz": "America/Los_Angeles",++ "status": "scheduled",++ "visibility": "public",++ "url": "https://openvibe.live/@carol",++ "seq": 0++}nnew file mode 100644@@@ -0,0 +1,14 @@++{++ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",++ "kind": "stream",++ "channel": "carol",++ "title": "Robot build, part 2",++ "starts_at": "2026-10-30T03:00:00.000Z",++ "ends_at": "2026-10-30T05:00:00.000Z",++ "tz": "America/Los_Angeles",++ "status": "scheduled",++ "visibility": "public",++ "url": "https://openvibe.live/@carol",++ "seq": 0,++ "owner_subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",++ "kind": "event",++ "channel": null,++ "title": "Robot build, part 2",++ "starts_at": "2026-10-30T03:00:00.000Z",++ "ends_at": null,++ "tz": "America/Los_Angeles",++ "status": "scheduled",++ "visibility": "public",++ "url": null,++ "seq": 0++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",++ "kind": "stream",++ "channel": "carol",++ "title": "Robot build, part 2",++ "starts_at": "2026-10-30T03:00:00.000Z",++ "ends_at": "2026-10-30T05:00:00.000Z",++ "tz": "America/Los_Angeles",++ "status": "scheduled",++ "visibility": "public",++ "url": "https://openvibe.live/@carol",++ "seq": 0++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "event_id": "evt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "kind": "stream",++ "channel": "carol",++ "title": "Robot build, part 2",++ "starts_at": "2026-10-30T03:00:00.000Z",++ "ends_at": "2026-10-30T05:00:00.000Z",++ "tz": "America/Los_Angeles",++ "status": "scheduled",++ "visibility": "public",++ "url": "https://openvibe.live/@carol",++ "seq": 1++}nnew file mode 100644@@@ -0,0 +1,14 @@++{++ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",++ "kind": "stream",++ "channel": "carol",++ "title": "Robot build, part 2",++ "starts_at": "2026-10-30T03:00:00.000Z",++ "ends_at": "2026-10-30T05:00:00.000Z",++ "tz": "America/Los_Angeles",++ "status": "scheduled",++ "visibility": "public",++ "url": "https://openvibe.live/@carol",++ "seq": 1,++ "owner_subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",++ "kind": "event",++ "channel": null,++ "title": "Robot build, part 2",++ "starts_at": "2026-10-30T03:00:00.000Z",++ "ends_at": null,++ "tz": "America/Los_Angeles",++ "status": "scheduled",++ "visibility": "public",++ "url": null,++ "seq": 1++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",++ "kind": "stream",++ "channel": "carol",++ "title": "Robot build, part 2",++ "starts_at": "2026-10-30T03:00:00.000Z",++ "ends_at": "2026-10-30T05:00:00.000Z",++ "tz": "America/Los_Angeles",++ "status": "scheduled",++ "visibility": "public",++ "url": "https://openvibe.live/@carol",++ "seq": 1++}@@@ -85580,6 +85580,300 @@}}}++ },++ "today.event.scheduled": {++ "version": "1.0.0",++ "owner": "today",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/today.event.scheduled.v1.json",++ "title": "TodayEventScheduledPayload",++ "description": "today.event.scheduled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). A person put a stream or an event on OpenVibe.Today's calendar (POST /api/v1/events or the schedule form). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "event_id",++ "kind",++ "channel",++ "title",++ "starts_at",++ "ends_at",++ "tz",++ "status",++ "visibility",++ "url",++ "seq"++ ],++ "properties": {++ "event_id": {++ "type": "string",++ "pattern": "^tev_[0-9A-HJKMNP-TV-Z]{20}$",++ "description": "Today's id for the calendar entry (not the envelope's evt_ id)."++ },++ "kind": {++ "enum": [++ "stream",++ "event"++ ]++ },++ "channel": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 64,++ "description": "The owner's Live username for a stream; null for an event."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ },++ "starts_at": {++ "type": "string",++ "format": "date-time"++ },++ "ends_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ },++ "tz": {++ "type": "string",++ "minLength": 1,++ "maxLength": 64,++ "description": "The IANA zone it was scheduled in."++ },++ "status": {++ "enum": [++ "scheduled",++ "live",++ "done",++ "cancelled"++ ]++ },++ "visibility": {++ "enum": [++ "public",++ "followers"++ ]++ },++ "url": {++ "type": [++ "string",++ "null"++ ],++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 2048,++ "description": "Where it happens (a stream: its Live channel page)."++ },++ "seq": {++ "type": "integer",++ "minimum": 0,++ "description": "The calendar SEQUENCE: up by one with every change."++ }++ }++ }++ },++ "today.event.updated": {++ "version": "1.0.0",++ "owner": "today",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/today.event.updated.v1.json",++ "title": "TodayEventUpdatedPayload",++ "description": "today.event.updated v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its title, times, zone, description or visibility changed (seq went up), or it went live or ended (live.stream.started / ended). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "event_id",++ "kind",++ "channel",++ "title",++ "starts_at",++ "ends_at",++ "tz",++ "status",++ "visibility",++ "url",++ "seq"++ ],++ "properties": {++ "event_id": {++ "type": "string",++ "pattern": "^tev_[0-9A-HJKMNP-TV-Z]{20}$",++ "description": "Today's id for the calendar entry (not the envelope's evt_ id)."++ },++ "kind": {++ "enum": [++ "stream",++ "event"++ ]++ },++ "channel": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 64,++ "description": "The owner's Live username for a stream; null for an event."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ },++ "starts_at": {++ "type": "string",++ "format": "date-time"++ },++ "ends_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ },++ "tz": {++ "type": "string",++ "minLength": 1,++ "maxLength": 64,++ "description": "The IANA zone it was scheduled in."++ },++ "status": {++ "enum": [++ "scheduled",++ "live",++ "done",++ "cancelled"++ ]++ },++ "visibility": {++ "enum": [++ "public",++ "followers"++ ]++ },++ "url": {++ "type": [++ "string",++ "null"++ ],++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 2048,++ "description": "Where it happens (a stream: its Live channel page)."++ },++ "seq": {++ "type": "integer",++ "minimum": 0,++ "description": "The calendar SEQUENCE: up by one with every change."++ }++ }++ }++ },++ "today.event.cancelled": {++ "version": "1.0.0",++ "owner": "today",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/today.event.cancelled.v1.json",++ "title": "TodayEventCancelledPayload",++ "description": "today.event.cancelled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its owner cancelled it: calendars that subscribe drop it (STATUS:CANCELLED), and OpenVibe.Network clears the followers' notices. Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "event_id",++ "kind",++ "channel",++ "title",++ "starts_at",++ "ends_at",++ "tz",++ "status",++ "visibility",++ "url",++ "seq"++ ],++ "properties": {++ "event_id": {++ "type": "string",++ "pattern": "^tev_[0-9A-HJKMNP-TV-Z]{20}$",++ "description": "Today's id for the calendar entry (not the envelope's evt_ id)."++ },++ "kind": {++ "enum": [++ "stream",++ "event"++ ]++ },++ "channel": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 64,++ "description": "The owner's Live username for a stream; null for an event."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ },++ "starts_at": {++ "type": "string",++ "format": "date-time"++ },++ "ends_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ },++ "tz": {++ "type": "string",++ "minLength": 1,++ "maxLength": 64,++ "description": "The IANA zone it was scheduled in."++ },++ "status": {++ "enum": [++ "scheduled",++ "live",++ "done",++ "cancelled"++ ]++ },++ "visibility": {++ "enum": [++ "public",++ "followers"++ ]++ },++ "url": {++ "type": [++ "string",++ "null"++ ],++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 2048,++ "description": "Where it happens (a stream: its Live channel page)."++ },++ "seq": {++ "type": "integer",++ "minimum": 0,++ "description": "The calendar SEQUENCE: up by one with every change."++ }++ }++ }}}}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.AI API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Billing API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Blog API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bot API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Chat API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Codes API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Community API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Coupons API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Deals API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Events API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Food API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Games API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Host API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Inventory API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Live API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.MediaHub API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Media API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Network API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.News API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenRestream API",-- "version": "0.229.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Play API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Quest API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Reviews API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Run API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Search API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Services API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Sources API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Space API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tips API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tools API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Trade API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.VIP API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Watch API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Wiki API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Work API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Zone API",-- "version": "0.229.0",-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.","license": {"name": "MIT","identifier": "MIT"@@@ -212534,3 +212534,102 @@ export interface MeActionsResult {partial: boolean;generated_at: string;}++++/** [email protected] (owner: today) */++/**++ * today.event.scheduled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). A person put a stream or an event on OpenVibe.Today's calendar (POST /api/v1/events or the schedule form). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).++ */++export interface TodayEventScheduledPayload {++ /**++ * Today's id for the calendar entry (not the envelope's evt_ id).++ */++ event_id: string;++ kind: "stream" | "event";++ /**++ * The owner's Live username for a stream; null for an event.++ */++ channel: string | null;++ title: string;++ starts_at: string;++ ends_at: string | null;++ /**++ * The IANA zone it was scheduled in.++ */++ tz: string;++ status: "scheduled" | "live" | "done" | "cancelled";++ visibility: "public" | "followers";++ /**++ * Where it happens (a stream: its Live channel page).++ */++ url: string | null;++ /**++ * The calendar SEQUENCE: up by one with every change.++ */++ seq: number;++}++++/** [email protected] (owner: today) */++/**++ * today.event.updated v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its title, times, zone, description or visibility changed (seq went up), or it went live or ended (live.stream.started / ended). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).++ */++export interface TodayEventUpdatedPayload {++ /**++ * Today's id for the calendar entry (not the envelope's evt_ id).++ */++ event_id: string;++ kind: "stream" | "event";++ /**++ * The owner's Live username for a stream; null for an event.++ */++ channel: string | null;++ title: string;++ starts_at: string;++ ends_at: string | null;++ /**++ * The IANA zone it was scheduled in.++ */++ tz: string;++ status: "scheduled" | "live" | "done" | "cancelled";++ visibility: "public" | "followers";++ /**++ * Where it happens (a stream: its Live channel page).++ */++ url: string | null;++ /**++ * The calendar SEQUENCE: up by one with every change.++ */++ seq: number;++}++++/** [email protected] (owner: today) */++/**++ * today.event.cancelled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its owner cancelled it: calendars that subscribe drop it (STATUS:CANCELLED), and OpenVibe.Network clears the followers' notices. Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).++ */++export interface TodayEventCancelledPayload {++ /**++ * Today's id for the calendar entry (not the envelope's evt_ id).++ */++ event_id: string;++ kind: "stream" | "event";++ /**++ * The owner's Live username for a stream; null for an event.++ */++ channel: string | null;++ title: string;++ starts_at: string;++ ends_at: string | null;++ /**++ * The IANA zone it was scheduled in.++ */++ tz: string;++ status: "scheduled" | "live" | "done" | "cancelled";++ visibility: "public" | "followers";++ /**++ * Where it happens (a stream: its Live channel page).++ */++ url: string | null;++ /**++ * The calendar SEQUENCE: up by one with every change.++ */++ seq: number;++}nnew file mode 100644@@@ -0,0 +1,92 @@++{++ "version": "0.1.0",++ "contractRanges": {++ "openvibe-contracts": ">=0.225.0 <1.0.0"++ },++ "id": "today",++ "name": "OpenVibe.Today",++ "status": "alpha",++ "repository": "OpenVibers/OpenVibe.Today",++ "domains": [++ "openvibe.today"++ ],++ "publicOrigin": "https://openvibe.today",++ "exposure": {++ "state": "live",++ "publicSite": "service"++ },++ "capabilities": [],++ "eventsProduced": [++ "today.event.scheduled",++ "today.event.updated",++ "today.event.cancelled"++ ],++ "eventsConsumed": [++ "live.stream.started",++ "live.stream.ended",++ "network.account.export_requested",++ "network.account.deleted"++ ],++ "namespacesOwned": [++ "today.*"++ ],++ "lifecycle": {++ "liveness": {++ "endpoint": "/api/health",++ "means": "the process is up and answers HTTP; it checks nothing else"++ },++ "shutdown": {++ "signal": "SIGTERM",++ "deadlineSeconds": 10,++ "drains": [++ "HTTP server closed",++ "the outbox publisher and the reminder and brief jobs stopped",++ "PostgreSQL pool closed"++ ]++ },++ "startupRecovery": {++ "resumes": [++ {++ "kind": "outbox",++ "what": "today_outbox rows not yet published are sent again under their fixed evt_ ids (Events keeps one per id)"++ },++ {++ "kind": "jobs",++ "what": "reminders due while it was down are sent on the first pass (claimed by UPDATE … WHERE sent_at IS NULL, never twice); the brief job builds a missing day"++ },++ {++ "kind": "consumer",++ "what": "OpenVibe.Events redelivers live.stream.* and the account events pending during the stop; today_processed applies each once"++ }++ ]++ },++ "rollback": {++ "conditions": [++ "automatic: ovhost deploy puts the previous sha back and restarts again when the ready URL does not answer 2xx within ready.timeoutSeconds after the restart (exit 3)",++ "manual: ovhost rollback <service> --to <sha>"++ ],++ "window": "automatic only while ovhost waits for readiness after the restart; manual afterwards, as long as no blocker applies",++ "blockers": {++ "none": "migration 0001 only creates Today's own tables; an earlier release has none to read"++ }++ },++ "contracts": {++ "range": ">=0.225.0 <1.0.0"++ },++ "leases": {++ "none": "no claims: one process serves the site"++ }++ },++ "notes": "Port 5100, unit openvibe-today.service, PostgreSQL database ov_today. The Today room (plan 2026-10-28 §5.3): the network's time bus and calendar authority. v1 owns schedules (streams and events), reminders (sent as Network notifications through network.notifications.push), calendar feeds (RFC 5545: a channel's public feed and a person's private one) and the daily brief. It publishes today.event.* from an outbox and moves a stream live and ended from live.stream.started / ended. OAuth client `today` (sign-in), Network follows for the agenda.",++ "health": "/api/health",++ "ready": "/api/ready",++ "internalOrigin": "http://127.0.0.1:5100",++ "site": {++ "name": "Today",++ "icon": "today",++ "tagline": "Everything happening for you, today",++ "what": "Stream schedules, reminders that find you on any OpenVibe site, calendar feeds for your own calendar app, and a morning brief, all in one place.",++ "legalProfile": "account",++ "position": 40++ }++}@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.229.0",++ "version": "0.230.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",
@@ -4,6 +4,20 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
@@ -4,6 +4,20 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
the notes were in the tag and commit messages (`git tag -n1`).
the notes were in the tag and commit messages (`git tag -n1`).
+## 0.230.0 — 2026-10-28
+
+- **OpenVibe.Today** (`today`, live at openvibe.today, port 5100, database `ov_today`; plan 2026-10-28 §5.3, the Today
+ room). v1 is the network's calendar authority:
+ - stream and event schedules;
+ - reminders sent as Network notifications;
+ - calendar feeds: a channel's public one and a person's private one (RFC 5545);
+ - the daily brief.
+
+ It publishes `today.event.scheduled`, `today.event.updated` and `today.event.cancelled` (new payload contracts,
+ first-party) from an outbox. It consumes `live.stream.started` and `live.stream.ended` to move a stream live and
+ then ended. The site block (Today, icon `today`, position 40, legal profile `account`) puts it in News & answers.
+ `today.*` is its namespace.
+
## 0.229.0 — 2026-10-28
## 0.229.0 — 2026-10-28
- **The Action Center** (plan 2026-10-28 §3.10, NOTIF-5): one list of a person's agent work on every site.
- **The Action Center** (plan 2026-10-28 §3.10, NOTIF-5): one list of a person's agent work on every site.
@@ -7622,6 +7622,33 @@
@@ -7622,6 +7622,33 @@
"visibility": "public",
"visibility": "public",
"compatibility": "backward",
"compatibility": "backward",
"status": "active"
"status": "active"
+ },
+ {
+ "id": "today.event.scheduled",
+ "version": "1.0.0",
+ "owner": "today",
+ "schema": "events/payloads/today.event.scheduled.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "today.event.updated",
+ "version": "1.0.0",
+ "owner": "today",
+ "schema": "events/payloads/today.event.updated.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "today.event.cancelled",
+ "version": "1.0.0",
+ "owner": "today",
+ "schema": "events/payloads/today.event.cancelled.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
}
}
]
]
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,93 @@
@@ -0,0 +1,93 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/today.event.cancelled.v1.json",
+ "title": "TodayEventCancelledPayload",
+ "description": "today.event.cancelled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its owner cancelled it: calendars that subscribe drop it (STATUS:CANCELLED), and OpenVibe.Network clears the followers' notices. Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "event_id",
+ "kind",
+ "channel",
+ "title",
+ "starts_at",
+ "ends_at",
+ "tz",
+ "status",
+ "visibility",
+ "url",
+ "seq"
+ ],
+ "properties": {
+ "event_id": {
+ "type": "string",
+ "pattern": "^tev_[0-9A-HJKMNP-TV-Z]{20}$",
+ "description": "Today's id for the calendar entry (not the envelope's evt_ id)."
+ },
+ "kind": {
+ "enum": [
+ "stream",
+ "event"
+ ]
+ },
+ "channel": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 64,
+ "description": "The owner's Live username for a stream; null for an event."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ },
+ "starts_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "ends_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ },
+ "tz": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "description": "The IANA zone it was scheduled in."
+ },
+ "status": {
+ "enum": [
+ "scheduled",
+ "live",
+ "done",
+ "cancelled"
+ ]
+ },
+ "visibility": {
+ "enum": [
+ "public",
+ "followers"
+ ]
+ },
+ "url": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 2048,
+ "description": "Where it happens (a stream: its Live channel page)."
+ },
+ "seq": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The calendar SEQUENCE: up by one with every change."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,93 @@
@@ -0,0 +1,93 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/today.event.scheduled.v1.json",
+ "title": "TodayEventScheduledPayload",
+ "description": "today.event.scheduled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). A person put a stream or an event on OpenVibe.Today's calendar (POST /api/v1/events or the schedule form). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "event_id",
+ "kind",
+ "channel",
+ "title",
+ "starts_at",
+ "ends_at",
+ "tz",
+ "status",
+ "visibility",
+ "url",
+ "seq"
+ ],
+ "properties": {
+ "event_id": {
+ "type": "string",
+ "pattern": "^tev_[0-9A-HJKMNP-TV-Z]{20}$",
+ "description": "Today's id for the calendar entry (not the envelope's evt_ id)."
+ },
+ "kind": {
+ "enum": [
+ "stream",
+ "event"
+ ]
+ },
+ "channel": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 64,
+ "description": "The owner's Live username for a stream; null for an event."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ },
+ "starts_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "ends_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ },
+ "tz": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "description": "The IANA zone it was scheduled in."
+ },
+ "status": {
+ "enum": [
+ "scheduled",
+ "live",
+ "done",
+ "cancelled"
+ ]
+ },
+ "visibility": {
+ "enum": [
+ "public",
+ "followers"
+ ]
+ },
+ "url": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 2048,
+ "description": "Where it happens (a stream: its Live channel page)."
+ },
+ "seq": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The calendar SEQUENCE: up by one with every change."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,93 @@
@@ -0,0 +1,93 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/today.event.updated.v1.json",
+ "title": "TodayEventUpdatedPayload",
+ "description": "today.event.updated v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its title, times, zone, description or visibility changed (seq went up), or it went live or ended (live.stream.started / ended). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "event_id",
+ "kind",
+ "channel",
+ "title",
+ "starts_at",
+ "ends_at",
+ "tz",
+ "status",
+ "visibility",
+ "url",
+ "seq"
+ ],
+ "properties": {
+ "event_id": {
+ "type": "string",
+ "pattern": "^tev_[0-9A-HJKMNP-TV-Z]{20}$",
+ "description": "Today's id for the calendar entry (not the envelope's evt_ id)."
+ },
+ "kind": {
+ "enum": [
+ "stream",
+ "event"
+ ]
+ },
+ "channel": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 64,
+ "description": "The owner's Live username for a stream; null for an event."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ },
+ "starts_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "ends_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ },
+ "tz": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "description": "The IANA zone it was scheduled in."
+ },
+ "status": {
+ "enum": [
+ "scheduled",
+ "live",
+ "done",
+ "cancelled"
+ ]
+ },
+ "visibility": {
+ "enum": [
+ "public",
+ "followers"
+ ]
+ },
+ "url": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 2048,
+ "description": "Where it happens (a stream: its Live channel page)."
+ },
+ "seq": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The calendar SEQUENCE: up by one with every change."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "event_id": "evt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "kind": "stream",
+ "channel": "carol",
+ "title": "Robot build, part 2",
+ "starts_at": "2026-10-30T03:00:00.000Z",
+ "ends_at": "2026-10-30T05:00:00.000Z",
+ "tz": "America/Los_Angeles",
+ "status": "cancelled",
+ "visibility": "public",
+ "url": "https://openvibe.live/@carol",
+ "seq": 1
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
+{
+ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",
+ "kind": "stream",
+ "channel": "carol",
+ "title": "Robot build, part 2",
+ "starts_at": "2026-10-30T03:00:00.000Z",
+ "ends_at": "2026-10-30T05:00:00.000Z",
+ "tz": "America/Los_Angeles",
+ "status": "cancelled",
+ "visibility": "public",
+ "url": "https://openvibe.live/@carol",
+ "seq": 1,
+ "owner_subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",
+ "kind": "event",
+ "channel": null,
+ "title": "Robot build, part 2",
+ "starts_at": "2026-10-30T03:00:00.000Z",
+ "ends_at": null,
+ "tz": "America/Los_Angeles",
+ "status": "cancelled",
+ "visibility": "public",
+ "url": null,
+ "seq": 1
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",
+ "kind": "stream",
+ "channel": "carol",
+ "title": "Robot build, part 2",
+ "starts_at": "2026-10-30T03:00:00.000Z",
+ "ends_at": "2026-10-30T05:00:00.000Z",
+ "tz": "America/Los_Angeles",
+ "status": "cancelled",
+ "visibility": "public",
+ "url": "https://openvibe.live/@carol",
+ "seq": 1
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "event_id": "evt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "kind": "stream",
+ "channel": "carol",
+ "title": "Robot build, part 2",
+ "starts_at": "2026-10-30T03:00:00.000Z",
+ "ends_at": "2026-10-30T05:00:00.000Z",
+ "tz": "America/Los_Angeles",
+ "status": "scheduled",
+ "visibility": "public",
+ "url": "https://openvibe.live/@carol",
+ "seq": 0
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
+{
+ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",
+ "kind": "stream",
+ "channel": "carol",
+ "title": "Robot build, part 2",
+ "starts_at": "2026-10-30T03:00:00.000Z",
+ "ends_at": "2026-10-30T05:00:00.000Z",
+ "tz": "America/Los_Angeles",
+ "status": "scheduled",
+ "visibility": "public",
+ "url": "https://openvibe.live/@carol",
+ "seq": 0,
+ "owner_subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",
+ "kind": "event",
+ "channel": null,
+ "title": "Robot build, part 2",
+ "starts_at": "2026-10-30T03:00:00.000Z",
+ "ends_at": null,
+ "tz": "America/Los_Angeles",
+ "status": "scheduled",
+ "visibility": "public",
+ "url": null,
+ "seq": 0
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",
+ "kind": "stream",
+ "channel": "carol",
+ "title": "Robot build, part 2",
+ "starts_at": "2026-10-30T03:00:00.000Z",
+ "ends_at": "2026-10-30T05:00:00.000Z",
+ "tz": "America/Los_Angeles",
+ "status": "scheduled",
+ "visibility": "public",
+ "url": "https://openvibe.live/@carol",
+ "seq": 0
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "event_id": "evt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "kind": "stream",
+ "channel": "carol",
+ "title": "Robot build, part 2",
+ "starts_at": "2026-10-30T03:00:00.000Z",
+ "ends_at": "2026-10-30T05:00:00.000Z",
+ "tz": "America/Los_Angeles",
+ "status": "scheduled",
+ "visibility": "public",
+ "url": "https://openvibe.live/@carol",
+ "seq": 1
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
+{
+ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",
+ "kind": "stream",
+ "channel": "carol",
+ "title": "Robot build, part 2",
+ "starts_at": "2026-10-30T03:00:00.000Z",
+ "ends_at": "2026-10-30T05:00:00.000Z",
+ "tz": "America/Los_Angeles",
+ "status": "scheduled",
+ "visibility": "public",
+ "url": "https://openvibe.live/@carol",
+ "seq": 1,
+ "owner_subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",
+ "kind": "event",
+ "channel": null,
+ "title": "Robot build, part 2",
+ "starts_at": "2026-10-30T03:00:00.000Z",
+ "ends_at": null,
+ "tz": "America/Los_Angeles",
+ "status": "scheduled",
+ "visibility": "public",
+ "url": null,
+ "seq": 1
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "event_id": "tev_01JAB2C3D4E5F6G7H8J9",
+ "kind": "stream",
+ "channel": "carol",
+ "title": "Robot build, part 2",
+ "starts_at": "2026-10-30T03:00:00.000Z",
+ "ends_at": "2026-10-30T05:00:00.000Z",
+ "tz": "America/Los_Angeles",
+ "status": "scheduled",
+ "visibility": "public",
+ "url": "https://openvibe.live/@carol",
+ "seq": 1
+}
@@ -85580,6 +85580,300 @@
@@ -85580,6 +85580,300 @@
}
}
}
}
}
}
+ },
+ "today.event.scheduled": {
+ "version": "1.0.0",
+ "owner": "today",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/today.event.scheduled.v1.json",
+ "title": "TodayEventScheduledPayload",
+ "description": "today.event.scheduled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). A person put a stream or an event on OpenVibe.Today's calendar (POST /api/v1/events or the schedule form). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "event_id",
+ "kind",
+ "channel",
+ "title",
+ "starts_at",
+ "ends_at",
+ "tz",
+ "status",
+ "visibility",
+ "url",
+ "seq"
+ ],
+ "properties": {
+ "event_id": {
+ "type": "string",
+ "pattern": "^tev_[0-9A-HJKMNP-TV-Z]{20}$",
+ "description": "Today's id for the calendar entry (not the envelope's evt_ id)."
+ },
+ "kind": {
+ "enum": [
+ "stream",
+ "event"
+ ]
+ },
+ "channel": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 64,
+ "description": "The owner's Live username for a stream; null for an event."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ },
+ "starts_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "ends_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ },
+ "tz": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "description": "The IANA zone it was scheduled in."
+ },
+ "status": {
+ "enum": [
+ "scheduled",
+ "live",
+ "done",
+ "cancelled"
+ ]
+ },
+ "visibility": {
+ "enum": [
+ "public",
+ "followers"
+ ]
+ },
+ "url": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 2048,
+ "description": "Where it happens (a stream: its Live channel page)."
+ },
+ "seq": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The calendar SEQUENCE: up by one with every change."
+ }
+ }
+ }
+ },
+ "today.event.updated": {
+ "version": "1.0.0",
+ "owner": "today",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/today.event.updated.v1.json",
+ "title": "TodayEventUpdatedPayload",
+ "description": "today.event.updated v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its title, times, zone, description or visibility changed (seq went up), or it went live or ended (live.stream.started / ended). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "event_id",
+ "kind",
+ "channel",
+ "title",
+ "starts_at",
+ "ends_at",
+ "tz",
+ "status",
+ "visibility",
+ "url",
+ "seq"
+ ],
+ "properties": {
+ "event_id": {
+ "type": "string",
+ "pattern": "^tev_[0-9A-HJKMNP-TV-Z]{20}$",
+ "description": "Today's id for the calendar entry (not the envelope's evt_ id)."
+ },
+ "kind": {
+ "enum": [
+ "stream",
+ "event"
+ ]
+ },
+ "channel": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 64,
+ "description": "The owner's Live username for a stream; null for an event."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ },
+ "starts_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "ends_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ },
+ "tz": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "description": "The IANA zone it was scheduled in."
+ },
+ "status": {
+ "enum": [
+ "scheduled",
+ "live",
+ "done",
+ "cancelled"
+ ]
+ },
+ "visibility": {
+ "enum": [
+ "public",
+ "followers"
+ ]
+ },
+ "url": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 2048,
+ "description": "Where it happens (a stream: its Live channel page)."
+ },
+ "seq": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The calendar SEQUENCE: up by one with every change."
+ }
+ }
+ }
+ },
+ "today.event.cancelled": {
+ "version": "1.0.0",
+ "owner": "today",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/today.event.cancelled.v1.json",
+ "title": "TodayEventCancelledPayload",
+ "description": "today.event.cancelled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its owner cancelled it: calendars that subscribe drop it (STATUS:CANCELLED), and OpenVibe.Network clears the followers' notices. Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "event_id",
+ "kind",
+ "channel",
+ "title",
+ "starts_at",
+ "ends_at",
+ "tz",
+ "status",
+ "visibility",
+ "url",
+ "seq"
+ ],
+ "properties": {
+ "event_id": {
+ "type": "string",
+ "pattern": "^tev_[0-9A-HJKMNP-TV-Z]{20}$",
+ "description": "Today's id for the calendar entry (not the envelope's evt_ id)."
+ },
+ "kind": {
+ "enum": [
+ "stream",
+ "event"
+ ]
+ },
+ "channel": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 64,
+ "description": "The owner's Live username for a stream; null for an event."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ },
+ "starts_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "ends_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ },
+ "tz": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "description": "The IANA zone it was scheduled in."
+ },
+ "status": {
+ "enum": [
+ "scheduled",
+ "live",
+ "done",
+ "cancelled"
+ ]
+ },
+ "visibility": {
+ "enum": [
+ "public",
+ "followers"
+ ]
+ },
+ "url": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 2048,
+ "description": "Where it happens (a stream: its Live channel page)."
+ },
+ "seq": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The calendar SEQUENCE: up by one with every change."
+ }
+ }
+ }
}
}
}
}
}
}
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Actor API",
"title": "OpenVibe.Actor API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.AI API",
"title": "OpenVibe.AI API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Billing API",
"title": "OpenVibe.Billing API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Blog API",
"title": "OpenVibe.Blog API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bot API",
"title": "OpenVibe.Bot API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Chat API",
"title": "OpenVibe.Chat API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Codes API",
"title": "OpenVibe.Codes API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Community API",
"title": "OpenVibe.Community API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Coupons API",
"title": "OpenVibe.Coupons API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Deals API",
"title": "OpenVibe.Deals API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Events API",
"title": "OpenVibe.Events API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Food API",
"title": "OpenVibe.Food API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Games API",
"title": "OpenVibe.Games API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Host API",
"title": "OpenVibe.Host API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Inventory API",
"title": "OpenVibe.Inventory API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Live API",
"title": "OpenVibe.Live API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.MediaHub API",
"title": "OpenVibe.MediaHub API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Media API",
"title": "OpenVibe.Media API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Network API",
"title": "OpenVibe.Network API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.News API",
"title": "OpenVibe.News API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenRestream API",
"title": "OpenRestream API",
- "version": "0.229.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Play API",
"title": "OpenVibe.Play API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Quest API",
"title": "OpenVibe.Quest API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Reviews API",
"title": "OpenVibe.Reviews API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Run API",
"title": "OpenVibe.Run API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Search API",
"title": "OpenVibe.Search API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Services API",
"title": "OpenVibe.Services API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Sources API",
"title": "OpenVibe.Sources API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Space API",
"title": "OpenVibe.Space API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tips API",
"title": "OpenVibe.Tips API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tools API",
"title": "OpenVibe.Tools API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Trade API",
"title": "OpenVibe.Trade API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.VIP API",
"title": "OpenVibe.VIP API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Watch API",
"title": "OpenVibe.Watch API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Wiki API",
"title": "OpenVibe.Wiki API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Work API",
"title": "OpenVibe.Work API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Zone API",
"title": "OpenVibe.Zone API",
- "version": "0.229.0",
- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.229.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.230.0",
+ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.230.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.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -212534,3 +212534,102 @@ export interface MeActionsResult {
@@ -212534,3 +212534,102 @@ export interface MeActionsResult {
partial: boolean;
partial: boolean;
generated_at: string;
generated_at: string;
}
}
+
+/** [email protected] (owner: today) */
+/**
+ * today.event.scheduled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). A person put a stream or an event on OpenVibe.Today's calendar (POST /api/v1/events or the schedule form). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).
+ */
+export interface TodayEventScheduledPayload {
+ /**
+ * Today's id for the calendar entry (not the envelope's evt_ id).
+ */
+ event_id: string;
+ kind: "stream" | "event";
+ /**
+ * The owner's Live username for a stream; null for an event.
+ */
+ channel: string | null;
+ title: string;
+ starts_at: string;
+ ends_at: string | null;
+ /**
+ * The IANA zone it was scheduled in.
+ */
+ tz: string;
+ status: "scheduled" | "live" | "done" | "cancelled";
+ visibility: "public" | "followers";
+ /**
+ * Where it happens (a stream: its Live channel page).
+ */
+ url: string | null;
+ /**
+ * The calendar SEQUENCE: up by one with every change.
+ */
+ seq: number;
+}
+
+/** [email protected] (owner: today) */
+/**
+ * today.event.updated v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its title, times, zone, description or visibility changed (seq went up), or it went live or ended (live.stream.started / ended). Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).
+ */
+export interface TodayEventUpdatedPayload {
+ /**
+ * Today's id for the calendar entry (not the envelope's evt_ id).
+ */
+ event_id: string;
+ kind: "stream" | "event";
+ /**
+ * The owner's Live username for a stream; null for an event.
+ */
+ channel: string | null;
+ title: string;
+ starts_at: string;
+ ends_at: string | null;
+ /**
+ * The IANA zone it was scheduled in.
+ */
+ tz: string;
+ status: "scheduled" | "live" | "done" | "cancelled";
+ visibility: "public" | "followers";
+ /**
+ * Where it happens (a stream: its Live channel page).
+ */
+ url: string | null;
+ /**
+ * The calendar SEQUENCE: up by one with every change.
+ */
+ seq: number;
+}
+
+/** [email protected] (owner: today) */
+/**
+ * today.event.cancelled v1 (OpenVibe.Today server/events/store.js, written to its outbox in the same transaction as the change and published once per evt_ id). Its owner cancelled it: calendars that subscribe drop it (STATUS:CANCELLED), and OpenVibe.Network clears the followers' notices. Envelope: source today, subject and actor { type: user, id: <owner usr_> }, visibility internal, priority important. OpenVibe.Network tells a streamer's followers about a scheduled public or followers-only stream (STREAM_SCHEDULED) and clears those notices on cancel (server/notifications/events-consumer.js).
+ */
+export interface TodayEventCancelledPayload {
+ /**
+ * Today's id for the calendar entry (not the envelope's evt_ id).
+ */
+ event_id: string;
+ kind: "stream" | "event";
+ /**
+ * The owner's Live username for a stream; null for an event.
+ */
+ channel: string | null;
+ title: string;
+ starts_at: string;
+ ends_at: string | null;
+ /**
+ * The IANA zone it was scheduled in.
+ */
+ tz: string;
+ status: "scheduled" | "live" | "done" | "cancelled";
+ visibility: "public" | "followers";
+ /**
+ * Where it happens (a stream: its Live channel page).
+ */
+ url: string | null;
+ /**
+ * The calendar SEQUENCE: up by one with every change.
+ */
+ seq: number;
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,92 @@
@@ -0,0 +1,92 @@
+{
+ "version": "0.1.0",
+ "contractRanges": {
+ "openvibe-contracts": ">=0.225.0 <1.0.0"
+ },
+ "id": "today",
+ "name": "OpenVibe.Today",
+ "status": "alpha",
+ "repository": "OpenVibers/OpenVibe.Today",
+ "domains": [
+ "openvibe.today"
+ ],
+ "publicOrigin": "https://openvibe.today",
+ "exposure": {
+ "state": "live",
+ "publicSite": "service"
+ },
+ "capabilities": [],
+ "eventsProduced": [
+ "today.event.scheduled",
+ "today.event.updated",
+ "today.event.cancelled"
+ ],
+ "eventsConsumed": [
+ "live.stream.started",
+ "live.stream.ended",
+ "network.account.export_requested",
+ "network.account.deleted"
+ ],
+ "namespacesOwned": [
+ "today.*"
+ ],
+ "lifecycle": {
+ "liveness": {
+ "endpoint": "/api/health",
+ "means": "the process is up and answers HTTP; it checks nothing else"
+ },
+ "shutdown": {
+ "signal": "SIGTERM",
+ "deadlineSeconds": 10,
+ "drains": [
+ "HTTP server closed",
+ "the outbox publisher and the reminder and brief jobs stopped",
+ "PostgreSQL pool closed"
+ ]
+ },
+ "startupRecovery": {
+ "resumes": [
+ {
+ "kind": "outbox",
+ "what": "today_outbox rows not yet published are sent again under their fixed evt_ ids (Events keeps one per id)"
+ },
+ {
+ "kind": "jobs",
+ "what": "reminders due while it was down are sent on the first pass (claimed by UPDATE … WHERE sent_at IS NULL, never twice); the brief job builds a missing day"
+ },
+ {
+ "kind": "consumer",
+ "what": "OpenVibe.Events redelivers live.stream.* and the account events pending during the stop; today_processed applies each once"
+ }
+ ]
+ },
+ "rollback": {
+ "conditions": [
+ "automatic: ovhost deploy puts the previous sha back and restarts again when the ready URL does not answer 2xx within ready.timeoutSeconds after the restart (exit 3)",
+ "manual: ovhost rollback <service> --to <sha>"
+ ],
+ "window": "automatic only while ovhost waits for readiness after the restart; manual afterwards, as long as no blocker applies",
+ "blockers": {
+ "none": "migration 0001 only creates Today's own tables; an earlier release has none to read"
+ }
+ },
+ "contracts": {
+ "range": ">=0.225.0 <1.0.0"
+ },
+ "leases": {
+ "none": "no claims: one process serves the site"
+ }
+ },
+ "notes": "Port 5100, unit openvibe-today.service, PostgreSQL database ov_today. The Today room (plan 2026-10-28 §5.3): the network's time bus and calendar authority. v1 owns schedules (streams and events), reminders (sent as Network notifications through network.notifications.push), calendar feeds (RFC 5545: a channel's public feed and a person's private one) and the daily brief. It publishes today.event.* from an outbox and moves a stream live and ended from live.stream.started / ended. OAuth client `today` (sign-in), Network follows for the agenda.",
+ "health": "/api/health",
+ "ready": "/api/ready",
+ "internalOrigin": "http://127.0.0.1:5100",
+ "site": {
+ "name": "Today",
+ "icon": "today",
+ "tagline": "Everything happening for you, today",
+ "what": "Stream schedules, reminders that find you on any OpenVibe site, calendar feeds for your own calendar app, and a morning brief, all in one place.",
+ "legalProfile": "account",
+ "position": 40
+ }
+}
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.229.0",
+ "version": "0.230.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",