openvibers/openvibe.contracts Commits
Contracts 0.193.0: app quests (#159)
Changes
@@@ -4,6 +4,13 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) thfrom `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,the notes were in the tag and commit messages (`git tag -n1`).++## 0.193.0 — 2026-10-15++++- **App quests** (the owner's "moddable in the SDK" for Quest): capability `quest.app_quest.manage` (owner quest,++ public, project-scoped) and `quest.app-quest-request@1` / `quest.app-quest@1`. A developer app defines quests on its++ own project's events (`app.<project_key>.<name>`, the actor a person); OpenVibe.Quest counts production events only,++ keeps at most 20 per project, and rewards a badge named for the app — never OpenCoins.++## 0.192.0 — 2026-10-15- **`bot.robot.online` / `bot.robot.offline`** gain an optional `owner` (the robot owner's `usr_` subject; absent from@@@ -7323,6 +7323,24 @@"compatibility": "backward","status": "active","adr": "ADR-031"++ },++ {++ "id": "quest.app-quest-request",++ "version": "1.0.0",++ "owner": "quest",++ "schema": "quest/app-quest-request.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "quest.app-quest",++ "version": "1.0.0",++ "owner": "quest",++ "schema": "quest/app-quest.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"}]}nnew file mode 100644@@@ -0,0 +1,83 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/app-quest-request.v1.json",++ "title": "QuestAppQuestRequest",++ "description": "quest.app-quest-request@1: PUT /api/v1/app-quests/:slug on OpenVibe.Quest with an app token (capability quest.app_quest.manage). A developer app defines a quest on its own project's events: each step counts events of type app.<project_key>.<name> whose envelope actor is a person (the app publishing on_behalf_of them). The badge is the only reward: app quests never pay OpenCoins. Only production apps' events are counted (Events never hands sandbox events to first-party consumers).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "title",++ "steps",++ "badge"++ ],++ "properties": {++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80++ },++ "why": {++ "type": "string",++ "maxLength": 300++ },++ "steps": {++ "type": "array",++ "minItems": 1,++ "maxItems": 5,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "event_type",++ "count",++ "label"++ ],++ "properties": {++ "event_type": {++ "type": "string",++ "pattern": "^app\\.p[0-9a-z]{26}\\.[a-z0-9_]+(\\.[a-z0-9_]+){0,3}$",++ "description": "One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events."++ },++ "count": {++ "type": "integer",++ "minimum": 1,++ "maximum": 1000++ },++ "label": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ }++ }++ }++ },++ "badge": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "name"++ ],++ "properties": {++ "name": {++ "type": "string",++ "minLength": 1,++ "maxLength": 40++ }++ }++ },++ "url": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 500,++ "description": "Where a person does the steps: the app's own page."++ },++ "status": {++ "enum": [++ "active",++ "retired"++ ],++ "description": "retired: kept with its completions and badges, no longer counted or listed. Default active."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,133 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/app-quest.v1.json",++ "title": "QuestAppQuest",++ "description": "quest.app-quest@1: one app quest as OpenVibe.Quest keeps it (the answer to PUT and GET /api/v1/app-quests[/:slug]). id is app.<project_key>.<slug>; badge.id is the same id; completions counts the people who finished it.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "slug",++ "project_id",++ "app",++ "env",++ "title",++ "steps",++ "badge",++ "status",++ "created_at",++ "updated_at",++ "completions"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^app\\.p[0-9a-z]{26}\\.[a-z0-9][a-z0-9-]{0,47}$"++ },++ "slug": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9-]{0,47}$"++ },++ "project_id": {++ "type": "string",++ "pattern": "^prj_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "app": {++ "type": "string",++ "pattern": "^app:app_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The app that last defined it."++ },++ "env": {++ "enum": [++ "sandbox",++ "production"++ ]++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80++ },++ "why": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 300++ },++ "steps": {++ "type": "array",++ "minItems": 1,++ "maxItems": 5,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "event_type",++ "count",++ "label"++ ],++ "properties": {++ "event_type": {++ "type": "string",++ "pattern": "^app\\.p[0-9a-z]{26}\\.[a-z0-9_]+(\\.[a-z0-9_]+){0,3}$",++ "description": "One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events."++ },++ "count": {++ "type": "integer",++ "minimum": 1,++ "maximum": 1000++ },++ "label": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ }++ }++ }++ },++ "badge": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "name"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "name": {++ "type": "string",++ "minLength": 1,++ "maxLength": 40++ }++ }++ },++ "url": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 500++ },++ "status": {++ "enum": [++ "active",++ "retired"++ ]++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "completions": {++ "type": "integer",++ "minimum": 0++ }++ }++}nnew file mode 100644@@@ -0,0 +1,14 @@++{++ "title": "Paid",++ "steps": [++ {++ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.x",++ "count": 1,++ "label": "x"++ }++ ],++ "badge": {++ "name": "x"++ },++ "coins": 50++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "title": "Go live",++ "steps": [++ {++ "event_type": "live.stream.started",++ "count": 1,++ "label": "Go live"++ }++ ],++ "badge": {++ "name": "Live"++ }++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "title": "Nothing",++ "steps": [],++ "badge": {++ "name": "x"++ }++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "title": "Collector",++ "why": "Find all five gems.",++ "steps": [++ {++ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.gem.found",++ "count": 5,++ "label": "Find a gem"++ },++ {++ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.level_completed",++ "count": 2,++ "label": "Finish two levels"++ }++ ],++ "badge": {++ "name": "Gem Collector"++ },++ "url": "https://example.com/play",++ "status": "active"++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "title": "Beat the first level",++ "steps": [++ {++ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.level_completed",++ "count": 1,++ "label": "Finish level one"++ }++ ],++ "badge": {++ "name": "Level One"++ }++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "id": "live.collector",++ "slug": "collector",++ "project_id": "prj_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "app": "app:app_01JAB2C3D4E5F6G7H8J9K0MNPR",++ "env": "production",++ "title": "Collector",++ "why": null,++ "steps": [++ {++ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.gem.found",++ "count": 5,++ "label": "Find a gem"++ }++ ],++ "badge": {++ "id": "x",++ "name": "x"++ },++ "url": null,++ "status": "active",++ "created_at": "2026-10-15T22:00:00.000Z",++ "updated_at": "2026-10-15T22:00:00.000Z",++ "completions": 0++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "id": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.collector",++ "slug": "collector",++ "project_id": "prj_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "app": "app:app_01JAB2C3D4E5F6G7H8J9K0MNPR",++ "env": "production",++ "title": "Collector",++ "why": null,++ "steps": [++ {++ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.gem.found",++ "count": 5,++ "label": "Find a gem"++ }++ ],++ "badge": {++ "id": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.collector",++ "name": "Gem Collector"++ },++ "url": null,++ "status": "active",++ "created_at": "2026-10-15T22:00:00.000Z",++ "updated_at": "2026-10-15T22:00:00.000Z",++ "completions": 0++}@@@ -81818,6 +81818,232 @@}}}++ },++ "quest.app-quest-request": {++ "version": "1.0.0",++ "owner": "quest",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/app-quest-request.v1.json",++ "title": "QuestAppQuestRequest",++ "description": "quest.app-quest-request@1: PUT /api/v1/app-quests/:slug on OpenVibe.Quest with an app token (capability quest.app_quest.manage). A developer app defines a quest on its own project's events: each step counts events of type app.<project_key>.<name> whose envelope actor is a person (the app publishing on_behalf_of them). The badge is the only reward: app quests never pay OpenCoins. Only production apps' events are counted (Events never hands sandbox events to first-party consumers).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "title",++ "steps",++ "badge"++ ],++ "properties": {++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80++ },++ "why": {++ "type": "string",++ "maxLength": 300++ },++ "steps": {++ "type": "array",++ "minItems": 1,++ "maxItems": 5,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "event_type",++ "count",++ "label"++ ],++ "properties": {++ "event_type": {++ "type": "string",++ "pattern": "^app\\.p[0-9a-z]{26}\\.[a-z0-9_]+(\\.[a-z0-9_]+){0,3}$",++ "description": "One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events."++ },++ "count": {++ "type": "integer",++ "minimum": 1,++ "maximum": 1000++ },++ "label": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ }++ }++ }++ },++ "badge": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "name"++ ],++ "properties": {++ "name": {++ "type": "string",++ "minLength": 1,++ "maxLength": 40++ }++ }++ },++ "url": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 500,++ "description": "Where a person does the steps: the app's own page."++ },++ "status": {++ "enum": [++ "active",++ "retired"++ ],++ "description": "retired: kept with its completions and badges, no longer counted or listed. Default active."++ }++ }++ }++ },++ "quest.app-quest": {++ "version": "1.0.0",++ "owner": "quest",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/app-quest.v1.json",++ "title": "QuestAppQuest",++ "description": "quest.app-quest@1: one app quest as OpenVibe.Quest keeps it (the answer to PUT and GET /api/v1/app-quests[/:slug]). id is app.<project_key>.<slug>; badge.id is the same id; completions counts the people who finished it.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "slug",++ "project_id",++ "app",++ "env",++ "title",++ "steps",++ "badge",++ "status",++ "created_at",++ "updated_at",++ "completions"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^app\\.p[0-9a-z]{26}\\.[a-z0-9][a-z0-9-]{0,47}$"++ },++ "slug": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9-]{0,47}$"++ },++ "project_id": {++ "type": "string",++ "pattern": "^prj_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "app": {++ "type": "string",++ "pattern": "^app:app_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The app that last defined it."++ },++ "env": {++ "enum": [++ "sandbox",++ "production"++ ]++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80++ },++ "why": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 300++ },++ "steps": {++ "type": "array",++ "minItems": 1,++ "maxItems": 5,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "event_type",++ "count",++ "label"++ ],++ "properties": {++ "event_type": {++ "type": "string",++ "pattern": "^app\\.p[0-9a-z]{26}\\.[a-z0-9_]+(\\.[a-z0-9_]+){0,3}$",++ "description": "One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events."++ },++ "count": {++ "type": "integer",++ "minimum": 1,++ "maximum": 1000++ },++ "label": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ }++ }++ }++ },++ "badge": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "name"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "name": {++ "type": "string",++ "minLength": 1,++ "maxLength": 40++ }++ }++ },++ "url": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 500++ },++ "status": {++ "enum": [++ "active",++ "retired"++ ]++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "completions": {++ "type": "integer",++ "minimum": 0++ }++ }++ }}}}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.192.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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"@@@ -155,6 +155,13 @@"operations": 5,"capabilities": 3},++ {++ "service": "quest",++ "name": "OpenVibe.Quest",++ "origin": "https://openvibe.quest",++ "operations": 3,++ "capabilities": 1++ },{"service": "reviews","name": "OpenVibe.Reviews",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Inventory API",-- "version": "0.192.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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"@@@ -197128,3 +197128,319 @@ export interface AccessKeyList {*/keys: AccessKey[];}++++/** [email protected] (owner: quest) */++/**++ * quest.app-quest-request@1: PUT /api/v1/app-quests/:slug on OpenVibe.Quest with an app token (capability quest.app_quest.manage). A developer app defines a quest on its own project's events: each step counts events of type app.<project_key>.<name> whose envelope actor is a person (the app publishing on_behalf_of them). The badge is the only reward: app quests never pay OpenCoins. Only production apps' events are counted (Events never hands sandbox events to first-party consumers).++ */++export interface QuestAppQuestRequest {++ title: string;++ why?: string;++ /**++ * @minItems 1++ * @maxItems 5++ */++ steps:++ | [++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ }++ ]++ | [++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ }++ ]++ | [++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ }++ ]++ | [++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ }++ ]++ | [++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ }++ ];++ badge: {++ name: string;++ };++ /**++ * Where a person does the steps: the app's own page.++ */++ url?: string;++ /**++ * retired: kept with its completions and badges, no longer counted or listed. Default active.++ */++ status?: "active" | "retired";++}++++/** [email protected] (owner: quest) */++/**++ * quest.app-quest@1: one app quest as OpenVibe.Quest keeps it (the answer to PUT and GET /api/v1/app-quests[/:slug]). id is app.<project_key>.<slug>; badge.id is the same id; completions counts the people who finished it.++ */++export interface QuestAppQuest {++ id: string;++ slug: string;++ project_id: string;++ /**++ * The app that last defined it.++ */++ app: string;++ env: "sandbox" | "production";++ title: string;++ why?: string | null;++ /**++ * @minItems 1++ * @maxItems 5++ */++ steps:++ | [++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ }++ ]++ | [++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ }++ ]++ | [++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ }++ ]++ | [++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ }++ ]++ | [++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ },++ {++ /**++ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.++ */++ event_type: string;++ count: number;++ label: string;++ }++ ];++ badge: {++ id: string;++ name: string;++ };++ url?: string | null;++ status: "active" | "retired";++ created_at: string;++ updated_at: string;++ completions: number;++}nnew file mode 100644@@@ -0,0 +1,23 @@++{++ "id": "quest.app_quest.manage",++ "version": "1.0",++ "owner": "quest",++ "status": "active",++ "visibility": "public",++ "description": "Define your app's own quests on OpenVibe.Quest (the SDK's moddable quests): PUT /api/v1/app-quests/:slug with quest.app-quest-request@1 creates or replaces one (at most 20 per project), GET /api/v1/app-quests lists your project's, DELETE /api/v1/app-quests/:slug retires one (its completions and badges stay). Steps count the project's own events app.<project_key>.<name> at OpenVibe.Events whose actor is a person; only production events count. The reward is a badge named for your app; app quests never pay OpenCoins.",++ "inputSchema": "quest.app-quest-request@1",++ "outputSchema": "quest.app-quest@1",++ "permissions": [++ "quest:app-quests:write"++ ],++ "resourceConstraints": [++ "project"++ ],++ "quotaClass": "quest-app-write",++ "events": [],++ "implementedBy": [++ "PUT /api/v1/app-quests/:slug",++ "GET /api/v1/app-quests",++ "DELETE /api/v1/app-quests/:slug"++ ]++}@@@ -15,7 +15,9 @@"state": "live","publicSite": "service"},-- "capabilities": [],++ "capabilities": [++ "quest.app_quest.manage"++ ],"eventsProduced": ["quest.index_document.upserted","quest.index_document.deleted"@@@ -1,12 +1,12 @@{"name": "openvibe-contracts",-- "version": "0.192.0",++ "version": "0.193.0","lockfileVersion": 3,"requires": true,"packages": {"": {"name": "openvibe-contracts",-- "version": "0.192.0",++ "version": "0.193.0","license": "AGPL-3.0-only","dependencies": {"ajv": "^8.17.1",@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.192.0",++ "version": "0.193.0","description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.","main": "index.js","types": "generated/typescript/index.d.ts",
@@ -4,6 +4,13 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
@@ -4,6 +4,13 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
the notes were in the tag and commit messages (`git tag -n1`).
the notes were in the tag and commit messages (`git tag -n1`).
+## 0.193.0 — 2026-10-15
+
+- **App quests** (the owner's "moddable in the SDK" for Quest): capability `quest.app_quest.manage` (owner quest,
+ public, project-scoped) and `quest.app-quest-request@1` / `quest.app-quest@1`. A developer app defines quests on its
+ own project's events (`app.<project_key>.<name>`, the actor a person); OpenVibe.Quest counts production events only,
+ keeps at most 20 per project, and rewards a badge named for the app — never OpenCoins.
+
## 0.192.0 — 2026-10-15
## 0.192.0 — 2026-10-15
- **`bot.robot.online` / `bot.robot.offline`** gain an optional `owner` (the robot owner's `usr_` subject; absent from
- **`bot.robot.online` / `bot.robot.offline`** gain an optional `owner` (the robot owner's `usr_` subject; absent from
@@ -7323,6 +7323,24 @@
@@ -7323,6 +7323,24 @@
"compatibility": "backward",
"compatibility": "backward",
"status": "active",
"status": "active",
"adr": "ADR-031"
"adr": "ADR-031"
+ },
+ {
+ "id": "quest.app-quest-request",
+ "version": "1.0.0",
+ "owner": "quest",
+ "schema": "quest/app-quest-request.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "quest.app-quest",
+ "version": "1.0.0",
+ "owner": "quest",
+ "schema": "quest/app-quest.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
}
}
]
]
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,83 @@
@@ -0,0 +1,83 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/app-quest-request.v1.json",
+ "title": "QuestAppQuestRequest",
+ "description": "quest.app-quest-request@1: PUT /api/v1/app-quests/:slug on OpenVibe.Quest with an app token (capability quest.app_quest.manage). A developer app defines a quest on its own project's events: each step counts events of type app.<project_key>.<name> whose envelope actor is a person (the app publishing on_behalf_of them). The badge is the only reward: app quests never pay OpenCoins. Only production apps' events are counted (Events never hands sandbox events to first-party consumers).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "title",
+ "steps",
+ "badge"
+ ],
+ "properties": {
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "why": {
+ "type": "string",
+ "maxLength": 300
+ },
+ "steps": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 5,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "event_type",
+ "count",
+ "label"
+ ],
+ "properties": {
+ "event_type": {
+ "type": "string",
+ "pattern": "^app\\.p[0-9a-z]{26}\\.[a-z0-9_]+(\\.[a-z0-9_]+){0,3}$",
+ "description": "One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events."
+ },
+ "count": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 1000
+ },
+ "label": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ }
+ }
+ }
+ },
+ "badge": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 40
+ }
+ }
+ },
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 500,
+ "description": "Where a person does the steps: the app's own page."
+ },
+ "status": {
+ "enum": [
+ "active",
+ "retired"
+ ],
+ "description": "retired: kept with its completions and badges, no longer counted or listed. Default active."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,133 @@
@@ -0,0 +1,133 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/app-quest.v1.json",
+ "title": "QuestAppQuest",
+ "description": "quest.app-quest@1: one app quest as OpenVibe.Quest keeps it (the answer to PUT and GET /api/v1/app-quests[/:slug]). id is app.<project_key>.<slug>; badge.id is the same id; completions counts the people who finished it.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "slug",
+ "project_id",
+ "app",
+ "env",
+ "title",
+ "steps",
+ "badge",
+ "status",
+ "created_at",
+ "updated_at",
+ "completions"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^app\\.p[0-9a-z]{26}\\.[a-z0-9][a-z0-9-]{0,47}$"
+ },
+ "slug": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9-]{0,47}$"
+ },
+ "project_id": {
+ "type": "string",
+ "pattern": "^prj_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "app": {
+ "type": "string",
+ "pattern": "^app:app_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The app that last defined it."
+ },
+ "env": {
+ "enum": [
+ "sandbox",
+ "production"
+ ]
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "why": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 300
+ },
+ "steps": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 5,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "event_type",
+ "count",
+ "label"
+ ],
+ "properties": {
+ "event_type": {
+ "type": "string",
+ "pattern": "^app\\.p[0-9a-z]{26}\\.[a-z0-9_]+(\\.[a-z0-9_]+){0,3}$",
+ "description": "One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events."
+ },
+ "count": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 1000
+ },
+ "label": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ }
+ }
+ }
+ },
+ "badge": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "name"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 40
+ }
+ }
+ },
+ "url": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 500
+ },
+ "status": {
+ "enum": [
+ "active",
+ "retired"
+ ]
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "completions": {
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
+{
+ "title": "Paid",
+ "steps": [
+ {
+ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.x",
+ "count": 1,
+ "label": "x"
+ }
+ ],
+ "badge": {
+ "name": "x"
+ },
+ "coins": 50
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "title": "Go live",
+ "steps": [
+ {
+ "event_type": "live.stream.started",
+ "count": 1,
+ "label": "Go live"
+ }
+ ],
+ "badge": {
+ "name": "Live"
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "title": "Nothing",
+ "steps": [],
+ "badge": {
+ "name": "x"
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "title": "Collector",
+ "why": "Find all five gems.",
+ "steps": [
+ {
+ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.gem.found",
+ "count": 5,
+ "label": "Find a gem"
+ },
+ {
+ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.level_completed",
+ "count": 2,
+ "label": "Finish two levels"
+ }
+ ],
+ "badge": {
+ "name": "Gem Collector"
+ },
+ "url": "https://example.com/play",
+ "status": "active"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "title": "Beat the first level",
+ "steps": [
+ {
+ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.level_completed",
+ "count": 1,
+ "label": "Finish level one"
+ }
+ ],
+ "badge": {
+ "name": "Level One"
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "id": "live.collector",
+ "slug": "collector",
+ "project_id": "prj_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "app": "app:app_01JAB2C3D4E5F6G7H8J9K0MNPR",
+ "env": "production",
+ "title": "Collector",
+ "why": null,
+ "steps": [
+ {
+ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.gem.found",
+ "count": 5,
+ "label": "Find a gem"
+ }
+ ],
+ "badge": {
+ "id": "x",
+ "name": "x"
+ },
+ "url": null,
+ "status": "active",
+ "created_at": "2026-10-15T22:00:00.000Z",
+ "updated_at": "2026-10-15T22:00:00.000Z",
+ "completions": 0
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "id": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.collector",
+ "slug": "collector",
+ "project_id": "prj_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "app": "app:app_01JAB2C3D4E5F6G7H8J9K0MNPR",
+ "env": "production",
+ "title": "Collector",
+ "why": null,
+ "steps": [
+ {
+ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.gem.found",
+ "count": 5,
+ "label": "Find a gem"
+ }
+ ],
+ "badge": {
+ "id": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.collector",
+ "name": "Gem Collector"
+ },
+ "url": null,
+ "status": "active",
+ "created_at": "2026-10-15T22:00:00.000Z",
+ "updated_at": "2026-10-15T22:00:00.000Z",
+ "completions": 0
+}
@@ -81818,6 +81818,232 @@
@@ -81818,6 +81818,232 @@
}
}
}
}
}
}
+ },
+ "quest.app-quest-request": {
+ "version": "1.0.0",
+ "owner": "quest",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/app-quest-request.v1.json",
+ "title": "QuestAppQuestRequest",
+ "description": "quest.app-quest-request@1: PUT /api/v1/app-quests/:slug on OpenVibe.Quest with an app token (capability quest.app_quest.manage). A developer app defines a quest on its own project's events: each step counts events of type app.<project_key>.<name> whose envelope actor is a person (the app publishing on_behalf_of them). The badge is the only reward: app quests never pay OpenCoins. Only production apps' events are counted (Events never hands sandbox events to first-party consumers).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "title",
+ "steps",
+ "badge"
+ ],
+ "properties": {
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "why": {
+ "type": "string",
+ "maxLength": 300
+ },
+ "steps": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 5,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "event_type",
+ "count",
+ "label"
+ ],
+ "properties": {
+ "event_type": {
+ "type": "string",
+ "pattern": "^app\\.p[0-9a-z]{26}\\.[a-z0-9_]+(\\.[a-z0-9_]+){0,3}$",
+ "description": "One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events."
+ },
+ "count": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 1000
+ },
+ "label": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ }
+ }
+ }
+ },
+ "badge": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 40
+ }
+ }
+ },
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 500,
+ "description": "Where a person does the steps: the app's own page."
+ },
+ "status": {
+ "enum": [
+ "active",
+ "retired"
+ ],
+ "description": "retired: kept with its completions and badges, no longer counted or listed. Default active."
+ }
+ }
+ }
+ },
+ "quest.app-quest": {
+ "version": "1.0.0",
+ "owner": "quest",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/app-quest.v1.json",
+ "title": "QuestAppQuest",
+ "description": "quest.app-quest@1: one app quest as OpenVibe.Quest keeps it (the answer to PUT and GET /api/v1/app-quests[/:slug]). id is app.<project_key>.<slug>; badge.id is the same id; completions counts the people who finished it.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "slug",
+ "project_id",
+ "app",
+ "env",
+ "title",
+ "steps",
+ "badge",
+ "status",
+ "created_at",
+ "updated_at",
+ "completions"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^app\\.p[0-9a-z]{26}\\.[a-z0-9][a-z0-9-]{0,47}$"
+ },
+ "slug": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9-]{0,47}$"
+ },
+ "project_id": {
+ "type": "string",
+ "pattern": "^prj_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "app": {
+ "type": "string",
+ "pattern": "^app:app_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The app that last defined it."
+ },
+ "env": {
+ "enum": [
+ "sandbox",
+ "production"
+ ]
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "why": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 300
+ },
+ "steps": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 5,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "event_type",
+ "count",
+ "label"
+ ],
+ "properties": {
+ "event_type": {
+ "type": "string",
+ "pattern": "^app\\.p[0-9a-z]{26}\\.[a-z0-9_]+(\\.[a-z0-9_]+){0,3}$",
+ "description": "One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events."
+ },
+ "count": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 1000
+ },
+ "label": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ }
+ }
+ }
+ },
+ "badge": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "name"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 40
+ }
+ }
+ },
+ "url": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 500
+ },
+ "status": {
+ "enum": [
+ "active",
+ "retired"
+ ]
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "completions": {
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ }
}
}
}
}
}
}
@@ -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.192.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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"
@@ -155,6 +155,13 @@
@@ -155,6 +155,13 @@
"operations": 5,
"operations": 5,
"capabilities": 3
"capabilities": 3
},
},
+ {
+ "service": "quest",
+ "name": "OpenVibe.Quest",
+ "origin": "https://openvibe.quest",
+ "operations": 3,
+ "capabilities": 1
+ },
{
{
"service": "reviews",
"service": "reviews",
"name": "OpenVibe.Reviews",
"name": "OpenVibe.Reviews",
@@ -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.192.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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.192.0",
- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.192.0): each operation lists the capabilities it performs; a token for 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.193.0",
+ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.193.0): each operation lists the capabilities it performs; a token for 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"
@@ -197128,3 +197128,319 @@ export interface AccessKeyList {
@@ -197128,3 +197128,319 @@ export interface AccessKeyList {
*/
*/
keys: AccessKey[];
keys: AccessKey[];
}
}
+
+/** [email protected] (owner: quest) */
+/**
+ * quest.app-quest-request@1: PUT /api/v1/app-quests/:slug on OpenVibe.Quest with an app token (capability quest.app_quest.manage). A developer app defines a quest on its own project's events: each step counts events of type app.<project_key>.<name> whose envelope actor is a person (the app publishing on_behalf_of them). The badge is the only reward: app quests never pay OpenCoins. Only production apps' events are counted (Events never hands sandbox events to first-party consumers).
+ */
+export interface QuestAppQuestRequest {
+ title: string;
+ why?: string;
+ /**
+ * @minItems 1
+ * @maxItems 5
+ */
+ steps:
+ | [
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ }
+ ]
+ | [
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ }
+ ]
+ | [
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ }
+ ]
+ | [
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ }
+ ]
+ | [
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ }
+ ];
+ badge: {
+ name: string;
+ };
+ /**
+ * Where a person does the steps: the app's own page.
+ */
+ url?: string;
+ /**
+ * retired: kept with its completions and badges, no longer counted or listed. Default active.
+ */
+ status?: "active" | "retired";
+}
+
+/** [email protected] (owner: quest) */
+/**
+ * quest.app-quest@1: one app quest as OpenVibe.Quest keeps it (the answer to PUT and GET /api/v1/app-quests[/:slug]). id is app.<project_key>.<slug>; badge.id is the same id; completions counts the people who finished it.
+ */
+export interface QuestAppQuest {
+ id: string;
+ slug: string;
+ project_id: string;
+ /**
+ * The app that last defined it.
+ */
+ app: string;
+ env: "sandbox" | "production";
+ title: string;
+ why?: string | null;
+ /**
+ * @minItems 1
+ * @maxItems 5
+ */
+ steps:
+ | [
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ }
+ ]
+ | [
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ }
+ ]
+ | [
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ }
+ ]
+ | [
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ }
+ ]
+ | [
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ },
+ {
+ /**
+ * One of the app's own event types (app.<project_key>.<name>), as it publishes them at OpenVibe.Events.
+ */
+ event_type: string;
+ count: number;
+ label: string;
+ }
+ ];
+ badge: {
+ id: string;
+ name: string;
+ };
+ url?: string | null;
+ status: "active" | "retired";
+ created_at: string;
+ updated_at: string;
+ completions: number;
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
+{
+ "id": "quest.app_quest.manage",
+ "version": "1.0",
+ "owner": "quest",
+ "status": "active",
+ "visibility": "public",
+ "description": "Define your app's own quests on OpenVibe.Quest (the SDK's moddable quests): PUT /api/v1/app-quests/:slug with quest.app-quest-request@1 creates or replaces one (at most 20 per project), GET /api/v1/app-quests lists your project's, DELETE /api/v1/app-quests/:slug retires one (its completions and badges stay). Steps count the project's own events app.<project_key>.<name> at OpenVibe.Events whose actor is a person; only production events count. The reward is a badge named for your app; app quests never pay OpenCoins.",
+ "inputSchema": "quest.app-quest-request@1",
+ "outputSchema": "quest.app-quest@1",
+ "permissions": [
+ "quest:app-quests:write"
+ ],
+ "resourceConstraints": [
+ "project"
+ ],
+ "quotaClass": "quest-app-write",
+ "events": [],
+ "implementedBy": [
+ "PUT /api/v1/app-quests/:slug",
+ "GET /api/v1/app-quests",
+ "DELETE /api/v1/app-quests/:slug"
+ ]
+}
@@ -15,7 +15,9 @@
@@ -15,7 +15,9 @@
"state": "live",
"state": "live",
"publicSite": "service"
"publicSite": "service"
},
},
- "capabilities": [],
+ "capabilities": [
+ "quest.app_quest.manage"
+ ],
"eventsProduced": [
"eventsProduced": [
"quest.index_document.upserted",
"quest.index_document.upserted",
"quest.index_document.deleted"
"quest.index_document.deleted"
@@ -1,12 +1,12 @@
@@ -1,12 +1,12 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.192.0",
+ "version": "0.193.0",
"lockfileVersion": 3,
"lockfileVersion": 3,
"requires": true,
"requires": true,
"packages": {
"packages": {
"": {
"": {
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.192.0",
+ "version": "0.193.0",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.192.0",
+ "version": "0.193.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",