openvibers/openvibe.contracts Commits

Contracts 0.193.0: app quests (#159)

OP OpenVibers committed 29 days ago · b73b9ded67 · 54 files, +1009 −76

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 6a68b362..8cbe374d 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -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,
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
ddiff --git a/contracts/catalog.json b/contracts/catalog.json
iindex 823e73d1..f1afba12 100644
---- a/contracts/catalog.json
++++ b/contracts/catalog.json
@@@ -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"
}
]
}
ddiff --git a/contracts/quest/app-quest-request.v1.json b/contracts/quest/app-quest-request.v1.json
nnew file mode 100644
iindex 00000000..c338836f
---- /dev/null
++++ b/contracts/quest/app-quest-request.v1.json
@@@ -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."
++ }
++ }
++}
ddiff --git a/contracts/quest/app-quest.v1.json b/contracts/quest/app-quest.v1.json
nnew file mode 100644
iindex 00000000..f3f9929c
---- /dev/null
++++ b/contracts/quest/app-quest.v1.json
@@@ -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
++ }
++ }
++}
ddiff --git a/fixtures/quest.app-quest-request/invalid/coins.json b/fixtures/quest.app-quest-request/invalid/coins.json
nnew file mode 100644
iindex 00000000..b4ad3e3f
---- /dev/null
++++ b/fixtures/quest.app-quest-request/invalid/coins.json
@@@ -0,0 +1,14 @@
++{
++ "title": "Paid",
++ "steps": [
++ {
++ "event_type": "app.p01jab2c3d4e5f6g7h8j9k0mnpq.x",
++ "count": 1,
++ "label": "x"
++ }
++ ],
++ "badge": {
++ "name": "x"
++ },
++ "coins": 50
++}
ddiff --git a/fixtures/quest.app-quest-request/invalid/first-party-event.json b/fixtures/quest.app-quest-request/invalid/first-party-event.json
nnew file mode 100644
iindex 00000000..861d1756
---- /dev/null
++++ b/fixtures/quest.app-quest-request/invalid/first-party-event.json
@@@ -0,0 +1,13 @@
++{
++ "title": "Go live",
++ "steps": [
++ {
++ "event_type": "live.stream.started",
++ "count": 1,
++ "label": "Go live"
++ }
++ ],
++ "badge": {
++ "name": "Live"
++ }
++}
ddiff --git a/fixtures/quest.app-quest-request/invalid/no-steps.json b/fixtures/quest.app-quest-request/invalid/no-steps.json
nnew file mode 100644
iindex 00000000..23e89a66
---- /dev/null
++++ b/fixtures/quest.app-quest-request/invalid/no-steps.json
@@@ -0,0 +1,7 @@
++{
++ "title": "Nothing",
++ "steps": [],
++ "badge": {
++ "name": "x"
++ }
++}
ddiff --git a/fixtures/quest.app-quest-request/valid/full.json b/fixtures/quest.app-quest-request/valid/full.json
nnew file mode 100644
iindex 00000000..31bc23fe
---- /dev/null
++++ b/fixtures/quest.app-quest-request/valid/full.json
@@@ -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"
++}
ddiff --git a/fixtures/quest.app-quest-request/valid/minimal.json b/fixtures/quest.app-quest-request/valid/minimal.json
nnew file mode 100644
iindex 00000000..fe9b3fd0
---- /dev/null
++++ b/fixtures/quest.app-quest-request/valid/minimal.json
@@@ -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"
++ }
++}
ddiff --git a/fixtures/quest.app-quest/invalid/bad-id.json b/fixtures/quest.app-quest/invalid/bad-id.json
nnew file mode 100644
iindex 00000000..330ac9ae
---- /dev/null
++++ b/fixtures/quest.app-quest/invalid/bad-id.json
@@@ -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
++}
ddiff --git a/fixtures/quest.app-quest/valid/one.json b/fixtures/quest.app-quest/valid/one.json
nnew file mode 100644
iindex 00000000..aa3b3f55
---- /dev/null
++++ b/fixtures/quest.app-quest/valid/one.json
@@@ -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
++}
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex 57531d92..9c9c29db 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -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
++ }
++ }
++ }
}
}
}
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex f3a4601b..758ad0f2 100644
---- a/generated/openapi/actor.json
++++ b/generated/openapi/actor.json
@@@ -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"
ddiff --git a/generated/openapi/ai.json b/generated/openapi/ai.json
iindex 74f4cf9c..4a8cb7dc 100644
---- a/generated/openapi/ai.json
++++ b/generated/openapi/ai.json
@@@ -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"
ddiff --git a/generated/openapi/billing.json b/generated/openapi/billing.json
iindex ae6966aa..9909f5f7 100644
---- a/generated/openapi/billing.json
++++ b/generated/openapi/billing.json
@@@ -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"
ddiff --git a/generated/openapi/blog.json b/generated/openapi/blog.json
iindex 1a3f6a04..38e0c64c 100644
---- a/generated/openapi/blog.json
++++ b/generated/openapi/blog.json
@@@ -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"
ddiff --git a/generated/openapi/bot.json b/generated/openapi/bot.json
iindex e055e4eb..20d546df 100644
---- a/generated/openapi/bot.json
++++ b/generated/openapi/bot.json
@@@ -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"
ddiff --git a/generated/openapi/chat.json b/generated/openapi/chat.json
iindex 563eba9a..cc26a384 100644
---- a/generated/openapi/chat.json
++++ b/generated/openapi/chat.json
@@@ -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"
ddiff --git a/generated/openapi/codes.json b/generated/openapi/codes.json
iindex a0cbe229..a719ea58 100644
---- a/generated/openapi/codes.json
++++ b/generated/openapi/codes.json
@@@ -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"
ddiff --git a/generated/openapi/community.json b/generated/openapi/community.json
iindex ffdd2d14..7eead640 100644
---- a/generated/openapi/community.json
++++ b/generated/openapi/community.json
@@@ -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"
ddiff --git a/generated/openapi/coupons.json b/generated/openapi/coupons.json
iindex d6c2ea8c..1a6a5d3b 100644
---- a/generated/openapi/coupons.json
++++ b/generated/openapi/coupons.json
@@@ -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"
ddiff --git a/generated/openapi/deals.json b/generated/openapi/deals.json
iindex 7cf6fc5b..b5eec5ac 100644
---- a/generated/openapi/deals.json
++++ b/generated/openapi/deals.json
@@@ -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"
ddiff --git a/generated/openapi/events.json b/generated/openapi/events.json
iindex c5c1284f..9c5413ad 100644
---- a/generated/openapi/events.json
++++ b/generated/openapi/events.json
@@@ -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"
ddiff --git a/generated/openapi/food.json b/generated/openapi/food.json
iindex f31d8263..4af6295c 100644
---- a/generated/openapi/food.json
++++ b/generated/openapi/food.json
@@@ -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"
ddiff --git a/generated/openapi/games.json b/generated/openapi/games.json
iindex 667d318c..635f4f60 100644
---- a/generated/openapi/games.json
++++ b/generated/openapi/games.json
@@@ -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"
ddiff --git a/generated/openapi/host.json b/generated/openapi/host.json
iindex 99e4d630..041aa19a 100644
---- a/generated/openapi/host.json
++++ b/generated/openapi/host.json
@@@ -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"
ddiff --git a/generated/openapi/index.json b/generated/openapi/index.json
iindex 71fc1ff0..eba76438 100644
---- a/generated/openapi/index.json
++++ b/generated/openapi/index.json
@@@ -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",
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex 9463bee7..1a1d9b3b 100644
---- a/generated/openapi/inventory.json
++++ b/generated/openapi/inventory.json
@@@ -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"
ddiff --git a/generated/openapi/live.json b/generated/openapi/live.json
iindex 4c08181e..1a277421 100644
---- a/generated/openapi/live.json
++++ b/generated/openapi/live.json
@@@ -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"
ddiff --git a/generated/openapi/media-hub.json b/generated/openapi/media-hub.json
iindex 918314a8..ba14ef1b 100644
---- a/generated/openapi/media-hub.json
++++ b/generated/openapi/media-hub.json
@@@ -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"
ddiff --git a/generated/openapi/media.json b/generated/openapi/media.json
iindex a2646b1b..04dc61c2 100644
---- a/generated/openapi/media.json
++++ b/generated/openapi/media.json
@@@ -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"
ddiff --git a/generated/openapi/network.json b/generated/openapi/network.json
iindex b6786f1c..98eaa3ec 100644
---- a/generated/openapi/network.json
++++ b/generated/openapi/network.json
@@@ -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"
ddiff --git a/generated/openapi/news.json b/generated/openapi/news.json
iindex f6261ead..2b71cb0f 100644
---- a/generated/openapi/news.json
++++ b/generated/openapi/news.json
@@@ -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"
ddiff --git a/generated/openapi/openre.json b/generated/openapi/openre.json
iindex 65df1e1b..56182a05 100644
---- a/generated/openapi/openre.json
++++ b/generated/openapi/openre.json
@@@ -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"
ddiff --git a/generated/openapi/play.json b/generated/openapi/play.json
iindex 82b6a818..5ae0298b 100644
---- a/generated/openapi/play.json
++++ b/generated/openapi/play.json
@@@ -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"
ddiff --git a/generated/openapi/reviews.json b/generated/openapi/reviews.json
iindex e9ed7f0c..361fff29 100644
---- a/generated/openapi/reviews.json
++++ b/generated/openapi/reviews.json
@@@ -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"
ddiff --git a/generated/openapi/run.json b/generated/openapi/run.json
iindex 04e1cb5a..0ceb7320 100644
---- a/generated/openapi/run.json
++++ b/generated/openapi/run.json
@@@ -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"
ddiff --git a/generated/openapi/search.json b/generated/openapi/search.json
iindex 7ac2fa2d..583f6873 100644
---- a/generated/openapi/search.json
++++ b/generated/openapi/search.json
@@@ -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"
ddiff --git a/generated/openapi/services.json b/generated/openapi/services.json
iindex 6bd07076..d97f8375 100644
---- a/generated/openapi/services.json
++++ b/generated/openapi/services.json
@@@ -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"
ddiff --git a/generated/openapi/sources.json b/generated/openapi/sources.json
iindex 32f846c8..b7c2f9aa 100644
---- a/generated/openapi/sources.json
++++ b/generated/openapi/sources.json
@@@ -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"
ddiff --git a/generated/openapi/space.json b/generated/openapi/space.json
iindex f47e5d26..dc8501bd 100644
---- a/generated/openapi/space.json
++++ b/generated/openapi/space.json
@@@ -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"
ddiff --git a/generated/openapi/tips.json b/generated/openapi/tips.json
iindex 0576b3ed..1692c14e 100644
---- a/generated/openapi/tips.json
++++ b/generated/openapi/tips.json
@@@ -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"
ddiff --git a/generated/openapi/tools.json b/generated/openapi/tools.json
iindex b35499c4..22922055 100644
---- a/generated/openapi/tools.json
++++ b/generated/openapi/tools.json
@@@ -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"
ddiff --git a/generated/openapi/trade.json b/generated/openapi/trade.json
iindex 08240f62..1ebce739 100644
---- a/generated/openapi/trade.json
++++ b/generated/openapi/trade.json
@@@ -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"
ddiff --git a/generated/openapi/vip.json b/generated/openapi/vip.json
iindex ee55316b..aa7fc559 100644
---- a/generated/openapi/vip.json
++++ b/generated/openapi/vip.json
@@@ -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"
ddiff --git a/generated/openapi/watch.json b/generated/openapi/watch.json
iindex c34473ae..23bfa6cf 100644
---- a/generated/openapi/watch.json
++++ b/generated/openapi/watch.json
@@@ -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"
ddiff --git a/generated/openapi/wiki.json b/generated/openapi/wiki.json
iindex 57a2a501..8bab6b85 100644
---- a/generated/openapi/wiki.json
++++ b/generated/openapi/wiki.json
@@@ -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"
ddiff --git a/generated/openapi/work.json b/generated/openapi/work.json
iindex 43027391..028a00cd 100644
---- a/generated/openapi/work.json
++++ b/generated/openapi/work.json
@@@ -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"
ddiff --git a/generated/openapi/zone.json b/generated/openapi/zone.json
iindex ea4af49c..ea0d7f83 100644
---- a/generated/openapi/zone.json
++++ b/generated/openapi/zone.json
@@@ -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"
ddiff --git a/generated/typescript/index.d.ts b/generated/typescript/index.d.ts
iindex 989b3c87..ccc33cc1 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -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;
++}
ddiff --git a/manifests/capabilities/quest.app_quest.manage.json b/manifests/capabilities/quest.app_quest.manage.json
nnew file mode 100644
iindex 00000000..828b4bc4
---- /dev/null
++++ b/manifests/capabilities/quest.app_quest.manage.json
@@@ -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"
++ ]
++}
ddiff --git a/manifests/services/quest.json b/manifests/services/quest.json
iindex 2cdc122b..c563d266 100644
---- a/manifests/services/quest.json
++++ b/manifests/services/quest.json
@@@ -15,7 +15,9 @@
"state": "live",
"publicSite": "service"
},
-- "capabilities": [],
++ "capabilities": [
++ "quest.app_quest.manage"
++ ],
"eventsProduced": [
"quest.index_document.upserted",
"quest.index_document.deleted"
ddiff --git a/package-lock.json b/package-lock.json
iindex 64535928..7867de0c 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -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",
ddiff --git a/package.json b/package.json
iindex a8f2104e..d5bba5d2 100644
---- a/package.json
++++ b/package.json
@@@ -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",