docs: public static String percentEncode(String source) throws AuthException {
      try {
        return URLEncoder.encode(source, "UTF-8")
            .replace("+", "%20")
            .replace("*", "%2A")
            .replace("%7E", "~");
      } catch (UnsupportedEncodingException ex) {
        throw new AuthException("cannot encode value '" + source + "'", ex);
      }
    }