Navidrome's plugin config editor renders manifest.json's config.uiSchema
directly through @jsonforms/react (JsonForms component), not
react-jsonschema-form. The previous uiSchema ({"field": {"ui:widget":
"password"}}) is RJSF syntax, which JsonForms can't map to any
renderer, producing "No applicable renderer found" and blocking
plugin configuration/enabling entirely.
Replace it with a proper JSONForms UI schema (VerticalLayout of
Control elements referencing each property by JSON pointer), using
options.format: "password" on the two secret fields, matching how
Navidrome's own OutlinedTextRenderer picks the password input type.
Bump to 0.1.1.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018n5ffHCn5QUjpDtuWTk3fh
67 lines
2.6 KiB
JSON
67 lines
2.6 KiB
JSON
{
|
|
"name": "Scrobbled",
|
|
"author": "Matt Daubney",
|
|
"version": "0.1.1",
|
|
"description": "Scrobbles Navidrome playback to a self-hosted Scrobbled (Last.fm-compatible) server.",
|
|
"website": "https://scrobbled.uk",
|
|
"permissions": {
|
|
"http": {
|
|
"reason": "Send now-playing updates and scrobbles to the user's configured Scrobbled server.",
|
|
"requiredHosts": ["*"]
|
|
},
|
|
"kvstore": {
|
|
"reason": "Cache the Scrobbled session key from the auth handshake so it isn't re-derived from the password on every call."
|
|
},
|
|
"users": {
|
|
"reason": "Required by the scrobbler capability; only fires for the Navidrome user(s) the admin assigns to this plugin."
|
|
}
|
|
},
|
|
"config": {
|
|
"schema": {
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"type": "object",
|
|
"required": ["server_url", "api_key", "shared_secret", "scrobbled_username", "scrobbled_password"],
|
|
"properties": {
|
|
"server_url": {
|
|
"type": "string",
|
|
"title": "Scrobbled server URL",
|
|
"description": "Base URL of your Scrobbled instance, e.g. https://scrobbled.uk (the plugin appends /2.0/).",
|
|
"default": "https://scrobbled.uk"
|
|
},
|
|
"api_key": { "type": "string", "title": "API key" },
|
|
"shared_secret": { "type": "string", "title": "Shared secret" },
|
|
"scrobbled_username": { "type": "string", "title": "Scrobbled username" },
|
|
"scrobbled_password": {
|
|
"type": "string",
|
|
"title": "Scrobbled password",
|
|
"description": "Used only for the one-time/re-auth session handshake, never sent on scrobble calls."
|
|
},
|
|
"navidrome_username": {
|
|
"type": "string",
|
|
"title": "Restrict to Navidrome username (optional)",
|
|
"description": "If set, only this Navidrome username is treated as authorized. Leave blank to allow any user the admin assigns via the plugin's users permission."
|
|
}
|
|
}
|
|
},
|
|
"uiSchema": {
|
|
"type": "VerticalLayout",
|
|
"elements": [
|
|
{ "type": "Control", "scope": "#/properties/server_url" },
|
|
{ "type": "Control", "scope": "#/properties/api_key" },
|
|
{
|
|
"type": "Control",
|
|
"scope": "#/properties/shared_secret",
|
|
"options": { "format": "password" }
|
|
},
|
|
{ "type": "Control", "scope": "#/properties/scrobbled_username" },
|
|
{
|
|
"type": "Control",
|
|
"scope": "#/properties/scrobbled_password",
|
|
"options": { "format": "password" }
|
|
},
|
|
{ "type": "Control", "scope": "#/properties/navidrome_username" }
|
|
]
|
|
}
|
|
}
|
|
}
|