{
  "name": "Discord Rich Presence (Rust)",
  "author": "Navidrome Team",
  "version": "1.0.0",
  "description": "Discord Rich Presence integration for Navidrome - Rust implementation",
  "website": "https://github.com/navidrome/navidrome/tree/master/plugins/examples/discord-rich-presence-rs",
  "permissions": {
    "users": {
      "reason": "To process scrobbles on behalf of users"
    },
    "http": {
      "reason": "To communicate with Discord API for gateway discovery and image uploads",
      "requiredHosts": ["discord.com"]
    },
    "websocket": {
      "reason": "To maintain real-time connection with Discord gateway",
      "requiredHosts": ["gateway.discord.gg"]
    },
    "cache": {
      "reason": "To store connection state and sequence numbers"
    },
    "scheduler": {
      "reason": "To schedule heartbeat messages and activity clearing"
    },
    "artwork": {
      "reason": "To get track artwork URLs for rich presence display"
    }
  },
  "config": {
    "schema": {
      "type": "object",
      "properties": {
        "clientid": {
          "type": "string",
          "title": "Discord Application Client ID",
          "description": "The Client ID from your Discord Developer Application. Create one at https://discord.com/developers/applications",
          "minLength": 17,
          "maxLength": 20,
          "pattern": "^[0-9]+$"
        },
        "users": {
          "type": "array",
          "title": "User Tokens",
          "description": "Discord tokens for each Navidrome user. WARNING: Store tokens securely!",
          "minItems": 1,
          "items": {
            "type": "object",
            "properties": {
              "username": {
                "type": "string",
                "title": "Navidrome Username",
                "description": "The Navidrome username to associate with this Discord token",
                "minLength": 1
              },
              "token": {
                "type": "string",
                "title": "Discord Token",
                "description": "The user's Discord token (keep this secret!)",
                "minLength": 1
              }
            },
            "required": ["username", "token"]
          }
        }
      },
      "required": ["clientid", "users"]
    },
    "uiSchema": {
      "type": "VerticalLayout",
      "elements": [
        {
          "type": "Control",
          "scope": "#/properties/clientid"
        },
        {
          "type": "Control",
          "scope": "#/properties/users",
          "options": {
            "elementLabelProp": "username",
            "detail": {
              "type": "HorizontalLayout",
              "elements": [
                {
                  "type": "Control",
                  "scope": "#/properties/username"
                },
                {
                  "type": "Control",
                  "scope": "#/properties/token"
                }
              ]
            }
          }
        }
      ]
    }
  }
}
