private static Map<NodeType, PluginDescriptor.ServerInfo> readCompatibleServersProperty(
            Map<String, Object> properties) {
        List<Object> compatibleServers =
                readPropertyAsList(properties, PLUGIN_COMPATIBLE_SERVER, false);
        if (compatibleServers == null) {
            return ALL_SERVERS;
        }
        Map<NodeType, PluginDescriptor.ServerInfo> servers =
                CollectionUtil.newMapWithExpectedSize(compatibleServers.size());
        for (Object compatibleServer : compatibleServers) {
            NodeType serverType;
            if (!(compatibleServer instanceof Map<?, ?> map)) {
                throw new IllegalArgumentException(
                        "The value of the field \""
                                + PLUGIN_COMPATIBLE_SERVER
                                + "\" must be key-value pairs");
            }
            Object type = map.get(PLUGIN_COMPATIBLE_SERVER_TYPE);
            if (type == null) {
                continue;
            }
            if (!(type instanceof String typeStr)) {
                throw new IllegalArgumentException(
                        "The value of the field \""
                                + PLUGIN_COMPATIBLE_SERVER
                                + "."
                                + PLUGIN_COMPATIBLE_SERVER_TYPE
                                + "\""
                                + " must be one of the types: "
                                + SERVER_TYPES);
            }
            try {
                serverType = NodeType.valueOf(typeStr);
            } catch (IllegalArgumentException e) {
                throw new IllegalArgumentException(
                        "The value of the field \""
                                + PLUGIN_COMPATIBLE_SERVER
                                + "."
                                + PLUGIN_COMPATIBLE_SERVER_TYPE
                                + "\""
                                + " must be one of the types: "
                                + SERVER_TYPES);
            }
            if (servers.put(serverType, PluginDescriptor.ServerInfo.DEFAULT) != null) {
                throw new IllegalArgumentException(
                        "The compatible server type can only be specified once at most, but the server type ("
                                + serverType
                                + ") is specified more than once");
            }
        }
        return servers;
    }
@implNote If the plugin does not specify the compatible servers, we consider it supports all
          server types by default
turms-server-common/src/main/java/im/turms/server/common/infra/plugin/PluginDescriptorFactory.java