openvibers/openvibe.contracts Commits
frame.menu-card@1: an optional image per item (0.320.0) (#329)
Changes
@@@ -1,5 +1,11 @@# Changelog++## 0.320.0 — 2026-11-07++++- `frame.menu-card@1` items gain an optional `image`: `src` (https on the publishing site's own origin or an `openvibe.*` host, at most 400 characters), optional `w` and `h` (whole pixels, 16–1920) and an optional `alt` of at most 120 characters. Network keeps an image whose `src` passes the same host rule as the item's `url`, drops one from anywhere else, and passes it through in `GET /api/frame` so the Frame menu and Network's `/my` can draw a thumbnail.++- Additive: every item without an image stays valid, so an older publisher file keeps passing and an older reader ignores the field.++- Valid fixtures cover an item with a full image and one with only `src`; invalid fixtures cover `http`, a width under 16, an `alt` over 120, a missing `src` and an unknown image field.++## 0.319.0 — 2026-11-07- The merged public site: OpenVibe.AI is no longer a site of its own. Its service manifest keeps the API, the run receipt and the operator console but drops the `site` block, so Network's Frame lists Exchange instead of AI. `manifests/products/ai.openvibe.services.json` is `kind: moved`, points at Exchange and keeps the API address, and Exchange's own site block now carries the merged tagline ("Every AI model, one account") and what it does.@@@ -2,7 +2,7 @@"$schema": "https://json-schema.org/draft/2020-12/schema","$id": "https://openvibe.network/contracts/frame/menu-card.v1.json","title": "FrameMenuCard",-- "description": "frame.menu-card@1: one card a site publishes for the network's Frame menu. Each open site serves an array of at most three cards at /.well-known/openvibe-menu.json (frame.menu-cards@1); Network fetches that public file every five minutes, validates every card here, strips markup from the text and ranks the cards in GET /api/frame. A card is one kind of menu block: a rail (the live rail), rows (a ranked list) or chips (a short row of words). Every item links to https on the site's own origin or an openvibe.* host; Network refuses another origin. The text is plain words: markup is stripped, unknown fields are dropped and a file that fails this schema leaves the site's last good card in place for 30 minutes.",++ "description": "frame.menu-card@1: one card a site publishes for the network's Frame menu. Each open site serves an array of at most three cards at /.well-known/openvibe-menu.json (frame.menu-cards@1); Network fetches that public file every five minutes, validates every card here, strips markup from the text and ranks the cards in GET /api/frame. A card is one kind of menu block: a rail (the live rail), rows (a ranked list) or chips (a short row of words). Every item links to https on the site's own origin or an openvibe.* host; Network refuses another origin. An item may also carry a small picture (image) of the same shape: https on the site's own origin or an openvibe.* host, with an optional 16–1920 pixel width and height and a short alt text. The text is plain words: markup is stripped, unknown fields are dropped and a file that fails this schema leaves the site's last good card in place for 30 minutes.","type": "object","required": ["id", "site", "title", "kind", "items", "updated_at", "ttl_s"],"additionalProperties": false,@@@ -53,6 +53,38 @@"maxLength": 400,"pattern": "^https://","description": "Where the entry opens: https on the publishing site's own origin or an openvibe.* host."++ },++ "image": {++ "type": "object",++ "additionalProperties": false,++ "required": ["src"],++ "description": "A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.",++ "properties": {++ "src": {++ "type": "string",++ "format": "uri",++ "maxLength": 400,++ "pattern": "^https://",++ "description": "The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host."++ },++ "w": {++ "type": "integer",++ "minimum": 16,++ "maximum": 1920,++ "description": "The picture's natural width in pixels, when the site knows it."++ },++ "h": {++ "type": "integer",++ "minimum": 16,++ "maximum": 1920,++ "description": "The picture's natural height in pixels, when the site knows it."++ },++ "alt": {++ "type": "string",++ "maxLength": 120,++ "description": "A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it."++ }++ }}}}nnew file mode 100644@@@ -0,0 +1,11 @@++{++ "id": "trending",++ "site": "media-hub",++ "title": "Trending",++ "kind": "rows",++ "items": [++ { "title": "A walk", "url": "https://openvibe.video/v/1", "image": { "src": "http://openvibe.media/t/1.jpg", "w": 640, "h": 360 } }++ ],++ "updated_at": "2026-11-07T08:00:00Z",++ "ttl_s": 300++}nnew file mode 100644@@@ -0,0 +1,11 @@++{++ "id": "live-now",++ "site": "live",++ "title": "Live now",++ "kind": "rail",++ "items": [++ { "title": "Nova", "url": "https://openvibe.live/@nova", "image": { "src": "https://openvibe.live/t/nova.jpg", "alt": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } }++ ],++ "updated_at": "2026-11-07T08:00:00Z",++ "ttl_s": 30++}nnew file mode 100644@@@ -0,0 +1,11 @@++{++ "id": "live-now",++ "site": "live",++ "title": "Live now",++ "kind": "rail",++ "items": [++ { "title": "Nova", "url": "https://openvibe.live/@nova", "image": { "w": 640, "h": 360 } }++ ],++ "updated_at": "2026-11-07T08:00:00Z",++ "ttl_s": 30++}nnew file mode 100644@@@ -0,0 +1,11 @@++{++ "id": "live-now",++ "site": "live",++ "title": "Live now",++ "kind": "rail",++ "items": [++ { "title": "Nova", "url": "https://openvibe.live/@nova", "image": { "src": "https://openvibe.live/t/nova.jpg", "credit": "Nova" } }++ ],++ "updated_at": "2026-11-07T08:00:00Z",++ "ttl_s": 30++}nnew file mode 100644@@@ -0,0 +1,11 @@++{++ "id": "live-now",++ "site": "live",++ "title": "Live now",++ "kind": "rail",++ "items": [++ { "title": "Nova", "url": "https://openvibe.live/@nova", "image": { "src": "https://openvibe.live/t/nova.jpg", "w": 8, "h": 360 } }++ ],++ "updated_at": "2026-11-07T08:00:00Z",++ "ttl_s": 30++}@@@ -4,7 +4,7 @@"title": "Live now","kind": "rail","items": [-- { "title": "Nova", "meta": "12 watching", "url": "https://openvibe.live/@nova" },++ { "title": "Nova", "meta": "12 watching", "url": "https://openvibe.live/@nova", "image": { "src": "https://openvibe.live/t/nova.jpg?w=640", "w": 640, "h": 360, "alt": "Nova at the desk" } },{ "title": "Kitchen radio", "meta": "3 watching", "url": "https://openvibe.live/@kitchen" }],"more": { "label": "See all", "url": "https://openvibe.live/live" },@@@ -4,7 +4,7 @@"title": "New worlds","kind": "rows","items": [-- { "title": "Harbour Town", "meta": "Built by 4 people", "url": "https://openvibe.games/w/harbour-town" },++ { "title": "Harbour Town", "meta": "Built by 4 people", "url": "https://openvibe.games/w/harbour-town", "image": { "src": "https://openvibe.games/worlds/harbour-town/cover.jpg", "w": 1200, "h": 675 } },{ "title": "Night Market", "meta": "18 visitors this week", "url": "https://openvibe.games/w/night-market" }],"updated_at": "2026-11-07T07:58:00Z",@@@ -107692,7 +107692,7 @@"$schema": "https://json-schema.org/draft/2020-12/schema","$id": "https://openvibe.network/contracts/frame/menu-card.v1.json","title": "FrameMenuCard",-- "description": "frame.menu-card@1: one card a site publishes for the network's Frame menu. Each open site serves an array of at most three cards at /.well-known/openvibe-menu.json (frame.menu-cards@1); Network fetches that public file every five minutes, validates every card here, strips markup from the text and ranks the cards in GET /api/frame. A card is one kind of menu block: a rail (the live rail), rows (a ranked list) or chips (a short row of words). Every item links to https on the site's own origin or an openvibe.* host; Network refuses another origin. The text is plain words: markup is stripped, unknown fields are dropped and a file that fails this schema leaves the site's last good card in place for 30 minutes.",++ "description": "frame.menu-card@1: one card a site publishes for the network's Frame menu. Each open site serves an array of at most three cards at /.well-known/openvibe-menu.json (frame.menu-cards@1); Network fetches that public file every five minutes, validates every card here, strips markup from the text and ranks the cards in GET /api/frame. A card is one kind of menu block: a rail (the live rail), rows (a ranked list) or chips (a short row of words). Every item links to https on the site's own origin or an openvibe.* host; Network refuses another origin. An item may also carry a small picture (image) of the same shape: https on the site's own origin or an openvibe.* host, with an optional 16–1920 pixel width and height and a short alt text. The text is plain words: markup is stripped, unknown fields are dropped and a file that fails this schema leaves the site's last good card in place for 30 minutes.","type": "object","required": ["id",@@@ -107758,6 +107758,40 @@"maxLength": 400,"pattern": "^https://","description": "Where the entry opens: https on the publishing site's own origin or an openvibe.* host."++ },++ "image": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "src"++ ],++ "description": "A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.",++ "properties": {++ "src": {++ "type": "string",++ "format": "uri",++ "maxLength": 400,++ "pattern": "^https://",++ "description": "The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host."++ },++ "w": {++ "type": "integer",++ "minimum": 16,++ "maximum": 1920,++ "description": "The picture's natural width in pixels, when the site knows it."++ },++ "h": {++ "type": "integer",++ "minimum": 16,++ "maximum": 1920,++ "description": "The picture's natural height in pixels, when the site knows it."++ },++ "alt": {++ "type": "string",++ "maxLength": 120,++ "description": "A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it."++ }++ }}}}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.319.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.Bench API",-- "version": "0.319.0",-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.320.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 Connect API",-- "version": "0.319.0",-- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.Design API",-- "version": "0.319.0",-- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.Domains API",-- "version": "0.319.0",-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.Report API",-- "version": "0.319.0",-- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.Today API",-- "version": "0.319.0",-- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.Vision API",-- "version": "0.319.0",-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.320.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"@@@ -298333,7 +298333,7 @@ export interface AgentTimelineListResult {/** [email protected] (owner: network) *//**-- * frame.menu-card@1: one card a site publishes for the network's Frame menu. Each open site serves an array of at most three cards at /.well-known/openvibe-menu.json (frame.menu-cards@1); Network fetches that public file every five minutes, validates every card here, strips markup from the text and ranks the cards in GET /api/frame. A card is one kind of menu block: a rail (the live rail), rows (a ranked list) or chips (a short row of words). Every item links to https on the site's own origin or an openvibe.* host; Network refuses another origin. The text is plain words: markup is stripped, unknown fields are dropped and a file that fails this schema leaves the site's last good card in place for 30 minutes.++ * frame.menu-card@1: one card a site publishes for the network's Frame menu. Each open site serves an array of at most three cards at /.well-known/openvibe-menu.json (frame.menu-cards@1); Network fetches that public file every five minutes, validates every card here, strips markup from the text and ranks the cards in GET /api/frame. A card is one kind of menu block: a rail (the live rail), rows (a ranked list) or chips (a short row of words). Every item links to https on the site's own origin or an openvibe.* host; Network refuses another origin. An item may also carry a small picture (image) of the same shape: https on the site's own origin or an openvibe.* host, with an optional 16–1920 pixel width and height and a short alt text. The text is plain words: markup is stripped, unknown fields are dropped and a file that fails this schema leaves the site's last good card in place for 30 minutes.*/export interface FrameMenuCard {/**@@@ -298373,6 +298373,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };}]| [@@@ -298389,6 +298410,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298403,6 +298445,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };}]| [@@@ -298419,6 +298482,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298433,6 +298517,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298447,6 +298552,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };}]| [@@@ -298463,6 +298589,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298477,6 +298624,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298491,6 +298659,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298505,6 +298694,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };}]| [@@@ -298521,6 +298731,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298535,6 +298766,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298549,6 +298801,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298563,6 +298836,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298577,6 +298871,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };}]| [@@@ -298593,6 +298908,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298607,6 +298943,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298621,6 +298978,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298635,6 +299013,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298649,6 +299048,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };},{/**@@@ -298663,6 +299083,27 @@ export interface FrameMenuCard {* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.*/url: string;++ /**++ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.++ */++ image?: {++ /**++ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.++ */++ src: string;++ /**++ * The picture's natural width in pixels, when the site knows it.++ */++ w?: number;++ /**++ * The picture's natural height in pixels, when the site knows it.++ */++ h?: number;++ /**++ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.++ */++ alt?: string;++ };}];more?: {@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.319.0",++ "version": "0.320.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",
@@ -1,5 +1,11 @@
@@ -1,5 +1,11 @@
# Changelog
# Changelog
+## 0.320.0 — 2026-11-07
+
+- `frame.menu-card@1` items gain an optional `image`: `src` (https on the publishing site's own origin or an `openvibe.*` host, at most 400 characters), optional `w` and `h` (whole pixels, 16–1920) and an optional `alt` of at most 120 characters. Network keeps an image whose `src` passes the same host rule as the item's `url`, drops one from anywhere else, and passes it through in `GET /api/frame` so the Frame menu and Network's `/my` can draw a thumbnail.
+- Additive: every item without an image stays valid, so an older publisher file keeps passing and an older reader ignores the field.
+- Valid fixtures cover an item with a full image and one with only `src`; invalid fixtures cover `http`, a width under 16, an `alt` over 120, a missing `src` and an unknown image field.
+
## 0.319.0 — 2026-11-07
## 0.319.0 — 2026-11-07
- The merged public site: OpenVibe.AI is no longer a site of its own. Its service manifest keeps the API, the run receipt and the operator console but drops the `site` block, so Network's Frame lists Exchange instead of AI. `manifests/products/ai.openvibe.services.json` is `kind: moved`, points at Exchange and keeps the API address, and Exchange's own site block now carries the merged tagline ("Every AI model, one account") and what it does.
- The merged public site: OpenVibe.AI is no longer a site of its own. Its service manifest keeps the API, the run receipt and the operator console but drops the `site` block, so Network's Frame lists Exchange instead of AI. `manifests/products/ai.openvibe.services.json` is `kind: moved`, points at Exchange and keeps the API address, and Exchange's own site block now carries the merged tagline ("Every AI model, one account") and what it does.
@@ -2,7 +2,7 @@
@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/frame/menu-card.v1.json",
"$id": "https://openvibe.network/contracts/frame/menu-card.v1.json",
"title": "FrameMenuCard",
"title": "FrameMenuCard",
- "description": "frame.menu-card@1: one card a site publishes for the network's Frame menu. Each open site serves an array of at most three cards at /.well-known/openvibe-menu.json (frame.menu-cards@1); Network fetches that public file every five minutes, validates every card here, strips markup from the text and ranks the cards in GET /api/frame. A card is one kind of menu block: a rail (the live rail), rows (a ranked list) or chips (a short row of words). Every item links to https on the site's own origin or an openvibe.* host; Network refuses another origin. The text is plain words: markup is stripped, unknown fields are dropped and a file that fails this schema leaves the site's last good card in place for 30 minutes.",
+ "description": "frame.menu-card@1: one card a site publishes for the network's Frame menu. Each open site serves an array of at most three cards at /.well-known/openvibe-menu.json (frame.menu-cards@1); Network fetches that public file every five minutes, validates every card here, strips markup from the text and ranks the cards in GET /api/frame. A card is one kind of menu block: a rail (the live rail), rows (a ranked list) or chips (a short row of words). Every item links to https on the site's own origin or an openvibe.* host; Network refuses another origin. An item may also carry a small picture (image) of the same shape: https on the site's own origin or an openvibe.* host, with an optional 16–1920 pixel width and height and a short alt text. The text is plain words: markup is stripped, unknown fields are dropped and a file that fails this schema leaves the site's last good card in place for 30 minutes.",
"type": "object",
"type": "object",
"required": ["id", "site", "title", "kind", "items", "updated_at", "ttl_s"],
"required": ["id", "site", "title", "kind", "items", "updated_at", "ttl_s"],
"additionalProperties": false,
"additionalProperties": false,
@@ -53,6 +53,38 @@
@@ -53,6 +53,38 @@
"maxLength": 400,
"maxLength": 400,
"pattern": "^https://",
"pattern": "^https://",
"description": "Where the entry opens: https on the publishing site's own origin or an openvibe.* host."
"description": "Where the entry opens: https on the publishing site's own origin or an openvibe.* host."
+ },
+ "image": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["src"],
+ "description": "A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.",
+ "properties": {
+ "src": {
+ "type": "string",
+ "format": "uri",
+ "maxLength": 400,
+ "pattern": "^https://",
+ "description": "The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host."
+ },
+ "w": {
+ "type": "integer",
+ "minimum": 16,
+ "maximum": 1920,
+ "description": "The picture's natural width in pixels, when the site knows it."
+ },
+ "h": {
+ "type": "integer",
+ "minimum": 16,
+ "maximum": 1920,
+ "description": "The picture's natural height in pixels, when the site knows it."
+ },
+ "alt": {
+ "type": "string",
+ "maxLength": 120,
+ "description": "A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it."
+ }
+ }
}
}
}
}
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
+{
+ "id": "trending",
+ "site": "media-hub",
+ "title": "Trending",
+ "kind": "rows",
+ "items": [
+ { "title": "A walk", "url": "https://openvibe.video/v/1", "image": { "src": "http://openvibe.media/t/1.jpg", "w": 640, "h": 360 } }
+ ],
+ "updated_at": "2026-11-07T08:00:00Z",
+ "ttl_s": 300
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
+{
+ "id": "live-now",
+ "site": "live",
+ "title": "Live now",
+ "kind": "rail",
+ "items": [
+ { "title": "Nova", "url": "https://openvibe.live/@nova", "image": { "src": "https://openvibe.live/t/nova.jpg", "alt": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } }
+ ],
+ "updated_at": "2026-11-07T08:00:00Z",
+ "ttl_s": 30
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
+{
+ "id": "live-now",
+ "site": "live",
+ "title": "Live now",
+ "kind": "rail",
+ "items": [
+ { "title": "Nova", "url": "https://openvibe.live/@nova", "image": { "w": 640, "h": 360 } }
+ ],
+ "updated_at": "2026-11-07T08:00:00Z",
+ "ttl_s": 30
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
+{
+ "id": "live-now",
+ "site": "live",
+ "title": "Live now",
+ "kind": "rail",
+ "items": [
+ { "title": "Nova", "url": "https://openvibe.live/@nova", "image": { "src": "https://openvibe.live/t/nova.jpg", "credit": "Nova" } }
+ ],
+ "updated_at": "2026-11-07T08:00:00Z",
+ "ttl_s": 30
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
+{
+ "id": "live-now",
+ "site": "live",
+ "title": "Live now",
+ "kind": "rail",
+ "items": [
+ { "title": "Nova", "url": "https://openvibe.live/@nova", "image": { "src": "https://openvibe.live/t/nova.jpg", "w": 8, "h": 360 } }
+ ],
+ "updated_at": "2026-11-07T08:00:00Z",
+ "ttl_s": 30
+}
@@ -4,7 +4,7 @@
@@ -4,7 +4,7 @@
"title": "Live now",
"title": "Live now",
"kind": "rail",
"kind": "rail",
"items": [
"items": [
- { "title": "Nova", "meta": "12 watching", "url": "https://openvibe.live/@nova" },
+ { "title": "Nova", "meta": "12 watching", "url": "https://openvibe.live/@nova", "image": { "src": "https://openvibe.live/t/nova.jpg?w=640", "w": 640, "h": 360, "alt": "Nova at the desk" } },
{ "title": "Kitchen radio", "meta": "3 watching", "url": "https://openvibe.live/@kitchen" }
{ "title": "Kitchen radio", "meta": "3 watching", "url": "https://openvibe.live/@kitchen" }
],
],
"more": { "label": "See all", "url": "https://openvibe.live/live" },
"more": { "label": "See all", "url": "https://openvibe.live/live" },
@@ -4,7 +4,7 @@
@@ -4,7 +4,7 @@
"title": "New worlds",
"title": "New worlds",
"kind": "rows",
"kind": "rows",
"items": [
"items": [
- { "title": "Harbour Town", "meta": "Built by 4 people", "url": "https://openvibe.games/w/harbour-town" },
+ { "title": "Harbour Town", "meta": "Built by 4 people", "url": "https://openvibe.games/w/harbour-town", "image": { "src": "https://openvibe.games/worlds/harbour-town/cover.jpg", "w": 1200, "h": 675 } },
{ "title": "Night Market", "meta": "18 visitors this week", "url": "https://openvibe.games/w/night-market" }
{ "title": "Night Market", "meta": "18 visitors this week", "url": "https://openvibe.games/w/night-market" }
],
],
"updated_at": "2026-11-07T07:58:00Z",
"updated_at": "2026-11-07T07:58:00Z",
@@ -107692,7 +107692,7 @@
@@ -107692,7 +107692,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/frame/menu-card.v1.json",
"$id": "https://openvibe.network/contracts/frame/menu-card.v1.json",
"title": "FrameMenuCard",
"title": "FrameMenuCard",
- "description": "frame.menu-card@1: one card a site publishes for the network's Frame menu. Each open site serves an array of at most three cards at /.well-known/openvibe-menu.json (frame.menu-cards@1); Network fetches that public file every five minutes, validates every card here, strips markup from the text and ranks the cards in GET /api/frame. A card is one kind of menu block: a rail (the live rail), rows (a ranked list) or chips (a short row of words). Every item links to https on the site's own origin or an openvibe.* host; Network refuses another origin. The text is plain words: markup is stripped, unknown fields are dropped and a file that fails this schema leaves the site's last good card in place for 30 minutes.",
+ "description": "frame.menu-card@1: one card a site publishes for the network's Frame menu. Each open site serves an array of at most three cards at /.well-known/openvibe-menu.json (frame.menu-cards@1); Network fetches that public file every five minutes, validates every card here, strips markup from the text and ranks the cards in GET /api/frame. A card is one kind of menu block: a rail (the live rail), rows (a ranked list) or chips (a short row of words). Every item links to https on the site's own origin or an openvibe.* host; Network refuses another origin. An item may also carry a small picture (image) of the same shape: https on the site's own origin or an openvibe.* host, with an optional 16–1920 pixel width and height and a short alt text. The text is plain words: markup is stripped, unknown fields are dropped and a file that fails this schema leaves the site's last good card in place for 30 minutes.",
"type": "object",
"type": "object",
"required": [
"required": [
"id",
"id",
@@ -107758,6 +107758,40 @@
@@ -107758,6 +107758,40 @@
"maxLength": 400,
"maxLength": 400,
"pattern": "^https://",
"pattern": "^https://",
"description": "Where the entry opens: https on the publishing site's own origin or an openvibe.* host."
"description": "Where the entry opens: https on the publishing site's own origin or an openvibe.* host."
+ },
+ "image": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "src"
+ ],
+ "description": "A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.",
+ "properties": {
+ "src": {
+ "type": "string",
+ "format": "uri",
+ "maxLength": 400,
+ "pattern": "^https://",
+ "description": "The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host."
+ },
+ "w": {
+ "type": "integer",
+ "minimum": 16,
+ "maximum": 1920,
+ "description": "The picture's natural width in pixels, when the site knows it."
+ },
+ "h": {
+ "type": "integer",
+ "minimum": 16,
+ "maximum": 1920,
+ "description": "The picture's natural height in pixels, when the site knows it."
+ },
+ "alt": {
+ "type": "string",
+ "maxLength": 120,
+ "description": "A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it."
+ }
+ }
}
}
}
}
}
}
@@ -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.319.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.Bench API",
"title": "OpenVibe.Bench API",
- "version": "0.319.0",
- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.320.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 Connect API",
"title": "OpenVibe Connect API",
- "version": "0.319.0",
- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.Design API",
"title": "OpenVibe.Design API",
- "version": "0.319.0",
- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.Domains API",
"title": "OpenVibe.Domains API",
- "version": "0.319.0",
- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.Report API",
"title": "OpenVibe.Report API",
- "version": "0.319.0",
- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.Today API",
"title": "OpenVibe.Today API",
- "version": "0.319.0",
- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.Vision API",
"title": "OpenVibe.Vision API",
- "version": "0.319.0",
- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.320.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.319.0",
- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.319.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.320.0",
+ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.320.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"
@@ -298333,7 +298333,7 @@ export interface AgentTimelineListResult {
@@ -298333,7 +298333,7 @@ export interface AgentTimelineListResult {
/** [email protected] (owner: network) */
/** [email protected] (owner: network) */
/**
/**
- * frame.menu-card@1: one card a site publishes for the network's Frame menu. Each open site serves an array of at most three cards at /.well-known/openvibe-menu.json (frame.menu-cards@1); Network fetches that public file every five minutes, validates every card here, strips markup from the text and ranks the cards in GET /api/frame. A card is one kind of menu block: a rail (the live rail), rows (a ranked list) or chips (a short row of words). Every item links to https on the site's own origin or an openvibe.* host; Network refuses another origin. The text is plain words: markup is stripped, unknown fields are dropped and a file that fails this schema leaves the site's last good card in place for 30 minutes.
+ * frame.menu-card@1: one card a site publishes for the network's Frame menu. Each open site serves an array of at most three cards at /.well-known/openvibe-menu.json (frame.menu-cards@1); Network fetches that public file every five minutes, validates every card here, strips markup from the text and ranks the cards in GET /api/frame. A card is one kind of menu block: a rail (the live rail), rows (a ranked list) or chips (a short row of words). Every item links to https on the site's own origin or an openvibe.* host; Network refuses another origin. An item may also carry a small picture (image) of the same shape: https on the site's own origin or an openvibe.* host, with an optional 16–1920 pixel width and height and a short alt text. The text is plain words: markup is stripped, unknown fields are dropped and a file that fails this schema leaves the site's last good card in place for 30 minutes.
*/
*/
export interface FrameMenuCard {
export interface FrameMenuCard {
/**
/**
@@ -298373,6 +298373,27 @@ export interface FrameMenuCard {
@@ -298373,6 +298373,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
}
}
]
]
| [
| [
@@ -298389,6 +298410,27 @@ export interface FrameMenuCard {
@@ -298389,6 +298410,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298403,6 +298445,27 @@ export interface FrameMenuCard {
@@ -298403,6 +298445,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
}
}
]
]
| [
| [
@@ -298419,6 +298482,27 @@ export interface FrameMenuCard {
@@ -298419,6 +298482,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298433,6 +298517,27 @@ export interface FrameMenuCard {
@@ -298433,6 +298517,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298447,6 +298552,27 @@ export interface FrameMenuCard {
@@ -298447,6 +298552,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
}
}
]
]
| [
| [
@@ -298463,6 +298589,27 @@ export interface FrameMenuCard {
@@ -298463,6 +298589,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298477,6 +298624,27 @@ export interface FrameMenuCard {
@@ -298477,6 +298624,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298491,6 +298659,27 @@ export interface FrameMenuCard {
@@ -298491,6 +298659,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298505,6 +298694,27 @@ export interface FrameMenuCard {
@@ -298505,6 +298694,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
}
}
]
]
| [
| [
@@ -298521,6 +298731,27 @@ export interface FrameMenuCard {
@@ -298521,6 +298731,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298535,6 +298766,27 @@ export interface FrameMenuCard {
@@ -298535,6 +298766,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298549,6 +298801,27 @@ export interface FrameMenuCard {
@@ -298549,6 +298801,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298563,6 +298836,27 @@ export interface FrameMenuCard {
@@ -298563,6 +298836,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298577,6 +298871,27 @@ export interface FrameMenuCard {
@@ -298577,6 +298871,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
}
}
]
]
| [
| [
@@ -298593,6 +298908,27 @@ export interface FrameMenuCard {
@@ -298593,6 +298908,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298607,6 +298943,27 @@ export interface FrameMenuCard {
@@ -298607,6 +298943,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298621,6 +298978,27 @@ export interface FrameMenuCard {
@@ -298621,6 +298978,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298635,6 +299013,27 @@ export interface FrameMenuCard {
@@ -298635,6 +299013,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298649,6 +299048,27 @@ export interface FrameMenuCard {
@@ -298649,6 +299048,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
},
},
{
{
/**
/**
@@ -298663,6 +299083,27 @@ export interface FrameMenuCard {
@@ -298663,6 +299083,27 @@ export interface FrameMenuCard {
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
* Where the entry opens: https on the publishing site's own origin or an openvibe.* host.
*/
*/
url: string;
url: string;
+ /**
+ * A small picture of the entry: a video's thumbnail, a world's cover or a stream's preview. Optional; a site with no real picture leaves it out rather than sending a placeholder.
+ */
+ image?: {
+ /**
+ * The picture's address: https on the publishing site's own origin or an openvibe.* host. Network drops an image from another host.
+ */
+ src: string;
+ /**
+ * The picture's natural width in pixels, when the site knows it.
+ */
+ w?: number;
+ /**
+ * The picture's natural height in pixels, when the site knows it.
+ */
+ h?: number;
+ /**
+ * A short description of the picture for anyone who cannot see it. May be empty when the entry's title already says it.
+ */
+ alt?: string;
+ };
}
}
];
];
more?: {
more?: {
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.319.0",
+ "version": "0.320.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",