Source: connection/ConnectionAccesses.js

var apiPathAccesses = '/accesses';
var _ = require('underscore'),
  CC = require('./ConnectionConstants.js');

/**
 * @class Accesses
 * @link http://api.pryv.com/reference.html#methods-accesses
 * @link http://api.pryv.com/reference.html#data-structure-access
 * @param {Connection} connection
 * @constructor
 */
function Accesses(connection) {
  this.connection = connection;
}
/**
 * @param {Connection~requestCallback} callback
 */
Accesses.prototype.get = function (callback) {
  if (typeof(callback) !== 'function') {
    throw new Error(CC.Errors.CALLBACK_IS_NOT_A_FUNCTION);
  }
  this.connection.request({
    method: 'GET',
    path: apiPathAccesses,
    callback: function (err, res) {
      if (err) {
        return callback(err);
      }
      var accesses = res.accesses || res.access;
      callback(null, accesses);
    }
  });
};

/**
 * TODO complete documentation
 * @param access
 * @param callback
 */
Accesses.prototype.create = function (access, callback) {
  if (typeof(callback) !== 'function') {
    throw new Error(CC.Errors.CALLBACK_IS_NOT_A_FUNCTION);
  }
  this.connection.request({
    method: 'POST',
    path: apiPathAccesses,
    callback: function (err, res) {
      if (err) {
        return callback(err);
      }
      callback(err, res.access);
    },
    jsonData: access
  });
};

/**
 * TODO complete documentation
 * @param access
 * @param callback
 */
Accesses.prototype.update = function (access, callback) {
  if (typeof(callback) !== 'function') {
    throw new Error(CC.Errors.CALLBACK_IS_NOT_A_FUNCTION);
  }
  if (access.id) {
    this.connection.request({
      method: 'PUT',
      path: apiPathAccesses + '/' + access.id,
      jsonData: _.pick(access, 'name', 'deviceName', 'permissions'),
      callback: function (err, res) {
        if (err) {
          return callback(err);
        }
        callback(err, res.access);
      }
    });
  } else {
    return callback('No access id found');
  }
};

/**
 * TODO complete documentation
 * @param accessId
 * @param callback
 */
Accesses.prototype.delete = function (accessId, callback) {
  if (typeof(callback) !== 'function') {
    throw new Error(CC.Errors.CALLBACK_IS_NOT_A_FUNCTION);
  }
  this.connection.request({
    method: 'DELETE',
    path: apiPathAccesses + '/' + accessId,
    callback: function (err, result) {
      if (err) {
        return callback(err);
      }
      callback(null, result);
    }
  });
};
module.exports = Accesses;