openvibers/openvibe.contracts Commits
v0.44.0: live, media and community index_document.upserted|deleted events (channels; public playable VODs and clips; public threads and pastes) for OpenVibe.Search, with fixtures (WS-O task 10)
Changes
@@@ -4,6 +4,10 @@ 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.44.0 — 2026-09-25++++Search documents from three more owners (roadmap WS-O task 10): **`live.index_document.upserted|deleted`** (a streamer's channel page, type `channel`), **`media.index_document.upserted|deleted`** (public, playable VODs and clips, types `vod` and `clip`) and **`community.index_document.upserted|deleted`** (public forum threads and public pastes, types `thread` and `paste`). They use the same shape as the Wiki, Blog, News and other owners' index events: the `search.index-document@1` document, or a tombstone `{ type, id, revision }`. OpenVibe.Search consumes them through `*.index_document.*`. The live, media and community manifests list them. Fixtures cover the Live payloads. Additive.++## 0.43.0 — 2026-09-25**`network.user.updated`** (roadmap WS-B task 2). A person's whole current profile after any change that other services may know about: username, display name, picture, colour, role or ban. The payload carries a `revision` and the list of what `changed` (`created` for a new account). Consumers keep a projection by writing the newest over what they have: roles apply in both directions, and a ban arrives even for someone who never comes back. Network produces it and Live consumes it (Live's `subject_projection`, replacing the `/internal/user-role` push). Fixtures cover valid and invalid payloads. Additive.@@@ -387,6 +387,60 @@"compatibility": "backward","status": "active"},++ {++ "id": "live.index_document.upserted",++ "version": "1.0.0",++ "owner": "live",++ "schema": "events/payloads/live.index_document.upserted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "live.index_document.deleted",++ "version": "1.0.0",++ "owner": "live",++ "schema": "events/payloads/live.index_document.deleted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "media.index_document.upserted",++ "version": "1.0.0",++ "owner": "media",++ "schema": "events/payloads/media.index_document.upserted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "media.index_document.deleted",++ "version": "1.0.0",++ "owner": "media",++ "schema": "events/payloads/media.index_document.deleted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "community.index_document.upserted",++ "version": "1.0.0",++ "owner": "community",++ "schema": "events/payloads/community.index_document.upserted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "community.index_document.deleted",++ "version": "1.0.0",++ "owner": "community",++ "schema": "events/payloads/community.index_document.deleted.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },{"id": "blog.post.created","version": "1.0.0",nnew file mode 100644@@@ -0,0 +1,31 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/community.index_document.deleted.v1.json",++ "title": "CommunityIndexDocumentDeletedPayload",++ "description": "community.index_document.deleted v1 (OpenVibe.Community; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:community.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "enum": [++ "thread",++ "paste"++ ]++ },++ "id": {++ "type": "string",++ "pattern": "^[A-Za-z0-9_-]{1,80}$"++ },++ "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,37 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/community.index_document.upserted.v1.json",++ "title": "CommunityIndexDocumentUpsertedPayload",++ "description": "community.index_document.upserted v1 (OpenVibe.Community; roadmap WS-O task 10). The OpenVibe.Search document of A public forum thread (in a public, open space) or a public paste on openvibe.community. Sent whenever what Search should hold changed; a thread or paste that is deleted, made private or members-only, or burns after reading gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:community.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "community"++ },++ "type": {++ "enum": [++ "thread",++ "paste"++ ]++ },++ "id": {++ "type": "string",++ "pattern": "^[A-Za-z0-9_-]{1,80}$"++ },++ "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/live.index_document.deleted.v1.json",++ "title": "LiveIndexDocumentDeletedPayload",++ "description": "live.index_document.deleted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:live.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "const": "channel"++ },++ "id": {++ "type": "string",++ "pattern": "^[0-9]{1,15}$"++ },++ "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/live.index_document.upserted.v1.json",++ "title": "LiveIndexDocumentUpsertedPayload",++ "description": "live.index_document.upserted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). The OpenVibe.Search document of A streamer's channel page (openvibe.live/@username): its name, bio, what it streams and whether it is live. Sent whenever what Search should hold changed; a banned channel, or one that stopped streaming for good, gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:live.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "live"++ },++ "type": {++ "const": "channel"++ },++ "id": {++ "type": "string",++ "pattern": "^[0-9]{1,15}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,31 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/media.index_document.deleted.v1.json",++ "title": "MediaIndexDocumentDeletedPayload",++ "description": "media.index_document.deleted v1 (OpenVibe.Media; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:media.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "enum": [++ "vod",++ "clip"++ ]++ },++ "id": {++ "type": "string",++ "pattern": "^[0-9]{1,15}$"++ },++ "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,37 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/media.index_document.upserted.v1.json",++ "title": "MediaIndexDocumentUpsertedPayload",++ "description": "media.index_document.upserted v1 (OpenVibe.Media; roadmap WS-O task 10). The OpenVibe.Search document of A public, playable VOD or clip page on openvibe.media (readiness playable, visibility public). Sent whenever what Search should hold changed; a VOD or clip that is deleted, made private or stops being playable gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:media.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "media"++ },++ "type": {++ "enum": [++ "vod",++ "clip"++ ]++ },++ "id": {++ "type": "string",++ "pattern": "^[0-9]{1,15}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++}nnew file mode 100644@@@ -0,0 +1 @@++{ "type": "paste", "id": "snip-12", "revision": 2, "reason": "deleted" }nnew file mode 100644@@@ -0,0 +1 @@++{ "type": "paste", "id": "snip-12", "revision": 2 }nnew file mode 100644@@@ -0,0 +1 @@++{ "owner": "community", "type": "paste", "id": "no spaces allowed", "revision": 1, "deleted": false, "visibility": "public", "title": "x", "publication_state": "published", "indexability": { "decision": "index" } }nnew file mode 100644@@@ -0,0 +1 @@++{ "owner": "community", "type": "thread", "id": "12", "revision": 1, "deleted": false, "visibility": "public", "canonical_url": "https://openvibe.community/s/general/t/welcome", "title": "Welcome", "summary": "Say hi.", "facets": { "space": "general" }, "authorship": "human", "publication_state": "published", "indexability": { "decision": "index" } }nnew file mode 100644@@@ -0,0 +1 @@++{ "type": "channel", "id": "42" }nnew file mode 100644@@@ -0,0 +1 @@++{ "type": "channel", "id": "42", "revision": 4 }nnew file mode 100644@@@ -0,0 +1 @@++{ "owner": "live", "type": "vod", "id": "42", "revision": 3, "deleted": false, "visibility": "public", "title": "x", "publication_state": "published", "indexability": { "decision": "index" } }nnew file mode 100644@@@ -0,0 +1 @@++{ "owner": "live", "type": "channel", "id": "42", "revision": 3, "deleted": false, "visibility": "public", "canonical_url": "https://openvibe.live/@alex", "title": "Alex (@alex)", "summary": "Streams builds and games.", "body": "Streams builds and games.\nLast stream: Building a forum", "facets": { "category": "tech", "live": false, "followers": 12 }, "language": "en", "authorship": "human", "publication_state": "published", "published_at": "2026-09-01T10:00:00.000Z", "updated_at": "2026-09-25T19:00:00.000Z", "indexability": { "decision": "index" } }nnew file mode 100644@@@ -0,0 +1 @@++{ "type": "channel", "id": "396", "revision": 5 }nnew file mode 100644@@@ -0,0 +1 @@++{ "type": "clip", "id": "396", "revision": 5 }nnew file mode 100644@@@ -0,0 +1 @@++{ "owner": "live", "type": "vod", "id": "5628", "revision": 2, "deleted": false, "visibility": "public", "title": "x", "publication_state": "published", "indexability": { "decision": "index" } }nnew file mode 100644@@@ -0,0 +1 @@++{ "owner": "media", "type": "vod", "id": "5628", "revision": 2, "deleted": false, "visibility": "public", "canonical_url": "https://openvibe.media/v/5628", "title": "Late night build stream", "summary": "A VOD from alex's channel.", "facets": { "channel": "alex", "duration_seconds": 3600 }, "authorship": "human", "publication_state": "published", "published_at": "2026-09-25T02:00:00.000Z", "indexability": { "decision": "index" } }@@@ -4187,6 +4187,234 @@}}},++ "live.index_document.upserted": {++ "version": "1.0.0",++ "owner": "live",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/live.index_document.upserted.v1.json",++ "title": "LiveIndexDocumentUpsertedPayload",++ "description": "live.index_document.upserted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). The OpenVibe.Search document of A streamer's channel page (openvibe.live/@username): its name, bio, what it streams and whether it is live. Sent whenever what Search should hold changed; a banned channel, or one that stopped streaming for good, gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:live.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "live"++ },++ "type": {++ "const": "channel"++ },++ "id": {++ "type": "string",++ "pattern": "^[0-9]{1,15}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++ }++ },++ "live.index_document.deleted": {++ "version": "1.0.0",++ "owner": "live",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/live.index_document.deleted.v1.json",++ "title": "LiveIndexDocumentDeletedPayload",++ "description": "live.index_document.deleted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:live.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "const": "channel"++ },++ "id": {++ "type": "string",++ "pattern": "^[0-9]{1,15}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++ }++ },++ "media.index_document.upserted": {++ "version": "1.0.0",++ "owner": "media",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/media.index_document.upserted.v1.json",++ "title": "MediaIndexDocumentUpsertedPayload",++ "description": "media.index_document.upserted v1 (OpenVibe.Media; roadmap WS-O task 10). The OpenVibe.Search document of A public, playable VOD or clip page on openvibe.media (readiness playable, visibility public). Sent whenever what Search should hold changed; a VOD or clip that is deleted, made private or stops being playable gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:media.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "media"++ },++ "type": {++ "enum": [++ "vod",++ "clip"++ ]++ },++ "id": {++ "type": "string",++ "pattern": "^[0-9]{1,15}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++ }++ },++ "media.index_document.deleted": {++ "version": "1.0.0",++ "owner": "media",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/media.index_document.deleted.v1.json",++ "title": "MediaIndexDocumentDeletedPayload",++ "description": "media.index_document.deleted v1 (OpenVibe.Media; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:media.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "enum": [++ "vod",++ "clip"++ ]++ },++ "id": {++ "type": "string",++ "pattern": "^[0-9]{1,15}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++ }++ },++ "community.index_document.upserted": {++ "version": "1.0.0",++ "owner": "community",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/community.index_document.upserted.v1.json",++ "title": "CommunityIndexDocumentUpsertedPayload",++ "description": "community.index_document.upserted v1 (OpenVibe.Community; roadmap WS-O task 10). The OpenVibe.Search document of A public forum thread (in a public, open space) or a public paste on openvibe.community. Sent whenever what Search should hold changed; a thread or paste that is deleted, made private or members-only, or burns after reading gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:community.",++ "allOf": [++ {++ "$ref": "../../search/index-document.v1.json"++ },++ {++ "type": "object",++ "required": [++ "owner",++ "type",++ "deleted"++ ],++ "properties": {++ "owner": {++ "const": "community"++ },++ "type": {++ "enum": [++ "thread",++ "paste"++ ]++ },++ "id": {++ "type": "string",++ "pattern": "^[A-Za-z0-9_-]{1,80}$"++ },++ "deleted": {++ "const": false++ }++ }++ }++ ]++ }++ },++ "community.index_document.deleted": {++ "version": "1.0.0",++ "owner": "community",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/community.index_document.deleted.v1.json",++ "title": "CommunityIndexDocumentDeletedPayload",++ "description": "community.index_document.deleted v1 (OpenVibe.Community; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:community.",++ "type": "object",++ "required": [++ "type",++ "id",++ "revision"++ ],++ "additionalProperties": false,++ "properties": {++ "type": {++ "enum": [++ "thread",++ "paste"++ ]++ },++ "id": {++ "type": "string",++ "pattern": "^[A-Za-z0-9_-]{1,80}$"++ },++ "revision": {++ "type": "integer",++ "minimum": 1,++ "maximum": 9007199254740991,++ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."++ }++ }++ }++ },"blog.post.created": {"version": "1.0.0","owner": "blog",@@@ -6699,6 +6699,78 @@ export interface WikiIndexDocumentDeletedPayload {revision: number;}++/** [email protected] (owner: live) */++/**++ * live.index_document.upserted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). The OpenVibe.Search document of A streamer's channel page (openvibe.live/@username): its name, bio, what it streams and whether it is live. Sent whenever what Search should hold changed; a banned channel, or one that stopped streaming for good, gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:live.++ */++export type LiveIndexDocumentUpsertedPayload = IndexDocument & {++ owner: "live";++ type: "channel";++ id?: string;++ deleted: false;++};++++/** [email protected] (owner: live) */++/**++ * live.index_document.deleted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:live.++ */++export interface LiveIndexDocumentDeletedPayload {++ type: "channel";++ id: string;++ /**++ * Index revision of the tombstone; wins over any document at the same or an older revision.++ */++ revision: number;++}++++/** [email protected] (owner: media) */++/**++ * media.index_document.upserted v1 (OpenVibe.Media; roadmap WS-O task 10). The OpenVibe.Search document of A public, playable VOD or clip page on openvibe.media (readiness playable, visibility public). Sent whenever what Search should hold changed; a VOD or clip that is deleted, made private or stops being playable gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:media.++ */++export type MediaIndexDocumentUpsertedPayload = IndexDocument & {++ owner: "media";++ type: "vod" | "clip";++ id?: string;++ deleted: false;++};++++/** [email protected] (owner: media) */++/**++ * media.index_document.deleted v1 (OpenVibe.Media; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:media.++ */++export interface MediaIndexDocumentDeletedPayload {++ type: "vod" | "clip";++ id: string;++ /**++ * Index revision of the tombstone; wins over any document at the same or an older revision.++ */++ revision: number;++}++++/** [email protected] (owner: community) */++/**++ * community.index_document.upserted v1 (OpenVibe.Community; roadmap WS-O task 10). The OpenVibe.Search document of A public forum thread (in a public, open space) or a public paste on openvibe.community. Sent whenever what Search should hold changed; a thread or paste that is deleted, made private or members-only, or burns after reading gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:community.++ */++export type CommunityIndexDocumentUpsertedPayload = IndexDocument & {++ owner: "community";++ type: "thread" | "paste";++ id?: string;++ deleted: false;++};++++/** [email protected] (owner: community) */++/**++ * community.index_document.deleted v1 (OpenVibe.Community; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:community.++ */++export interface CommunityIndexDocumentDeletedPayload {++ type: "thread" | "paste";++ id: string;++ /**++ * Index revision of the tombstone; wins over any document at the same or an older revision.++ */++ revision: number;++}++/** [email protected] (owner: blog) *//*** blog.post.created v1 (OpenVibe.Blog server/domain/posts.js create). A post exists as a draft (its first revision). Envelope: subject { type: post, id: pst_…, revision: 1 }, visibility internal, priority low, actor the person or the calling service.@@@ -28,6 +28,8 @@],"eventsProduced": ["community.comment.created",++ "community.index_document.deleted",++ "community.index_document.upserted","community.moderation.action","community.paste.created","community.paste.deleted",@@@ -40,9 +40,11 @@"live.owner.resolve"],"eventsProduced": [-- "live.stream.started",++ "live.index_document.deleted",++ "live.index_document.upserted",++ "live.release.deployed","live.stream.ended",-- "live.release.deployed"++ "live.stream.started"],"eventsConsumed": ["media.clip.*",@@@ -38,6 +38,8 @@"eventsProduced": ["media.clip.failed","media.clip.ready",++ "media.index_document.deleted",++ "media.index_document.upserted","media.job.cancelled","media.job.failed","media.job.proposed",@@@ -1,12 +1,12 @@{"name": "openvibe-contracts",-- "version": "0.43.0",++ "version": "0.44.0","lockfileVersion": 3,"requires": true,"packages": {"": {"name": "openvibe-contracts",-- "version": "0.43.0",++ "version": "0.44.0","license": "AGPL-3.0-only","dependencies": {"ajv": "^8.17.1",@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.43.0",++ "version": "0.44.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,10 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
@@ -4,6 +4,10 @@ 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.44.0 — 2026-09-25
+
+Search documents from three more owners (roadmap WS-O task 10): **`live.index_document.upserted|deleted`** (a streamer's channel page, type `channel`), **`media.index_document.upserted|deleted`** (public, playable VODs and clips, types `vod` and `clip`) and **`community.index_document.upserted|deleted`** (public forum threads and public pastes, types `thread` and `paste`). They use the same shape as the Wiki, Blog, News and other owners' index events: the `search.index-document@1` document, or a tombstone `{ type, id, revision }`. OpenVibe.Search consumes them through `*.index_document.*`. The live, media and community manifests list them. Fixtures cover the Live payloads. Additive.
+
## 0.43.0 — 2026-09-25
## 0.43.0 — 2026-09-25
**`network.user.updated`** (roadmap WS-B task 2). A person's whole current profile after any change that other services may know about: username, display name, picture, colour, role or ban. The payload carries a `revision` and the list of what `changed` (`created` for a new account). Consumers keep a projection by writing the newest over what they have: roles apply in both directions, and a ban arrives even for someone who never comes back. Network produces it and Live consumes it (Live's `subject_projection`, replacing the `/internal/user-role` push). Fixtures cover valid and invalid payloads. Additive.
**`network.user.updated`** (roadmap WS-B task 2). A person's whole current profile after any change that other services may know about: username, display name, picture, colour, role or ban. The payload carries a `revision` and the list of what `changed` (`created` for a new account). Consumers keep a projection by writing the newest over what they have: roles apply in both directions, and a ban arrives even for someone who never comes back. Network produces it and Live consumes it (Live's `subject_projection`, replacing the `/internal/user-role` push). Fixtures cover valid and invalid payloads. Additive.
@@ -387,6 +387,60 @@
@@ -387,6 +387,60 @@
"compatibility": "backward",
"compatibility": "backward",
"status": "active"
"status": "active"
},
},
+ {
+ "id": "live.index_document.upserted",
+ "version": "1.0.0",
+ "owner": "live",
+ "schema": "events/payloads/live.index_document.upserted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "live.index_document.deleted",
+ "version": "1.0.0",
+ "owner": "live",
+ "schema": "events/payloads/live.index_document.deleted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "media.index_document.upserted",
+ "version": "1.0.0",
+ "owner": "media",
+ "schema": "events/payloads/media.index_document.upserted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "media.index_document.deleted",
+ "version": "1.0.0",
+ "owner": "media",
+ "schema": "events/payloads/media.index_document.deleted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "community.index_document.upserted",
+ "version": "1.0.0",
+ "owner": "community",
+ "schema": "events/payloads/community.index_document.upserted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "community.index_document.deleted",
+ "version": "1.0.0",
+ "owner": "community",
+ "schema": "events/payloads/community.index_document.deleted.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
{
{
"id": "blog.post.created",
"id": "blog.post.created",
"version": "1.0.0",
"version": "1.0.0",
new file mode 100644
new file mode 100644
@@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/community.index_document.deleted.v1.json",
+ "title": "CommunityIndexDocumentDeletedPayload",
+ "description": "community.index_document.deleted v1 (OpenVibe.Community; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:community.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "enum": [
+ "thread",
+ "paste"
+ ]
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
+ },
+ "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,37 @@
@@ -0,0 +1,37 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/community.index_document.upserted.v1.json",
+ "title": "CommunityIndexDocumentUpsertedPayload",
+ "description": "community.index_document.upserted v1 (OpenVibe.Community; roadmap WS-O task 10). The OpenVibe.Search document of A public forum thread (in a public, open space) or a public paste on openvibe.community. Sent whenever what Search should hold changed; a thread or paste that is deleted, made private or members-only, or burns after reading gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:community.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "community"
+ },
+ "type": {
+ "enum": [
+ "thread",
+ "paste"
+ ]
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
+ },
+ "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/live.index_document.deleted.v1.json",
+ "title": "LiveIndexDocumentDeletedPayload",
+ "description": "live.index_document.deleted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:live.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "const": "channel"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[0-9]{1,15}$"
+ },
+ "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/live.index_document.upserted.v1.json",
+ "title": "LiveIndexDocumentUpsertedPayload",
+ "description": "live.index_document.upserted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). The OpenVibe.Search document of A streamer's channel page (openvibe.live/@username): its name, bio, what it streams and whether it is live. Sent whenever what Search should hold changed; a banned channel, or one that stopped streaming for good, gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:live.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "live"
+ },
+ "type": {
+ "const": "channel"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[0-9]{1,15}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/media.index_document.deleted.v1.json",
+ "title": "MediaIndexDocumentDeletedPayload",
+ "description": "media.index_document.deleted v1 (OpenVibe.Media; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:media.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "enum": [
+ "vod",
+ "clip"
+ ]
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[0-9]{1,15}$"
+ },
+ "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,37 @@
@@ -0,0 +1,37 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/media.index_document.upserted.v1.json",
+ "title": "MediaIndexDocumentUpsertedPayload",
+ "description": "media.index_document.upserted v1 (OpenVibe.Media; roadmap WS-O task 10). The OpenVibe.Search document of A public, playable VOD or clip page on openvibe.media (readiness playable, visibility public). Sent whenever what Search should hold changed; a VOD or clip that is deleted, made private or stops being playable gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:media.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "media"
+ },
+ "type": {
+ "enum": [
+ "vod",
+ "clip"
+ ]
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[0-9]{1,15}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "type": "paste", "id": "snip-12", "revision": 2, "reason": "deleted" }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "type": "paste", "id": "snip-12", "revision": 2 }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "owner": "community", "type": "paste", "id": "no spaces allowed", "revision": 1, "deleted": false, "visibility": "public", "title": "x", "publication_state": "published", "indexability": { "decision": "index" } }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "owner": "community", "type": "thread", "id": "12", "revision": 1, "deleted": false, "visibility": "public", "canonical_url": "https://openvibe.community/s/general/t/welcome", "title": "Welcome", "summary": "Say hi.", "facets": { "space": "general" }, "authorship": "human", "publication_state": "published", "indexability": { "decision": "index" } }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "type": "channel", "id": "42" }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "type": "channel", "id": "42", "revision": 4 }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "owner": "live", "type": "vod", "id": "42", "revision": 3, "deleted": false, "visibility": "public", "title": "x", "publication_state": "published", "indexability": { "decision": "index" } }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "owner": "live", "type": "channel", "id": "42", "revision": 3, "deleted": false, "visibility": "public", "canonical_url": "https://openvibe.live/@alex", "title": "Alex (@alex)", "summary": "Streams builds and games.", "body": "Streams builds and games.\nLast stream: Building a forum", "facets": { "category": "tech", "live": false, "followers": 12 }, "language": "en", "authorship": "human", "publication_state": "published", "published_at": "2026-09-01T10:00:00.000Z", "updated_at": "2026-09-25T19:00:00.000Z", "indexability": { "decision": "index" } }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "type": "channel", "id": "396", "revision": 5 }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "type": "clip", "id": "396", "revision": 5 }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "owner": "live", "type": "vod", "id": "5628", "revision": 2, "deleted": false, "visibility": "public", "title": "x", "publication_state": "published", "indexability": { "decision": "index" } }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "owner": "media", "type": "vod", "id": "5628", "revision": 2, "deleted": false, "visibility": "public", "canonical_url": "https://openvibe.media/v/5628", "title": "Late night build stream", "summary": "A VOD from alex's channel.", "facets": { "channel": "alex", "duration_seconds": 3600 }, "authorship": "human", "publication_state": "published", "published_at": "2026-09-25T02:00:00.000Z", "indexability": { "decision": "index" } }
@@ -4187,6 +4187,234 @@
@@ -4187,6 +4187,234 @@
}
}
}
}
},
},
+ "live.index_document.upserted": {
+ "version": "1.0.0",
+ "owner": "live",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/live.index_document.upserted.v1.json",
+ "title": "LiveIndexDocumentUpsertedPayload",
+ "description": "live.index_document.upserted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). The OpenVibe.Search document of A streamer's channel page (openvibe.live/@username): its name, bio, what it streams and whether it is live. Sent whenever what Search should hold changed; a banned channel, or one that stopped streaming for good, gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:live.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "live"
+ },
+ "type": {
+ "const": "channel"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[0-9]{1,15}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+ }
+ },
+ "live.index_document.deleted": {
+ "version": "1.0.0",
+ "owner": "live",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/live.index_document.deleted.v1.json",
+ "title": "LiveIndexDocumentDeletedPayload",
+ "description": "live.index_document.deleted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:live.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "const": "channel"
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[0-9]{1,15}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+ }
+ },
+ "media.index_document.upserted": {
+ "version": "1.0.0",
+ "owner": "media",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/media.index_document.upserted.v1.json",
+ "title": "MediaIndexDocumentUpsertedPayload",
+ "description": "media.index_document.upserted v1 (OpenVibe.Media; roadmap WS-O task 10). The OpenVibe.Search document of A public, playable VOD or clip page on openvibe.media (readiness playable, visibility public). Sent whenever what Search should hold changed; a VOD or clip that is deleted, made private or stops being playable gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:media.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "media"
+ },
+ "type": {
+ "enum": [
+ "vod",
+ "clip"
+ ]
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[0-9]{1,15}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+ }
+ },
+ "media.index_document.deleted": {
+ "version": "1.0.0",
+ "owner": "media",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/media.index_document.deleted.v1.json",
+ "title": "MediaIndexDocumentDeletedPayload",
+ "description": "media.index_document.deleted v1 (OpenVibe.Media; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:media.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "enum": [
+ "vod",
+ "clip"
+ ]
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[0-9]{1,15}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+ }
+ },
+ "community.index_document.upserted": {
+ "version": "1.0.0",
+ "owner": "community",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/community.index_document.upserted.v1.json",
+ "title": "CommunityIndexDocumentUpsertedPayload",
+ "description": "community.index_document.upserted v1 (OpenVibe.Community; roadmap WS-O task 10). The OpenVibe.Search document of A public forum thread (in a public, open space) or a public paste on openvibe.community. Sent whenever what Search should hold changed; a thread or paste that is deleted, made private or members-only, or burns after reading gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:community.",
+ "allOf": [
+ {
+ "$ref": "../../search/index-document.v1.json"
+ },
+ {
+ "type": "object",
+ "required": [
+ "owner",
+ "type",
+ "deleted"
+ ],
+ "properties": {
+ "owner": {
+ "const": "community"
+ },
+ "type": {
+ "enum": [
+ "thread",
+ "paste"
+ ]
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
+ },
+ "deleted": {
+ "const": false
+ }
+ }
+ }
+ ]
+ }
+ },
+ "community.index_document.deleted": {
+ "version": "1.0.0",
+ "owner": "community",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/community.index_document.deleted.v1.json",
+ "title": "CommunityIndexDocumentDeletedPayload",
+ "description": "community.index_document.deleted v1 (OpenVibe.Community; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:community.",
+ "type": "object",
+ "required": [
+ "type",
+ "id",
+ "revision"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "enum": [
+ "thread",
+ "paste"
+ ]
+ },
+ "id": {
+ "type": "string",
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
+ },
+ "revision": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9007199254740991,
+ "description": "Index revision of the tombstone; wins over any document at the same or an older revision."
+ }
+ }
+ }
+ },
"blog.post.created": {
"blog.post.created": {
"version": "1.0.0",
"version": "1.0.0",
"owner": "blog",
"owner": "blog",
@@ -6699,6 +6699,78 @@ export interface WikiIndexDocumentDeletedPayload {
@@ -6699,6 +6699,78 @@ export interface WikiIndexDocumentDeletedPayload {
revision: number;
revision: number;
}
}
+/** [email protected] (owner: live) */
+/**
+ * live.index_document.upserted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). The OpenVibe.Search document of A streamer's channel page (openvibe.live/@username): its name, bio, what it streams and whether it is live. Sent whenever what Search should hold changed; a banned channel, or one that stopped streaming for good, gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:live.
+ */
+export type LiveIndexDocumentUpsertedPayload = IndexDocument & {
+ owner: "live";
+ type: "channel";
+ id?: string;
+ deleted: false;
+};
+
+/** [email protected] (owner: live) */
+/**
+ * live.index_document.deleted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:live.
+ */
+export interface LiveIndexDocumentDeletedPayload {
+ type: "channel";
+ id: string;
+ /**
+ * Index revision of the tombstone; wins over any document at the same or an older revision.
+ */
+ revision: number;
+}
+
+/** [email protected] (owner: media) */
+/**
+ * media.index_document.upserted v1 (OpenVibe.Media; roadmap WS-O task 10). The OpenVibe.Search document of A public, playable VOD or clip page on openvibe.media (readiness playable, visibility public). Sent whenever what Search should hold changed; a VOD or clip that is deleted, made private or stops being playable gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:media.
+ */
+export type MediaIndexDocumentUpsertedPayload = IndexDocument & {
+ owner: "media";
+ type: "vod" | "clip";
+ id?: string;
+ deleted: false;
+};
+
+/** [email protected] (owner: media) */
+/**
+ * media.index_document.deleted v1 (OpenVibe.Media; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:media.
+ */
+export interface MediaIndexDocumentDeletedPayload {
+ type: "vod" | "clip";
+ id: string;
+ /**
+ * Index revision of the tombstone; wins over any document at the same or an older revision.
+ */
+ revision: number;
+}
+
+/** [email protected] (owner: community) */
+/**
+ * community.index_document.upserted v1 (OpenVibe.Community; roadmap WS-O task 10). The OpenVibe.Search document of A public forum thread (in a public, open space) or a public paste on openvibe.community. Sent whenever what Search should hold changed; a thread or paste that is deleted, made private or members-only, or burns after reading gets a tombstone. The revision grows with every change. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type, id, revision: <document revision> }, visibility internal, actor service:community.
+ */
+export type CommunityIndexDocumentUpsertedPayload = IndexDocument & {
+ owner: "community";
+ type: "thread" | "paste";
+ id?: string;
+ deleted: false;
+};
+
+/** [email protected] (owner: community) */
+/**
+ * community.index_document.deleted v1 (OpenVibe.Community; roadmap WS-O task 10). A Search tombstone: Search drops the document at this revision or older. Only sent for a document Search was sent before. Envelope: subject { type, id, revision }, visibility internal, actor service:community.
+ */
+export interface CommunityIndexDocumentDeletedPayload {
+ type: "thread" | "paste";
+ id: string;
+ /**
+ * Index revision of the tombstone; wins over any document at the same or an older revision.
+ */
+ revision: number;
+}
+
/** [email protected] (owner: blog) */
/** [email protected] (owner: blog) */
/**
/**
* blog.post.created v1 (OpenVibe.Blog server/domain/posts.js create). A post exists as a draft (its first revision). Envelope: subject { type: post, id: pst_…, revision: 1 }, visibility internal, priority low, actor the person or the calling service.
* blog.post.created v1 (OpenVibe.Blog server/domain/posts.js create). A post exists as a draft (its first revision). Envelope: subject { type: post, id: pst_…, revision: 1 }, visibility internal, priority low, actor the person or the calling service.
@@ -28,6 +28,8 @@
@@ -28,6 +28,8 @@
],
],
"eventsProduced": [
"eventsProduced": [
"community.comment.created",
"community.comment.created",
+ "community.index_document.deleted",
+ "community.index_document.upserted",
"community.moderation.action",
"community.moderation.action",
"community.paste.created",
"community.paste.created",
"community.paste.deleted",
"community.paste.deleted",
@@ -40,9 +40,11 @@
@@ -40,9 +40,11 @@
"live.owner.resolve"
"live.owner.resolve"
],
],
"eventsProduced": [
"eventsProduced": [
- "live.stream.started",
+ "live.index_document.deleted",
+ "live.index_document.upserted",
+ "live.release.deployed",
"live.stream.ended",
"live.stream.ended",
- "live.release.deployed"
+ "live.stream.started"
],
],
"eventsConsumed": [
"eventsConsumed": [
"media.clip.*",
"media.clip.*",
@@ -38,6 +38,8 @@
@@ -38,6 +38,8 @@
"eventsProduced": [
"eventsProduced": [
"media.clip.failed",
"media.clip.failed",
"media.clip.ready",
"media.clip.ready",
+ "media.index_document.deleted",
+ "media.index_document.upserted",
"media.job.cancelled",
"media.job.cancelled",
"media.job.failed",
"media.job.failed",
"media.job.proposed",
"media.job.proposed",
@@ -1,12 +1,12 @@
@@ -1,12 +1,12 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.43.0",
+ "version": "0.44.0",
"lockfileVersion": 3,
"lockfileVersion": 3,
"requires": true,
"requires": true,
"packages": {
"packages": {
"": {
"": {
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.43.0",
+ "version": "0.44.0",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.43.0",
+ "version": "0.44.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",