openvibers/openvibe.contracts Commits

Define universal wallet and reviewed store contracts (#371)

OP OpenVibers committed 4 days ago · 333ff01dfb · 73 files, +2040 −99

* Define universal wallet and reviewed store contracts

* billing.wallet@1: providers name the hosts their checkout may use (as Billing #228 answers)

* 0.368.0: on top of main (The wallet and the reviewed store: billing.wallet@1, invento)

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 04ebea2f..2decb437 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -1,5 +1,9 @@
# Changelog
++## 0.368.0 — 2026-11-09
++
++- The wallet and the reviewed store: billing.wallet@1, inventory.store@1, inventory.store-listing@1, inventory.purchase@1
++
## 0.367.0 — 2026-11-09
- publishing.block@1: the rich content block of a post or an article body
ddiff --git a/contracts/billing/wallet.v1.json b/contracts/billing/wallet.v1.json
nnew file mode 100644
iindex 00000000..087d1bba
---- /dev/null
++++ b/contracts/billing/wallet.v1.json
@@@ -0,0 +1,339 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/billing/wallet.v1.json",
++ "title": "BillingWallet",
++ "description": "Universal wallet: billing.wallet. Personal bearer reads and purchases; server-side reviewed prices.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "subject": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "type": {
++ "const": "user"
++ },
++ "id": {
++ "type": "string",
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ }
++ },
++ "required": [
++ "type",
++ "id"
++ ]
++ },
++ "currency": {
++ "const": "USD"
++ },
++ "money_writes_frozen": {
++ "type": "boolean"
++ },
++ "used_ai_this_month": {
++ "type": "boolean"
++ },
++ "balances": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "coins": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "label": {
++ "type": "string"
++ },
++ "amount": {
++ "type": "string",
++ "pattern": "^[0-9]+$"
++ },
++ "currency": {
++ "type": "string",
++ "enum": [
++ "opencoins",
++ "vibes-bits",
++ "USD"
++ ]
++ },
++ "scale": {
++ "type": "integer",
++ "enum": [
++ 0,
++ 9
++ ]
++ },
++ "purpose": {
++ "type": "string"
++ },
++ "action": {
++ "type": "string"
++ },
++ "held": {
++ "type": "string",
++ "pattern": "^[0-9]+$"
++ }
++ },
++ "required": [
++ "label",
++ "amount",
++ "currency",
++ "scale",
++ "purpose",
++ "action"
++ ]
++ },
++ "vibes": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "label": {
++ "type": "string"
++ },
++ "amount": {
++ "type": "string",
++ "pattern": "^[0-9]+$"
++ },
++ "currency": {
++ "type": "string",
++ "enum": [
++ "opencoins",
++ "vibes-bits",
++ "USD"
++ ]
++ },
++ "scale": {
++ "type": "integer",
++ "enum": [
++ 0,
++ 9
++ ]
++ },
++ "purpose": {
++ "type": "string"
++ },
++ "action": {
++ "type": "string"
++ },
++ "held": {
++ "type": "string",
++ "pattern": "^[0-9]+$"
++ }
++ },
++ "required": [
++ "label",
++ "amount",
++ "currency",
++ "scale",
++ "purpose",
++ "action"
++ ]
++ },
++ "balance": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "label": {
++ "type": "string"
++ },
++ "amount": {
++ "type": "string",
++ "pattern": "^[0-9]+$"
++ },
++ "currency": {
++ "type": "string",
++ "enum": [
++ "opencoins",
++ "vibes-bits",
++ "USD"
++ ]
++ },
++ "scale": {
++ "type": "integer",
++ "enum": [
++ 0,
++ 9
++ ]
++ },
++ "purpose": {
++ "type": "string"
++ },
++ "action": {
++ "type": "string"
++ },
++ "held": {
++ "type": "string",
++ "pattern": "^[0-9]+$"
++ }
++ },
++ "required": [
++ "label",
++ "amount",
++ "currency",
++ "scale",
++ "purpose",
++ "action"
++ ]
++ }
++ },
++ "required": [
++ "coins",
++ "vibes",
++ "balance"
++ ]
++ },
++ "bits_per_usd": {
++ "type": "number",
++ "exclusiveMinimum": 0
++ },
++ "recent_activity": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "id": {
++ "type": "string"
++ },
++ "at": {
++ "type": "string",
++ "format": "date-time"
++ },
++ "kind": {
++ "type": "string",
++ "enum": [
++ "coins",
++ "vibes",
++ "balance"
++ ]
++ },
++ "amount": {
++ "type": "string",
++ "pattern": "^-?[0-9]+$"
++ },
++ "label": {
++ "type": "string"
++ },
++ "detail": {
++ "type": "string"
++ },
++ "site": {
++ "type": "string"
++ }
++ },
++ "required": [
++ "id",
++ "at",
++ "kind",
++ "amount",
++ "label",
++ "detail",
++ "site"
++ ]
++ },
++ "maxItems": 5
++ },
++ "checkout": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "providers": {
++ "type": "array",
++ "description": "The checkout providers on offer, each with the hosts its hosted checkout may use. The wallet follows a checkout_url only to one of these hosts or to Billing itself.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["name", "hosts"],
++ "properties": {
++ "name": { "type": "string", "minLength": 1, "maxLength": 40 },
++ "hosts": { "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 253 } }
++ }
++ }
++ },
++ "vibes": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "minimum": {
++ "type": "integer",
++ "minimum": 1
++ },
++ "maximum": {
++ "type": "integer",
++ "minimum": 1
++ },
++ "price_tiers": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "min": {
++ "type": "integer",
++ "minimum": 0
++ },
++ "usd_per_bit": {
++ "type": "number",
++ "exclusiveMinimum": 0
++ }
++ },
++ "required": [
++ "min",
++ "usd_per_bit"
++ ]
++ }
++ }
++ },
++ "required": [
++ "minimum",
++ "maximum",
++ "price_tiers"
++ ]
++ },
++ "topup": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "enabled": {
++ "type": "boolean"
++ },
++ "amounts_cents": {
++ "type": "array",
++ "items": {
++ "type": "integer",
++ "minimum": 1
++ }
++ },
++ "fee_bps": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0,
++ "maximum": 10000
++ }
++ },
++ "required": [
++ "enabled",
++ "amounts_cents",
++ "fee_bps"
++ ]
++ }
++ },
++ "required": [
++ "providers",
++ "vibes",
++ "topup"
++ ]
++ }
++ },
++ "required": [
++ "subject",
++ "currency",
++ "money_writes_frozen",
++ "used_ai_this_month",
++ "balances",
++ "bits_per_usd",
++ "recent_activity",
++ "checkout"
++ ]
++}
ddiff --git a/contracts/catalog.json b/contracts/catalog.json
iindex 2d20b5a0..2aa1a214 100644
---- a/contracts/catalog.json
++++ b/contracts/catalog.json
@@@ -10677,6 +10677,51 @@
"visibility": "first-party",
"compatibility": "backward",
"status": "active"
++ },
++ {
++ "id": "billing.wallet",
++ "version": "1.0.0",
++ "owner": "billing",
++ "schema": "billing/wallet.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "inventory.store",
++ "version": "1.0.0",
++ "owner": "inventory",
++ "schema": "inventory/store.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "inventory.purchase",
++ "version": "1.0.0",
++ "owner": "inventory",
++ "schema": "inventory/purchase.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "inventory.store-listing-request",
++ "version": "1.0.0",
++ "owner": "inventory",
++ "schema": "inventory/store-listing-request.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "inventory.store-listing",
++ "version": "1.0.0",
++ "owner": "inventory",
++ "schema": "inventory/store-listing.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
}
]
}
ddiff --git a/contracts/inventory/purchase.v1.json b/contracts/inventory/purchase.v1.json
nnew file mode 100644
iindex 00000000..976b95cd
---- /dev/null
++++ b/contracts/inventory/purchase.v1.json
@@@ -0,0 +1,76 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/inventory/purchase.v1.json",
++ "title": "InventoryPurchase",
++ "description": "Universal wallet: inventory.purchase. Personal bearer reads and purchases; server-side reviewed prices.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^isp_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "subject": {
++ "type": "string",
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "item_id": {
++ "type": "string",
++ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "name": {
++ "type": "string"
++ },
++ "issuer": {
++ "type": "string"
++ },
++ "currency": {
++ "type": "string",
++ "enum": [
++ "vibes",
++ "coins"
++ ]
++ },
++ "amount": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ },
++ "status": {
++ "type": "string",
++ "enum": [
++ "pending",
++ "fulfilled"
++ ]
++ },
++ "instance_id": {
++ "anyOf": [
++ {
++ "type": "string",
++ "pattern": "^inv_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ {
++ "type": "null"
++ }
++ ]
++ },
++ "payment_id": {
++ "type": [
++ "string",
++ "null"
++ ]
++ }
++ },
++ "required": [
++ "id",
++ "subject",
++ "item_id",
++ "name",
++ "issuer",
++ "currency",
++ "amount",
++ "status",
++ "instance_id",
++ "payment_id"
++ ]
++}
ddiff --git a/contracts/inventory/store-listing-request.v1.json b/contracts/inventory/store-listing-request.v1.json
nnew file mode 100644
iindex 00000000..66593363
---- /dev/null
++++ b/contracts/inventory/store-listing-request.v1.json
@@@ -0,0 +1,31 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/inventory/store-listing-request.v1.json",
++ "title": "InventoryStoreListingRequest",
++ "description": "Universal wallet: inventory.store-listing-request. Personal bearer reads and purchases; server-side reviewed prices.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "prices": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "vibes": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ },
++ "coins": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ }
++ },
++ "required": [],
++ "minProperties": 1
++ }
++ },
++ "required": [
++ "prices"
++ ]
++}
ddiff --git a/contracts/inventory/store-listing.v1.json b/contracts/inventory/store-listing.v1.json
nnew file mode 100644
iindex 00000000..d3d75dda
---- /dev/null
++++ b/contracts/inventory/store-listing.v1.json
@@@ -0,0 +1,49 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/inventory/store-listing.v1.json",
++ "title": "InventoryStoreListing",
++ "description": "Universal wallet: inventory.store-listing-request. Personal bearer reads and purchases; server-side reviewed prices.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "definition_id": {
++ "type": "string",
++ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "issuer": {
++ "type": "string"
++ },
++ "prices": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "vibes": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ },
++ "coins": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ }
++ },
++ "required": [],
++ "minProperties": 1
++ },
++ "status": {
++ "type": "string",
++ "enum": [
++ "in_review",
++ "published",
++ "rejected"
++ ]
++ }
++ },
++ "required": [
++ "definition_id",
++ "issuer",
++ "prices",
++ "status"
++ ]
++}
ddiff --git a/contracts/inventory/store.v1.json b/contracts/inventory/store.v1.json
nnew file mode 100644
iindex 00000000..6a80466b
---- /dev/null
++++ b/contracts/inventory/store.v1.json
@@@ -0,0 +1,119 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/inventory/store.v1.json",
++ "title": "InventoryStore",
++ "description": "Universal wallet: inventory.store. Personal bearer reads and purchases; server-side reviewed prices.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "items": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "name": {
++ "type": "string"
++ },
++ "description": {
++ "type": "string"
++ },
++ "issuer": {
++ "type": "string"
++ },
++ "prices": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "vibes": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ },
++ "coins": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ }
++ },
++ "required": [],
++ "minProperties": 1
++ },
++ "preview": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "emoji": {
++ "type": "string",
++ "maxLength": 64
++ },
++ "token": {
++ "type": "string",
++ "maxLength": 120
++ },
++ "media_id": {
++ "type": "string",
++ "pattern": "^med_[0-9A-HJKMNP-TV-Z]{26}$"
++ }
++ },
++ "required": []
++ },
++ "kind": {
++ "type": "string"
++ },
++ "slots": {
++ "type": "array",
++ "items": {
++ "type": "string"
++ }
++ },
++ "surfaces": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "surface": {
++ "type": "string"
++ },
++ "renderer": {
++ "type": "string"
++ }
++ },
++ "required": [
++ "surface"
++ ]
++ }
++ },
++ "owned": {
++ "type": "boolean"
++ },
++ "available": {
++ "type": "boolean"
++ }
++ },
++ "required": [
++ "id",
++ "name",
++ "description",
++ "issuer",
++ "prices",
++ "preview",
++ "kind",
++ "slots",
++ "surfaces",
++ "owned",
++ "available"
++ ]
++ },
++ "maxItems": 200
++ }
++ },
++ "required": [
++ "items"
++ ]
++}
ddiff --git a/fixtures/billing.wallet/invalid/invalid-value.json b/fixtures/billing.wallet/invalid/invalid-value.json
nnew file mode 100644
iindex 00000000..50c1a893
---- /dev/null
++++ b/fixtures/billing.wallet/invalid/invalid-value.json
@@@ -0,0 +1,34 @@
++{
++ "subject": {
++ "type": "user",
++ "id": "usr_00000000000000000000000001"
++ },
++ "currency": "USD",
++ "money_writes_frozen": false,
++ "used_ai_this_month": true,
++ "balances": {},
++ "bits_per_usd": 100,
++ "recent_activity": [],
++ "checkout": {
++ "providers": [
++ "stripe"
++ ],
++ "vibes": {
++ "minimum": 100,
++ "maximum": 100000,
++ "price_tiers": [
++ {
++ "min": 100,
++ "usd_per_bit": 0.012
++ }
++ ]
++ },
++ "topup": {
++ "enabled": true,
++ "amounts_cents": [
++ 1000
++ ],
++ "fee_bps": 0
++ }
++ }
++}
ddiff --git a/fixtures/billing.wallet/invalid/missing.json b/fixtures/billing.wallet/invalid/missing.json
nnew file mode 100644
iindex 00000000..0967ef42
---- /dev/null
++++ b/fixtures/billing.wallet/invalid/missing.json
@@@ -0,0 +1 @@
++{}
ddiff --git a/fixtures/billing.wallet/valid/example.json b/fixtures/billing.wallet/valid/example.json
nnew file mode 100644
iindex 00000000..3e6c6813
---- /dev/null
++++ b/fixtures/billing.wallet/valid/example.json
@@@ -0,0 +1,59 @@
++{
++ "subject": {
++ "type": "user",
++ "id": "usr_00000000000000000000000001"
++ },
++ "currency": "USD",
++ "money_writes_frozen": false,
++ "used_ai_this_month": true,
++ "balances": {
++ "coins": {
++ "label": "OpenCoins",
++ "amount": "0",
++ "currency": "opencoins",
++ "scale": 0,
++ "purpose": "Earned by taking part",
++ "action": "How to earn OpenCoins"
++ },
++ "vibes": {
++ "label": "Vibes",
++ "amount": "0",
++ "currency": "vibes-bits",
++ "scale": 0,
++ "purpose": "Support creators and buy items",
++ "action": "Buy Vibes"
++ },
++ "balance": {
++ "label": "Balance",
++ "amount": "0",
++ "currency": "USD",
++ "scale": 9,
++ "purpose": "AI and paid features",
++ "action": "Top up"
++ }
++ },
++ "bits_per_usd": 100,
++ "recent_activity": [],
++ "checkout": {
++ "providers": [
++ { "name": "stripe", "hosts": ["checkout.stripe.com"] }
++ ],
++ "vibes": {
++ "minimum": 100,
++ "maximum": 100000,
++ "price_tiers": [
++ {
++ "min": 100,
++ "usd_per_bit": 0.012
++ }
++ ]
++ },
++ "topup": {
++ "enabled": true,
++ "amounts_cents": [
++ 1000
++ ],
++ "fee_bps": 0
++ }
++ }
++}
ddiff --git a/fixtures/inventory.purchase/invalid/invalid-value.json b/fixtures/inventory.purchase/invalid/invalid-value.json
nnew file mode 100644
iindex 00000000..a446b307
---- /dev/null
++++ b/fixtures/inventory.purchase/invalid/invalid-value.json
@@@ -0,0 +1,12 @@
++{
++ "id": "isp_00000000000000000000000001",
++ "subject": "usr_00000000000000000000000001",
++ "item_id": "itd_00000000000000000000000001",
++ "name": "Rainbow",
++ "issuer": "service:live",
++ "currency": "vibes",
++ "amount": 0,
++ "status": "pending",
++ "instance_id": null,
++ "payment_id": null
++}
ddiff --git a/fixtures/inventory.purchase/invalid/missing.json b/fixtures/inventory.purchase/invalid/missing.json
nnew file mode 100644
iindex 00000000..0967ef42
---- /dev/null
++++ b/fixtures/inventory.purchase/invalid/missing.json
@@@ -0,0 +1 @@
++{}
ddiff --git a/fixtures/inventory.purchase/valid/example.json b/fixtures/inventory.purchase/valid/example.json
nnew file mode 100644
iindex 00000000..d17febf8
---- /dev/null
++++ b/fixtures/inventory.purchase/valid/example.json
@@@ -0,0 +1,12 @@
++{
++ "id": "isp_00000000000000000000000001",
++ "subject": "usr_00000000000000000000000001",
++ "item_id": "itd_00000000000000000000000001",
++ "name": "Rainbow",
++ "issuer": "service:live",
++ "currency": "vibes",
++ "amount": 50,
++ "status": "pending",
++ "instance_id": null,
++ "payment_id": null
++}
ddiff --git a/fixtures/inventory.store-listing-request/invalid/invalid-value.json b/fixtures/inventory.store-listing-request/invalid/invalid-value.json
nnew file mode 100644
iindex 00000000..d006373d
---- /dev/null
++++ b/fixtures/inventory.store-listing-request/invalid/invalid-value.json
@@@ -0,0 +1,5 @@
++{
++ "prices": {
++ "vibes": -1
++ }
++}
ddiff --git a/fixtures/inventory.store-listing-request/invalid/missing.json b/fixtures/inventory.store-listing-request/invalid/missing.json
nnew file mode 100644
iindex 00000000..0967ef42
---- /dev/null
++++ b/fixtures/inventory.store-listing-request/invalid/missing.json
@@@ -0,0 +1 @@
++{}
ddiff --git a/fixtures/inventory.store-listing-request/valid/example.json b/fixtures/inventory.store-listing-request/valid/example.json
nnew file mode 100644
iindex 00000000..d3187b33
---- /dev/null
++++ b/fixtures/inventory.store-listing-request/valid/example.json
@@@ -0,0 +1,6 @@
++{
++ "prices": {
++ "vibes": 50,
++ "coins": 250
++ }
++}
ddiff --git a/fixtures/inventory.store-listing/invalid/missing.json b/fixtures/inventory.store-listing/invalid/missing.json
nnew file mode 100644
iindex 00000000..0967ef42
---- /dev/null
++++ b/fixtures/inventory.store-listing/invalid/missing.json
@@@ -0,0 +1 @@
++{}
ddiff --git a/fixtures/inventory.store-listing/valid/review.json b/fixtures/inventory.store-listing/valid/review.json
nnew file mode 100644
iindex 00000000..08db55aa
---- /dev/null
++++ b/fixtures/inventory.store-listing/valid/review.json
@@@ -0,0 +1,8 @@
++{
++ "definition_id": "itd_00000000000000000000000001",
++ "issuer": "service:live",
++ "prices": {
++ "vibes": 50
++ },
++ "status": "in_review"
++}
ddiff --git a/fixtures/inventory.store/invalid/missing.json b/fixtures/inventory.store/invalid/missing.json
nnew file mode 100644
iindex 00000000..0967ef42
---- /dev/null
++++ b/fixtures/inventory.store/invalid/missing.json
@@@ -0,0 +1 @@
++{}
ddiff --git a/fixtures/inventory.store/valid/example.json b/fixtures/inventory.store/valid/example.json
nnew file mode 100644
iindex 00000000..985db9a5
---- /dev/null
++++ b/fixtures/inventory.store/valid/example.json
@@@ -0,0 +1,29 @@
++{
++ "items": [
++ {
++ "id": "itd_00000000000000000000000001",
++ "name": "Rainbow",
++ "description": "Name effect",
++ "issuer": "service:live",
++ "prices": {
++ "vibes": 50,
++ "coins": 250
++ },
++ "preview": {
++ "token": "name-fx-rainbow"
++ },
++ "kind": "live.name_effect",
++ "slots": [
++ "name_effect"
++ ],
++ "surfaces": [
++ {
++ "surface": "chat",
++ "renderer": "live.name_effect.css@1"
++ }
++ ],
++ "owned": false,
++ "available": true
++ }
++ ]
++}
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex a6c807b5..0052552b 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -117113,6 +117113,659 @@
}
}
}
++ },
++ "billing.wallet": {
++ "version": "1.0.0",
++ "owner": "billing",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/billing/wallet.v1.json",
++ "title": "BillingWallet",
++ "description": "Universal wallet: billing.wallet. Personal bearer reads and purchases; server-side reviewed prices.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "subject": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "type": {
++ "const": "user"
++ },
++ "id": {
++ "type": "string",
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ }
++ },
++ "required": [
++ "type",
++ "id"
++ ]
++ },
++ "currency": {
++ "const": "USD"
++ },
++ "money_writes_frozen": {
++ "type": "boolean"
++ },
++ "used_ai_this_month": {
++ "type": "boolean"
++ },
++ "balances": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "coins": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "label": {
++ "type": "string"
++ },
++ "amount": {
++ "type": "string",
++ "pattern": "^[0-9]+$"
++ },
++ "currency": {
++ "type": "string",
++ "enum": [
++ "opencoins",
++ "vibes-bits",
++ "USD"
++ ]
++ },
++ "scale": {
++ "type": "integer",
++ "enum": [
++ 0,
++ 9
++ ]
++ },
++ "purpose": {
++ "type": "string"
++ },
++ "action": {
++ "type": "string"
++ },
++ "held": {
++ "type": "string",
++ "pattern": "^[0-9]+$"
++ }
++ },
++ "required": [
++ "label",
++ "amount",
++ "currency",
++ "scale",
++ "purpose",
++ "action"
++ ]
++ },
++ "vibes": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "label": {
++ "type": "string"
++ },
++ "amount": {
++ "type": "string",
++ "pattern": "^[0-9]+$"
++ },
++ "currency": {
++ "type": "string",
++ "enum": [
++ "opencoins",
++ "vibes-bits",
++ "USD"
++ ]
++ },
++ "scale": {
++ "type": "integer",
++ "enum": [
++ 0,
++ 9
++ ]
++ },
++ "purpose": {
++ "type": "string"
++ },
++ "action": {
++ "type": "string"
++ },
++ "held": {
++ "type": "string",
++ "pattern": "^[0-9]+$"
++ }
++ },
++ "required": [
++ "label",
++ "amount",
++ "currency",
++ "scale",
++ "purpose",
++ "action"
++ ]
++ },
++ "balance": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "label": {
++ "type": "string"
++ },
++ "amount": {
++ "type": "string",
++ "pattern": "^[0-9]+$"
++ },
++ "currency": {
++ "type": "string",
++ "enum": [
++ "opencoins",
++ "vibes-bits",
++ "USD"
++ ]
++ },
++ "scale": {
++ "type": "integer",
++ "enum": [
++ 0,
++ 9
++ ]
++ },
++ "purpose": {
++ "type": "string"
++ },
++ "action": {
++ "type": "string"
++ },
++ "held": {
++ "type": "string",
++ "pattern": "^[0-9]+$"
++ }
++ },
++ "required": [
++ "label",
++ "amount",
++ "currency",
++ "scale",
++ "purpose",
++ "action"
++ ]
++ }
++ },
++ "required": [
++ "coins",
++ "vibes",
++ "balance"
++ ]
++ },
++ "bits_per_usd": {
++ "type": "number",
++ "exclusiveMinimum": 0
++ },
++ "recent_activity": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "id": {
++ "type": "string"
++ },
++ "at": {
++ "type": "string",
++ "format": "date-time"
++ },
++ "kind": {
++ "type": "string",
++ "enum": [
++ "coins",
++ "vibes",
++ "balance"
++ ]
++ },
++ "amount": {
++ "type": "string",
++ "pattern": "^-?[0-9]+$"
++ },
++ "label": {
++ "type": "string"
++ },
++ "detail": {
++ "type": "string"
++ },
++ "site": {
++ "type": "string"
++ }
++ },
++ "required": [
++ "id",
++ "at",
++ "kind",
++ "amount",
++ "label",
++ "detail",
++ "site"
++ ]
++ },
++ "maxItems": 5
++ },
++ "checkout": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "providers": {
++ "type": "array",
++ "description": "The checkout providers on offer, each with the hosts its hosted checkout may use. The wallet follows a checkout_url only to one of these hosts or to Billing itself.",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "name",
++ "hosts"
++ ],
++ "properties": {
++ "name": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 40
++ },
++ "hosts": {
++ "type": "array",
++ "items": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 253
++ }
++ }
++ }
++ }
++ },
++ "vibes": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "minimum": {
++ "type": "integer",
++ "minimum": 1
++ },
++ "maximum": {
++ "type": "integer",
++ "minimum": 1
++ },
++ "price_tiers": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "min": {
++ "type": "integer",
++ "minimum": 0
++ },
++ "usd_per_bit": {
++ "type": "number",
++ "exclusiveMinimum": 0
++ }
++ },
++ "required": [
++ "min",
++ "usd_per_bit"
++ ]
++ }
++ }
++ },
++ "required": [
++ "minimum",
++ "maximum",
++ "price_tiers"
++ ]
++ },
++ "topup": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "enabled": {
++ "type": "boolean"
++ },
++ "amounts_cents": {
++ "type": "array",
++ "items": {
++ "type": "integer",
++ "minimum": 1
++ }
++ },
++ "fee_bps": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0,
++ "maximum": 10000
++ }
++ },
++ "required": [
++ "enabled",
++ "amounts_cents",
++ "fee_bps"
++ ]
++ }
++ },
++ "required": [
++ "providers",
++ "vibes",
++ "topup"
++ ]
++ }
++ },
++ "required": [
++ "subject",
++ "currency",
++ "money_writes_frozen",
++ "used_ai_this_month",
++ "balances",
++ "bits_per_usd",
++ "recent_activity",
++ "checkout"
++ ]
++ }
++ },
++ "inventory.store": {
++ "version": "1.0.0",
++ "owner": "inventory",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/inventory/store.v1.json",
++ "title": "InventoryStore",
++ "description": "Universal wallet: inventory.store. Personal bearer reads and purchases; server-side reviewed prices.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "items": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "name": {
++ "type": "string"
++ },
++ "description": {
++ "type": "string"
++ },
++ "issuer": {
++ "type": "string"
++ },
++ "prices": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "vibes": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ },
++ "coins": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ }
++ },
++ "required": [],
++ "minProperties": 1
++ },
++ "preview": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "emoji": {
++ "type": "string",
++ "maxLength": 64
++ },
++ "token": {
++ "type": "string",
++ "maxLength": 120
++ },
++ "media_id": {
++ "type": "string",
++ "pattern": "^med_[0-9A-HJKMNP-TV-Z]{26}$"
++ }
++ },
++ "required": []
++ },
++ "kind": {
++ "type": "string"
++ },
++ "slots": {
++ "type": "array",
++ "items": {
++ "type": "string"
++ }
++ },
++ "surfaces": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "surface": {
++ "type": "string"
++ },
++ "renderer": {
++ "type": "string"
++ }
++ },
++ "required": [
++ "surface"
++ ]
++ }
++ },
++ "owned": {
++ "type": "boolean"
++ },
++ "available": {
++ "type": "boolean"
++ }
++ },
++ "required": [
++ "id",
++ "name",
++ "description",
++ "issuer",
++ "prices",
++ "preview",
++ "kind",
++ "slots",
++ "surfaces",
++ "owned",
++ "available"
++ ]
++ },
++ "maxItems": 200
++ }
++ },
++ "required": [
++ "items"
++ ]
++ }
++ },
++ "inventory.purchase": {
++ "version": "1.0.0",
++ "owner": "inventory",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/inventory/purchase.v1.json",
++ "title": "InventoryPurchase",
++ "description": "Universal wallet: inventory.purchase. Personal bearer reads and purchases; server-side reviewed prices.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^isp_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "subject": {
++ "type": "string",
++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "item_id": {
++ "type": "string",
++ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "name": {
++ "type": "string"
++ },
++ "issuer": {
++ "type": "string"
++ },
++ "currency": {
++ "type": "string",
++ "enum": [
++ "vibes",
++ "coins"
++ ]
++ },
++ "amount": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ },
++ "status": {
++ "type": "string",
++ "enum": [
++ "pending",
++ "fulfilled"
++ ]
++ },
++ "instance_id": {
++ "anyOf": [
++ {
++ "type": "string",
++ "pattern": "^inv_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ {
++ "type": "null"
++ }
++ ]
++ },
++ "payment_id": {
++ "type": [
++ "string",
++ "null"
++ ]
++ }
++ },
++ "required": [
++ "id",
++ "subject",
++ "item_id",
++ "name",
++ "issuer",
++ "currency",
++ "amount",
++ "status",
++ "instance_id",
++ "payment_id"
++ ]
++ }
++ },
++ "inventory.store-listing-request": {
++ "version": "1.0.0",
++ "owner": "inventory",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/inventory/store-listing-request.v1.json",
++ "title": "InventoryStoreListingRequest",
++ "description": "Universal wallet: inventory.store-listing-request. Personal bearer reads and purchases; server-side reviewed prices.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "prices": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "vibes": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ },
++ "coins": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ }
++ },
++ "required": [],
++ "minProperties": 1
++ }
++ },
++ "required": [
++ "prices"
++ ]
++ }
++ },
++ "inventory.store-listing": {
++ "version": "1.0.0",
++ "owner": "inventory",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/inventory/store-listing.v1.json",
++ "title": "InventoryStoreListing",
++ "description": "Universal wallet: inventory.store-listing-request. Personal bearer reads and purchases; server-side reviewed prices.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "definition_id": {
++ "type": "string",
++ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "issuer": {
++ "type": "string"
++ },
++ "prices": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "vibes": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ },
++ "coins": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ }
++ },
++ "required": [],
++ "minProperties": 1
++ },
++ "status": {
++ "type": "string",
++ "enum": [
++ "in_review",
++ "published",
++ "rejected"
++ ]
++ }
++ },
++ "required": [
++ "definition_id",
++ "issuer",
++ "prices",
++ "status"
++ ]
++ }
}
}
}
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex f3a32afc..09e52a69 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.367.0",
-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 c2759547..60cb5e93 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.367.0",
-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 a75165e7..1cfba8d9 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.367.0",
-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 728d3d9e..813333ee 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.367.0",
-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 53a4e591..a3a1cebc 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.367.0",
-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 9d6dc6ad..a084b0c2 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.367.0",
-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 7033fd97..96365dce 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.367.0",
-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 00a25b37..906e0aed 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.367.0",
-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 5faf52f6..4ce80605 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.367.0",
-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 634cc1f0..9ea13101 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.367.0",
-- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 9b2f54ad..3171e69f 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.367.0",
-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 50c20824..d6218569 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.367.0",
-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 159b1159..1436f6fd 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.367.0",
-- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 afe21cff..d79e4424 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.367.0",
-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 35027461..8ea3163d 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.367.0",
-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 e1d60448..fce98c25 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.367.0",
-- "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 271e37d9..13fc7e73 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.367.0",
-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 2e58f007..edc5ee84 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.367.0",
-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 568aecca..9c3ce705 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.367.0",
-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 94472fab..fd2c0f8f 100644
---- a/generated/openapi/index.json
++++ b/generated/openapi/index.json
@@@ -138,8 +138,8 @@
"service": "inventory",
"name": "OpenVibe.Inventory",
"origin": "https://inventory.openvibe.network",
-- "operations": 15,
-- "capabilities": 7
++ "operations": 16,
++ "capabilities": 8
},
{
"service": "live",
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex f1a90b47..ac9b817d 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.367.0",
-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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"
@@@ -831,6 +831,72 @@
}
}
}
++ },
++ "/api/v1/store/{id}/list": {
++ "post": {
++ "operationId": "post_api_v1_store_id_list",
++ "summary": "Submit a published cosmetic issued by this app for store listing, with positive whole Vibes/OpenCoins prices.",
++ "description": "**inventory.store.list** (public): Submit a published cosmetic issued by this app for store listing, with positive whole Vibes/OpenCoins prices. Every new listing and price change requires staff review before it is visible. The issuer is verified from the token; this capability does not grant review or purchase authority.",
++ "tags": [
++ "inventory.store"
++ ],
++ "x-openvibe-capabilities": [
++ "inventory.store.list"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "inventory-write",
++ "security": [
++ {
++ "openvibeToken": [
++ "inventory.store.list"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/inventory.store-listing-request.v1"
++ }
++ }
++ }
++ },
++ "parameters": [
++ {
++ "name": "id",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/inventory.store-listing.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
}
},
"components": {
@@@ -1417,6 +1483,82 @@
"reason"
]
}
++ },
++ "inventory.store-listing-request.v1": {
++ "title": "InventoryStoreListingRequest",
++ "description": "Universal wallet: inventory.store-listing-request. Personal bearer reads and purchases; server-side reviewed prices.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "prices": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "vibes": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ },
++ "coins": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ }
++ },
++ "required": [],
++ "minProperties": 1
++ }
++ },
++ "required": [
++ "prices"
++ ]
++ },
++ "inventory.store-listing.v1": {
++ "title": "InventoryStoreListing",
++ "description": "Universal wallet: inventory.store-listing-request. Personal bearer reads and purchases; server-side reviewed prices.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "definition_id": {
++ "type": "string",
++ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "issuer": {
++ "type": "string"
++ },
++ "prices": {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "vibes": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ },
++ "coins": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 9007199254740991
++ }
++ },
++ "required": [],
++ "minProperties": 1
++ },
++ "status": {
++ "type": "string",
++ "enum": [
++ "in_review",
++ "published",
++ "rejected"
++ ]
++ }
++ },
++ "required": [
++ "definition_id",
++ "issuer",
++ "prices",
++ "status"
++ ]
}
},
"securitySchemes": {
ddiff --git a/generated/openapi/live.json b/generated/openapi/live.json
iindex ddfc941e..00ea4c82 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.367.0",
-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 aad3566f..defdf8f5 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.367.0",
-- "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 1511e237..5e14eef0 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.367.0",
-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 d7eec701..9904f8e6 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.367.0",
-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 c40f305a..7ec2b02a 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.367.0",
-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 7897d3de..6de5fef8 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.367.0",
-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 0aca6d33..c2509d42 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.367.0",
-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 b261e80d..4a84b361 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.367.0",
-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 299f89ac..8cf51793 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.367.0",
-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 ee4eefec..1544d521 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.367.0",
-- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 ba64cfc3..92e3c0b1 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.367.0",
-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 950fb602..42db9042 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.367.0",
-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 8f1803d8..1cd0d469 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.367.0",
-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 a59be83a..6c9a215b 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.367.0",
-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 aade8819..d455d6ab 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.367.0",
-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 446758a4..48460cee 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.367.0",
-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 a8ca4b75..a83ac22c 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.367.0",
-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 81686dd1..e3fa2ce6 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.367.0",
-- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 d354e203..f41f0625 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.367.0",
-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 0c3c9dcd..25b20bc3 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.367.0",
-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 f40bdcb7..ffae7a0d 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.367.0",
-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 2eb9a289..569dc77b 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.367.0",
-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 95698a1a..44eac41a 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.367.0",
-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 d3e0dc9f..a7a8403c 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.367.0",
-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 9b898ca6..f80cea77 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.367.0",
-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 fa6ebe44..7ca180b5 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.367.0",
-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.367.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.368.0",
++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.368.0): each operation lists the capabilities it performs; a token for the 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 571bd1dc..626bf50f 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -321746,3 +321746,294 @@ export interface DesignGlyphDraftResult {
| [string, string, string, string, string, string, string, string];
created: boolean;
}
++
++/** [email protected] (owner: billing) */
++/**
++ * Universal wallet: billing.wallet. Personal bearer reads and purchases; server-side reviewed prices.
++ */
++export interface BillingWallet {
++ subject: {
++ type: "user";
++ id: string;
++ };
++ currency: "USD";
++ money_writes_frozen: boolean;
++ used_ai_this_month: boolean;
++ balances: {
++ coins: {
++ label: string;
++ amount: string;
++ currency: "opencoins" | "vibes-bits" | "USD";
++ scale: 0 | 9;
++ purpose: string;
++ action: string;
++ held?: string;
++ };
++ vibes: {
++ label: string;
++ amount: string;
++ currency: "opencoins" | "vibes-bits" | "USD";
++ scale: 0 | 9;
++ purpose: string;
++ action: string;
++ held?: string;
++ };
++ balance: {
++ label: string;
++ amount: string;
++ currency: "opencoins" | "vibes-bits" | "USD";
++ scale: 0 | 9;
++ purpose: string;
++ action: string;
++ held?: string;
++ };
++ };
++ bits_per_usd: number;
++ /**
++ * @maxItems 5
++ */
++ recent_activity:
++ | []
++ | [
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ }
++ ]
++ | [
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ },
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ }
++ ]
++ | [
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ },
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ },
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ }
++ ]
++ | [
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ },
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ },
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ },
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ }
++ ]
++ | [
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ },
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ },
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ },
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ },
++ {
++ id: string;
++ at: string;
++ kind: "coins" | "vibes" | "balance";
++ amount: string;
++ label: string;
++ detail: string;
++ site: string;
++ }
++ ];
++ checkout: {
++ /**
++ * The checkout providers on offer, each with the hosts its hosted checkout may use. The wallet follows a checkout_url only to one of these hosts or to Billing itself.
++ */
++ providers: {
++ name: string;
++ hosts: string[];
++ }[];
++ vibes: {
++ minimum: number;
++ maximum: number;
++ price_tiers: {
++ min: number;
++ usd_per_bit: number;
++ }[];
++ };
++ topup: {
++ enabled: boolean;
++ amounts_cents: number[];
++ fee_bps: number | null;
++ };
++ };
++}
++
++/** [email protected] (owner: inventory) */
++/**
++ * Universal wallet: inventory.store. Personal bearer reads and purchases; server-side reviewed prices.
++ */
++export interface InventoryStore {
++ /**
++ * @maxItems 200
++ */
++ items: {
++ id: string;
++ name: string;
++ description: string;
++ issuer: string;
++ prices: {
++ vibes?: number;
++ coins?: number;
++ };
++ preview: {
++ emoji?: string;
++ token?: string;
++ media_id?: string;
++ };
++ kind: string;
++ slots: string[];
++ surfaces: {
++ surface: string;
++ renderer?: string;
++ }[];
++ owned: boolean;
++ available: boolean;
++ }[];
++}
++
++/** [email protected] (owner: inventory) */
++/**
++ * Universal wallet: inventory.purchase. Personal bearer reads and purchases; server-side reviewed prices.
++ */
++export interface InventoryPurchase {
++ id: string;
++ subject: string;
++ item_id: string;
++ name: string;
++ issuer: string;
++ currency: "vibes" | "coins";
++ amount: number;
++ status: "pending" | "fulfilled";
++ instance_id: string | null;
++ payment_id: string | null;
++}
++
++/** [email protected] (owner: inventory) */
++/**
++ * Universal wallet: inventory.store-listing-request. Personal bearer reads and purchases; server-side reviewed prices.
++ */
++export interface InventoryStoreListingRequest {
++ prices: {
++ vibes?: number;
++ coins?: number;
++ };
++}
++
++/** [email protected] (owner: inventory) */
++/**
++ * Universal wallet: inventory.store-listing-request. Personal bearer reads and purchases; server-side reviewed prices.
++ */
++export interface InventoryStoreListing {
++ definition_id: string;
++ issuer: string;
++ prices: {
++ vibes?: number;
++ coins?: number;
++ };
++ status: "in_review" | "published" | "rejected";
++}
ddiff --git a/manifests/capabilities/inventory.store.list.json b/manifests/capabilities/inventory.store.list.json
nnew file mode 100644
iindex 00000000..6abdd791
---- /dev/null
++++ b/manifests/capabilities/inventory.store.list.json
@@@ -0,0 +1,21 @@
++{
++ "id": "inventory.store.list",
++ "version": "1.0",
++ "owner": "inventory",
++ "status": "active",
++ "visibility": "public",
++ "description": "Submit a published cosmetic issued by this app for store listing, with positive whole Vibes/OpenCoins prices. Every new listing and price change requires staff review before it is visible. The issuer is verified from the token; this capability does not grant review or purchase authority.",
++ "permissions": [
++ "inventory:store:list"
++ ],
++ "resourceConstraints": [
++ "namespace"
++ ],
++ "quotaClass": "inventory-write",
++ "events": [],
++ "implementedBy": [
++ "POST /api/v1/store/:id/list"
++ ],
++ "inputSchema": "inventory.store-listing-request@1",
++ "outputSchema": "inventory.store-listing@1"
++}
ddiff --git a/manifests/services/inventory.json b/manifests/services/inventory.json
iindex 6bd6446c..a32e2b4b 100644
---- a/manifests/services/inventory.json
++++ b/manifests/services/inventory.json
@@@ -22,7 +22,8 @@
"inventory.item.grant",
"inventory.item.consume",
"inventory.definition.manage",
-- "inventory.definition.review"
++ "inventory.definition.review",
++ "inventory.store.list"
],
"eventsProduced": [
"inventory.item.granted",
@@@ -84,7 +85,7 @@
],
"window": "automatic only while ovhost waits for readiness after the restart; manual afterwards, as long as no blocker applies",
"blockers": {
-- "none": "migration 0001 only creates Inventory's own tables; Live keeps its own cosmetics tables until the switch (ADR-054 §8)"
++ "none": "migration 0001 only creates Inventory's own tables; Live keeps its own cosmetics tables until the switch (ADR-054 \u00a78)"
}
},
"contracts": {
ddiff --git a/package-lock.json b/package-lock.json
iindex eda1f92c..368d639c 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -1,12 +1,12 @@
{
"name": "openvibe-contracts",
-- "version": "0.367.0",
++ "version": "0.368.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openvibe-contracts",
-- "version": "0.367.0",
++ "version": "0.368.0",
"license": "AGPL-3.0-only",
"dependencies": {
"ajv": "^8.17.1",
ddiff --git a/package.json b/package.json
iindex 8d54bfd9..0b56e4f6 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.367.0",
++ "version": "0.368.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",