mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-24 04:39:06 -05:00
A platform or emulator record whose value designates a collection file carries its sha1 and is filed under the file's other hashes, so a SHA1 paste finds the setups listing it by MD5. The data page shows every manifest field, writes URL templates as code, states the EmuDeck rule, the browser lookup and the empty lists. systems.json gives every id holding files a page, Files to source splits at 100 rows with an upload link per file, and MiSTer and BizHawk get no empty core table.
556 lines
15 KiB
JSON
556 lines
15 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://abdess.github.io/retrobios/api/v1/schemas/site-api-envelope.schema.json",
|
|
"title": "RetroBIOS static API v1 envelope",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"schema_version",
|
|
"generated_at",
|
|
"kind",
|
|
"count",
|
|
"items"
|
|
],
|
|
"properties": {
|
|
"schema_version": {
|
|
"const": 1
|
|
},
|
|
"generated_at": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"commit": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{40}$",
|
|
"description": "The repository commit the data was read at. Every envelope carries it when the site is built from a git checkout."
|
|
},
|
|
"license": {
|
|
"type": "string",
|
|
"description": "The terms the metadata is offered under, from LICENSE. They never cover BIOS or firmware files (NOTICE)."
|
|
},
|
|
"kind": {
|
|
"type": "string",
|
|
"enum": [
|
|
"catalog",
|
|
"platforms",
|
|
"emulators",
|
|
"systems",
|
|
"verification-and-coverage-gaps",
|
|
"file-locations",
|
|
"file-lookup",
|
|
"index",
|
|
"system-index",
|
|
"core-index"
|
|
]
|
|
},
|
|
"count": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
},
|
|
"description": "Every endpoint shares this envelope. Within v1 an item keeps the fields listed for its kind and their types: fields may be added, never renamed or removed. A breaking change takes a new prefix.",
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "catalog"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"bytes",
|
|
"media_type",
|
|
"sha256",
|
|
"title",
|
|
"url"
|
|
],
|
|
"properties": {
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"type": "string"
|
|
},
|
|
"media_type": {
|
|
"type": "string"
|
|
},
|
|
"bytes": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"sha256": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{64}$"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "emulators"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"profile"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"profile": {
|
|
"type": "object",
|
|
"description": "The profile as its YAML states it, valid against emulator.schema.json (https://abdess.github.io/retrobios/api/v1/schemas/emulator.schema.json)."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "platforms"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"contract",
|
|
"coverage",
|
|
"id",
|
|
"name"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"contract": {
|
|
"type": "object",
|
|
"description": "The platform's list as the tools load it, valid against platform.schema.json (https://abdess.github.io/retrobios/api/v1/schemas/platform.schema.json). Entries a shared group adds carry shared_group, and a Recalbox ZIP entry carries zip_digest."
|
|
},
|
|
"coverage": {
|
|
"type": "object"
|
|
},
|
|
"registry": {
|
|
"type": "object",
|
|
"description": "The platform's registry entry beside its list: install detection, logo, scraper and schedule. Not part of the list."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "verification-and-coverage-gaps"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"destination",
|
|
"discrepancy",
|
|
"emulator",
|
|
"expected",
|
|
"in_repo",
|
|
"layer",
|
|
"name",
|
|
"platform",
|
|
"platform_id",
|
|
"reason",
|
|
"required",
|
|
"status",
|
|
"system"
|
|
],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"platform": {
|
|
"type": "string"
|
|
},
|
|
"platform_id": {
|
|
"type": "string"
|
|
},
|
|
"system": {
|
|
"type": "string"
|
|
},
|
|
"emulator": {
|
|
"type": "string"
|
|
},
|
|
"destination": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"layer": {
|
|
"type": "string"
|
|
},
|
|
"reason": {
|
|
"type": "string"
|
|
},
|
|
"expected": {
|
|
"type": "string"
|
|
},
|
|
"discrepancy": {
|
|
"type": "string"
|
|
},
|
|
"required": {
|
|
"type": "boolean"
|
|
},
|
|
"in_repo": {
|
|
"type": [
|
|
"boolean",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "file-locations"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"sha1",
|
|
"url"
|
|
],
|
|
"properties": {
|
|
"sha1": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{40}$"
|
|
},
|
|
"url": {
|
|
"type": "string",
|
|
"description": "Site-absolute path of the file's card, starting at /retrobios/."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "systems"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"consoles",
|
|
"id",
|
|
"name"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"consoles": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"name",
|
|
"path",
|
|
"sha1"
|
|
],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"path": {
|
|
"type": "string"
|
|
},
|
|
"size": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"sha1": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{40}$"
|
|
},
|
|
"md5": {
|
|
"type": "string"
|
|
},
|
|
"sha256": {
|
|
"type": "string"
|
|
},
|
|
"crc32": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "file-lookup"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"value",
|
|
"algorithm",
|
|
"layer",
|
|
"name",
|
|
"url"
|
|
],
|
|
"properties": {
|
|
"value": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]+$"
|
|
},
|
|
"algorithm": {
|
|
"enum": [
|
|
"sha1",
|
|
"md5",
|
|
"crc32",
|
|
"sha256"
|
|
]
|
|
},
|
|
"layer": {
|
|
"enum": [
|
|
"collection",
|
|
"data-directory",
|
|
"platform",
|
|
"emulator"
|
|
]
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"type": "string",
|
|
"description": "Site-absolute path of the page that shows the value, starting at /retrobios/. Prefix https://abdess.github.io for a full URL."
|
|
},
|
|
"sha1": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{40}$",
|
|
"description": "SHA1 of the collection file the value designates. A platform or emulator record that designates no collection file has none."
|
|
},
|
|
"declared": {
|
|
"enum": [
|
|
"sha1",
|
|
"md5",
|
|
"crc32",
|
|
"sha256"
|
|
],
|
|
"description": "On a copy of a platform or emulator record filed under another hash of its file: the algorithm of the value its owner wrote."
|
|
},
|
|
"owner": {
|
|
"type": "string"
|
|
},
|
|
"system_name": {
|
|
"type": "string",
|
|
"description": "The name the site gives the system the record belongs to (Sony PlayStation): the console a collection file is filed under, the system a platform lists it in, the system of an emulator's entry. Absent when none is known."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "index"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"title",
|
|
"url"
|
|
],
|
|
"properties": {
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"type": "string",
|
|
"description": "Relative to this document's URL."
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "system-index"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"manufacturer",
|
|
"url",
|
|
"sha1"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"description": "The system id a platform list or an emulator profile writes."
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "The name the site shows for the id."
|
|
},
|
|
"manufacturer": {
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
],
|
|
"description": "Site-absolute path of the console section holding the id's files, null when no section holds them."
|
|
},
|
|
"sha1": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{40}$"
|
|
},
|
|
"description": "SHA1 of each collection file a platform list or an emulator profile names for the id."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "core-index"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"name",
|
|
"profile"
|
|
],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "A core name as the buildbot or a platform writes it (mednafen_psx), a profile id, or an alias profile."
|
|
},
|
|
"profile": {
|
|
"type": "string",
|
|
"description": "The profile id whose api/v1/emulators/<id>.json and page describe it."
|
|
},
|
|
"preferred": {
|
|
"type": "boolean",
|
|
"description": "The profile a platform list naming this core gets: its own key first, else the first claimant."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|