pluginengine01 / wire /bex_all.fbs
krystv's picture
Upload 107 files
3374e90 verified
// BEX Combined FlatBuffer Schema β€” all types in one file to avoid namespace issues
namespace bex.wire;
// ── Common types ──────────────────────────────────────────────────
table Image {
url:string;
layout:string;
width:uint;
height:uint;
blurhash:string;
}
table ImageSet {
low:Image;
medium:Image;
high:Image;
backdrop:Image;
logo:Image;
}
table LinkedId {
source:string;
id:string;
}
table Attr {
key:string;
value:string;
}
enum MediaKind:byte {
Movie = 0, Series = 1, Anime = 2, Short = 3, Special = 4,
Documentary = 5, Music = 6, Podcast = 7, Book = 8, Live = 9, Unknown = 10
}
enum Status:byte {
Unknown = 0, Upcoming = 1, Ongoing = 2, Completed = 3, Cancelled = 4, Paused = 5
}
enum StreamFormat:byte {
Hls = 0, Dash = 1, Progressive = 2, Unknown = 3
}
// ── Media types ───────────────────────────────────────────────────
table MediaCard {
id:string;
title:string;
kind:MediaKind;
images:ImageSet;
original_title:string;
tagline:string;
year:string;
score:uint;
genres:[string];
status:Status;
content_rating:string;
url:string;
ids:[LinkedId];
extra:[Attr];
}
table CategoryLink {
id:string;
title:string;
subtitle:string;
image:Image;
}
table HomeSection {
id:string;
title:string;
subtitle:string;
items:[MediaCard];
next_page:string;
layout:string;
show_rank:bool;
categories:[CategoryLink];
extra:[Attr];
}
table PagedResult {
items:[MediaCard];
categories:[CategoryLink];
next_page:string;
}
table Episode {
id:string;
title:string;
number:double;
season:double;
images:ImageSet;
description:string;
released:string;
score:uint;
url:string;
tags:[string];
extra:[Attr];
}
table Season {
id:string;
title:string;
number:double;
year:uint;
episodes:[Episode];
}
table Person {
id:string;
name:string;
image:ImageSet;
role:string;
url:string;
}
table MediaInfo {
id:string;
title:string;
kind:MediaKind;
images:ImageSet;
original_title:string;
description:string;
score:uint;
scored_by:ulong;
year:string;
release_date:string;
genres:[string];
tags:[string];
status:Status;
content_rating:string;
seasons:[Season];
cast:[Person];
crew:[Person];
runtime_minutes:uint;
trailer_url:string;
ids:[LinkedId];
studio:string;
country:string;
language:string;
url:string;
extra:[Attr];
}
// ── Stream types ──────────────────────────────────────────────────
table VideoResolution {
width:uint;
height:uint;
hdr:bool;
label:string;
}
table VideoTrack {
resolution:VideoResolution;
url:string;
mime_type:string;
bitrate:ulong;
codecs:string;
}
table SubtitleTrack {
label:string;
url:string;
language:string;
format:string;
}
table Server {
id:string;
label:string;
url:string;
priority:ubyte;
extra:[Attr];
}
table StreamSource {
id:string;
label:string;
format:StreamFormat;
manifest_url:string;
videos:[VideoTrack];
subtitles:[SubtitleTrack];
headers:[Attr];
extra:[Attr];
}
// ── Event payload types ──────────────────────────────────────────
table HomeResult {
sections:[HomeSection];
}
table CategoryResult {
result:PagedResult;
}
table SearchResult {
result:PagedResult;
}
table InfoResult {
info:MediaInfo;
}
table ServersResult {
servers:[Server];
}
table StreamResult {
source:StreamSource;
}
table ErrorInfo {
code:string;
message:string;
plugin_id:string;
request_id:ulong;
}
root_type HomeResult;