openvibers/openvibe.contracts Commits

OpenVibe.Git's manifest and the git.repo.read / git.repo.write capabilities (#387)

OP OpenVibers committed 4 days ago · f349586e97 · 67 files, +2956 −95

* OpenVibe.Git's manifest and the git.repo.read / git.repo.write capabilities

OpenVibe.Git replaces Forgejo: a site at git.openvibe.codes with bare
repositories on disk served by git's own http-backend, its pages and API,
and service tokens for Codes, Run and Link acting for a person.

The service manifest names its port (5270), lifecycle and site entry;
git.repo.read and git.repo.write are first-party, and
git.access-request@1 / git.access-result@1 are the request and result
both capabilities share, with valid and invalid fixtures.

* 0.373.0: on top of main (The git service: its manifest, git.repo.read and git.repo.wr)

* catalog: main's entries plus the git ones; the merge had kept the renamed network.node entries

0.372.0 renamed the node contracts to link; merging main left network.node, node-report-request,
node-list-result, platform.node-capabilities and network.node.revoked in the catalog with no
schema files. Regenerated.

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex a6dab960..90d1997c 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -1,5 +1,9 @@
# Changelog
++## 0.373.0 — 2026-11-09
++
++- The git service: its manifest, git.repo.read and git.repo.write, git.access-request@1 and git.access-result@1 (OpenVibe.Git)
++
## 0.372.0 — 2026-11-09
- The machine product Node became OpenVibe Link. The network registry contracts are `network.link@1`,
ddiff --git a/contracts/catalog.json b/contracts/catalog.json
iindex d2b71028..8ce332a9 100644
---- a/contracts/catalog.json
++++ b/contracts/catalog.json
@@@ -10836,6 +10836,24 @@
"compatibility": "backward",
"status": "active",
"adr": "ADR-025"
++ },
++ {
++ "id": "git.access-request",
++ "version": "1.0.0",
++ "owner": "git",
++ "schema": "git/access-request.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "git.access-result",
++ "version": "1.0.0",
++ "owner": "git",
++ "schema": "git/access-result.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
}
]
}
ddiff --git a/contracts/git/access-request.v1.json b/contracts/git/access-request.v1.json
nnew file mode 100644
iindex 00000000..936f7d8f
---- /dev/null
++++ b/contracts/git/access-request.v1.json
@@@ -0,0 +1,66 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/git/access-request.v1.json",
++ "title": "GitAccessRequest",
++ "description": "git.access-request@1: the common request of git.read and git.write on OpenVibe.Git. owner and name name the repository at git.openvibe.codes; ref and path pick what is read; branch, message and files describe a contents write without a clone. A service names the person it acts for in X-OV-Subject, not in this body.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "owner",
++ "name"
++ ],
++ "properties": {
++ "owner": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",
++ "description": "The repository owner's lower-case OpenVibe username."
++ },
++ "name": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",
++ "description": "The repository name, lower-case and never ending in .git."
++ },
++ "ref": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "path": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "branch": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "message": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "files": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ }
++ }
++}
ddiff --git a/contracts/git/access-result.v1.json b/contracts/git/access-result.v1.json
nnew file mode 100644
iindex 00000000..7919f8f6
---- /dev/null
++++ b/contracts/git/access-result.v1.json
@@@ -0,0 +1,46 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/git/access-result.v1.json",
++ "title": "GitAccessResult",
++ "description": "git.access-result@1: the common result of git.read and git.write on OpenVibe.Git. A repository names its full name, its page and clone addresses, its visibility and default branch; a contents write or a token also carries the branch or commit it made.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "full_name"
++ ],
++ "properties": {
++ "full_name": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}/[a-z0-9][a-z0-9._-]{0,99}$"
++ },
++ "html_url": {
++ "type": "string",
++ "format": "uri",
++ "pattern": "^https://"
++ },
++ "clone_url": {
++ "type": "string",
++ "format": "uri",
++ "pattern": "^https://"
++ },
++ "visibility": {
++ "type": "string",
++ "enum": [
++ "public",
++ "private"
++ ]
++ },
++ "default_branch": {
++ "type": "string",
++ "maxLength": 255
++ },
++ "branch": {
++ "type": "string",
++ "maxLength": 255
++ },
++ "sha": {
++ "type": "string",
++ "pattern": "^[0-9a-f]{40}([0-9a-f]{24})?$"
++ }
++ }
++}
ddiff --git a/fixtures/git.access-request/invalid/name-carries-a-slash.json b/fixtures/git.access-request/invalid/name-carries-a-slash.json
nnew file mode 100644
iindex 00000000..2bcc5ed6
---- /dev/null
++++ b/fixtures/git.access-request/invalid/name-carries-a-slash.json
@@@ -0,0 +1,4 @@
++{
++ "owner": "ada",
++ "name": "ada/my-site"
++}
\\ No newline at end of file
ddiff --git a/fixtures/git.access-request/invalid/name-missing.json b/fixtures/git.access-request/invalid/name-missing.json
nnew file mode 100644
iindex 00000000..09179b34
---- /dev/null
++++ b/fixtures/git.access-request/invalid/name-missing.json
@@@ -0,0 +1,3 @@
++{
++ "owner": "ada"
++}
\\ No newline at end of file
ddiff --git a/fixtures/git.access-request/valid/read-a-file.json b/fixtures/git.access-request/valid/read-a-file.json
nnew file mode 100644
iindex 00000000..4bd7d7c8
---- /dev/null
++++ b/fixtures/git.access-request/valid/read-a-file.json
@@@ -0,0 +1,6 @@
++{
++ "owner": "ada",
++ "name": "my-site",
++ "ref": "main",
++ "path": "README.md"
++}
\\ No newline at end of file
ddiff --git a/fixtures/git.access-request/valid/write-without-a-clone.json b/fixtures/git.access-request/valid/write-without-a-clone.json
nnew file mode 100644
iindex 00000000..45212108
---- /dev/null
++++ b/fixtures/git.access-request/valid/write-without-a-clone.json
@@@ -0,0 +1,9 @@
++{
++ "owner": "ada",
++ "name": "my-site",
++ "branch": "agent/run-1",
++ "message": "Write the title without a clone",
++ "files": [
++ { "path": "notes.txt", "content": "made by the API\n" }
++ ]
++}
\\ No newline at end of file
ddiff --git a/fixtures/git.access-result/invalid/insecure-clone-url.json b/fixtures/git.access-result/invalid/insecure-clone-url.json
nnew file mode 100644
iindex 00000000..7f00da0c
---- /dev/null
++++ b/fixtures/git.access-result/invalid/insecure-clone-url.json
@@@ -0,0 +1,4 @@
++{
++ "full_name": "ada/my-site",
++ "clone_url": "http://git.openvibe.codes/ada/my-site.git"
++}
\\ No newline at end of file
ddiff --git a/fixtures/git.access-result/invalid/not-a-full-name.json b/fixtures/git.access-result/invalid/not-a-full-name.json
nnew file mode 100644
iindex 00000000..5f852fc8
---- /dev/null
++++ b/fixtures/git.access-result/invalid/not-a-full-name.json
@@@ -0,0 +1,3 @@
++{
++ "full_name": "ada"
++}
\\ No newline at end of file
ddiff --git a/fixtures/git.access-result/valid/contents-write.json b/fixtures/git.access-result/valid/contents-write.json
nnew file mode 100644
iindex 00000000..050ee5cd
---- /dev/null
++++ b/fixtures/git.access-result/valid/contents-write.json
@@@ -0,0 +1,5 @@
++{
++ "full_name": "ada/my-site",
++ "branch": "agent/run-1",
++ "sha": "0123456789abcdef0123456789abcdef01234567"
++}
\\ No newline at end of file
ddiff --git a/fixtures/git.access-result/valid/repository.json b/fixtures/git.access-result/valid/repository.json
nnew file mode 100644
iindex 00000000..14e97edf
---- /dev/null
++++ b/fixtures/git.access-result/valid/repository.json
@@@ -0,0 +1,7 @@
++{
++ "full_name": "ada/my-site",
++ "html_url": "https://git.openvibe.codes/ada/my-site",
++ "clone_url": "https://git.openvibe.codes/ada/my-site.git",
++ "visibility": "private",
++ "default_branch": "main"
++}
\\ No newline at end of file
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex 8c6ffc33..420e8730 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -119262,6 +119262,128 @@
},
"additionalProperties": false
}
++ },
++ "git.access-request": {
++ "version": "1.0.0",
++ "owner": "git",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/git/access-request.v1.json",
++ "title": "GitAccessRequest",
++ "description": "git.access-request@1: the common request of git.read and git.write on OpenVibe.Git. owner and name name the repository at git.openvibe.codes; ref and path pick what is read; branch, message and files describe a contents write without a clone. A service names the person it acts for in X-OV-Subject, not in this body.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "owner",
++ "name"
++ ],
++ "properties": {
++ "owner": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",
++ "description": "The repository owner's lower-case OpenVibe username."
++ },
++ "name": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",
++ "description": "The repository name, lower-case and never ending in .git."
++ },
++ "ref": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "path": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "branch": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "message": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "files": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "git.access-result": {
++ "version": "1.0.0",
++ "owner": "git",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/git/access-result.v1.json",
++ "title": "GitAccessResult",
++ "description": "git.access-result@1: the common result of git.read and git.write on OpenVibe.Git. A repository names its full name, its page and clone addresses, its visibility and default branch; a contents write or a token also carries the branch or commit it made.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "full_name"
++ ],
++ "properties": {
++ "full_name": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}/[a-z0-9][a-z0-9._-]{0,99}$"
++ },
++ "html_url": {
++ "type": "string",
++ "format": "uri",
++ "pattern": "^https://"
++ },
++ "clone_url": {
++ "type": "string",
++ "format": "uri",
++ "pattern": "^https://"
++ },
++ "visibility": {
++ "type": "string",
++ "enum": [
++ "public",
++ "private"
++ ]
++ },
++ "default_branch": {
++ "type": "string",
++ "maxLength": 255
++ },
++ "branch": {
++ "type": "string",
++ "maxLength": 255
++ },
++ "sha": {
++ "type": "string",
++ "pattern": "^[0-9a-f]{40}([0-9a-f]{24})?$"
++ }
++ }
++ }
}
}
}
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex 68b0d337..aad16d23 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.372.0",
-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 97060005..46e65dd4 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.372.0",
-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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/bench.json b/generated/openapi/bench.json
iindex e25b27c4..11b642dd 100644
---- a/generated/openapi/bench.json
++++ b/generated/openapi/bench.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Bench API",
-- "version": "0.372.0",
-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 88b1d69c..171ab63d 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.372.0",
-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 1f686457..e5cebc16 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.372.0",
-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 1f80efe9..70b427c5 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.372.0",
-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 313596a1..a080ea2b 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.372.0",
-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 3b79dcdb..e8bb42ef 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.372.0",
-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 35c9efcb..c0d0daf3 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.372.0",
-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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/connect.json b/generated/openapi/connect.json
iindex 1bc5ef41..68246741 100644
---- a/generated/openapi/connect.json
++++ b/generated/openapi/connect.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe Connect API",
-- "version": "0.372.0",
-- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 b77a708d..d23c61b1 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.372.0",
-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 2122c089..d9accb12 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.372.0",
-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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/design.json b/generated/openapi/design.json
iindex a8c68058..73ff629e 100644
---- a/generated/openapi/design.json
++++ b/generated/openapi/design.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Design API",
-- "version": "0.372.0",
-- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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/domains.json b/generated/openapi/domains.json
iindex 7f671276..07350c54 100644
---- a/generated/openapi/domains.json
++++ b/generated/openapi/domains.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Domains API",
-- "version": "0.372.0",
-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 e5c3c9b0..2c43c486 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.372.0",
-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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/exchange.json b/generated/openapi/exchange.json
iindex 083f6537..d4896329 100644
---- a/generated/openapi/exchange.json
++++ b/generated/openapi/exchange.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Exchange API",
-- "version": "0.372.0",
-- "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 28805e51..c7dfd398 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.372.0",
-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 6c596170..32632e70 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.372.0",
-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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/git.json b/generated/openapi/git.json
nnew file mode 100644
iindex 00000000..17b4aa95
---- /dev/null
++++ b/generated/openapi/git.json
@@@ -0,0 +1,2369 @@
++{
++ "openapi": "3.1.0",
++ "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
++ "info": {
++ "title": "OpenVibe.Git API",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Git as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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"
++ }
++ },
++ "servers": [
++ {
++ "url": "https://git.openvibe.codes"
++ }
++ ],
++ "paths": {
++ "/api/v1/profile/{username}": {
++ "get": {
++ "operationId": "get_api_v1_profile_username",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "username",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "owner",
++ "in": "query",
++ "required": true,
++ "schema": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",
++ "description": "The repository owner's lower-case OpenVibe username."
++ },
++ "description": "The repository owner's lower-case OpenVibe username."
++ },
++ {
++ "name": "name",
++ "in": "query",
++ "required": true,
++ "schema": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",
++ "description": "The repository name, lower-case and never ending in .git."
++ },
++ "description": "The repository name, lower-case and never ending in .git."
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos": {
++ "get": {
++ "operationId": "get_api_v1_repos",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "query",
++ "required": true,
++ "schema": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",
++ "description": "The repository owner's lower-case OpenVibe username."
++ },
++ "description": "The repository owner's lower-case OpenVibe username."
++ },
++ {
++ "name": "name",
++ "in": "query",
++ "required": true,
++ "schema": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",
++ "description": "The repository name, lower-case and never ending in .git."
++ },
++ "description": "The repository name, lower-case and never ending in .git."
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ },
++ "post": {
++ "operationId": "post_api_v1_repos",
++ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",
++ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.write"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.write"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ }
++ }
++ }
++ },
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos/{owner}/{name}": {
++ "get": {
++ "operationId": "get_api_v1_repos_owner_name",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos/{owner}/{name}/blob": {
++ "get": {
++ "operationId": "get_api_v1_repos_owner_name_blob",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos/{owner}/{name}/branches": {
++ "get": {
++ "operationId": "get_api_v1_repos_owner_name_branches",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos/{owner}/{name}/commit/{sha}": {
++ "get": {
++ "operationId": "get_api_v1_repos_owner_name_commit_sha",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "sha",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos/{owner}/{name}/commits": {
++ "get": {
++ "operationId": "get_api_v1_repos_owner_name_commits",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ },
++ "post": {
++ "operationId": "post_api_v1_repos_owner_name_commits",
++ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",
++ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.write"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.write"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ }
++ }
++ }
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos/{owner}/{name}/contributors": {
++ "get": {
++ "operationId": "get_api_v1_repos_owner_name_contributors",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos/{owner}/{name}/insights": {
++ "get": {
++ "operationId": "get_api_v1_repos_owner_name_insights",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos/{owner}/{name}/raw": {
++ "get": {
++ "operationId": "get_api_v1_repos_owner_name_raw",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos/{owner}/{name}/releases": {
++ "get": {
++ "operationId": "get_api_v1_repos_owner_name_releases",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ },
++ "post": {
++ "operationId": "post_api_v1_repos_owner_name_releases",
++ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",
++ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.write"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.write"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ }
++ }
++ }
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos/{owner}/{name}/star": {
++ "post": {
++ "operationId": "post_api_v1_repos_owner_name_star",
++ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",
++ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.write"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.write"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ }
++ }
++ }
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos/{owner}/{name}/tags": {
++ "get": {
++ "operationId": "get_api_v1_repos_owner_name_tags",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/repos/{owner}/{name}/tree": {
++ "get": {
++ "operationId": "get_api_v1_repos_owner_name_tree",
++ "summary": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights.",
++ "description": "**git.repo.read** (first-party): Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.read"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "owner",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "name",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "ref",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ {
++ "name": "path",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "description": "A path inside the tree or a blob's path."
++ },
++ {
++ "name": "branch",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "description": "The branch a contents write goes on."
++ },
++ {
++ "name": "message",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "description": "The commit message of a contents write."
++ },
++ {
++ "name": "files",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "description": "The files a contents write changes, by path and full content."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/tokens": {
++ "post": {
++ "operationId": "post_api_v1_tokens",
++ "summary": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone",
++ "description": "**git.repo.write** (first-party): Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",
++ "tags": [
++ "git.repo"
++ ],
++ "x-openvibe-capabilities": [
++ "git.repo.write"
++ ],
++ "x-openvibe-visibility": [
++ "first-party"
++ ],
++ "x-openvibe-quota-class": "standard",
++ "security": [
++ {
++ "openvibeToken": [
++ "git.repo.write"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-request.v1"
++ }
++ }
++ }
++ },
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/git.access-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "components": {
++ "schemas": {
++ "errors.problem.v1": {
++ "title": "Problem",
++ "description": "RFC 9457 problem details (application/problem+json) with a stable OpenVibe error code and trace identifiers. The legacy 'error' string is allowed during migration so existing clients keep working.",
++ "type": "object",
++ "required": [
++ "type",
++ "title",
++ "status",
++ "code"
++ ],
++ "additionalProperties": true,
++ "properties": {
++ "type": {
++ "type": "string",
++ "format": "uri-reference"
++ },
++ "title": {
++ "type": "string",
++ "minLength": 1
++ },
++ "status": {
++ "type": "integer",
++ "minimum": 400,
++ "maximum": 599
++ },
++ "detail": {
++ "type": "string"
++ },
++ "instance": {
++ "type": "string",
++ "format": "uri-reference"
++ },
++ "code": {
++ "type": "string",
++ "pattern": "^[a-z][a-z0-9_]*(\\.[a-z0-9_]+)*$"
++ },
++ "request_id": {
++ "type": "string"
++ },
++ "trace_id": {
++ "type": "string",
++ "pattern": "^[0-9a-f]{32}$"
++ },
++ "errors": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "required": [
++ "message"
++ ],
++ "properties": {
++ "path": {
++ "type": "string"
++ },
++ "message": {
++ "type": "string"
++ }
++ }
++ }
++ },
++ "error": {
++ "type": "string",
++ "description": "Deprecated compatibility field: same text as title/detail for clients that read {error}."
++ }
++ }
++ },
++ "git.access-request.v1": {
++ "title": "GitAccessRequest",
++ "description": "git.access-request@1: the common request of git.read and git.write on OpenVibe.Git. owner and name name the repository at git.openvibe.codes; ref and path pick what is read; branch, message and files describe a contents write without a clone. A service names the person it acts for in X-OV-Subject, not in this body.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "owner",
++ "name"
++ ],
++ "properties": {
++ "owner": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}$",
++ "description": "The repository owner's lower-case OpenVibe username."
++ },
++ "name": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$",
++ "description": "The repository name, lower-case and never ending in .git."
++ },
++ "ref": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "A branch or tag to read at; the default branch when absent."
++ },
++ "path": {
++ "type": "string",
++ "maxLength": 4096,
++ "description": "A path inside the tree or a blob's path."
++ },
++ "branch": {
++ "type": "string",
++ "maxLength": 255,
++ "description": "The branch a contents write goes on."
++ },
++ "message": {
++ "type": "string",
++ "maxLength": 2000,
++ "description": "The commit message of a contents write."
++ },
++ "files": {
++ "type": "array",
++ "maxItems": 200,
++ "description": "The files a contents write changes, by path and full content.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "path",
++ "content"
++ ],
++ "properties": {
++ "path": {
++ "type": "string",
++ "maxLength": 4096
++ },
++ "content": {
++ "type": "string"
++ }
++ }
++ }
++ }
++ }
++ },
++ "git.access-result.v1": {
++ "title": "GitAccessResult",
++ "description": "git.access-result@1: the common result of git.read and git.write on OpenVibe.Git. A repository names its full name, its page and clone addresses, its visibility and default branch; a contents write or a token also carries the branch or commit it made.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "full_name"
++ ],
++ "properties": {
++ "full_name": {
++ "type": "string",
++ "pattern": "^[a-z0-9][a-z0-9._-]{0,38}/[a-z0-9][a-z0-9._-]{0,99}$"
++ },
++ "html_url": {
++ "type": "string",
++ "format": "uri",
++ "pattern": "^https://"
++ },
++ "clone_url": {
++ "type": "string",
++ "format": "uri",
++ "pattern": "^https://"
++ },
++ "visibility": {
++ "type": "string",
++ "enum": [
++ "public",
++ "private"
++ ]
++ },
++ "default_branch": {
++ "type": "string",
++ "maxLength": 255
++ },
++ "branch": {
++ "type": "string",
++ "maxLength": 255
++ },
++ "sha": {
++ "type": "string",
++ "pattern": "^[0-9a-f]{40}([0-9a-f]{24})?$"
++ }
++ }
++ }
++ },
++ "securitySchemes": {
++ "openvibeToken": {
++ "type": "http",
++ "scheme": "bearer",
++ "bearerFormat": "JWT",
++ "description": "An OpenVibe Network token for this service: a person's token, an app token (client credentials, audience of the service) or a first-party service token. Its `cap` claim must include the capability the operation names."
++ }
++ }
++ }
++}
ddiff --git a/generated/openapi/host.json b/generated/openapi/host.json
iindex 3c490a7b..c6a6b3ab 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.372.0",
-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 fd2c0f8f..d62a8cf3 100644
---- a/generated/openapi/index.json
++++ b/generated/openapi/index.json
@@@ -127,6 +127,13 @@
"operations": 12,
"capabilities": 9
},
++ {
++ "service": "git",
++ "name": "OpenVibe.Git",
++ "origin": "https://git.openvibe.codes",
++ "operations": 18,
++ "capabilities": 2
++ },
{
"service": "host",
"name": "OpenVibe.Host",
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex f155a270..a5d6dfa2 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.372.0",
-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 6026c918..310fe337 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.372.0",
-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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/mail.json b/generated/openapi/mail.json
iindex 749224a7..b082af84 100644
---- a/generated/openapi/mail.json
++++ b/generated/openapi/mail.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Mail API",
-- "version": "0.372.0",
-- "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 1d53f5af..cd93f9f0 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.372.0",
-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 8d29920c..b9d5b550 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.372.0",
-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 563bb236..08b8d04b 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.372.0",
-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 973ebde7..232af305 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.372.0",
-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 d09af43c..5a033a21 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.372.0",
-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 1b67381b..ad4c51b0 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.372.0",
-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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/quest.json b/generated/openapi/quest.json
iindex d2230709..d2115e45 100644
---- a/generated/openapi/quest.json
++++ b/generated/openapi/quest.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Quest API",
-- "version": "0.372.0",
-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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/report.json b/generated/openapi/report.json
iindex 2ce997da..c77b8472 100644
---- a/generated/openapi/report.json
++++ b/generated/openapi/report.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Report API",
-- "version": "0.372.0",
-- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 a0f34147..4c568939 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.372.0",
-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 f0bd32eb..1620f11c 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.372.0",
-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 09be7f24..41de96e9 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.372.0",
-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 e429b194..b96f0406 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.372.0",
-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 16a3eb4d..6c012c04 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.372.0",
-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 15debc41..414eceb9 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.372.0",
-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 e18ed721..ec6922a9 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.372.0",
-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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/today.json b/generated/openapi/today.json
iindex 84f54397..aa01041c 100644
---- a/generated/openapi/today.json
++++ b/generated/openapi/today.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Today API",
-- "version": "0.372.0",
-- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 98bd7e2a..bf2b6d01 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.372.0",
-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 41c62581..5c884d8a 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.372.0",
-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 cb64d97c..91eb1591 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.372.0",
-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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/vision.json b/generated/openapi/vision.json
iindex ce5bb907..56979346 100644
---- a/generated/openapi/vision.json
++++ b/generated/openapi/vision.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Vision API",
-- "version": "0.372.0",
-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 3dfd98ca..5d783d51 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.372.0",
-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 9ceb8395..301060a3 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.372.0",
-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 9cbc2658..6c695584 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.372.0",
-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 0e2c5023..2637c322 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.372.0",
-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.372.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.373.0",
++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.373.0): each operation lists the capabilities it performs; a token for the 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 bf80a322..f4503722 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -323456,3 +323456,57 @@ export interface ExchangeKeyCreated {
key: ExchangeKey;
secret: string;
}
++
++/** [email protected] (owner: git) */
++/**
++ * git.access-request@1: the common request of git.read and git.write on OpenVibe.Git. owner and name name the repository at git.openvibe.codes; ref and path pick what is read; branch, message and files describe a contents write without a clone. A service names the person it acts for in X-OV-Subject, not in this body.
++ */
++export interface GitAccessRequest {
++ /**
++ * The repository owner's lower-case OpenVibe username.
++ */
++ owner: string;
++ /**
++ * The repository name, lower-case and never ending in .git.
++ */
++ name: string;
++ /**
++ * A branch or tag to read at; the default branch when absent.
++ */
++ ref?: string;
++ /**
++ * A path inside the tree or a blob's path.
++ */
++ path?: string;
++ /**
++ * The branch a contents write goes on.
++ */
++ branch?: string;
++ /**
++ * The commit message of a contents write.
++ */
++ message?: string;
++ /**
++ * The files a contents write changes, by path and full content.
++ *
++ * @maxItems 200
++ */
++ files?: {
++ path: string;
++ content: string;
++ }[];
++}
++
++/** [email protected] (owner: git) */
++/**
++ * git.access-result@1: the common result of git.read and git.write on OpenVibe.Git. A repository names its full name, its page and clone addresses, its visibility and default branch; a contents write or a token also carries the branch or commit it made.
++ */
++export interface GitAccessResult {
++ full_name: string;
++ html_url?: string;
++ clone_url?: string;
++ visibility?: "public" | "private";
++ default_branch?: string;
++ branch?: string;
++ sha?: string;
++}
ddiff --git a/manifests/capabilities/git.repo.read.json b/manifests/capabilities/git.repo.read.json
nnew file mode 100644
iindex 00000000..07e2fab2
---- /dev/null
++++ b/manifests/capabilities/git.repo.read.json
@@@ -0,0 +1,33 @@
++{
++ "id": "git.repo.read",
++ "version": "1.0",
++ "owner": "git",
++ "status": "active",
++ "visibility": "first-party",
++ "description": "Read a repository on OpenVibe.Git (git.openvibe.codes): its row, tree, blob, raw file, commits, one commit with its diff, branches, tags, releases, contributors and insights. A public repository is read without a token. A private one needs its owner's session, a Git token made on the repository page, or a first-party service token (Codes, Run, Link) that holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A private repository answers 404 to anyone who may not see it, never 403.",
++ "inputSchema": "git.access-request@1",
++ "outputSchema": "git.access-result@1",
++ "permissions": [
++ "git:read"
++ ],
++ "resourceConstraints": [
++ "owner"
++ ],
++ "quotaClass": "standard",
++ "events": [],
++ "implementedBy": [
++ "GET /api/v1/repos",
++ "GET /api/v1/repos/:owner/:name",
++ "GET /api/v1/repos/:owner/:name/tree",
++ "GET /api/v1/repos/:owner/:name/blob",
++ "GET /api/v1/repos/:owner/:name/raw",
++ "GET /api/v1/repos/:owner/:name/commits",
++ "GET /api/v1/repos/:owner/:name/commit/:sha",
++ "GET /api/v1/repos/:owner/:name/branches",
++ "GET /api/v1/repos/:owner/:name/tags",
++ "GET /api/v1/repos/:owner/:name/releases",
++ "GET /api/v1/repos/:owner/:name/contributors",
++ "GET /api/v1/repos/:owner/:name/insights",
++ "GET /api/v1/profile/:username"
++ ]
++}
ddiff --git a/manifests/capabilities/git.repo.write.json b/manifests/capabilities/git.repo.write.json
nnew file mode 100644
iindex 00000000..4926424a
---- /dev/null
++++ b/manifests/capabilities/git.repo.write.json
@@@ -0,0 +1,25 @@
++{
++ "id": "git.repo.write",
++ "version": "1.0",
++ "owner": "git",
++ "status": "active",
++ "visibility": "first-party",
++ "description": "Write on OpenVibe.Git (git.openvibe.codes): make a repository in a person's name, mint their short-lived Git token for clone and push, push a branch over HTTPS, write files on a branch without a clone, and set a release. The owner acts with their session; a first-party service token (Codes first) holds this capability for the audience openvibe.git and names the person in X-OV-Subject. A service may also write an official repository. Never another person's repository.",
++ "inputSchema": "git.access-request@1",
++ "outputSchema": "git.access-result@1",
++ "permissions": [
++ "git:write"
++ ],
++ "resourceConstraints": [
++ "owner"
++ ],
++ "quotaClass": "standard",
++ "events": [],
++ "implementedBy": [
++ "POST /api/v1/repos",
++ "POST /api/v1/tokens",
++ "POST /api/v1/repos/:owner/:name/commits",
++ "POST /api/v1/repos/:owner/:name/releases",
++ "POST /api/v1/repos/:owner/:name/star"
++ ]
++}
ddiff --git a/manifests/services/git.json b/manifests/services/git.json
nnew file mode 100644
iindex 00000000..d4d928df
---- /dev/null
++++ b/manifests/services/git.json
@@@ -0,0 +1,76 @@
++{
++ "version": "0.1.0",
++ "contractRanges": {
++ "openvibe-contracts": ">=0.370.0 <1.0.0"
++ },
++ "id": "git",
++ "name": "OpenVibe.Git",
++ "status": "alpha",
++ "repository": "OpenVibers/OpenVibe-Git",
++ "domains": [
++ "git.openvibe.codes"
++ ],
++ "publicOrigin": "https://git.openvibe.codes",
++ "exposure": {
++ "state": "live",
++ "publicSite": "service"
++ },
++ "capabilities": [
++ "git.repo.read",
++ "git.repo.write"
++ ],
++ "eventsProduced": [],
++ "eventsConsumed": [],
++ "namespacesOwned": [],
++ "lifecycle": {
++ "liveness": {
++ "endpoint": "/api/health",
++ "means": "the process is up and answers HTTP; it checks nothing else"
++ },
++ "shutdown": {
++ "signal": "SIGTERM",
++ "deadlineSeconds": 10,
++ "drains": [
++ "HTTP server closed",
++ "git http-backend requests finish"
++ ]
++ },
++ "startupRecovery": {
++ "resumes": [
++ {
++ "kind": "state",
++ "what": "the database (repositories, stars, tokens and insights) is in PostgreSQL; the bare repositories are on disk under GIT_DATA_DIR and are the state themselves"
++ }
++ ]
++ },
++ "rollback": {
++ "conditions": [
++ "automatic: ovhost deploy puts the previous sha back and restarts again when the ready URL does not answer 2xx within ready.timeoutSeconds after the restart (exit 3)",
++ "manual: ovhost rollback git --to <sha>"
++ ],
++ "window": "automatic only while ovhost waits for readiness after the restart; manual afterwards, as long as no blocker applies",
++ "blockers": {
++ "none": "migrations are expand-only and run forward; the previous sha reads the same rows, so rolling the code back is safe"
++ }
++ },
++ "contracts": {
++ "range": ">=0.370.0 <1.0.0"
++ },
++ "leases": {
++ "none": "no claims: one process serves the site; repository writes take their own file and database locks"
++ }
++ },
++ "notes": "Port 5270, unit openvibe-git.service. OpenVibe's own code home at git.openvibe.codes (plan OpenVibe_Git_Plan_2026-11-09): bare repositories on disk served by git's own http-backend behind OpenVibe sign-in, our pages and API for browsing, GitHub mirrors, stars, insights and contents writes without a clone. Codes, Run and Link act for a person with a typed service token and X-OV-Subject. It replaces Forgejo (deploy/forgejo in OpenVibe.Codes), whose data was all mirrors.",
++ "health": "/api/health",
++ "ready": "/api/ready",
++ "internalOrigin": "http://127.0.0.1:5270",
++ "site": {
++ "name": "Git",
++ "icon": "git",
++ "tagline": "Code with your OpenVibe account",
++ "what": "Host code, browse it, mirror GitHub and clone it to your computer with Link, in OpenVibe's own theme.",
++ "legalProfile": "public",
++ "position": 33,
++ "neighbourhood": "make"
++ }
++}
ddiff --git a/package-lock.json b/package-lock.json
iindex a1b8edc7..51a6b022 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -1,12 +1,12 @@
{
"name": "openvibe-contracts",
-- "version": "0.372.0",
++ "version": "0.373.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openvibe-contracts",
-- "version": "0.372.0",
++ "version": "0.373.0",
"license": "AGPL-3.0-only",
"dependencies": {
"ajv": "^8.17.1",
ddiff --git a/package.json b/package.json
iindex a1a49440..046944fb 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.372.0",
++ "version": "0.373.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",