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

This commit is contained in:
2025-12-08 16:16:23 +01:00
commit c251f174ed
1349 changed files with 194301 additions and 0 deletions

View 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
}
}
}