class_docstr: Salesforce StreamAlert Base App
  
  SalesforceApp will audit 5 types of event logs include 'Console', 'Login',
  'LoginAs', 'Report' and 'ReportExport' for user access audit and data loss
  prevention, although Salesforce provides 42 types of event logs.
  
  This base class will be inherited by different subclasssed based on different
  event types.
  
  Console events:
      contain information about the performance and use of Salesforce Consoles.
  
  Login events:
      contain details about your org's user login history.
  
  LoginAs events:
      contain details about what a Salesforce admin did while logged in as another user.
  
  Report events:
      contain information about what happened when a user ran a report and
      captures report's size.
  
  ReportExport:
      events contain details about reports that a user exported.
docstr: GET request to fetch supported API versions and find the latest API version
  
  The example of response json body:
  [
      {
          "version": "20.0",
          "label": "Winter '11",
          "url": "/services/data/v20.0"
      },
      {
          "version": "21.0",
          "label": "Spring '11",
          "url": "/services/data/v21.0"
      },
      {
          "version": "26.0",
          "label": "Winter '13",
          "url": "/services/data/v26.0"
      }
  ]
  
  Returns:
      bool: Return True if get latest api version successfully.
code: def _get_latest_api_version(self):
      """GET request to fetch supported API versions and find the latest API version
  
      The example of response json body:
      [
          {
              "version": "20.0",
              "label": "Winter '11",
              "url": "/services/data/v20.0"
          },
          {
              "version": "21.0",
              "label": "Spring '11",
              "url": "/services/data/v21.0"
          },
          {
              "version": "26.0",
              "label": "Winter '13",
              "url": "/services/data/v26.0"
          }
      ]
  
      Returns:
          bool: Return True if get latest api version successfully.
      """
      url = "{}/services/data/".format(self._instance_url)
      success, response = self._make_get_request(
          url, self._auth_headers
      )
  
      if not (success and response):
          LOGGER.error("Failed to fetch lastest api version")
          return False
  
      versions = [
          float(version.get("version", 0)) for version in response
      ]
      if versions:
          self._latest_api_version = str(sorted(versions)[-1])
          if self._latest_api_version == "0.0":
              LOGGER.error("Failed to obtain latest API version")
              return False
          LOGGER.debug(
              "Successfully obtain latest API version %s",
              self._latest_api_version,
          )
          return True
  
imports: import calendar
  from datetime import datetime
  import re
  import time
  import backoff
  import requests
  from .None import AppIntegration, StreamAlertApp, get_logger
label_desc: Use image node_id 10 for calling the SalesforceApp obj's underlying member method code with example usage: obj._get_latest_api_version() and returns: False, True, False