update
Some checks failed
Pipeline: Test, Lint, Build / Get version info (push) Has been cancelled
Pipeline: Test, Lint, Build / Lint Go code (push) Has been cancelled
Pipeline: Test, Lint, Build / Test Go code (push) Has been cancelled
Pipeline: Test, Lint, Build / Test JS code (push) Has been cancelled
Pipeline: Test, Lint, Build / Lint i18n files (push) Has been cancelled
Pipeline: Test, Lint, Build / Check Docker configuration (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (darwin/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (darwin/arm64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/386) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v5) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v6) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v7) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (windows/386) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (windows/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Push to GHCR (push) Has been cancelled
Pipeline: Test, Lint, Build / Push to Docker Hub (push) Has been cancelled
Pipeline: Test, Lint, Build / Cleanup digest artifacts (push) Has been cancelled
Pipeline: Test, Lint, Build / Build Windows installers (push) Has been cancelled
Pipeline: Test, Lint, Build / Package/Release (push) Has been cancelled
Pipeline: Test, Lint, Build / Upload Linux PKG (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled
POEditor import / update-translations (push) Has been cancelled
Some checks failed
Pipeline: Test, Lint, Build / Get version info (push) Has been cancelled
Pipeline: Test, Lint, Build / Lint Go code (push) Has been cancelled
Pipeline: Test, Lint, Build / Test Go code (push) Has been cancelled
Pipeline: Test, Lint, Build / Test JS code (push) Has been cancelled
Pipeline: Test, Lint, Build / Lint i18n files (push) Has been cancelled
Pipeline: Test, Lint, Build / Check Docker configuration (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (darwin/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (darwin/arm64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/386) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v5) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v6) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v7) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (windows/386) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (windows/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Push to GHCR (push) Has been cancelled
Pipeline: Test, Lint, Build / Push to Docker Hub (push) Has been cancelled
Pipeline: Test, Lint, Build / Cleanup digest artifacts (push) Has been cancelled
Pipeline: Test, Lint, Build / Build Windows installers (push) Has been cancelled
Pipeline: Test, Lint, Build / Package/Release (push) Has been cancelled
Pipeline: Test, Lint, Build / Upload Linux PKG (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled
POEditor import / update-translations (push) Has been cancelled
This commit is contained in:
199
plugins/schema/manifest.schema.json
Normal file
199
plugins/schema/manifest.schema.json
Normal file
@@ -0,0 +1,199 @@
|
||||
{
|
||||
"$id": "navidrome://plugins/manifest",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Navidrome Plugin Manifest",
|
||||
"description": "Schema for Navidrome Plugin manifest.json files",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"author",
|
||||
"version",
|
||||
"description",
|
||||
"website",
|
||||
"capabilities",
|
||||
"permissions"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the plugin"
|
||||
},
|
||||
"author": {
|
||||
"type": "string",
|
||||
"description": "Author or organization that created the plugin"
|
||||
},
|
||||
"version": {
|
||||
"type": "string",
|
||||
"description": "Plugin version using semantic versioning format"
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "A brief description of the plugin's functionality"
|
||||
},
|
||||
"website": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"description": "Website URL for the plugin or its documentation"
|
||||
},
|
||||
"capabilities": {
|
||||
"type": "array",
|
||||
"description": "List of capabilities implemented by this plugin",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"MetadataAgent",
|
||||
"Scrobbler",
|
||||
"SchedulerCallback",
|
||||
"LifecycleManagement",
|
||||
"WebSocketCallback"
|
||||
]
|
||||
}
|
||||
},
|
||||
"permissions": {
|
||||
"type": "object",
|
||||
"description": "Host services the plugin is allowed to access",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"http": {
|
||||
"allOf": [
|
||||
{ "$ref": "#/$defs/basePermission" },
|
||||
{
|
||||
"type": "object",
|
||||
"description": "HTTP service permissions",
|
||||
"required": ["allowedUrls"],
|
||||
"properties": {
|
||||
"allowedUrls": {
|
||||
"type": "object",
|
||||
"description": "Map of URL patterns (e.g., 'https://api.example.com/*') to allowed HTTP methods. Redirect destinations must also be included.",
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"GET",
|
||||
"POST",
|
||||
"PUT",
|
||||
"DELETE",
|
||||
"PATCH",
|
||||
"HEAD",
|
||||
"OPTIONS",
|
||||
"*"
|
||||
]
|
||||
},
|
||||
"minItems": 1,
|
||||
"uniqueItems": true
|
||||
},
|
||||
"minProperties": 1
|
||||
},
|
||||
"allowLocalNetwork": {
|
||||
"type": "boolean",
|
||||
"description": "Whether to allow requests to local/private network addresses",
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"config": {
|
||||
"allOf": [
|
||||
{ "$ref": "#/$defs/basePermission" },
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Configuration service permissions"
|
||||
}
|
||||
]
|
||||
},
|
||||
"scheduler": {
|
||||
"allOf": [
|
||||
{ "$ref": "#/$defs/basePermission" },
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Scheduler service permissions"
|
||||
}
|
||||
]
|
||||
},
|
||||
"websocket": {
|
||||
"allOf": [
|
||||
{ "$ref": "#/$defs/basePermission" },
|
||||
{
|
||||
"type": "object",
|
||||
"description": "WebSocket service permissions",
|
||||
"required": ["allowedUrls"],
|
||||
"properties": {
|
||||
"allowedUrls": {
|
||||
"type": "array",
|
||||
"description": "List of WebSocket URL patterns that the plugin is allowed to connect to",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"pattern": "^wss?://.*$"
|
||||
},
|
||||
"minItems": 1,
|
||||
"uniqueItems": true
|
||||
},
|
||||
"allowLocalNetwork": {
|
||||
"type": "boolean",
|
||||
"description": "Whether to allow connections to local/private network addresses",
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"cache": {
|
||||
"allOf": [
|
||||
{ "$ref": "#/$defs/basePermission" },
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Cache service permissions"
|
||||
}
|
||||
]
|
||||
},
|
||||
"artwork": {
|
||||
"allOf": [
|
||||
{ "$ref": "#/$defs/basePermission" },
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Artwork service permissions"
|
||||
}
|
||||
]
|
||||
},
|
||||
"subsonicapi": {
|
||||
"allOf": [
|
||||
{ "$ref": "#/$defs/basePermission" },
|
||||
{
|
||||
"type": "object",
|
||||
"description": "SubsonicAPI service permissions",
|
||||
"properties": {
|
||||
"allowedUsernames": {
|
||||
"type": "array",
|
||||
"description": "List of usernames the plugin can pass as u. Any user if empty",
|
||||
"items": { "type": "string" }
|
||||
},
|
||||
"allowAdmins": {
|
||||
"type": "boolean",
|
||||
"description": "If false, reject calls where the u is an admin",
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"basePermission": {
|
||||
"type": "object",
|
||||
"required": ["reason"],
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"description": "Explanation of why this permission is needed"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user