openvibers/openvibe.contracts Commits
openvibe-contracts 0.128.0: Search events for Work, Rent, Help, Inventory and Quest (#79)
Changes
@@@ -4,6 +4,16 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) thfrom `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,the notes were in the tag and commit messages (`git tag -n1`).++## 0.128.0 — 2026-10-10++++- **Record products send their pages to OpenVibe.Search.** `<owner>.index_document.upserted` and `.deleted` (v1) are++ declared for Work (`job`, `/jobs/<id>`), Rent (`listing`, `/listings/<id>`), Help (`article`,++ `/a/<domain>/<slug>`, id `<domain>:<slug>`), Inventory (`definition`, `/definitions/<id>`) and Quest (`quest`,++ `/quests/<id>`), and each service manifest now produces them. The payloads are `search.index-document@1` with the++ owner, type and id pattern fixed, plus the usual tombstone. Each product sends them through++ `openvibe-publishing/search-feed` (1.4.0): on the write's transaction, and from a sweep that re-sends only what++ changed. Search consumes them as `*.index_document.*` once the owners are in `SEARCH_EVENT_OWNERS`.++## 0.127.0 — 2026-10-10- **Retired addresses leave the registry.** `ai.openvibe.network` and `events.openvibe.network` are no longer domains@@@ -6576,6 +6576,96 @@"compatibility": "backward","status": "active","adr": "ADR-054"++ },++ {++ "id": "work.index_document.upserted",++ "version": "1.0.0",++ "owner": "work",++ "schema": "events/payloads/work.index_document.upserted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "work.index_document.deleted",++ "version": "1.0.0",++ "owner": "work",++ "schema": "events/payloads/work.index_document.deleted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "rent.index_document.upserted",++ "version": "1.0.0",++ "owner": "rent",++ "schema": "events/payloads/rent.index_document.upserted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "rent.index_document.deleted",++ "version": "1.0.0",++ "owner": "rent",++ "schema": "events/payloads/rent.index_document.deleted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "help.index_document.upserted",++ "version": "1.0.0",++ "owner": "help",++ "schema": "events/payloads/help.index_document.upserted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "help.index_document.deleted",++ "version": "1.0.0",++ "owner": "help",++ "schema": "events/payloads/help.index_document.deleted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "inventory.index_document.upserted",++ "version": "1.0.0",++ "owner": "inventory",++ "schema": "events/payloads/inventory.index_document.upserted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "inventory.index_document.deleted",++ "version": "1.0.0",++ "owner": "inventory",++ "schema": "events/payloads/inventory.index_document.deleted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "quest.index_document.upserted",++ "version": "1.0.0",++ "owner": "quest",++ "schema": "events/payloads/quest.index_document.upserted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "quest.index_document.deleted",++ "version": "1.0.0",++ "owner": "quest",++ "schema": "events/payloads/quest.index_document.deleted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"}]}nnew file mode 100644@@@ -0,0 +1,28 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/help.index_document.deleted.v1.json",++ "title": "HelpIndexDocumentDeletedPayload",++ "description": "help.index_document.deleted v1 (OpenVibe.Help server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a article page (/a/<domain>/<slug>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: article, id, revision }, visibility internal, actor service:help.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "const": "article"++ },++ "id": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9.-]{0,79}:[a-z0-9][a-z0-9-]{0,71}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,34 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/help.index_document.upserted.v1.json",++ "title": "HelpIndexDocumentUpsertedPayload",++ "description": "help.index_document.upserted v1 (OpenVibe.Help server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a help article page (type article, /a/<domain>/<slug>, id <domain>:<slug>): one question from a product manifest's FAQ with its answer, quoted verbatim from OpenVibe.Contracts. Sent by the sweep at boot and on a timer (server/search-index.js) whenever the catalog Help was built from changed; an article whose FAQ entry left the catalog becomes a tombstone. The sequencer (help_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: site (the product domain), kind. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: article, id, revision: <document revision> }, visibility internal, actor service:help.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "help"++ },++ "type": {++ "const": "article"++ },++ "id": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9.-]{0,79}:[a-z0-9][a-z0-9-]{0,71}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,28 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/inventory.index_document.deleted.v1.json",++ "title": "InventoryIndexDocumentDeletedPayload",++ "description": "inventory.index_document.deleted v1 (OpenVibe.Inventory server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a definition page (/definitions/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: definition, id, revision }, visibility internal, actor service:inventory.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "const": "definition"++ },++ "id": {++ "type": "string",++ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,34 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/inventory.index_document.upserted.v1.json",++ "title": "InventoryIndexDocumentUpsertedPayload",++ "description": "inventory.index_document.upserted v1 (OpenVibe.Inventory server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of an item definition page (type definition, /definitions/<id>): name, description, kind, rarity, issuer and supply. Only published definitions are documents; a draft, one in review or a retired one is a tombstone. Sent in the transaction that published or retired it, and by the sweep (server/search-index.js). The sequencer (inventory_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: kind, rarity, issuer. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: definition, id, revision: <document revision> }, visibility internal, actor service:inventory.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "inventory"++ },++ "type": {++ "const": "definition"++ },++ "id": {++ "type": "string",++ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,28 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/quest.index_document.deleted.v1.json",++ "title": "QuestIndexDocumentDeletedPayload",++ "description": "quest.index_document.deleted v1 (OpenVibe.Quest server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a quest page (/quests/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: quest, id, revision }, visibility internal, actor service:quest.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "const": "quest"++ },++ "id": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9-]{0,63}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,34 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/quest.index_document.upserted.v1.json",++ "title": "QuestIndexDocumentUpsertedPayload",++ "description": "quest.index_document.upserted v1 (OpenVibe.Quest server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a quest page (type quest, /quests/<id>): its name, what to do and where, and the badge (and item) it rewards. Quests are Quest's own catalog (server/quests/catalog.js), so they are sent by the sweep at boot (server/search-index.js); a quest that left the catalog becomes a tombstone. The sequencer (quest_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: service (where the quest is done), badge. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: quest, id, revision: <document revision> }, visibility internal, actor service:quest.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "quest"++ },++ "type": {++ "const": "quest"++ },++ "id": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9-]{0,63}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,28 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/rent.index_document.deleted.v1.json",++ "title": "RentIndexDocumentDeletedPayload",++ "description": "rent.index_document.deleted v1 (OpenVibe.Rent server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a listing page (/listings/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: listing, id, revision }, visibility internal, actor service:rent.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "const": "listing"++ },++ "id": {++ "type": "string",++ "pattern": "^rnt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,34 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/rent.index_document.upserted.v1.json",++ "title": "RentIndexDocumentUpsertedPayload",++ "description": "rent.index_document.upserted v1 (OpenVibe.Rent server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a rental listing page (type listing, /listings/<id>): title, description, price and period, city, region, country and neighbourhood (never a street address or the contact link). Sent in the transaction that created, edited, renewed, hid or removed the listing, and by the sweep (server/search-index.js); a listing that is hidden, removed or past its expiry becomes a tombstone. The sequencer (rent_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: kind, country, city, currency, period, bedrooms. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: listing, id, revision: <document revision> }, visibility internal, actor service:rent.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "rent"++ },++ "type": {++ "const": "listing"++ },++ "id": {++ "type": "string",++ "pattern": "^rnt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,28 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/work.index_document.deleted.v1.json",++ "title": "WorkIndexDocumentDeletedPayload",++ "description": "work.index_document.deleted v1 (OpenVibe.Work server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a job page (/jobs/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: job, id, revision }, visibility internal, actor service:work.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "const": "job"++ },++ "id": {++ "type": "string",++ "pattern": "^job_[0-9abcdefghjkmnpqrstvwxyz]{26}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,34 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/work.index_document.upserted.v1.json",++ "title": "WorkIndexDocumentUpsertedPayload",++ "description": "work.index_document.upserted v1 (OpenVibe.Work server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a job listing page (type job, /jobs/<id>): the title, company, location, tags, salary text and the short excerpt Work keeps of a listing read from a public board, with the board as provenance (authorship imported). Sent after every ingest run that changed a listing and by the sweep (server/search-index.js); a listing that expired (not seen for the retention window) becomes a tombstone. The sequencer (work_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: source, remote, type, location. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: job, id, revision: <document revision> }, visibility internal, actor service:work.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "work"++ },++ "type": {++ "const": "job"++ },++ "id": {++ "type": "string",++ "pattern": "^job_[0-9abcdefghjkmnpqrstvwxyz]{26}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "owner": "help",++ "type": "article",++ "id": "openvibe.live:how-do-i-go-live-from-my-browser",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.help/a/openvibe.live/how-do-i-go-live-from-my-browser",++ "title": "How do I go live from my browser?",++ "summary": "Open openvibe.live, sign in and press Go live: no OBS and no follower minimum.",++ "body": "How do I go live from my browser?\nOpen openvibe.live, sign in and press Go live: no OBS and no follower minimum.",++ "facets": {++ "site": "openvibe.live",++ "kind": "product"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "type": "offer",++ "id": "openvibe.live:how-do-i-go-live-from-my-browser",++ "revision": 3++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "type": "article",++ "id": "openvibe.live:how-do-i-go-live-from-my-browser",++ "revision": 3++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "owner": "help",++ "type": "article",++ "id": "how-do-i-go-live",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.help/a/openvibe.live/how-do-i-go-live-from-my-browser",++ "title": "How do I go live from my browser?",++ "summary": "Open openvibe.live, sign in and press Go live: no OBS and no follower minimum.",++ "body": "How do I go live from my browser?\nOpen openvibe.live, sign in and press Go live: no OBS and no follower minimum.",++ "facets": {++ "site": "openvibe.live",++ "kind": "product"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "owner": "deals",++ "type": "article",++ "id": "openvibe.live:how-do-i-go-live-from-my-browser",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.help/a/openvibe.live/how-do-i-go-live-from-my-browser",++ "title": "How do I go live from my browser?",++ "summary": "Open openvibe.live, sign in and press Go live: no OBS and no follower minimum.",++ "body": "How do I go live from my browser?\nOpen openvibe.live, sign in and press Go live: no OBS and no follower minimum.",++ "facets": {++ "site": "openvibe.live",++ "kind": "product"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "owner": "help",++ "type": "article",++ "id": "openvibe.live:how-do-i-go-live-from-my-browser",++ "revision": 3,++ "deleted": true++}nnew file mode 100644@@@ -0,0 +1,27 @@++{++ "owner": "help",++ "type": "article",++ "id": "openvibe.live:how-do-i-go-live-from-my-browser",++ "revision": 5,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.help/a/openvibe.live/how-do-i-go-live-from-my-browser",++ "title": "How do I go live from my browser?",++ "summary": "Open openvibe.live, sign in and press Go live: no OBS and no follower minimum.",++ "body": "How do I go live from my browser?\nOpen openvibe.live, sign in and press Go live: no OBS and no follower minimum.",++ "facets": {++ "site": "openvibe.live",++ "kind": "product"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "noindex",++ "reasons": [++ "owner_decision"++ ]++ }++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "owner": "help",++ "type": "article",++ "id": "openvibe.live:how-do-i-go-live-from-my-browser",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.help/a/openvibe.live/how-do-i-go-live-from-my-browser",++ "title": "How do I go live from my browser?",++ "summary": "Open openvibe.live, sign in and press Go live: no OBS and no follower minimum.",++ "body": "How do I go live from my browser?\nOpen openvibe.live, sign in and press Go live: no OBS and no follower minimum.",++ "facets": {++ "site": "openvibe.live",++ "kind": "product"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,26 @@++{++ "owner": "inventory",++ "type": "definition",++ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.inventory/definitions/itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "title": "Fire Name",++ "summary": "A name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",++ "body": "Fire Name\nA name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",++ "facets": {++ "kind": "live.name_effect",++ "rarity": "rare",++ "issuer": "service:live"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "type": "offer",++ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 3++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "type": "definition",++ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 3++}nnew file mode 100644@@@ -0,0 +1,26 @@++{++ "owner": "inventory",++ "type": "definition",++ "id": "fx_fire",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.inventory/definitions/itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "title": "Fire Name",++ "summary": "A name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",++ "body": "Fire Name\nA name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",++ "facets": {++ "kind": "live.name_effect",++ "rarity": "rare",++ "issuer": "service:live"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,26 @@++{++ "owner": "deals",++ "type": "definition",++ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.inventory/definitions/itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "title": "Fire Name",++ "summary": "A name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",++ "body": "Fire Name\nA name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",++ "facets": {++ "kind": "live.name_effect",++ "rarity": "rare",++ "issuer": "service:live"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "owner": "inventory",++ "type": "definition",++ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 3,++ "deleted": true++}nnew file mode 100644@@@ -0,0 +1,28 @@++{++ "owner": "inventory",++ "type": "definition",++ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 5,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.inventory/definitions/itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "title": "Fire Name",++ "summary": "A name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",++ "body": "Fire Name\nA name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",++ "facets": {++ "kind": "live.name_effect",++ "rarity": "rare",++ "issuer": "service:live"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "noindex",++ "reasons": [++ "owner_decision"++ ]++ }++}nnew file mode 100644@@@ -0,0 +1,26 @@++{++ "owner": "inventory",++ "type": "definition",++ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.inventory/definitions/itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "title": "Fire Name",++ "summary": "A name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",++ "body": "Fire Name\nA name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",++ "facets": {++ "kind": "live.name_effect",++ "rarity": "rare",++ "issuer": "service:live"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "owner": "quest",++ "type": "quest",++ "id": "go-live",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.quest/quests/go-live",++ "title": "Go live once",++ "summary": "Start your first stream on OpenVibe.Live and earn the First Broadcast badge.",++ "body": "Go live once\nStart your first stream on OpenVibe.Live and earn the First Broadcast badge.",++ "facets": {++ "service": "live",++ "badge": "first-broadcast"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "type": "offer",++ "id": "go-live",++ "revision": 3++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "type": "quest",++ "id": "go-live",++ "revision": 3++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "owner": "quest",++ "type": "quest",++ "id": "Go_Live!",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.quest/quests/go-live",++ "title": "Go live once",++ "summary": "Start your first stream on OpenVibe.Live and earn the First Broadcast badge.",++ "body": "Go live once\nStart your first stream on OpenVibe.Live and earn the First Broadcast badge.",++ "facets": {++ "service": "live",++ "badge": "first-broadcast"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "owner": "deals",++ "type": "quest",++ "id": "go-live",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.quest/quests/go-live",++ "title": "Go live once",++ "summary": "Start your first stream on OpenVibe.Live and earn the First Broadcast badge.",++ "body": "Go live once\nStart your first stream on OpenVibe.Live and earn the First Broadcast badge.",++ "facets": {++ "service": "live",++ "badge": "first-broadcast"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "owner": "quest",++ "type": "quest",++ "id": "go-live",++ "revision": 3,++ "deleted": true++}nnew file mode 100644@@@ -0,0 +1,27 @@++{++ "owner": "quest",++ "type": "quest",++ "id": "go-live",++ "revision": 5,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.quest/quests/go-live",++ "title": "Go live once",++ "summary": "Start your first stream on OpenVibe.Live and earn the First Broadcast badge.",++ "body": "Go live once\nStart your first stream on OpenVibe.Live and earn the First Broadcast badge.",++ "facets": {++ "service": "live",++ "badge": "first-broadcast"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "noindex",++ "reasons": [++ "owner_decision"++ ]++ }++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "owner": "quest",++ "type": "quest",++ "id": "go-live",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.quest/quests/go-live",++ "title": "Go live once",++ "summary": "Start your first stream on OpenVibe.Live and earn the First Broadcast badge.",++ "body": "Go live once\nStart your first stream on OpenVibe.Live and earn the First Broadcast badge.",++ "facets": {++ "service": "live",++ "badge": "first-broadcast"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,29 @@++{++ "owner": "rent",++ "type": "listing",++ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.rent/listings/rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "title": "Bright room near the park",++ "summary": "650 GBP a month · Leeds, Headingley · available from 2026-11-01",++ "body": "Bright room near the park\n650 GBP a month · Leeds, Headingley · available from 2026-11-01",++ "facets": {++ "kind": "room",++ "country": "GB",++ "city": "Leeds",++ "currency": "GBP",++ "period": "month",++ "bedrooms": "1"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "type": "offer",++ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 3++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "type": "listing",++ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 3++}nnew file mode 100644@@@ -0,0 +1,29 @@++{++ "owner": "rent",++ "type": "listing",++ "id": "lst_1",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.rent/listings/rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "title": "Bright room near the park",++ "summary": "650 GBP a month · Leeds, Headingley · available from 2026-11-01",++ "body": "Bright room near the park\n650 GBP a month · Leeds, Headingley · available from 2026-11-01",++ "facets": {++ "kind": "room",++ "country": "GB",++ "city": "Leeds",++ "currency": "GBP",++ "period": "month",++ "bedrooms": "1"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,29 @@++{++ "owner": "deals",++ "type": "listing",++ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.rent/listings/rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "title": "Bright room near the park",++ "summary": "650 GBP a month · Leeds, Headingley · available from 2026-11-01",++ "body": "Bright room near the park\n650 GBP a month · Leeds, Headingley · available from 2026-11-01",++ "facets": {++ "kind": "room",++ "country": "GB",++ "city": "Leeds",++ "currency": "GBP",++ "period": "month",++ "bedrooms": "1"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "owner": "rent",++ "type": "listing",++ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 3,++ "deleted": true++}nnew file mode 100644@@@ -0,0 +1,31 @@++{++ "owner": "rent",++ "type": "listing",++ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 5,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.rent/listings/rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "title": "Bright room near the park",++ "summary": "650 GBP a month · Leeds, Headingley · available from 2026-11-01",++ "body": "Bright room near the park\n650 GBP a month · Leeds, Headingley · available from 2026-11-01",++ "facets": {++ "kind": "room",++ "country": "GB",++ "city": "Leeds",++ "currency": "GBP",++ "period": "month",++ "bedrooms": "1"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "noindex",++ "reasons": [++ "owner_decision"++ ]++ }++}nnew file mode 100644@@@ -0,0 +1,29 @@++{++ "owner": "rent",++ "type": "listing",++ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.rent/listings/rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "title": "Bright room near the park",++ "summary": "650 GBP a month · Leeds, Headingley · available from 2026-11-01",++ "body": "Bright room near the park\n650 GBP a month · Leeds, Headingley · available from 2026-11-01",++ "facets": {++ "kind": "room",++ "country": "GB",++ "city": "Leeds",++ "currency": "GBP",++ "period": "month",++ "bedrooms": "1"++ },++ "authorship": "human",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,27 @@++{++ "owner": "work",++ "type": "job",++ "id": "job_0123456789abcdefghjkmnpqrs",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.work/jobs/job_0123456789abcdefghjkmnpqrs",++ "title": "Senior backend engineer — Example GmbH",++ "summary": "Remote (EU) · full time · Node.js, PostgreSQL",++ "body": "Senior backend engineer — Example GmbH\nRemote (EU) · full time · Node.js, PostgreSQL",++ "facets": {++ "source": "arbeitnow",++ "remote": "true",++ "type": "full time",++ "location": "Berlin"++ },++ "authorship": "imported",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "type": "offer",++ "id": "job_0123456789abcdefghjkmnpqrs",++ "revision": 3++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "type": "job",++ "id": "job_0123456789abcdefghjkmnpqrs",++ "revision": 3++}nnew file mode 100644@@@ -0,0 +1,27 @@++{++ "owner": "work",++ "type": "job",++ "id": "job_ABC",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.work/jobs/job_0123456789abcdefghjkmnpqrs",++ "title": "Senior backend engineer — Example GmbH",++ "summary": "Remote (EU) · full time · Node.js, PostgreSQL",++ "body": "Senior backend engineer — Example GmbH\nRemote (EU) · full time · Node.js, PostgreSQL",++ "facets": {++ "source": "arbeitnow",++ "remote": "true",++ "type": "full time",++ "location": "Berlin"++ },++ "authorship": "imported",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,27 @@++{++ "owner": "deals",++ "type": "job",++ "id": "job_0123456789abcdefghjkmnpqrs",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.work/jobs/job_0123456789abcdefghjkmnpqrs",++ "title": "Senior backend engineer — Example GmbH",++ "summary": "Remote (EU) · full time · Node.js, PostgreSQL",++ "body": "Senior backend engineer — Example GmbH\nRemote (EU) · full time · Node.js, PostgreSQL",++ "facets": {++ "source": "arbeitnow",++ "remote": "true",++ "type": "full time",++ "location": "Berlin"++ },++ "authorship": "imported",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "owner": "work",++ "type": "job",++ "id": "job_0123456789abcdefghjkmnpqrs",++ "revision": 3,++ "deleted": true++}nnew file mode 100644@@@ -0,0 +1,29 @@++{++ "owner": "work",++ "type": "job",++ "id": "job_0123456789abcdefghjkmnpqrs",++ "revision": 5,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.work/jobs/job_0123456789abcdefghjkmnpqrs",++ "title": "Senior backend engineer — Example GmbH",++ "summary": "Remote (EU) · full time · Node.js, PostgreSQL",++ "body": "Senior backend engineer — Example GmbH\nRemote (EU) · full time · Node.js, PostgreSQL",++ "facets": {++ "source": "arbeitnow",++ "remote": "true",++ "type": "full time",++ "location": "Berlin"++ },++ "authorship": "imported",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "noindex",++ "reasons": [++ "owner_decision"++ ]++ }++}nnew file mode 100644@@@ -0,0 +1,27 @@++{++ "owner": "work",++ "type": "job",++ "id": "job_0123456789abcdefghjkmnpqrs",++ "revision": 2,++ "deleted": false,++ "visibility": "public",++ "canonical_url": "https://openvibe.work/jobs/job_0123456789abcdefghjkmnpqrs",++ "title": "Senior backend engineer — Example GmbH",++ "summary": "Remote (EU) · full time · Node.js, PostgreSQL",++ "body": "Senior backend engineer — Example GmbH\nRemote (EU) · full time · Node.js, PostgreSQL",++ "facets": {++ "source": "arbeitnow",++ "remote": "true",++ "type": "full time",++ "location": "Berlin"++ },++ "authorship": "imported",++ "provenance": [],++ "publication_state": "published",++ "published_at": "2026-10-09T12:00:00.000Z",++ "updated_at": "2026-10-10T08:00:00.000Z",++ "indexability": {++ "decision": "index",++ "reasons": []++ }++}@@@ -74820,6 +74820,366 @@}}}++ },++ "work.index_document.upserted": {++ "version": "1.0.0",++ "owner": "work",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/work.index_document.upserted.v1.json",++ "title": "WorkIndexDocumentUpsertedPayload",++ "description": "work.index_document.upserted v1 (OpenVibe.Work server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a job listing page (type job, /jobs/<id>): the title, company, location, tags, salary text and the short excerpt Work keeps of a listing read from a public board, with the board as provenance (authorship imported). Sent after every ingest run that changed a listing and by the sweep (server/search-index.js); a listing that expired (not seen for the retention window) becomes a tombstone. The sequencer (work_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: source, remote, type, location. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: job, id, revision: <document revision> }, visibility internal, actor service:work.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "work"++ },++ "type": {++ "const": "job"++ },++ "id": {++ "type": "string",++ "pattern": "^job_[0-9abcdefghjkmnpqrstvwxyz]{26}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++ }++ },++ "work.index_document.deleted": {++ "version": "1.0.0",++ "owner": "work",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/work.index_document.deleted.v1.json",++ "title": "WorkIndexDocumentDeletedPayload",++ "description": "work.index_document.deleted v1 (OpenVibe.Work server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a job page (/jobs/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: job, id, revision }, visibility internal, actor service:work.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "const": "job"++ },++ "id": {++ "type": "string",++ "pattern": "^job_[0-9abcdefghjkmnpqrstvwxyz]{26}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++ }++ },++ "rent.index_document.upserted": {++ "version": "1.0.0",++ "owner": "rent",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/rent.index_document.upserted.v1.json",++ "title": "RentIndexDocumentUpsertedPayload",++ "description": "rent.index_document.upserted v1 (OpenVibe.Rent server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a rental listing page (type listing, /listings/<id>): title, description, price and period, city, region, country and neighbourhood (never a street address or the contact link). Sent in the transaction that created, edited, renewed, hid or removed the listing, and by the sweep (server/search-index.js); a listing that is hidden, removed or past its expiry becomes a tombstone. The sequencer (rent_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: kind, country, city, currency, period, bedrooms. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: listing, id, revision: <document revision> }, visibility internal, actor service:rent.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "rent"++ },++ "type": {++ "const": "listing"++ },++ "id": {++ "type": "string",++ "pattern": "^rnt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++ }++ },++ "rent.index_document.deleted": {++ "version": "1.0.0",++ "owner": "rent",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/rent.index_document.deleted.v1.json",++ "title": "RentIndexDocumentDeletedPayload",++ "description": "rent.index_document.deleted v1 (OpenVibe.Rent server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a listing page (/listings/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: listing, id, revision }, visibility internal, actor service:rent.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "const": "listing"++ },++ "id": {++ "type": "string",++ "pattern": "^rnt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++ }++ },++ "help.index_document.upserted": {++ "version": "1.0.0",++ "owner": "help",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/help.index_document.upserted.v1.json",++ "title": "HelpIndexDocumentUpsertedPayload",++ "description": "help.index_document.upserted v1 (OpenVibe.Help server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a help article page (type article, /a/<domain>/<slug>, id <domain>:<slug>): one question from a product manifest's FAQ with its answer, quoted verbatim from OpenVibe.Contracts. Sent by the sweep at boot and on a timer (server/search-index.js) whenever the catalog Help was built from changed; an article whose FAQ entry left the catalog becomes a tombstone. The sequencer (help_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: site (the product domain), kind. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: article, id, revision: <document revision> }, visibility internal, actor service:help.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "help"++ },++ "type": {++ "const": "article"++ },++ "id": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9.-]{0,79}:[a-z0-9][a-z0-9-]{0,71}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++ }++ },++ "help.index_document.deleted": {++ "version": "1.0.0",++ "owner": "help",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/help.index_document.deleted.v1.json",++ "title": "HelpIndexDocumentDeletedPayload",++ "description": "help.index_document.deleted v1 (OpenVibe.Help server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a article page (/a/<domain>/<slug>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: article, id, revision }, visibility internal, actor service:help.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "const": "article"++ },++ "id": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9.-]{0,79}:[a-z0-9][a-z0-9-]{0,71}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++ }++ },++ "inventory.index_document.upserted": {++ "version": "1.0.0",++ "owner": "inventory",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/inventory.index_document.upserted.v1.json",++ "title": "InventoryIndexDocumentUpsertedPayload",++ "description": "inventory.index_document.upserted v1 (OpenVibe.Inventory server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of an item definition page (type definition, /definitions/<id>): name, description, kind, rarity, issuer and supply. Only published definitions are documents; a draft, one in review or a retired one is a tombstone. Sent in the transaction that published or retired it, and by the sweep (server/search-index.js). The sequencer (inventory_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: kind, rarity, issuer. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: definition, id, revision: <document revision> }, visibility internal, actor service:inventory.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "inventory"++ },++ "type": {++ "const": "definition"++ },++ "id": {++ "type": "string",++ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++ }++ },++ "inventory.index_document.deleted": {++ "version": "1.0.0",++ "owner": "inventory",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/inventory.index_document.deleted.v1.json",++ "title": "InventoryIndexDocumentDeletedPayload",++ "description": "inventory.index_document.deleted v1 (OpenVibe.Inventory server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a definition page (/definitions/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: definition, id, revision }, visibility internal, actor service:inventory.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "const": "definition"++ },++ "id": {++ "type": "string",++ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++ }++ },++ "quest.index_document.upserted": {++ "version": "1.0.0",++ "owner": "quest",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/quest.index_document.upserted.v1.json",++ "title": "QuestIndexDocumentUpsertedPayload",++ "description": "quest.index_document.upserted v1 (OpenVibe.Quest server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a quest page (type quest, /quests/<id>): its name, what to do and where, and the badge (and item) it rewards. Quests are Quest's own catalog (server/quests/catalog.js), so they are sent by the sweep at boot (server/search-index.js); a quest that left the catalog becomes a tombstone. The sequencer (quest_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: service (where the quest is done), badge. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: quest, id, revision: <document revision> }, visibility internal, actor service:quest.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "quest"++ },++ "type": {++ "const": "quest"++ },++ "id": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9-]{0,63}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++ }++ },++ "quest.index_document.deleted": {++ "version": "1.0.0",++ "owner": "quest",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/quest.index_document.deleted.v1.json",++ "title": "QuestIndexDocumentDeletedPayload",++ "description": "quest.index_document.deleted v1 (OpenVibe.Quest server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a quest page (/quests/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: quest, id, revision }, visibility internal, actor service:quest.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "const": "quest"++ },++ "id": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9-]{0,63}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++ }}}}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.127.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.Inventory API",-- "version": "0.127.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.Live API",-- "version": "0.127.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.128.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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"@@@ -60863,3 +60863,123 @@ export interface InventoryDefinitionPublishedPayload {rarity: "common" | "uncommon" | "rare" | "epic" | "legendary";issuer: string;}++++/** [email protected] (owner: work) */++/**++ * work.index_document.upserted v1 (OpenVibe.Work server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a job listing page (type job, /jobs/<id>): the title, company, location, tags, salary text and the short excerpt Work keeps of a listing read from a public board, with the board as provenance (authorship imported). Sent after every ingest run that changed a listing and by the sweep (server/search-index.js); a listing that expired (not seen for the retention window) becomes a tombstone. The sequencer (work_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: source, remote, type, location. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: job, id, revision: <document revision> }, visibility internal, actor service:work.++ */++export type WorkIndexDocumentUpsertedPayload = IndexDocument & {++ owner: "work";++ type: "job";++ id?: string;++ deleted: false;++};++++/** [email protected] (owner: work) */++/**++ * work.index_document.deleted v1 (OpenVibe.Work server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a job page (/jobs/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: job, id, revision }, visibility internal, actor service:work.++ */++export interface WorkIndexDocumentDeletedPayload {++ type: "job";++ id: string;++ /**++ * Index revision of the tombstone; wins over any document at the same or an older revision.++ */++ revision: number;++}++++/** [email protected] (owner: rent) */++/**++ * rent.index_document.upserted v1 (OpenVibe.Rent server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a rental listing page (type listing, /listings/<id>): title, description, price and period, city, region, country and neighbourhood (never a street address or the contact link). Sent in the transaction that created, edited, renewed, hid or removed the listing, and by the sweep (server/search-index.js); a listing that is hidden, removed or past its expiry becomes a tombstone. The sequencer (rent_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: kind, country, city, currency, period, bedrooms. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: listing, id, revision: <document revision> }, visibility internal, actor service:rent.++ */++export type RentIndexDocumentUpsertedPayload = IndexDocument & {++ owner: "rent";++ type: "listing";++ id?: string;++ deleted: false;++};++++/** [email protected] (owner: rent) */++/**++ * rent.index_document.deleted v1 (OpenVibe.Rent server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a listing page (/listings/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: listing, id, revision }, visibility internal, actor service:rent.++ */++export interface RentIndexDocumentDeletedPayload {++ type: "listing";++ id: string;++ /**++ * Index revision of the tombstone; wins over any document at the same or an older revision.++ */++ revision: number;++}++++/** [email protected] (owner: help) */++/**++ * help.index_document.upserted v1 (OpenVibe.Help server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a help article page (type article, /a/<domain>/<slug>, id <domain>:<slug>): one question from a product manifest's FAQ with its answer, quoted verbatim from OpenVibe.Contracts. Sent by the sweep at boot and on a timer (server/search-index.js) whenever the catalog Help was built from changed; an article whose FAQ entry left the catalog becomes a tombstone. The sequencer (help_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: site (the product domain), kind. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: article, id, revision: <document revision> }, visibility internal, actor service:help.++ */++export type HelpIndexDocumentUpsertedPayload = IndexDocument & {++ owner: "help";++ type: "article";++ id?: string;++ deleted: false;++};++++/** [email protected] (owner: help) */++/**++ * help.index_document.deleted v1 (OpenVibe.Help server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a article page (/a/<domain>/<slug>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: article, id, revision }, visibility internal, actor service:help.++ */++export interface HelpIndexDocumentDeletedPayload {++ type: "article";++ id: string;++ /**++ * Index revision of the tombstone; wins over any document at the same or an older revision.++ */++ revision: number;++}++++/** [email protected] (owner: inventory) */++/**++ * inventory.index_document.upserted v1 (OpenVibe.Inventory server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of an item definition page (type definition, /definitions/<id>): name, description, kind, rarity, issuer and supply. Only published definitions are documents; a draft, one in review or a retired one is a tombstone. Sent in the transaction that published or retired it, and by the sweep (server/search-index.js). The sequencer (inventory_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: kind, rarity, issuer. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: definition, id, revision: <document revision> }, visibility internal, actor service:inventory.++ */++export type InventoryIndexDocumentUpsertedPayload = IndexDocument & {++ owner: "inventory";++ type: "definition";++ id?: string;++ deleted: false;++};++++/** [email protected] (owner: inventory) */++/**++ * inventory.index_document.deleted v1 (OpenVibe.Inventory server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a definition page (/definitions/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: definition, id, revision }, visibility internal, actor service:inventory.++ */++export interface InventoryIndexDocumentDeletedPayload {++ type: "definition";++ id: string;++ /**++ * Index revision of the tombstone; wins over any document at the same or an older revision.++ */++ revision: number;++}++++/** [email protected] (owner: quest) */++/**++ * quest.index_document.upserted v1 (OpenVibe.Quest server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a quest page (type quest, /quests/<id>): its name, what to do and where, and the badge (and item) it rewards. Quests are Quest's own catalog (server/quests/catalog.js), so they are sent by the sweep at boot (server/search-index.js); a quest that left the catalog becomes a tombstone. The sequencer (quest_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: service (where the quest is done), badge. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: quest, id, revision: <document revision> }, visibility internal, actor service:quest.++ */++export type QuestIndexDocumentUpsertedPayload = IndexDocument & {++ owner: "quest";++ type: "quest";++ id?: string;++ deleted: false;++};++++/** [email protected] (owner: quest) */++/**++ * quest.index_document.deleted v1 (OpenVibe.Quest server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a quest page (/quests/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: quest, id, revision }, visibility internal, actor service:quest.++ */++export interface QuestIndexDocumentDeletedPayload {++ type: "quest";++ id: string;++ /**++ * Index revision of the tombstone; wins over any document at the same or an older revision.++ */++ revision: number;++}@@@ -16,7 +16,10 @@"publicSite": "service"},"capabilities": [],-- "eventsProduced": [],++ "eventsProduced": [++ "help.index_document.upserted",++ "help.index_document.deleted"++ ],"eventsConsumed": ["network.account.export_requested","network.account.deleted"@@@ -30,7 +30,9 @@"inventory.item.revoked","inventory.item.equipped","inventory.item.unequipped",-- "inventory.definition.published"++ "inventory.definition.published",++ "inventory.index_document.upserted",++ "inventory.index_document.deleted"],"eventsConsumed": ["network.account.export_requested",@@@ -16,7 +16,10 @@"publicSite": "service"},"capabilities": [],-- "eventsProduced": [],++ "eventsProduced": [++ "quest.index_document.upserted",++ "quest.index_document.deleted"++ ],"eventsConsumed": ["chat.room.message.created","community.comment.created",@@@ -16,7 +16,10 @@"publicSite": "service"},"capabilities": [],-- "eventsProduced": [],++ "eventsProduced": [++ "rent.index_document.upserted",++ "rent.index_document.deleted"++ ],"eventsConsumed": ["network.account.export_requested","network.account.deleted"@@@ -16,7 +16,10 @@"publicSite": "service"},"capabilities": [],-- "eventsProduced": [],++ "eventsProduced": [++ "work.index_document.upserted",++ "work.index_document.deleted"++ ],"eventsConsumed": ["network.account.export_requested","network.account.deleted"@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.127.0",++ "version": "0.128.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",
@@ -4,6 +4,16 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
@@ -4,6 +4,16 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
the notes were in the tag and commit messages (`git tag -n1`).
the notes were in the tag and commit messages (`git tag -n1`).
+## 0.128.0 — 2026-10-10
+
+- **Record products send their pages to OpenVibe.Search.** `<owner>.index_document.upserted` and `.deleted` (v1) are
+ declared for Work (`job`, `/jobs/<id>`), Rent (`listing`, `/listings/<id>`), Help (`article`,
+ `/a/<domain>/<slug>`, id `<domain>:<slug>`), Inventory (`definition`, `/definitions/<id>`) and Quest (`quest`,
+ `/quests/<id>`), and each service manifest now produces them. The payloads are `search.index-document@1` with the
+ owner, type and id pattern fixed, plus the usual tombstone. Each product sends them through
+ `openvibe-publishing/search-feed` (1.4.0): on the write's transaction, and from a sweep that re-sends only what
+ changed. Search consumes them as `*.index_document.*` once the owners are in `SEARCH_EVENT_OWNERS`.
+
## 0.127.0 — 2026-10-10
## 0.127.0 — 2026-10-10
- **Retired addresses leave the registry.** `ai.openvibe.network` and `events.openvibe.network` are no longer domains
- **Retired addresses leave the registry.** `ai.openvibe.network` and `events.openvibe.network` are no longer domains
@@ -6576,6 +6576,96 @@
@@ -6576,6 +6576,96 @@
"compatibility": "backward",
"compatibility": "backward",
"status": "active",
"status": "active",
"adr": "ADR-054"
"adr": "ADR-054"
+ },
+ {
+ "id": "work.index_document.upserted",
+ "version": "1.0.0",
+ "owner": "work",
+ "schema": "events/payloads/work.index_document.upserted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "work.index_document.deleted",
+ "version": "1.0.0",
+ "owner": "work",
+ "schema": "events/payloads/work.index_document.deleted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "rent.index_document.upserted",
+ "version": "1.0.0",
+ "owner": "rent",
+ "schema": "events/payloads/rent.index_document.upserted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "rent.index_document.deleted",
+ "version": "1.0.0",
+ "owner": "rent",
+ "schema": "events/payloads/rent.index_document.deleted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "help.index_document.upserted",
+ "version": "1.0.0",
+ "owner": "help",
+ "schema": "events/payloads/help.index_document.upserted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "help.index_document.deleted",
+ "version": "1.0.0",
+ "owner": "help",
+ "schema": "events/payloads/help.index_document.deleted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "inventory.index_document.upserted",
+ "version": "1.0.0",
+ "owner": "inventory",
+ "schema": "events/payloads/inventory.index_document.upserted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "inventory.index_document.deleted",
+ "version": "1.0.0",
+ "owner": "inventory",
+ "schema": "events/payloads/inventory.index_document.deleted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "quest.index_document.upserted",
+ "version": "1.0.0",
+ "owner": "quest",
+ "schema": "events/payloads/quest.index_document.upserted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "quest.index_document.deleted",
+ "version": "1.0.0",
+ "owner": "quest",
+ "schema": "events/payloads/quest.index_document.deleted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
}
}
]
]
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/help.index_document.deleted.v1.json",
+ "title": "HelpIndexDocumentDeletedPayload",
+ "description": "help.index_document.deleted v1 (OpenVibe.Help server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a article page (/a/<domain>/<slug>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: article, id, revision }, visibility internal, actor service:help.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "const": "article"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9.-]{0,79}:[a-z0-9][a-z0-9-]{0,71}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/help.index_document.upserted.v1.json",
+ "title": "HelpIndexDocumentUpsertedPayload",
+ "description": "help.index_document.upserted v1 (OpenVibe.Help server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a help article page (type article, /a/<domain>/<slug>, id <domain>:<slug>): one question from a product manifest's FAQ with its answer, quoted verbatim from OpenVibe.Contracts. Sent by the sweep at boot and on a timer (server/search-index.js) whenever the catalog Help was built from changed; an article whose FAQ entry left the catalog becomes a tombstone. The sequencer (help_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: site (the product domain), kind. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: article, id, revision: <document revision> }, visibility internal, actor service:help.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "help"
+ },
+ "type": {
+ "const": "article"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9.-]{0,79}:[a-z0-9][a-z0-9-]{0,71}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/inventory.index_document.deleted.v1.json",
+ "title": "InventoryIndexDocumentDeletedPayload",
+ "description": "inventory.index_document.deleted v1 (OpenVibe.Inventory server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a definition page (/definitions/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: definition, id, revision }, visibility internal, actor service:inventory.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "const": "definition"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/inventory.index_document.upserted.v1.json",
+ "title": "InventoryIndexDocumentUpsertedPayload",
+ "description": "inventory.index_document.upserted v1 (OpenVibe.Inventory server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of an item definition page (type definition, /definitions/<id>): name, description, kind, rarity, issuer and supply. Only published definitions are documents; a draft, one in review or a retired one is a tombstone. Sent in the transaction that published or retired it, and by the sweep (server/search-index.js). The sequencer (inventory_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: kind, rarity, issuer. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: definition, id, revision: <document revision> }, visibility internal, actor service:inventory.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "inventory"
+ },
+ "type": {
+ "const": "definition"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/quest.index_document.deleted.v1.json",
+ "title": "QuestIndexDocumentDeletedPayload",
+ "description": "quest.index_document.deleted v1 (OpenVibe.Quest server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a quest page (/quests/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: quest, id, revision }, visibility internal, actor service:quest.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "const": "quest"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9-]{0,63}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/quest.index_document.upserted.v1.json",
+ "title": "QuestIndexDocumentUpsertedPayload",
+ "description": "quest.index_document.upserted v1 (OpenVibe.Quest server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a quest page (type quest, /quests/<id>): its name, what to do and where, and the badge (and item) it rewards. Quests are Quest's own catalog (server/quests/catalog.js), so they are sent by the sweep at boot (server/search-index.js); a quest that left the catalog becomes a tombstone. The sequencer (quest_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: service (where the quest is done), badge. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: quest, id, revision: <document revision> }, visibility internal, actor service:quest.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "quest"
+ },
+ "type": {
+ "const": "quest"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9-]{0,63}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/rent.index_document.deleted.v1.json",
+ "title": "RentIndexDocumentDeletedPayload",
+ "description": "rent.index_document.deleted v1 (OpenVibe.Rent server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a listing page (/listings/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: listing, id, revision }, visibility internal, actor service:rent.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "const": "listing"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^rnt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/rent.index_document.upserted.v1.json",
+ "title": "RentIndexDocumentUpsertedPayload",
+ "description": "rent.index_document.upserted v1 (OpenVibe.Rent server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a rental listing page (type listing, /listings/<id>): title, description, price and period, city, region, country and neighbourhood (never a street address or the contact link). Sent in the transaction that created, edited, renewed, hid or removed the listing, and by the sweep (server/search-index.js); a listing that is hidden, removed or past its expiry becomes a tombstone. The sequencer (rent_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: kind, country, city, currency, period, bedrooms. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: listing, id, revision: <document revision> }, visibility internal, actor service:rent.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "rent"
+ },
+ "type": {
+ "const": "listing"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^rnt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/work.index_document.deleted.v1.json",
+ "title": "WorkIndexDocumentDeletedPayload",
+ "description": "work.index_document.deleted v1 (OpenVibe.Work server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a job page (/jobs/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: job, id, revision }, visibility internal, actor service:work.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "const": "job"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^job_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/work.index_document.upserted.v1.json",
+ "title": "WorkIndexDocumentUpsertedPayload",
+ "description": "work.index_document.upserted v1 (OpenVibe.Work server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a job listing page (type job, /jobs/<id>): the title, company, location, tags, salary text and the short excerpt Work keeps of a listing read from a public board, with the board as provenance (authorship imported). Sent after every ingest run that changed a listing and by the sweep (server/search-index.js); a listing that expired (not seen for the retention window) becomes a tombstone. The sequencer (work_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: source, remote, type, location. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: job, id, revision: <document revision> }, visibility internal, actor service:work.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "work"
+ },
+ "type": {
+ "const": "job"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^job_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "owner": "help",
+ "type": "article",
+ "id": "openvibe.live:how-do-i-go-live-from-my-browser",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.help/a/openvibe.live/how-do-i-go-live-from-my-browser",
+ "title": "How do I go live from my browser?",
+ "summary": "Open openvibe.live, sign in and press Go live: no OBS and no follower minimum.",
+ "body": "How do I go live from my browser?\nOpen openvibe.live, sign in and press Go live: no OBS and no follower minimum.",
+ "facets": {
+ "site": "openvibe.live",
+ "kind": "product"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "type": "offer",
+ "id": "openvibe.live:how-do-i-go-live-from-my-browser",
+ "revision": 3
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "type": "article",
+ "id": "openvibe.live:how-do-i-go-live-from-my-browser",
+ "revision": 3
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "owner": "help",
+ "type": "article",
+ "id": "how-do-i-go-live",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.help/a/openvibe.live/how-do-i-go-live-from-my-browser",
+ "title": "How do I go live from my browser?",
+ "summary": "Open openvibe.live, sign in and press Go live: no OBS and no follower minimum.",
+ "body": "How do I go live from my browser?\nOpen openvibe.live, sign in and press Go live: no OBS and no follower minimum.",
+ "facets": {
+ "site": "openvibe.live",
+ "kind": "product"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "owner": "deals",
+ "type": "article",
+ "id": "openvibe.live:how-do-i-go-live-from-my-browser",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.help/a/openvibe.live/how-do-i-go-live-from-my-browser",
+ "title": "How do I go live from my browser?",
+ "summary": "Open openvibe.live, sign in and press Go live: no OBS and no follower minimum.",
+ "body": "How do I go live from my browser?\nOpen openvibe.live, sign in and press Go live: no OBS and no follower minimum.",
+ "facets": {
+ "site": "openvibe.live",
+ "kind": "product"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "owner": "help",
+ "type": "article",
+ "id": "openvibe.live:how-do-i-go-live-from-my-browser",
+ "revision": 3,
+ "deleted": true
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
+{
+ "owner": "help",
+ "type": "article",
+ "id": "openvibe.live:how-do-i-go-live-from-my-browser",
+ "revision": 5,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.help/a/openvibe.live/how-do-i-go-live-from-my-browser",
+ "title": "How do I go live from my browser?",
+ "summary": "Open openvibe.live, sign in and press Go live: no OBS and no follower minimum.",
+ "body": "How do I go live from my browser?\nOpen openvibe.live, sign in and press Go live: no OBS and no follower minimum.",
+ "facets": {
+ "site": "openvibe.live",
+ "kind": "product"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "noindex",
+ "reasons": [
+ "owner_decision"
+ ]
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "owner": "help",
+ "type": "article",
+ "id": "openvibe.live:how-do-i-go-live-from-my-browser",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.help/a/openvibe.live/how-do-i-go-live-from-my-browser",
+ "title": "How do I go live from my browser?",
+ "summary": "Open openvibe.live, sign in and press Go live: no OBS and no follower minimum.",
+ "body": "How do I go live from my browser?\nOpen openvibe.live, sign in and press Go live: no OBS and no follower minimum.",
+ "facets": {
+ "site": "openvibe.live",
+ "kind": "product"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
+{
+ "owner": "inventory",
+ "type": "definition",
+ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.inventory/definitions/itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "title": "Fire Name",
+ "summary": "A name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",
+ "body": "Fire Name\nA name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",
+ "facets": {
+ "kind": "live.name_effect",
+ "rarity": "rare",
+ "issuer": "service:live"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "type": "offer",
+ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 3
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "type": "definition",
+ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 3
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
+{
+ "owner": "inventory",
+ "type": "definition",
+ "id": "fx_fire",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.inventory/definitions/itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "title": "Fire Name",
+ "summary": "A name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",
+ "body": "Fire Name\nA name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",
+ "facets": {
+ "kind": "live.name_effect",
+ "rarity": "rare",
+ "issuer": "service:live"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
+{
+ "owner": "deals",
+ "type": "definition",
+ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.inventory/definitions/itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "title": "Fire Name",
+ "summary": "A name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",
+ "body": "Fire Name\nA name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",
+ "facets": {
+ "kind": "live.name_effect",
+ "rarity": "rare",
+ "issuer": "service:live"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "owner": "inventory",
+ "type": "definition",
+ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 3,
+ "deleted": true
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
+{
+ "owner": "inventory",
+ "type": "definition",
+ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 5,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.inventory/definitions/itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "title": "Fire Name",
+ "summary": "A name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",
+ "body": "Fire Name\nA name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",
+ "facets": {
+ "kind": "live.name_effect",
+ "rarity": "rare",
+ "issuer": "service:live"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "noindex",
+ "reasons": [
+ "owner_decision"
+ ]
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
+{
+ "owner": "inventory",
+ "type": "definition",
+ "id": "itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.inventory/definitions/itd_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "title": "Fire Name",
+ "summary": "A name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",
+ "body": "Fire Name\nA name effect for chat: your name burns. Rare, issued by OpenVibe.Live.",
+ "facets": {
+ "kind": "live.name_effect",
+ "rarity": "rare",
+ "issuer": "service:live"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "owner": "quest",
+ "type": "quest",
+ "id": "go-live",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.quest/quests/go-live",
+ "title": "Go live once",
+ "summary": "Start your first stream on OpenVibe.Live and earn the First Broadcast badge.",
+ "body": "Go live once\nStart your first stream on OpenVibe.Live and earn the First Broadcast badge.",
+ "facets": {
+ "service": "live",
+ "badge": "first-broadcast"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "type": "offer",
+ "id": "go-live",
+ "revision": 3
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "type": "quest",
+ "id": "go-live",
+ "revision": 3
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "owner": "quest",
+ "type": "quest",
+ "id": "Go_Live!",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.quest/quests/go-live",
+ "title": "Go live once",
+ "summary": "Start your first stream on OpenVibe.Live and earn the First Broadcast badge.",
+ "body": "Go live once\nStart your first stream on OpenVibe.Live and earn the First Broadcast badge.",
+ "facets": {
+ "service": "live",
+ "badge": "first-broadcast"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "owner": "deals",
+ "type": "quest",
+ "id": "go-live",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.quest/quests/go-live",
+ "title": "Go live once",
+ "summary": "Start your first stream on OpenVibe.Live and earn the First Broadcast badge.",
+ "body": "Go live once\nStart your first stream on OpenVibe.Live and earn the First Broadcast badge.",
+ "facets": {
+ "service": "live",
+ "badge": "first-broadcast"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "owner": "quest",
+ "type": "quest",
+ "id": "go-live",
+ "revision": 3,
+ "deleted": true
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
+{
+ "owner": "quest",
+ "type": "quest",
+ "id": "go-live",
+ "revision": 5,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.quest/quests/go-live",
+ "title": "Go live once",
+ "summary": "Start your first stream on OpenVibe.Live and earn the First Broadcast badge.",
+ "body": "Go live once\nStart your first stream on OpenVibe.Live and earn the First Broadcast badge.",
+ "facets": {
+ "service": "live",
+ "badge": "first-broadcast"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "noindex",
+ "reasons": [
+ "owner_decision"
+ ]
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "owner": "quest",
+ "type": "quest",
+ "id": "go-live",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.quest/quests/go-live",
+ "title": "Go live once",
+ "summary": "Start your first stream on OpenVibe.Live and earn the First Broadcast badge.",
+ "body": "Go live once\nStart your first stream on OpenVibe.Live and earn the First Broadcast badge.",
+ "facets": {
+ "service": "live",
+ "badge": "first-broadcast"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
+{
+ "owner": "rent",
+ "type": "listing",
+ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.rent/listings/rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "title": "Bright room near the park",
+ "summary": "650 GBP a month · Leeds, Headingley · available from 2026-11-01",
+ "body": "Bright room near the park\n650 GBP a month · Leeds, Headingley · available from 2026-11-01",
+ "facets": {
+ "kind": "room",
+ "country": "GB",
+ "city": "Leeds",
+ "currency": "GBP",
+ "period": "month",
+ "bedrooms": "1"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "type": "offer",
+ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 3
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "type": "listing",
+ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 3
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
+{
+ "owner": "rent",
+ "type": "listing",
+ "id": "lst_1",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.rent/listings/rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "title": "Bright room near the park",
+ "summary": "650 GBP a month · Leeds, Headingley · available from 2026-11-01",
+ "body": "Bright room near the park\n650 GBP a month · Leeds, Headingley · available from 2026-11-01",
+ "facets": {
+ "kind": "room",
+ "country": "GB",
+ "city": "Leeds",
+ "currency": "GBP",
+ "period": "month",
+ "bedrooms": "1"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
+{
+ "owner": "deals",
+ "type": "listing",
+ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.rent/listings/rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "title": "Bright room near the park",
+ "summary": "650 GBP a month · Leeds, Headingley · available from 2026-11-01",
+ "body": "Bright room near the park\n650 GBP a month · Leeds, Headingley · available from 2026-11-01",
+ "facets": {
+ "kind": "room",
+ "country": "GB",
+ "city": "Leeds",
+ "currency": "GBP",
+ "period": "month",
+ "bedrooms": "1"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "owner": "rent",
+ "type": "listing",
+ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 3,
+ "deleted": true
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
+{
+ "owner": "rent",
+ "type": "listing",
+ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 5,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.rent/listings/rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "title": "Bright room near the park",
+ "summary": "650 GBP a month · Leeds, Headingley · available from 2026-11-01",
+ "body": "Bright room near the park\n650 GBP a month · Leeds, Headingley · available from 2026-11-01",
+ "facets": {
+ "kind": "room",
+ "country": "GB",
+ "city": "Leeds",
+ "currency": "GBP",
+ "period": "month",
+ "bedrooms": "1"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "noindex",
+ "reasons": [
+ "owner_decision"
+ ]
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
+{
+ "owner": "rent",
+ "type": "listing",
+ "id": "rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.rent/listings/rnt_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "title": "Bright room near the park",
+ "summary": "650 GBP a month · Leeds, Headingley · available from 2026-11-01",
+ "body": "Bright room near the park\n650 GBP a month · Leeds, Headingley · available from 2026-11-01",
+ "facets": {
+ "kind": "room",
+ "country": "GB",
+ "city": "Leeds",
+ "currency": "GBP",
+ "period": "month",
+ "bedrooms": "1"
+ },
+ "authorship": "human",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
+{
+ "owner": "work",
+ "type": "job",
+ "id": "job_0123456789abcdefghjkmnpqrs",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.work/jobs/job_0123456789abcdefghjkmnpqrs",
+ "title": "Senior backend engineer — Example GmbH",
+ "summary": "Remote (EU) · full time · Node.js, PostgreSQL",
+ "body": "Senior backend engineer — Example GmbH\nRemote (EU) · full time · Node.js, PostgreSQL",
+ "facets": {
+ "source": "arbeitnow",
+ "remote": "true",
+ "type": "full time",
+ "location": "Berlin"
+ },
+ "authorship": "imported",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "type": "offer",
+ "id": "job_0123456789abcdefghjkmnpqrs",
+ "revision": 3
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "type": "job",
+ "id": "job_0123456789abcdefghjkmnpqrs",
+ "revision": 3
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
+{
+ "owner": "work",
+ "type": "job",
+ "id": "job_ABC",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.work/jobs/job_0123456789abcdefghjkmnpqrs",
+ "title": "Senior backend engineer — Example GmbH",
+ "summary": "Remote (EU) · full time · Node.js, PostgreSQL",
+ "body": "Senior backend engineer — Example GmbH\nRemote (EU) · full time · Node.js, PostgreSQL",
+ "facets": {
+ "source": "arbeitnow",
+ "remote": "true",
+ "type": "full time",
+ "location": "Berlin"
+ },
+ "authorship": "imported",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
+{
+ "owner": "deals",
+ "type": "job",
+ "id": "job_0123456789abcdefghjkmnpqrs",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.work/jobs/job_0123456789abcdefghjkmnpqrs",
+ "title": "Senior backend engineer — Example GmbH",
+ "summary": "Remote (EU) · full time · Node.js, PostgreSQL",
+ "body": "Senior backend engineer — Example GmbH\nRemote (EU) · full time · Node.js, PostgreSQL",
+ "facets": {
+ "source": "arbeitnow",
+ "remote": "true",
+ "type": "full time",
+ "location": "Berlin"
+ },
+ "authorship": "imported",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "owner": "work",
+ "type": "job",
+ "id": "job_0123456789abcdefghjkmnpqrs",
+ "revision": 3,
+ "deleted": true
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
+{
+ "owner": "work",
+ "type": "job",
+ "id": "job_0123456789abcdefghjkmnpqrs",
+ "revision": 5,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.work/jobs/job_0123456789abcdefghjkmnpqrs",
+ "title": "Senior backend engineer — Example GmbH",
+ "summary": "Remote (EU) · full time · Node.js, PostgreSQL",
+ "body": "Senior backend engineer — Example GmbH\nRemote (EU) · full time · Node.js, PostgreSQL",
+ "facets": {
+ "source": "arbeitnow",
+ "remote": "true",
+ "type": "full time",
+ "location": "Berlin"
+ },
+ "authorship": "imported",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "noindex",
+ "reasons": [
+ "owner_decision"
+ ]
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
+{
+ "owner": "work",
+ "type": "job",
+ "id": "job_0123456789abcdefghjkmnpqrs",
+ "revision": 2,
+ "deleted": false,
+ "visibility": "public",
+ "canonical_url": "https://openvibe.work/jobs/job_0123456789abcdefghjkmnpqrs",
+ "title": "Senior backend engineer — Example GmbH",
+ "summary": "Remote (EU) · full time · Node.js, PostgreSQL",
+ "body": "Senior backend engineer — Example GmbH\nRemote (EU) · full time · Node.js, PostgreSQL",
+ "facets": {
+ "source": "arbeitnow",
+ "remote": "true",
+ "type": "full time",
+ "location": "Berlin"
+ },
+ "authorship": "imported",
+ "provenance": [],
+ "publication_state": "published",
+ "published_at": "2026-10-09T12:00:00.000Z",
+ "updated_at": "2026-10-10T08:00:00.000Z",
+ "indexability": {
+ "decision": "index",
+ "reasons": []
+ }
+}
@@ -74820,6 +74820,366 @@
@@ -74820,6 +74820,366 @@
}
}
}
}
}
}
+ },
+ "work.index_document.upserted": {
+ "version": "1.0.0",
+ "owner": "work",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/work.index_document.upserted.v1.json",
+ "title": "WorkIndexDocumentUpsertedPayload",
+ "description": "work.index_document.upserted v1 (OpenVibe.Work server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a job listing page (type job, /jobs/<id>): the title, company, location, tags, salary text and the short excerpt Work keeps of a listing read from a public board, with the board as provenance (authorship imported). Sent after every ingest run that changed a listing and by the sweep (server/search-index.js); a listing that expired (not seen for the retention window) becomes a tombstone. The sequencer (work_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: source, remote, type, location. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: job, id, revision: <document revision> }, visibility internal, actor service:work.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "work"
+ },
+ "type": {
+ "const": "job"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^job_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+ }
+ },
+ "work.index_document.deleted": {
+ "version": "1.0.0",
+ "owner": "work",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/work.index_document.deleted.v1.json",
+ "title": "WorkIndexDocumentDeletedPayload",
+ "description": "work.index_document.deleted v1 (OpenVibe.Work server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a job page (/jobs/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: job, id, revision }, visibility internal, actor service:work.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "const": "job"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^job_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+ }
+ },
+ "rent.index_document.upserted": {
+ "version": "1.0.0",
+ "owner": "rent",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/rent.index_document.upserted.v1.json",
+ "title": "RentIndexDocumentUpsertedPayload",
+ "description": "rent.index_document.upserted v1 (OpenVibe.Rent server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a rental listing page (type listing, /listings/<id>): title, description, price and period, city, region, country and neighbourhood (never a street address or the contact link). Sent in the transaction that created, edited, renewed, hid or removed the listing, and by the sweep (server/search-index.js); a listing that is hidden, removed or past its expiry becomes a tombstone. The sequencer (rent_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: kind, country, city, currency, period, bedrooms. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: listing, id, revision: <document revision> }, visibility internal, actor service:rent.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "rent"
+ },
+ "type": {
+ "const": "listing"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^rnt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+ }
+ },
+ "rent.index_document.deleted": {
+ "version": "1.0.0",
+ "owner": "rent",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/rent.index_document.deleted.v1.json",
+ "title": "RentIndexDocumentDeletedPayload",
+ "description": "rent.index_document.deleted v1 (OpenVibe.Rent server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a listing page (/listings/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: listing, id, revision }, visibility internal, actor service:rent.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "const": "listing"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^rnt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+ }
+ },
+ "help.index_document.upserted": {
+ "version": "1.0.0",
+ "owner": "help",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/help.index_document.upserted.v1.json",
+ "title": "HelpIndexDocumentUpsertedPayload",
+ "description": "help.index_document.upserted v1 (OpenVibe.Help server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a help article page (type article, /a/<domain>/<slug>, id <domain>:<slug>): one question from a product manifest's FAQ with its answer, quoted verbatim from OpenVibe.Contracts. Sent by the sweep at boot and on a timer (server/search-index.js) whenever the catalog Help was built from changed; an article whose FAQ entry left the catalog becomes a tombstone. The sequencer (help_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: site (the product domain), kind. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: article, id, revision: <document revision> }, visibility internal, actor service:help.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "help"
+ },
+ "type": {
+ "const": "article"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9.-]{0,79}:[a-z0-9][a-z0-9-]{0,71}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+ }
+ },
+ "help.index_document.deleted": {
+ "version": "1.0.0",
+ "owner": "help",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/help.index_document.deleted.v1.json",
+ "title": "HelpIndexDocumentDeletedPayload",
+ "description": "help.index_document.deleted v1 (OpenVibe.Help server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a article page (/a/<domain>/<slug>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: article, id, revision }, visibility internal, actor service:help.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "const": "article"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9.-]{0,79}:[a-z0-9][a-z0-9-]{0,71}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+ }
+ },
+ "inventory.index_document.upserted": {
+ "version": "1.0.0",
+ "owner": "inventory",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/inventory.index_document.upserted.v1.json",
+ "title": "InventoryIndexDocumentUpsertedPayload",
+ "description": "inventory.index_document.upserted v1 (OpenVibe.Inventory server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of an item definition page (type definition, /definitions/<id>): name, description, kind, rarity, issuer and supply. Only published definitions are documents; a draft, one in review or a retired one is a tombstone. Sent in the transaction that published or retired it, and by the sweep (server/search-index.js). The sequencer (inventory_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: kind, rarity, issuer. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: definition, id, revision: <document revision> }, visibility internal, actor service:inventory.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "inventory"
+ },
+ "type": {
+ "const": "definition"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+ }
+ },
+ "inventory.index_document.deleted": {
+ "version": "1.0.0",
+ "owner": "inventory",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/inventory.index_document.deleted.v1.json",
+ "title": "InventoryIndexDocumentDeletedPayload",
+ "description": "inventory.index_document.deleted v1 (OpenVibe.Inventory server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a definition page (/definitions/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: definition, id, revision }, visibility internal, actor service:inventory.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "const": "definition"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^itd_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+ }
+ },
+ "quest.index_document.upserted": {
+ "version": "1.0.0",
+ "owner": "quest",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/quest.index_document.upserted.v1.json",
+ "title": "QuestIndexDocumentUpsertedPayload",
+ "description": "quest.index_document.upserted v1 (OpenVibe.Quest server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a quest page (type quest, /quests/<id>): its name, what to do and where, and the badge (and item) it rewards. Quests are Quest's own catalog (server/quests/catalog.js), so they are sent by the sweep at boot (server/search-index.js); a quest that left the catalog becomes a tombstone. The sequencer (quest_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: service (where the quest is done), badge. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: quest, id, revision: <document revision> }, visibility internal, actor service:quest.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "quest"
+ },
+ "type": {
+ "const": "quest"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9-]{0,63}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+ }
+ },
+ "quest.index_document.deleted": {
+ "version": "1.0.0",
+ "owner": "quest",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/quest.index_document.deleted.v1.json",
+ "title": "QuestIndexDocumentDeletedPayload",
+ "description": "quest.index_document.deleted v1 (OpenVibe.Quest server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a quest page (/quests/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: quest, id, revision }, visibility internal, actor service:quest.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "const": "quest"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9-]{0,63}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+ }
}
}
}
}
}
}
@@ -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.127.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.Inventory API",
"title": "OpenVibe.Inventory API",
- "version": "0.127.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.Live API",
"title": "OpenVibe.Live API",
- "version": "0.127.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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.127.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.127.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.128.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.128.0): each operation lists the capabilities it performs; a token for the 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"
@@ -60863,3 +60863,123 @@ export interface InventoryDefinitionPublishedPayload {
@@ -60863,3 +60863,123 @@ export interface InventoryDefinitionPublishedPayload {
rarity: "common" | "uncommon" | "rare" | "epic" | "legendary";
rarity: "common" | "uncommon" | "rare" | "epic" | "legendary";
issuer: string;
issuer: string;
}
}
+
+/** [email protected] (owner: work) */
+/**
+ * work.index_document.upserted v1 (OpenVibe.Work server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a job listing page (type job, /jobs/<id>): the title, company, location, tags, salary text and the short excerpt Work keeps of a listing read from a public board, with the board as provenance (authorship imported). Sent after every ingest run that changed a listing and by the sweep (server/search-index.js); a listing that expired (not seen for the retention window) becomes a tombstone. The sequencer (work_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: source, remote, type, location. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: job, id, revision: <document revision> }, visibility internal, actor service:work.
+ */
+export type WorkIndexDocumentUpsertedPayload = IndexDocument & {
+ owner: "work";
+ type: "job";
+ id?: string;
+ deleted: false;
+};
+
+/** [email protected] (owner: work) */
+/**
+ * work.index_document.deleted v1 (OpenVibe.Work server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a job page (/jobs/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: job, id, revision }, visibility internal, actor service:work.
+ */
+export interface WorkIndexDocumentDeletedPayload {
+ type: "job";
+ id: string;
+ /**
+ * Index revision of the tombstone; wins over any document at the same or an older revision.
+ */
+ revision: number;
+}
+
+/** [email protected] (owner: rent) */
+/**
+ * rent.index_document.upserted v1 (OpenVibe.Rent server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a rental listing page (type listing, /listings/<id>): title, description, price and period, city, region, country and neighbourhood (never a street address or the contact link). Sent in the transaction that created, edited, renewed, hid or removed the listing, and by the sweep (server/search-index.js); a listing that is hidden, removed or past its expiry becomes a tombstone. The sequencer (rent_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: kind, country, city, currency, period, bedrooms. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: listing, id, revision: <document revision> }, visibility internal, actor service:rent.
+ */
+export type RentIndexDocumentUpsertedPayload = IndexDocument & {
+ owner: "rent";
+ type: "listing";
+ id?: string;
+ deleted: false;
+};
+
+/** [email protected] (owner: rent) */
+/**
+ * rent.index_document.deleted v1 (OpenVibe.Rent server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a listing page (/listings/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: listing, id, revision }, visibility internal, actor service:rent.
+ */
+export interface RentIndexDocumentDeletedPayload {
+ type: "listing";
+ id: string;
+ /**
+ * Index revision of the tombstone; wins over any document at the same or an older revision.
+ */
+ revision: number;
+}
+
+/** [email protected] (owner: help) */
+/**
+ * help.index_document.upserted v1 (OpenVibe.Help server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a help article page (type article, /a/<domain>/<slug>, id <domain>:<slug>): one question from a product manifest's FAQ with its answer, quoted verbatim from OpenVibe.Contracts. Sent by the sweep at boot and on a timer (server/search-index.js) whenever the catalog Help was built from changed; an article whose FAQ entry left the catalog becomes a tombstone. The sequencer (help_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: site (the product domain), kind. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: article, id, revision: <document revision> }, visibility internal, actor service:help.
+ */
+export type HelpIndexDocumentUpsertedPayload = IndexDocument & {
+ owner: "help";
+ type: "article";
+ id?: string;
+ deleted: false;
+};
+
+/** [email protected] (owner: help) */
+/**
+ * help.index_document.deleted v1 (OpenVibe.Help server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a article page (/a/<domain>/<slug>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: article, id, revision }, visibility internal, actor service:help.
+ */
+export interface HelpIndexDocumentDeletedPayload {
+ type: "article";
+ id: string;
+ /**
+ * Index revision of the tombstone; wins over any document at the same or an older revision.
+ */
+ revision: number;
+}
+
+/** [email protected] (owner: inventory) */
+/**
+ * inventory.index_document.upserted v1 (OpenVibe.Inventory server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of an item definition page (type definition, /definitions/<id>): name, description, kind, rarity, issuer and supply. Only published definitions are documents; a draft, one in review or a retired one is a tombstone. Sent in the transaction that published or retired it, and by the sweep (server/search-index.js). The sequencer (inventory_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: kind, rarity, issuer. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: definition, id, revision: <document revision> }, visibility internal, actor service:inventory.
+ */
+export type InventoryIndexDocumentUpsertedPayload = IndexDocument & {
+ owner: "inventory";
+ type: "definition";
+ id?: string;
+ deleted: false;
+};
+
+/** [email protected] (owner: inventory) */
+/**
+ * inventory.index_document.deleted v1 (OpenVibe.Inventory server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a definition page (/definitions/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: definition, id, revision }, visibility internal, actor service:inventory.
+ */
+export interface InventoryIndexDocumentDeletedPayload {
+ type: "definition";
+ id: string;
+ /**
+ * Index revision of the tombstone; wins over any document at the same or an older revision.
+ */
+ revision: number;
+}
+
+/** [email protected] (owner: quest) */
+/**
+ * quest.index_document.upserted v1 (OpenVibe.Quest server/search-index.js, via openvibe-publishing/search-feed). The OpenVibe.Search document of a quest page (type quest, /quests/<id>): its name, what to do and where, and the badge (and item) it rewards. Quests are Quest's own catalog (server/quests/catalog.js), so they are sent by the sweep at boot (server/search-index.js); a quest that left the catalog becomes a tombstone. The sequencer (quest_index_revisions) gives an unchanged document its old revision and nothing is sent. Always visibility public and publication_state published; a page its own robots mark noindex stays in Search as a noindex document. Facets: service (where the quest is done), badge. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: quest, id, revision: <document revision> }, visibility internal, actor service:quest.
+ */
+export type QuestIndexDocumentUpsertedPayload = IndexDocument & {
+ owner: "quest";
+ type: "quest";
+ id?: string;
+ deleted: false;
+};
+
+/** [email protected] (owner: quest) */
+/**
+ * quest.index_document.deleted v1 (OpenVibe.Quest server/search-index.js, via openvibe-publishing/search-feed). A Search tombstone for a quest page (/quests/<id>) that is no longer listed or whose row is gone. Only sent for a page Search was sent before, and only when the tombstone's revision moved. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: quest, id, revision }, visibility internal, actor service:quest.
+ */
+export interface QuestIndexDocumentDeletedPayload {
+ type: "quest";
+ id: string;
+ /**
+ * Index revision of the tombstone; wins over any document at the same or an older revision.
+ */
+ revision: number;
+}
@@ -16,7 +16,10 @@
@@ -16,7 +16,10 @@
"publicSite": "service"
"publicSite": "service"
},
},
"capabilities": [],
"capabilities": [],
- "eventsProduced": [],
+ "eventsProduced": [
+ "help.index_document.upserted",
+ "help.index_document.deleted"
+ ],
"eventsConsumed": [
"eventsConsumed": [
"network.account.export_requested",
"network.account.export_requested",
"network.account.deleted"
"network.account.deleted"
@@ -30,7 +30,9 @@
@@ -30,7 +30,9 @@
"inventory.item.revoked",
"inventory.item.revoked",
"inventory.item.equipped",
"inventory.item.equipped",
"inventory.item.unequipped",
"inventory.item.unequipped",
- "inventory.definition.published"
+ "inventory.definition.published",
+ "inventory.index_document.upserted",
+ "inventory.index_document.deleted"
],
],
"eventsConsumed": [
"eventsConsumed": [
"network.account.export_requested",
"network.account.export_requested",
@@ -16,7 +16,10 @@
@@ -16,7 +16,10 @@
"publicSite": "service"
"publicSite": "service"
},
},
"capabilities": [],
"capabilities": [],
- "eventsProduced": [],
+ "eventsProduced": [
+ "quest.index_document.upserted",
+ "quest.index_document.deleted"
+ ],
"eventsConsumed": [
"eventsConsumed": [
"chat.room.message.created",
"chat.room.message.created",
"community.comment.created",
"community.comment.created",
@@ -16,7 +16,10 @@
@@ -16,7 +16,10 @@
"publicSite": "service"
"publicSite": "service"
},
},
"capabilities": [],
"capabilities": [],
- "eventsProduced": [],
+ "eventsProduced": [
+ "rent.index_document.upserted",
+ "rent.index_document.deleted"
+ ],
"eventsConsumed": [
"eventsConsumed": [
"network.account.export_requested",
"network.account.export_requested",
"network.account.deleted"
"network.account.deleted"
@@ -16,7 +16,10 @@
@@ -16,7 +16,10 @@
"publicSite": "service"
"publicSite": "service"
},
},
"capabilities": [],
"capabilities": [],
- "eventsProduced": [],
+ "eventsProduced": [
+ "work.index_document.upserted",
+ "work.index_document.deleted"
+ ],
"eventsConsumed": [
"eventsConsumed": [
"network.account.export_requested",
"network.account.export_requested",
"network.account.deleted"
"network.account.deleted"
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.127.0",
+ "version": "0.128.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",