openvibers/openvibe.contracts Commits

Add verified account email contracts (#362)

OP OpenVibers committed 5 days ago · 48836dac8d · 70 files, +1247 −95

* Add verified account email contracts

* Register account email schemas

* Restrict email-read capability to chosen address

* Describe account email schemas

* Add verified email contract fixtures

* Make email response schema strict-compatible

* Type the email array schema explicitly

* Use the owner email resource constraint

* Generate email identity contracts

* Register email identity capability for Network

* Cover accounts without an email address

* Merge main and release email contracts 0.349.0

* Define verified email check contract

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 02901281..f2c8724d 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -1,5 +1,9 @@
# Changelog
++## 0.349.0 — 2026-11-08
++
++- Add `identity.emails@1` and `identity.email-add-request@1` and the `identity.emails.read` capability for a person's verified, privacy-limited email addresses.
++
## 0.348.0 — 2026-11-08
- Service manifests: `studio` (OpenVibe.Studio at openvibe.studio, live: Photo and Light in the browser), and
ddiff --git a/contracts/catalog.json b/contracts/catalog.json
iindex ad2a6aac..8c76b610 100644
---- a/contracts/catalog.json
++++ b/contracts/catalog.json
@@@ -87,6 +87,51 @@
"compatibility": "backward",
"status": "active"
},
++ {
++ "id": "identity.emails",
++ "version": "1.0.0",
++ "owner": "network",
++ "schema": "identity/emails.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "identity.emails-request",
++ "version": "1.0.0",
++ "owner": "network",
++ "schema": "identity/emails-request.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "identity.email-add-request",
++ "version": "1.0.0",
++ "owner": "network",
++ "schema": "identity/email-add-request.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "identity.email-verified-check-request",
++ "version": "1.0.0",
++ "owner": "network",
++ "schema": "identity/email-verified-check-request.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "identity.email-verified-check-result",
++ "version": "1.0.0",
++ "owner": "network",
++ "schema": "identity/email-verified-check-result.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
{
"id": "identity.subject-projection",
"version": "1.0.0",
ddiff --git a/contracts/identity/email-add-request.v1.json b/contracts/identity/email-add-request.v1.json
nnew file mode 100644
iindex 00000000..77f861d7
---- /dev/null
++++ b/contracts/identity/email-add-request.v1.json
@@@ -0,0 +1,10 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/identity/email-add-request.v1.json",
++ "title": "Add an email address to the authenticated person's account",
++ "description": "A single email address the account owner wants to verify and attach to their own account.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["email"],
++ "properties": { "email": { "type": "string", "format": "email", "maxLength": 254 } }
++}
ddiff --git a/contracts/identity/email-verified-check-request.v1.json b/contracts/identity/email-verified-check-request.v1.json
nnew file mode 100644
iindex 00000000..43460dd4
---- /dev/null
++++ b/contracts/identity/email-verified-check-request.v1.json
@@@ -0,0 +1,13 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/identity/email-verified-check-request.v1.json",
++ "title": "Check a person's verified email address",
++ "description": "A service with identity.emails.read asks whether one supplied email address is verified for one Network subject. The response never reveals address lists or whether an unknown subject exists.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["subject", "email"],
++ "properties": {
++ "subject": { "type": "string", "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$" },
++ "email": { "type": "string", "format": "email", "maxLength": 254 }
++ }
++}
ddiff --git a/contracts/identity/email-verified-check-result.v1.json b/contracts/identity/email-verified-check-result.v1.json
nnew file mode 100644
iindex 00000000..3624237e
---- /dev/null
++++ b/contracts/identity/email-verified-check-result.v1.json
@@@ -0,0 +1,10 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/identity/email-verified-check-result.v1.json",
++ "title": "Verified email check result",
++ "description": "Whether the supplied email address is verified for the supplied subject. Unknown subjects and addresses both return false.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["verified"],
++ "properties": { "verified": { "type": "boolean" } }
++}
ddiff --git a/contracts/identity/emails-request.v1.json b/contracts/identity/emails-request.v1.json
nnew file mode 100644
iindex 00000000..5cbee4e1
---- /dev/null
++++ b/contracts/identity/emails-request.v1.json
@@@ -0,0 +1,9 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/identity/emails-request.v1.json",
++ "title": "Read the authenticated person's shared verified email addresses",
++ "description": "An empty request body for reading the authenticated person's verified email address.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {}
++}
ddiff --git a/contracts/identity/emails.v1.json b/contracts/identity/emails.v1.json
nnew file mode 100644
iindex 00000000..e99a3650
---- /dev/null
++++ b/contracts/identity/emails.v1.json
@@@ -0,0 +1,45 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/identity/emails.v1.json",
++ "title": "Verified email addresses for the authenticated person",
++ "description": "The verified email addresses the authenticated person has shared. An app with identity.emails.read receives only the single address selected for that app; primary reflects whether it is the account's primary address.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["emails"],
++ "properties": {
++ "emails": {
++ "type": "array",
++ "items": { "$ref": "#/$defs/email" },
++ "maxItems": 11
++ }
++ },
++ "allOf": [
++ {
++ "if": { "properties": { "emails": { "type": "array", "minItems": 1 } }, "required": ["emails"] },
++ "then": {
++ "properties": {
++ "emails": {
++ "type": "array",
++ "contains": { "type": "object", "properties": { "primary": { "const": true } }, "required": ["primary"] },
++ "maxContains": 1
++ }
++ }
++ }
++ }
++ ],
++ "$defs": {
++ "email": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["id", "email", "verified", "primary", "created_at"],
++ "properties": {
++ "id": { "type": "string", "minLength": 1 },
++ "email": { "type": "string", "format": "email" },
++ "verified": { "type": "boolean" },
++ "primary": { "type": "boolean" },
++ "created_at": { "type": "string" },
++ "verified_at": { "type": ["string", "null"] }
++ }
++ }
++ }
++}
ddiff --git a/fixtures/identity.email-add-request/invalid/missing-email.json b/fixtures/identity.email-add-request/invalid/missing-email.json
nnew file mode 100644
iindex 00000000..0967ef42
---- /dev/null
++++ b/fixtures/identity.email-add-request/invalid/missing-email.json
@@@ -0,0 +1 @@
++{}
ddiff --git a/fixtures/identity.email-add-request/valid/add.json b/fixtures/identity.email-add-request/valid/add.json
nnew file mode 100644
iindex 00000000..7d358369
---- /dev/null
++++ b/fixtures/identity.email-add-request/valid/add.json
@@@ -0,0 +1 @@
++{ "email": "[email protected]" }
ddiff --git a/fixtures/identity.email-verified-check-request/invalid/no-address.json b/fixtures/identity.email-verified-check-request/invalid/no-address.json
nnew file mode 100644
iindex 00000000..22e630ec
---- /dev/null
++++ b/fixtures/identity.email-verified-check-request/invalid/no-address.json
@@@ -0,0 +1 @@
++{ "subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ" }
ddiff --git a/fixtures/identity.email-verified-check-request/valid/owned-address.json b/fixtures/identity.email-verified-check-request/valid/owned-address.json
nnew file mode 100644
iindex 00000000..b4db2c60
---- /dev/null
++++ b/fixtures/identity.email-verified-check-request/valid/owned-address.json
@@@ -0,0 +1 @@
++{ "subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ", "email": "[email protected]" }
ddiff --git a/fixtures/identity.email-verified-check-result/invalid/non-boolean.json b/fixtures/identity.email-verified-check-result/invalid/non-boolean.json
nnew file mode 100644
iindex 00000000..00b0edfa
---- /dev/null
++++ b/fixtures/identity.email-verified-check-result/invalid/non-boolean.json
@@@ -0,0 +1 @@
++{ "verified": "yes" }
ddiff --git a/fixtures/identity.email-verified-check-result/valid/verified.json b/fixtures/identity.email-verified-check-result/valid/verified.json
nnew file mode 100644
iindex 00000000..c5eef5fd
---- /dev/null
++++ b/fixtures/identity.email-verified-check-result/valid/verified.json
@@@ -0,0 +1 @@
++{ "verified": true }
ddiff --git a/fixtures/identity.emails-request/invalid/extra-property.json b/fixtures/identity.emails-request/invalid/extra-property.json
nnew file mode 100644
iindex 00000000..3da4ca55
---- /dev/null
++++ b/fixtures/identity.emails-request/invalid/extra-property.json
@@@ -0,0 +1 @@
++{ "subject_id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ" }
ddiff --git a/fixtures/identity.emails-request/valid/empty.json b/fixtures/identity.emails-request/valid/empty.json
nnew file mode 100644
iindex 00000000..0967ef42
---- /dev/null
++++ b/fixtures/identity.emails-request/valid/empty.json
@@@ -0,0 +1 @@
++{}
ddiff --git a/fixtures/identity.emails/invalid/missing-primary.json b/fixtures/identity.emails/invalid/missing-primary.json
nnew file mode 100644
iindex 00000000..a223060a
---- /dev/null
++++ b/fixtures/identity.emails/invalid/missing-primary.json
@@@ -0,0 +1,5 @@
++{
++ "emails": [
++ { "id": "01JAB2C3D4E5F6G7H9K0MNPQ", "email": "[email protected]", "verified": true, "primary": false, "created_at": "2026-11-08T10:00:00Z", "verified_at": null }
++ ]
++}
ddiff --git a/fixtures/identity.emails/valid/empty-list.json b/fixtures/identity.emails/valid/empty-list.json
nnew file mode 100644
iindex 00000000..af727ab4
---- /dev/null
++++ b/fixtures/identity.emails/valid/empty-list.json
@@@ -0,0 +1 @@
++{ "emails": [] }
ddiff --git a/fixtures/identity.emails/valid/primary-and-additional.json b/fixtures/identity.emails/valid/primary-and-additional.json
nnew file mode 100644
iindex 00000000..1229a87c
---- /dev/null
++++ b/fixtures/identity.emails/valid/primary-and-additional.json
@@@ -0,0 +1,6 @@
++{
++ "emails": [
++ { "id": "01JAB2C3D4E5F6G7H8J9K0MNPQ", "email": "[email protected]", "verified": true, "primary": true, "created_at": "2026-11-08T10:00:00Z", "verified_at": "2026-11-08T10:00:00Z" },
++ { "id": "01JAB2C3D4E5F6G7H8J9K0MNPR", "email": "[email protected]", "verified": false, "primary": false, "created_at": "2026-11-08T10:05:00Z", "verified_at": null }
++ ]
++}
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex 47e598f5..70e6e667 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -778,6 +778,189 @@
]
}
},
++ "identity.emails": {
++ "version": "1.0.0",
++ "owner": "network",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/identity/emails.v1.json",
++ "title": "Verified email addresses for the authenticated person",
++ "description": "The verified email addresses the authenticated person has shared. An app with identity.emails.read receives only the single address selected for that app; primary reflects whether it is the account's primary address.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "emails"
++ ],
++ "properties": {
++ "emails": {
++ "type": "array",
++ "items": {
++ "$ref": "#/$defs/email"
++ },
++ "maxItems": 11
++ }
++ },
++ "allOf": [
++ {
++ "if": {
++ "properties": {
++ "emails": {
++ "type": "array",
++ "minItems": 1
++ }
++ },
++ "required": [
++ "emails"
++ ]
++ },
++ "then": {
++ "properties": {
++ "emails": {
++ "type": "array",
++ "contains": {
++ "type": "object",
++ "properties": {
++ "primary": {
++ "const": true
++ }
++ },
++ "required": [
++ "primary"
++ ]
++ },
++ "maxContains": 1
++ }
++ }
++ }
++ }
++ ],
++ "$defs": {
++ "email": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "id",
++ "email",
++ "verified",
++ "primary",
++ "created_at"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "minLength": 1
++ },
++ "email": {
++ "type": "string",
++ "format": "email"
++ },
++ "verified": {
++ "type": "boolean"
++ },
++ "primary": {
++ "type": "boolean"
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "verified_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ }
++ }
++ }
++ }
++ }
++ },
++ "identity.emails-request": {
++ "version": "1.0.0",
++ "owner": "network",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/identity/emails-request.v1.json",
++ "title": "Read the authenticated person's shared verified email addresses",
++ "description": "An empty request body for reading the authenticated person's verified email address.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {}
++ }
++ },
++ "identity.email-add-request": {
++ "version": "1.0.0",
++ "owner": "network",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/identity/email-add-request.v1.json",
++ "title": "Add an email address to the authenticated person's account",
++ "description": "A single email address the account owner wants to verify and attach to their own account.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "email"
++ ],
++ "properties": {
++ "email": {
++ "type": "string",
++ "format": "email",
++ "maxLength": 254
++ }
++ }
++ }
++ },
++ "identity.email-verified-check-request": {
++ "version": "1.0.0",
++ "owner": "network",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/identity/email-verified-check-request.v1.json",
++ "title": "Check a person's verified email address",
++ "description": "A service with identity.emails.read asks whether one supplied email address is verified for one Network subject. The response never reveals address lists or whether an unknown subject exists.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "subject",
++ "email"
++ ],
++ "properties": {
++ "subject": {
++ "type": "string",
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "email": {
++ "type": "string",
++ "format": "email",
++ "maxLength": 254
++ }
++ }
++ }
++ },
++ "identity.email-verified-check-result": {
++ "version": "1.0.0",
++ "owner": "network",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/identity/email-verified-check-result.v1.json",
++ "title": "Verified email check result",
++ "description": "Whether the supplied email address is verified for the supplied subject. Unknown subjects and addresses both return false.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "verified"
++ ],
++ "properties": {
++ "verified": {
++ "type": "boolean"
++ }
++ }
++ }
++ },
"identity.subject-projection": {
"version": "1.0.0",
"owner": "network",
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex 10870517..c1d9c71f 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.348.0",
-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 48466517..7723fbd8 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.348.0",
-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 ec0546d1..2513b5fb 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.348.0",
-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 d76994d4..675ea9a6 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.348.0",
-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 dc791f1d..197ceca8 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.348.0",
-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 9298ab24..0202f875 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.348.0",
-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 ab65d57d..6d6c6c12 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.348.0",
-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 7fdcd217..8c1629be 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.348.0",
-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 4b9bb547..5868583a 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.348.0",
-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 1c1731f1..9de82030 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.348.0",
-- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 19b0e1aa..883dfaa6 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.348.0",
-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 e3a04b9a..dc5a49d8 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.348.0",
-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 bb4eea28..47c5e993 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.348.0",
-- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 f046149f..2019a6da 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.348.0",
-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 c3833c87..a0de8f6b 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.348.0",
-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 6dbb12f6..bd1ea335 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.348.0",
-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 55dce6d4..a5dcff60 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.348.0",
-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/host.json b/generated/openapi/host.json
iindex 6296f6d7..df50968c 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.348.0",
-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 90385396..f6e9dba5 100644
---- a/generated/openapi/index.json
++++ b/generated/openapi/index.json
@@@ -166,8 +166,8 @@
"service": "network",
"name": "OpenVibe.Network",
"origin": "https://openvibe.network",
-- "operations": 65,
-- "capabilities": 37
++ "operations": 67,
++ "capabilities": 38
},
{
"service": "news",
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex e0db159f..0e278fa7 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.348.0",
-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 0839f937..cb432569 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.348.0",
-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 2a516c59..fd81bec9 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.348.0",
-- "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 63cb86ae..44b03299 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.348.0",
-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 e1d2218d..2e2a7143 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.348.0",
-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 0600ef45..b2dc9937 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.348.0",
-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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"
@@@ -136,6 +136,62 @@
}
}
},
++ "/api/v1/identity/emails/verified-check": {
++ "post": {
++ "operationId": "post_api_v1_identity_emails_verified_check",
++ "summary": "Read the one verified email address a person has shared with this app, or check whether one supplied address is verified for a supplied subject.",
++ "description": "**identity.emails.read** (public): Read the one verified email address a person has shared with this app, or check whether one supplied address is verified for a supplied subject. The full address list is only available to the person in their own account hub.",
++ "tags": [
++ "identity.emails"
++ ],
++ "x-openvibe-capabilities": [
++ "identity.emails.read"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "identity-read",
++ "security": [
++ {
++ "openvibeToken": [
++ "identity.emails.read"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/identity.emails-request.v1"
++ }
++ }
++ }
++ },
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/identity.emails.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
"/api/v1/machines": {
"get": {
"operationId": "get_api_v1_machines",
@@@ -1280,6 +1336,55 @@
}
}
},
++ "/api/v1/me/emails": {
++ "get": {
++ "operationId": "get_api_v1_me_emails",
++ "summary": "Read the one verified email address a person has shared with this app, or check whether one supplied address is verified for a supplied subject.",
++ "description": "**identity.emails.read** (public): Read the one verified email address a person has shared with this app, or check whether one supplied address is verified for a supplied subject. The full address list is only available to the person in their own account hub.",
++ "tags": [
++ "identity.emails"
++ ],
++ "x-openvibe-capabilities": [
++ "identity.emails.read"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "identity-read",
++ "security": [
++ {
++ "openvibeToken": [
++ "identity.emails.read"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/identity.emails-request.v1"
++ },
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/identity.emails.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
"/api/v1/me/trust": {
"get": {
"operationId": "get_api_v1_me_trust",
@@@ -4412,6 +4517,103 @@
}
}
},
++ "identity.emails-request.v1": {
++ "title": "Read the authenticated person's shared verified email addresses",
++ "description": "An empty request body for reading the authenticated person's verified email address.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {}
++ },
++ "identity.emails.v1": {
++ "title": "Verified email addresses for the authenticated person",
++ "description": "The verified email addresses the authenticated person has shared. An app with identity.emails.read receives only the single address selected for that app; primary reflects whether it is the account's primary address.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "emails"
++ ],
++ "properties": {
++ "emails": {
++ "type": "array",
++ "items": {
++ "$ref": "#/components/schemas/identity.emails.v1/$defs/email"
++ },
++ "maxItems": 11
++ }
++ },
++ "allOf": [
++ {
++ "if": {
++ "properties": {
++ "emails": {
++ "type": "array",
++ "minItems": 1
++ }
++ },
++ "required": [
++ "emails"
++ ]
++ },
++ "then": {
++ "properties": {
++ "emails": {
++ "type": "array",
++ "contains": {
++ "type": "object",
++ "properties": {
++ "primary": {
++ "const": true
++ }
++ },
++ "required": [
++ "primary"
++ ]
++ },
++ "maxContains": 1
++ }
++ }
++ }
++ }
++ ],
++ "$defs": {
++ "email": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "id",
++ "email",
++ "verified",
++ "primary",
++ "created_at"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "minLength": 1
++ },
++ "email": {
++ "type": "string",
++ "format": "email"
++ },
++ "verified": {
++ "type": "boolean"
++ },
++ "primary": {
++ "type": "boolean"
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "verified_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ }
++ }
++ }
++ }
++ },
"identity.resolve-request.v1": {
"title": "IdentityResolveRequest",
"description": "identity.resolve-request@1: the request of identity.subject.resolve on OpenVibe.Network. GET /internal/identity/resolve?subject_id= or ?system=&id=[&type=user] takes no body. POST /internal/identity/resolve-batch: { subject_ids } or { system, type?, ids } (at most 500; 413 beyond).",
ddiff --git a/generated/openapi/news.json b/generated/openapi/news.json
iindex 5b14a9bd..680f265c 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.348.0",
-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 d3cfb43f..2b15a2b1 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.348.0",
-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 02f8db51..795b7b2f 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.348.0",
-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 ad0302ec..2c1e0c2c 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.348.0",
-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 8580a070..e42de506 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.348.0",
-- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 601f9ad5..a9e00183 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.348.0",
-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 1c171803..f8b31295 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.348.0",
-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 832f8266..8323ff90 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.348.0",
-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 8d72092c..db277f0a 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.348.0",
-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 830a74d2..a59de5ac 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.348.0",
-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 852781bd..4df20ff4 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.348.0",
-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 d77de121..0642a705 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.348.0",
-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 24017e47..73884f58 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.348.0",
-- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 1094d806..edd885ea 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.348.0",
-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 e3f5395f..8ebb136f 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.348.0",
-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 84abfadd..5ad5b212 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.348.0",
-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 cab5bbfe..2d8588f7 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.348.0",
-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 3c8b4b15..fd8d96e2 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.348.0",
-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 766c181b..da1b7c23 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.348.0",
-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 18e789f0..5b3a210b 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.348.0",
-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 67042bd1..d74d6410 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.348.0",
-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.348.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.349.0",
++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.349.0): each operation lists the capabilities it performs; a token for the 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 2cecb947..5efe118a 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -294,6 +294,601 @@ export type IdentityTrustRequest =
}
| NoBody;
++/** [email protected] (owner: network) */
++/**
++ * The verified email addresses the authenticated person has shared. An app with identity.emails.read receives only the single address selected for that app; primary reflects whether it is the account's primary address.
++ */
++export type VerifiedEmailAddressesForTheAuthenticatedPerson = {
++ [k: string]: unknown | undefined;
++} & {
++ /**
++ * @maxItems 11
++ */
++ emails:
++ | []
++ | [
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ }
++ ]
++ | [
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ }
++ ]
++ | [
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ }
++ ]
++ | [
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ }
++ ]
++ | [
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ }
++ ]
++ | [
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ }
++ ]
++ | [
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ }
++ ]
++ | [
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ }
++ ]
++ | [
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ }
++ ]
++ | [
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ }
++ ]
++ | [
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ },
++ {
++ id: string;
++ email: string;
++ verified: boolean;
++ primary: boolean;
++ created_at: string;
++ verified_at?: string | null;
++ }
++ ];
++};
++
++/** [email protected] (owner: network) */
++/**
++ * An empty request body for reading the authenticated person's verified email address.
++ */
++export interface ReadTheAuthenticatedPersonSSharedVerifiedEmailAddresses {}
++
++/** [email protected] (owner: network) */
++/**
++ * A single email address the account owner wants to verify and attach to their own account.
++ */
++export interface AddAnEmailAddressToTheAuthenticatedPersonSAccount {
++ email: string;
++}
++
++/** [email protected] (owner: network) */
++/**
++ * A service with identity.emails.read asks whether one supplied email address is verified for one Network subject. The response never reveals address lists or whether an unknown subject exists.
++ */
++export interface CheckAPersonSVerifiedEmailAddress {
++ subject: string;
++ email: string;
++}
++
++/** [email protected] (owner: network) */
++/**
++ * Whether the supplied email address is verified for the supplied subject. Unknown subjects and addresses both return false.
++ */
++export interface VerifiedEmailCheckResult {
++ verified: boolean;
++}
++
/** [email protected] (owner: network) */
/**
* identity.subject-projection@1: what OpenVibe.Network's identity resolver answers about a subject (server/identity/subjects.js resolve): the SubjectRef, the Network account behind it, its display fields, whether it is banned, and every legacy id mapped to it.
ddiff --git a/manifests/capabilities/identity.emails.read.json b/manifests/capabilities/identity.emails.read.json
nnew file mode 100644
iindex 00000000..aad22e0d
---- /dev/null
++++ b/manifests/capabilities/identity.emails.read.json
@@@ -0,0 +1,15 @@
++{
++ "id": "identity.emails.read",
++ "version": "1.0",
++ "owner": "network",
++ "status": "active",
++ "visibility": "public",
++ "description": "Read the one verified email address a person has shared with this app, or check whether one supplied address is verified for a supplied subject. The full address list is only available to the person in their own account hub.",
++ "inputSchema": "identity.emails-request@1",
++ "outputSchema": "identity.emails@1",
++ "permissions": ["identity:read"],
++ "resourceConstraints": ["none"],
++ "quotaClass": "identity-read",
++ "events": [],
++ "implementedBy": ["GET /api/v1/me/emails", "POST /api/v1/identity/emails/verified-check"]
++}
ddiff --git a/manifests/services/network.json b/manifests/services/network.json
iindex f7b91c71..08190e47 100644
---- a/manifests/services/network.json
++++ b/manifests/services/network.json
@@@ -49,6 +49,7 @@
"neighbourhood": "people"
},
"capabilities": [
++ "identity.emails.read",
"identity.subject.resolve",
"identity.trust.read",
"mods.grant.manage",
ddiff --git a/package-lock.json b/package-lock.json
iindex e448867b..cacbe4f1 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -1,12 +1,12 @@
{
"name": "openvibe-contracts",
-- "version": "0.348.0",
++ "version": "0.349.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openvibe-contracts",
-- "version": "0.348.0",
++ "version": "0.349.0",
"license": "AGPL-3.0-only",
"dependencies": {
"ajv": "^8.17.1",
ddiff --git a/package.json b/package.json
iindex b32a8152..c31d9aa6 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.348.0",
++ "version": "0.349.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",