openvibers/openvibe.contracts Commits
Define universal wallet and reviewed store contracts (#371)
Changes
@@@ -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 bodynnew file mode 100644@@@ -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"++ ]++}@@@ -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"}]}nnew file mode 100644@@@ -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"++ ]++}nnew file mode 100644@@@ -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"++ ]++}nnew file mode 100644@@@ -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"++ ]++}nnew file mode 100644@@@ -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"++ ]++}nnew file mode 100644@@@ -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++ }++ }++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -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++ }++ }++}nnew file mode 100644@@@ -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++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -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++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "prices": {++ "vibes": -1++ }++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,6 @@++{++ "prices": {++ "vibes": 50,++ "coins": 250++ }++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "definition_id": "itd_00000000000000000000000001",++ "issuer": "service:live",++ "prices": {++ "vibes": 50++ },++ "status": "in_review"++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -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++ }++ ]++}@@@ -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"++ ]++ }}}}@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -138,8 +138,8 @@"service": "inventory","name": "OpenVibe.Inventory","origin": "https://inventory.openvibe.network",-- "operations": 15,-- "capabilities": 7++ "operations": 16,++ "capabilities": 8},{"service": "live",@@@ -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": {@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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"@@@ -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";++}nnew file mode 100644@@@ -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"++}@@@ -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": {@@@ -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",@@@ -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",
@@ -1,5 +1,9 @@
@@ -1,5 +1,9 @@
# Changelog
# 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
## 0.367.0 — 2026-11-09
- publishing.block@1: the rich content block of a post or an article body
- publishing.block@1: the rich content block of a post or an article body
new file mode 100644
new file mode 100644
@@ -0,0 +1,339 @@
@@ -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"
+ ]
+}
@@ -10677,6 +10677,51 @@
@@ -10677,6 +10677,51 @@
"visibility": "first-party",
"visibility": "first-party",
"compatibility": "backward",
"compatibility": "backward",
"status": "active"
"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"
}
}
]
]
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,76 @@
@@ -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"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,31 @@
@@ -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"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,49 @@
@@ -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"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,119 @@
@@ -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"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,34 @@
@@ -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
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,59 @@
@@ -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
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,12 @@
@@ -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
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,12 @@
@@ -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
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "prices": {
+ "vibes": -1
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
+{
+ "prices": {
+ "vibes": 50,
+ "coins": 250
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "definition_id": "itd_00000000000000000000000001",
+ "issuer": "service:live",
+ "prices": {
+ "vibes": 50
+ },
+ "status": "in_review"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,29 @@
@@ -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
+ }
+ ]
+}
@@ -117113,6 +117113,659 @@
@@ -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"
+ ]
+ }
}
}
}
}
}
}
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Actor API",
"title": "OpenVibe.Actor API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.AI API",
"title": "OpenVibe.AI API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bench API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Billing API",
"title": "OpenVibe.Billing API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Blog API",
"title": "OpenVibe.Blog API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bot API",
"title": "OpenVibe.Bot API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Chat API",
"title": "OpenVibe.Chat API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Codes API",
"title": "OpenVibe.Codes API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Community API",
"title": "OpenVibe.Community API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe Connect API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Coupons API",
"title": "OpenVibe.Coupons API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Deals API",
"title": "OpenVibe.Deals API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Design API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Domains API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Events API",
"title": "OpenVibe.Events API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Exchange API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Food API",
"title": "OpenVibe.Food API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Games API",
"title": "OpenVibe.Games API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Host API",
"title": "OpenVibe.Host API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -138,8 +138,8 @@
@@ -138,8 +138,8 @@
"service": "inventory",
"service": "inventory",
"name": "OpenVibe.Inventory",
"name": "OpenVibe.Inventory",
"origin": "https://inventory.openvibe.network",
"origin": "https://inventory.openvibe.network",
- "operations": 15,
- "capabilities": 7
+ "operations": 16,
+ "capabilities": 8
},
},
{
{
"service": "live",
"service": "live",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Inventory API",
"title": "OpenVibe.Inventory API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -831,6 +831,72 @@
@@ -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": {
"components": {
@@ -1417,6 +1483,82 @@
@@ -1417,6 +1483,82 @@
"reason"
"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": {
"securitySchemes": {
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Live API",
"title": "OpenVibe.Live API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Mail API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.MediaHub API",
"title": "OpenVibe.MediaHub API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Media API",
"title": "OpenVibe.Media API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Network API",
"title": "OpenVibe.Network API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.News API",
"title": "OpenVibe.News API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenRestream API",
"title": "OpenRestream API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Play API",
"title": "OpenVibe.Play API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Quest API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Report API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Reviews API",
"title": "OpenVibe.Reviews API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Run API",
"title": "OpenVibe.Run API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Search API",
"title": "OpenVibe.Search API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Services API",
"title": "OpenVibe.Services API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Sources API",
"title": "OpenVibe.Sources API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Space API",
"title": "OpenVibe.Space API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tips API",
"title": "OpenVibe.Tips API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Today API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tools API",
"title": "OpenVibe.Tools API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Trade API",
"title": "OpenVibe.Trade API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.VIP API",
"title": "OpenVibe.VIP API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Vision API",
"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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Watch API",
"title": "OpenVibe.Watch API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Wiki API",
"title": "OpenVibe.Wiki API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Work API",
"title": "OpenVibe.Work API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Zone API",
"title": "OpenVibe.Zone API",
- "version": "0.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": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -321746,3 +321746,294 @@ export interface DesignGlyphDraftResult {
@@ -321746,3 +321746,294 @@ export interface DesignGlyphDraftResult {
| [string, string, string, string, string, string, string, string];
| [string, string, string, string, string, string, string, string];
created: boolean;
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";
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -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"
+}
@@ -22,7 +22,8 @@
@@ -22,7 +22,8 @@
"inventory.item.grant",
"inventory.item.grant",
"inventory.item.consume",
"inventory.item.consume",
"inventory.definition.manage",
"inventory.definition.manage",
- "inventory.definition.review"
+ "inventory.definition.review",
+ "inventory.store.list"
],
],
"eventsProduced": [
"eventsProduced": [
"inventory.item.granted",
"inventory.item.granted",
@@ -84,7 +85,7 @@
@@ -84,7 +85,7 @@
],
],
"window": "automatic only while ovhost waits for readiness after the restart; manual afterwards, as long as no blocker applies",
"window": "automatic only while ovhost waits for readiness after the restart; manual afterwards, as long as no blocker applies",
"blockers": {
"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": {
"contracts": {
@@ -1,12 +1,12 @@
@@ -1,12 +1,12 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.367.0",
+ "version": "0.368.0",
"lockfileVersion": 3,
"lockfileVersion": 3,
"requires": true,
"requires": true,
"packages": {
"packages": {
"": {
"": {
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.367.0",
+ "version": "0.368.0",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.367.0",
+ "version": "0.368.0",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"main": "index.js",
"types": "generated/typescript/index.d.ts",
"types": "generated/typescript/index.d.ts",