Files
mattandClaude Sonnet 5 3fb34c5ac7
CI / lint (push) Successful in 10s
CI / test (push) Successful in 10s
CI / build (push) Successful in 23s
CI / publish (push) Successful in 11s
CI / notify (push) Successful in 5s
Fix plugin config UI: use JSONForms uiSchema format, not RJSF
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
2026-09-27 23:46:55 +01:00

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" }
]
}
}
}