docs: private static JsonNode federatedFlowStep1(LoginInput loginInput)
    throws SnowflakeSQLException
    {
      JsonNode dataNode = null;
      try
      {
        URIBuilder fedUriBuilder = new URIBuilder(loginInput.getServerUrl());
        fedUriBuilder.setPath(SF_PATH_AUTHENTICATOR_REQUEST);
        URI fedUrlUri = fedUriBuilder.build();
  
        Map<String, Object> data = new HashMap<>();
        data.put(ClientAuthnParameter.ACCOUNT_NAME.name(),
                 loginInput.getAccountName());
        data.put(ClientAuthnParameter.AUTHENTICATOR.name(),
                 loginInput.getAuthenticator());
        data.put(ClientAuthnParameter.CLIENT_APP_ID.name(), loginInput.getAppId());
        data.put(ClientAuthnParameter.CLIENT_APP_VERSION.name(),
                 loginInput.getAppVersion());
  
        ClientAuthnDTO authnData = new ClientAuthnDTO();
        authnData.setData(data);
        String json = mapper.writeValueAsString(authnData);
  
        // attach the login info json body to the post request
        StringEntity input = new StringEntity(json, Charset.forName("UTF-8"));
        input.setContentType("application/json");
        HttpPost postRequest = new HttpPost(fedUrlUri);
        postRequest.setEntity(input);
        postRequest.addHeader("accept", "application/json");
  
        final String gsResponse = HttpUtil.executeRequest(postRequest,
                                                          loginInput.getLoginTimeout(), 0, null);
        logger.debug("authenticator-request response: {}", gsResponse);
        JsonNode jsonNode = mapper.readTree(gsResponse);
  
        // check the success field first
        if (!jsonNode.path("success").asBoolean())
        {
          logger.debug("response = {}", gsResponse);
          String errorCode = jsonNode.path("code").asText();
          throw new SnowflakeSQLException(
              SqlState.SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION,
              ErrorCode.CONNECTION_ERROR.getMessageCode(),
              errorCode, jsonNode.path("message").asText());
        }
  
        // session token is in the data field of the returned json response
        dataNode = jsonNode.path("data");
      }
      catch (IOException | URISyntaxException ex)
      {
        handleFederatedFlowError(loginInput, ex);
      }
      return dataNode;
    }