Source: connection/ConnectionBookmarks.js

var apiPathBookmarks = '/followed-slices',
  Connection = require('../Connection.js'),
  _ = require('underscore'),
  CC = require('./ConnectionConstants.js');

/**
 * @class Bookmarks
 * @link http://api.pryv.com/reference.html#data-structure-subscriptions-aka-bookmarks
 * @param {Connection} connection
 * @constructor
 */
function Bookmarks(connection, Conn) {
  this.connection = connection;
  Connection = Conn;
}
/**
 * @param {Connection~requestCallback} callback
 */
Bookmarks.prototype.get = function (callback) {
  if (typeof(callback) !== 'function') {
    throw new Error(CC.Errors.CALLBACK_IS_NOT_A_FUNCTION);
  }
  this.connection.request({
    method: 'GET',
    path: apiPathBookmarks,
    callback: function (error, res) {
      var result = [],
        bookmarks = res.followedSlices || res.followedSlice;
      _.each(bookmarks, function (bookmark) {
        bookmark.url = bookmark.url.replace(/\.li/, '.in');
        bookmark.url = bookmark.url.replace(/\.me/, '.io');
        var conn =  new Connection({
          auth: bookmark.accessToken,
          url: bookmark.url,
          name: bookmark.name,
          bookmarkId: bookmark.id
        });
        result.push(conn);
      });
      callback(error, result);
    }
  });
};

/**
 * TODO complete documentation
 * @param bookmark
 * @param callback
 * @returns {*}
 */
Bookmarks.prototype.create = function (bookmark, callback) {
  if (typeof(callback) !== 'function') {
    throw new Error(CC.Errors.CALLBACK_IS_NOT_A_FUNCTION);
  }
  if (bookmark.name && bookmark.url && bookmark.accessToken) {
    this.connection.request({
      method: 'POST',
      path: apiPathBookmarks,
      jsonData: bookmark,
      callback: function (err, result) {
        var error = err;
        if (!error) {
          var conn =  new Connection({
            auth: bookmark.accessToken,
            url: bookmark.url,
            name: bookmark.name,
            bookmarkId: result.followedSlice.id
          });
          bookmark = conn;
        }
        callback(error, bookmark);
      }
    });
    return bookmark;
  }
};

/**
 * TODO complete documentation
 * @param bookmarkId
 * @param callback
 */
Bookmarks.prototype.delete = function (bookmarkId, callback) {
  if (typeof(callback) !== 'function') {
    throw new Error(CC.Errors.CALLBACK_IS_NOT_A_FUNCTION);
  }
  this.connection.request({
    method: 'DELETE',
    path: apiPathBookmarks + '/' + bookmarkId,
    callback: function (err, result) {
      var error = err;
      if (result && result.message) {
        error = result;
      }
      callback(error, result);
    }
  });
};

module.exports = Bookmarks;