All files / src/facebook index.js

100% Statements 21/21
100% Branches 17/17
100% Functions 4/4
100% Lines 21/21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118                                                          14x 14x 14x 12x   12x       12x     12x 12x 12x                           4x 1x 1x   4x                                     4x 1x 1x   4x                                     4x 1x 1x   4x                    
import isFunction from 'lodash.isfunction';
import Core from '../core/core';
 
/**
 * @class Facebook
 * @description Facebook class
 * @example
 * const facebook = new Facebook({
 *  appId: 'your-app-id',
 *  appSecret: 'your-app-secret',
 * });
 *
 * facebook.get('some-facebook-id').then((data) => {
 *  console.log(data);
 * });
 */
class Facebook extends Core {
 
  /**
   * @constructs Facebook
   * @description Constructs an instance of Facebook.
   *
   * @param {object} config - Config of class.
   * @param {string} config.appId - AppId of Facebook app.
   * @param {string} config.appSecret - appSecret of Facebook app.
   * @param {object} [options] - Options of class.
   *
   */
  constructor(config = {}, options = {}) {
    super(options);
    this.name = 'facebook';
    if (!config.accessToken) {
      this.checkValidConfig(['appId', 'appSecret'], config);
    }
    this.auth = {
      appId: config.appId,
      appSecret: config.appSecret,
    };
    this.options = {
      access_token: config.accessToken || `${config.appId}|${config.appSecret}`,
    };
    this.url = 'https://graph.facebook.com';
    this.version = options.version || 'v2.5';
    this.baseApiUrl = `${this.url}/${this.version}`;
  }
 
  /**
   * @memberof Facebook
   * @function get
   * @description Make a get request to facebook api.
   *
   * @param {string} url - Url of route.
   * @param {object} [options] - Options to pass in request.
   * @param {function} [callback] - Callback to call when the request finish.
   * @return {promise}
   */
  get(url, options = {}, callback) {
    if (isFunction(options)) {
      callback = options;
      options = {};
    }
    return this.request({
      method: 'GET',
      json: true,
      uri: `${this.baseApiUrl}/${url}`,
      qs: Object.assign(this.options, options),
    }, callback);
  }
 
  /**
   * @memberof Facebook
   * @function post
   * @description Make a post request to facebook api.
   *
   * @param {string} url - Url of route.
   * @param {object} [options] - Options to pass in request.
   * @param {function} [callback] - Callback to call when the request finish.
   * @return {promise}
   */
  post(url, options = {}, callback) {
    if (isFunction(options)) {
      callback = options;
      options = {};
    }
    return this.request({
      method: 'POST',
      json: true,
      uri: `${this.baseApiUrl}/${url}`,
      form: Object.assign(this.options, options),
    }, callback);
  }
 
  /**
   * @memberof Facebook
   * @function delete
   * @description Make a delete request to facebook api.
   *
   * @param {string} url - Url of route.
   * @param {object} [options] - Options to pass in request.
   * @param {function} [callback] - Callback to call when the request finish.
   * @return {promise}
   */
  delete(url, options = {}, callback) {
    if (isFunction(options)) {
      callback = options;
      options = {};
    }
    return this.request({
      method: 'DELETE',
      json: true,
      uri: `${this.baseApiUrl}/${url}`,
      qs: Object.assign(this.options, options),
    }, callback);
  }
}
 
export default Facebook;