whole_func_string: function (path) {
      var url = 'https://api.dropboxapi.com/2/files/list_folder';
      var revCache = this._revCache;
      var self = this;
  
      var processResponse = function (resp) {
        var body, listing;
  
        if (resp.status !== 200 && resp.status !== 409) {
          return Promise.reject('Unexpected response status: ' + resp.status);
        }
  
        try {
          body = JSON.parse(resp.responseText);
        } catch (e) {
          return Promise.reject(e);
        }
  
        if (resp.status === 409) {
          if (compareApiError(body, ['path', 'not_found'])) {
            // if the folder is not found, handle it as an empty folder
            return Promise.resolve({});
          }
  
          return Promise.reject(new Error('API returned an error: ' + body.error_summary));
        }
  
        listing = body.entries.reduce(function (map, item) {
          var isDir = item['.tag'] === 'folder';
          var itemName = item.path_lower.split('/').slice(-1)[0] + (isDir ? '/' : '');
          if (isDir){
            map[itemName] = { ETag: revCache.get(path+itemName) };
          } else {
            map[itemName] = { ETag: item.rev };
            self._revCache.set(path+itemName, item.rev);
          }
          return map;
        }, {});
  
        if (body.has_more) {
          return loadNext(body.cursor).then(function (nextListing) {
            return Object.assign(listing, nextListing);
          });
        }
  
        return Promise.resolve(listing);
      };
  
      const loadNext = function (cursor) {
        const continueURL = 'https://api.dropboxapi.com/2/files/list_folder/continue';
        const params = {
          body: { cursor: cursor }
        };
  
        return self._request('POST', continueURL, params).then(processResponse);
      };
  
      return this._request('POST', url, {
        body: {
          path: getDropboxPath(path)
        }
      }).then(processResponse).then(function (listing) {
        return Promise.resolve({
          statusCode: 200,
          body: listing,
          contentType: 'application/json; charset=UTF-8',
          revision: revCache.get(path)
        });
      });
    }
func_code_string: function (path) {
      var url = 'https://api.dropboxapi.com/2/files/list_folder';
      var revCache = this._revCache;
      var self = this;
  
      var processResponse = function (resp) {
        var body, listing;
  
        if (resp.status !== 200 && resp.status !== 409) {
          return Promise.reject('Unexpected response status: ' + resp.status);
        }
  
        try {
          body = JSON.parse(resp.responseText);
        } catch (e) {
          return Promise.reject(e);
        }
  
        if (resp.status === 409) {
          if (compareApiError(body, ['path', 'not_found'])) {
            // if the folder is not found, handle it as an empty folder
            return Promise.resolve({});
          }
  
          return Promise.reject(new Error('API returned an error: ' + body.error_summary));
        }
  
        listing = body.entries.reduce(function (map, item) {
          var isDir = item['.tag'] === 'folder';
          var itemName = item.path_lower.split('/').slice(-1)[0] + (isDir ? '/' : '');
          if (isDir){
            map[itemName] = { ETag: revCache.get(path+itemName) };
          } else {
            map[itemName] = { ETag: item.rev };
            self._revCache.set(path+itemName, item.rev);
          }
          return map;
        }, {});
  
        if (body.has_more) {
          return loadNext(body.cursor).then(function (nextListing) {
            return Object.assign(listing, nextListing);
          });
        }
  
        return Promise.resolve(listing);
      };
  
      const loadNext = function (cursor) {
        const continueURL = 'https://api.dropboxapi.com/2/files/list_folder/continue';
        const params = {
          body: { cursor: cursor }
        };
  
        return self._request('POST', continueURL, params).then(processResponse);
      };
  
      return this._request('POST', url, {
        body: {
          path: getDropboxPath(path)
        }
      }).then(processResponse).then(function (listing) {
        return Promise.resolve({
          statusCode: 200,
          body: listing,
          contentType: 'application/json; charset=UTF-8',
          revision: revCache.get(path)
        });
      });
    }
func_documentation_string: Get all items in a folder.
  
  @param path {string} - path of the folder to get, with leading slash
  @return {Object}
  statusCode - HTTP status code
  body - array of the items found
  contentType - 'application/json; charset=UTF-8'
  revision - revision of the folder
  
  @private