openvibers/openvibe.contracts Commits
v0.45.0: live.index_document also carries Live's public VOD and clip pages (types vod and clip; Live owns their canonical pages); media.index_document is only for VODs and clips whose canonical page is on openvibe.media
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.45.0 — 2026-09-25++++**`live.index_document.upserted|deleted`** also carry Live's public VOD and clip pages (types `vod` and `clip`, id = the Media id, canonical `openvibe.live/vod/<id>` and `/clip/<id>`), alongside channels. Live owns those canonical pages (title, channel, AI overview, transcript), so Live sends their Search documents. `media.index_document.*` is only for VODs and clips whose canonical page is on openvibe.media (apps other than Live), the same rule as Media's sitemap. Fixtures for a VOD, an AI clip (noindex) and a VOD tombstone. Additive.++## 0.44.0 — 2026-09-25Search 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.@@@ -12,7 +12,11 @@"additionalProperties": false,"properties": {"type": {-- "const": "channel"++ "enum": [++ "channel",++ "vod",++ "clip"++ ]},"id": {"type": "string",@@@ -2,7 +2,7 @@"$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.",++ "description": "live.index_document.upserted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). The OpenVibe.Search document of one of Live's canonical pages: a streamer's channel (type channel, openvibe.live/@username: its name, bio, what it streams and whether it is live), or a public VOD or clip of a Live stream (types vod and clip, openvibe.live/vod/<id> and /clip/<id>: title, channel, AI overview and transcript; the id is the Media id; AI clips are noindex). Sent whenever what Search should hold changed; a banned channel, or a VOD or clip that is deleted, made private or failed, 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"@@@ -19,7 +19,11 @@"const": "live"},"type": {-- "const": "channel"++ "enum": [++ "channel",++ "vod",++ "clip"++ ]},"id": {"type": "string",@@@ -2,7 +2,7 @@"$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.",++ "description": "media.index_document.upserted v1 (OpenVibe.Media; roadmap WS-O task 10). The OpenVibe.Search document of a public, playable VOD or clip whose canonical page is on openvibe.media (openvibe.media/v/<id>, /c/<id>): readiness playable, visibility public, made by a person, and owned by an app other than Live (Live's own VODs and clips are live.index_document, type vod or clip, on Live's pages). 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"nnew file mode 100644@@@ -0,0 +1 @@++{ "type": "vod", "id": "912", "revision": 3 }nnew file mode 100644@@@ -0,0 +1 @@++{ "owner": "live", "type": "paste", "id": "12", "revision": 1, "deleted": false, "visibility": "public", "canonical_url": "https://openvibe.live/p/x", "title": "x", "publication_state": "published" }ddeleted file mode 100644@@@ -1 +0,0 @@--{ "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": "clip", "id": "3107", "revision": 1, "deleted": false, "visibility": "public", "canonical_url": "https://openvibe.live/clip/3107", "title": "Chat erupts at the boss fight", "summary": "AI clip from Alex's stream.", "facets": { "channel": "alex", "ai_clip": true, "vod_id": "912", "duration_seconds": 30 }, "authorship": "ai_generated", "publication_state": "published", "published_at": "2026-09-24T21:00:00.000Z", "updated_at": "2026-09-25T19:00:00.000Z", "indexability": { "decision": "noindex", "reasons": ["ai_unreviewed"] } }nnew file mode 100644@@@ -0,0 +1 @@++{ "owner": "live", "type": "vod", "id": "912", "revision": 2, "deleted": false, "visibility": "public", "canonical_url": "https://openvibe.live/vod/912", "title": "Building a forum", "summary": "Alex builds the forum's rating menu and fixes it on phones.", "body": "Transcript: okay so today we are building the forum", "facets": { "channel": "alex", "category": "tech", "duration_seconds": 5400 }, "language": "en", "authorship": "human", "publication_state": "published", "published_at": "2026-09-24T19:00:00.000Z", "updated_at": "2026-09-25T19:00:00.000Z", "indexability": { "decision": "index" } }@@@ -4195,7 +4195,7 @@"$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.",++ "description": "live.index_document.upserted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). The OpenVibe.Search document of one of Live's canonical pages: a streamer's channel (type channel, openvibe.live/@username: its name, bio, what it streams and whether it is live), or a public VOD or clip of a Live stream (types vod and clip, openvibe.live/vod/<id> and /clip/<id>: title, channel, AI overview and transcript; the id is the Media id; AI clips are noindex). Sent whenever what Search should hold changed; a banned channel, or a VOD or clip that is deleted, made private or failed, 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"@@@ -4212,7 +4212,11 @@"const": "live"},"type": {-- "const": "channel"++ "enum": [++ "channel",++ "vod",++ "clip"++ ]},"id": {"type": "string",@@@ -4244,7 +4248,11 @@"additionalProperties": false,"properties": {"type": {-- "const": "channel"++ "enum": [++ "channel",++ "vod",++ "clip"++ ]},"id": {"type": "string",@@@ -4267,7 +4275,7 @@"$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.",++ "description": "media.index_document.upserted v1 (OpenVibe.Media; roadmap WS-O task 10). The OpenVibe.Search document of a public, playable VOD or clip whose canonical page is on openvibe.media (openvibe.media/v/<id>, /c/<id>): readiness playable, visibility public, made by a person, and owned by an app other than Live (Live's own VODs and clips are live.index_document, type vod or clip, on Live's pages). 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"@@@ -6701,11 +6701,11 @@ export interface WikiIndexDocumentDeletedPayload {/** [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.++ * live.index_document.upserted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). The OpenVibe.Search document of one of Live's canonical pages: a streamer's channel (type channel, openvibe.live/@username: its name, bio, what it streams and whether it is live), or a public VOD or clip of a Live stream (types vod and clip, openvibe.live/vod/<id> and /clip/<id>: title, channel, AI overview and transcript; the id is the Media id; AI clips are noindex). Sent whenever what Search should hold changed; a banned channel, or a VOD or clip that is deleted, made private or failed, 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";++ type: "channel" | "vod" | "clip";id?: string;deleted: false;};@@@ -6715,7 +6715,7 @@ export type LiveIndexDocumentUpsertedPayload = IndexDocument & {* 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";++ type: "channel" | "vod" | "clip";id: string;/*** Index revision of the tombstone; wins over any document at the same or an older revision.@@@ -6725,7 +6725,7 @@ export interface LiveIndexDocumentDeletedPayload {/** [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.++ * media.index_document.upserted v1 (OpenVibe.Media; roadmap WS-O task 10). The OpenVibe.Search document of a public, playable VOD or clip whose canonical page is on openvibe.media (openvibe.media/v/<id>, /c/<id>): readiness playable, visibility public, made by a person, and owned by an app other than Live (Live's own VODs and clips are live.index_document, type vod or clip, on Live's pages). 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";@@@ -1,17 +1,20 @@{"name": "openvibe-contracts",-- "version": "0.44.0",++ "version": "0.45.0","lockfileVersion": 3,"requires": true,"packages": {"": {"name": "openvibe-contracts",-- "version": "0.44.0",++ "version": "0.45.0","license": "AGPL-3.0-only","dependencies": {"ajv": "^8.17.1","ajv-formats": "^3.0.1"},++ "bin": {++ "openvibe-contracts-check": "bin/check-service.js"++ },"devDependencies": {"json-schema-to-typescript": "^15.0.4"},@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.44.0",++ "version": "0.45.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.45.0 — 2026-09-25
+
+**`live.index_document.upserted|deleted`** also carry Live's public VOD and clip pages (types `vod` and `clip`, id = the Media id, canonical `openvibe.live/vod/<id>` and `/clip/<id>`), alongside channels. Live owns those canonical pages (title, channel, AI overview, transcript), so Live sends their Search documents. `media.index_document.*` is only for VODs and clips whose canonical page is on openvibe.media (apps other than Live), the same rule as Media's sitemap. Fixtures for a VOD, an AI clip (noindex) and a VOD tombstone. Additive.
+
## 0.44.0 — 2026-09-25
## 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.
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.
@@ -12,7 +12,11 @@
@@ -12,7 +12,11 @@
"additionalProperties": false,
"additionalProperties": false,
"properties": {
"properties": {
"type": {
"type": {
- "const": "channel"
+ "enum": [
+ "channel",
+ "vod",
+ "clip"
+ ]
},
},
"id": {
"id": {
"type": "string",
"type": "string",
@@ -2,7 +2,7 @@
@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/events/payloads/live.index_document.upserted.v1.json",
"$id": "https://openvibe.network/contracts/events/payloads/live.index_document.upserted.v1.json",
"title": "LiveIndexDocumentUpsertedPayload",
"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.",
+ "description": "live.index_document.upserted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). The OpenVibe.Search document of one of Live's canonical pages: a streamer's channel (type channel, openvibe.live/@username: its name, bio, what it streams and whether it is live), or a public VOD or clip of a Live stream (types vod and clip, openvibe.live/vod/<id> and /clip/<id>: title, channel, AI overview and transcript; the id is the Media id; AI clips are noindex). Sent whenever what Search should hold changed; a banned channel, or a VOD or clip that is deleted, made private or failed, 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": [
"allOf": [
{
{
"$ref": "../../search/index-document.v1.json"
"$ref": "../../search/index-document.v1.json"
@@ -19,7 +19,11 @@
@@ -19,7 +19,11 @@
"const": "live"
"const": "live"
},
},
"type": {
"type": {
- "const": "channel"
+ "enum": [
+ "channel",
+ "vod",
+ "clip"
+ ]
},
},
"id": {
"id": {
"type": "string",
"type": "string",
@@ -2,7 +2,7 @@
@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/events/payloads/media.index_document.upserted.v1.json",
"$id": "https://openvibe.network/contracts/events/payloads/media.index_document.upserted.v1.json",
"title": "MediaIndexDocumentUpsertedPayload",
"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.",
+ "description": "media.index_document.upserted v1 (OpenVibe.Media; roadmap WS-O task 10). The OpenVibe.Search document of a public, playable VOD or clip whose canonical page is on openvibe.media (openvibe.media/v/<id>, /c/<id>): readiness playable, visibility public, made by a person, and owned by an app other than Live (Live's own VODs and clips are live.index_document, type vod or clip, on Live's pages). 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": [
"allOf": [
{
{
"$ref": "../../search/index-document.v1.json"
"$ref": "../../search/index-document.v1.json"
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "type": "vod", "id": "912", "revision": 3 }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "owner": "live", "type": "paste", "id": "12", "revision": 1, "deleted": false, "visibility": "public", "canonical_url": "https://openvibe.live/p/x", "title": "x", "publication_state": "published" }
deleted file mode 100644
deleted file mode 100644
@@ -1 +0,0 @@
@@ -1 +0,0 @@
-{ "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": "clip", "id": "3107", "revision": 1, "deleted": false, "visibility": "public", "canonical_url": "https://openvibe.live/clip/3107", "title": "Chat erupts at the boss fight", "summary": "AI clip from Alex's stream.", "facets": { "channel": "alex", "ai_clip": true, "vod_id": "912", "duration_seconds": 30 }, "authorship": "ai_generated", "publication_state": "published", "published_at": "2026-09-24T21:00:00.000Z", "updated_at": "2026-09-25T19:00:00.000Z", "indexability": { "decision": "noindex", "reasons": ["ai_unreviewed"] } }
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{ "owner": "live", "type": "vod", "id": "912", "revision": 2, "deleted": false, "visibility": "public", "canonical_url": "https://openvibe.live/vod/912", "title": "Building a forum", "summary": "Alex builds the forum's rating menu and fixes it on phones.", "body": "Transcript: okay so today we are building the forum", "facets": { "channel": "alex", "category": "tech", "duration_seconds": 5400 }, "language": "en", "authorship": "human", "publication_state": "published", "published_at": "2026-09-24T19:00:00.000Z", "updated_at": "2026-09-25T19:00:00.000Z", "indexability": { "decision": "index" } }
@@ -4195,7 +4195,7 @@
@@ -4195,7 +4195,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/events/payloads/live.index_document.upserted.v1.json",
"$id": "https://openvibe.network/contracts/events/payloads/live.index_document.upserted.v1.json",
"title": "LiveIndexDocumentUpsertedPayload",
"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.",
+ "description": "live.index_document.upserted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). The OpenVibe.Search document of one of Live's canonical pages: a streamer's channel (type channel, openvibe.live/@username: its name, bio, what it streams and whether it is live), or a public VOD or clip of a Live stream (types vod and clip, openvibe.live/vod/<id> and /clip/<id>: title, channel, AI overview and transcript; the id is the Media id; AI clips are noindex). Sent whenever what Search should hold changed; a banned channel, or a VOD or clip that is deleted, made private or failed, 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": [
"allOf": [
{
{
"$ref": "../../search/index-document.v1.json"
"$ref": "../../search/index-document.v1.json"
@@ -4212,7 +4212,11 @@
@@ -4212,7 +4212,11 @@
"const": "live"
"const": "live"
},
},
"type": {
"type": {
- "const": "channel"
+ "enum": [
+ "channel",
+ "vod",
+ "clip"
+ ]
},
},
"id": {
"id": {
"type": "string",
"type": "string",
@@ -4244,7 +4248,11 @@
@@ -4244,7 +4248,11 @@
"additionalProperties": false,
"additionalProperties": false,
"properties": {
"properties": {
"type": {
"type": {
- "const": "channel"
+ "enum": [
+ "channel",
+ "vod",
+ "clip"
+ ]
},
},
"id": {
"id": {
"type": "string",
"type": "string",
@@ -4267,7 +4275,7 @@
@@ -4267,7 +4275,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/events/payloads/media.index_document.upserted.v1.json",
"$id": "https://openvibe.network/contracts/events/payloads/media.index_document.upserted.v1.json",
"title": "MediaIndexDocumentUpsertedPayload",
"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.",
+ "description": "media.index_document.upserted v1 (OpenVibe.Media; roadmap WS-O task 10). The OpenVibe.Search document of a public, playable VOD or clip whose canonical page is on openvibe.media (openvibe.media/v/<id>, /c/<id>): readiness playable, visibility public, made by a person, and owned by an app other than Live (Live's own VODs and clips are live.index_document, type vod or clip, on Live's pages). 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": [
"allOf": [
{
{
"$ref": "../../search/index-document.v1.json"
"$ref": "../../search/index-document.v1.json"
@@ -6701,11 +6701,11 @@ export interface WikiIndexDocumentDeletedPayload {
@@ -6701,11 +6701,11 @@ export interface WikiIndexDocumentDeletedPayload {
/** [email protected] (owner: live) */
/** [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.
+ * live.index_document.upserted v1 (OpenVibe.Live server/events/search-documents.js; roadmap WS-O task 10). The OpenVibe.Search document of one of Live's canonical pages: a streamer's channel (type channel, openvibe.live/@username: its name, bio, what it streams and whether it is live), or a public VOD or clip of a Live stream (types vod and clip, openvibe.live/vod/<id> and /clip/<id>: title, channel, AI overview and transcript; the id is the Media id; AI clips are noindex). Sent whenever what Search should hold changed; a banned channel, or a VOD or clip that is deleted, made private or failed, 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 & {
export type LiveIndexDocumentUpsertedPayload = IndexDocument & {
owner: "live";
owner: "live";
- type: "channel";
+ type: "channel" | "vod" | "clip";
id?: string;
id?: string;
deleted: false;
deleted: false;
};
};
@@ -6715,7 +6715,7 @@ export type LiveIndexDocumentUpsertedPayload = IndexDocument & {
@@ -6715,7 +6715,7 @@ export type LiveIndexDocumentUpsertedPayload = IndexDocument & {
* 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.
* 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 {
export interface LiveIndexDocumentDeletedPayload {
- type: "channel";
+ type: "channel" | "vod" | "clip";
id: string;
id: string;
/**
/**
* Index revision of the tombstone; wins over any document at the same or an older revision.
* Index revision of the tombstone; wins over any document at the same or an older revision.
@@ -6725,7 +6725,7 @@ export interface LiveIndexDocumentDeletedPayload {
@@ -6725,7 +6725,7 @@ export interface LiveIndexDocumentDeletedPayload {
/** [email protected] (owner: media) */
/** [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.
+ * media.index_document.upserted v1 (OpenVibe.Media; roadmap WS-O task 10). The OpenVibe.Search document of a public, playable VOD or clip whose canonical page is on openvibe.media (openvibe.media/v/<id>, /c/<id>): readiness playable, visibility public, made by a person, and owned by an app other than Live (Live's own VODs and clips are live.index_document, type vod or clip, on Live's pages). 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 & {
export type MediaIndexDocumentUpsertedPayload = IndexDocument & {
owner: "media";
owner: "media";
@@ -1,17 +1,20 @@
@@ -1,17 +1,20 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.44.0",
+ "version": "0.45.0",
"lockfileVersion": 3,
"lockfileVersion": 3,
"requires": true,
"requires": true,
"packages": {
"packages": {
"": {
"": {
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.44.0",
+ "version": "0.45.0",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
"ajv-formats": "^3.0.1"
"ajv-formats": "^3.0.1"
},
},
+ "bin": {
+ "openvibe-contracts-check": "bin/check-service.js"
+ },
"devDependencies": {
"devDependencies": {
"json-schema-to-typescript": "^15.0.4"
"json-schema-to-typescript": "^15.0.4"
},
},
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.44.0",
+ "version": "0.45.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",