All files / src/twitter index.js

100% Statements 19/19
100% Branches 13/13
100% Functions 4/4
100% Lines 19/19
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 119 120 121 122 123 124                                                                13x 13x 13x       9x           9x 9x 9x                           4x 1x 1x   4x                                       4x 1x 1x   4x                                       4x 1x 1x   4x                      
import isFunction from 'lodash.isfunction';
import Core from '../core/core';
 
/**
 * @class Twitter
 * @description Twitter class
 * @example
 * const twitter = new Twitter({
 *  consumerKey: 'your-app-consumer-key',
 *  consumerSecret: 'your-app-consumer-secret',
 *  accessToken: 'your-app-access-token',
 *  accessTokenSecret: 'your-app-access-token-secret',
 * });
 *
 * twitter.get('some-twitter-route').then((data) => {
 *  console.log(data);
 * });
 */
class Twitter extends Core {
  /**
   * @constructs Twitter
   * @description Constructs an instance of Twitter.
   *
   * @param {object} config - Config of class.
   * @param {string} config.consumerKey - consumerKey of Twitter app.
   * @param {string} config.consumerSecret - consumerSecret of Twitter app.
   * @param {string} config.accessToken - accessToken of Twitter app.
   * @param {string} config.accessTokenSecret - accessTokenSecret of Twitter app.
   * @param {object} [options] - Options of class.
   *
   */
  constructor(config = {}, options = {}) {
    super(options);
    this.name = 'twitter';
    this.checkValidConfig(
      ['consumerKey', 'consumerSecret', 'accessToken', 'accessTokenSecret'],
      config
    );
    this.oauth = {
      consumer_key: config.consumerKey,
      consumer_secret: config.consumerSecret,
      token: config.accessToken,
      token_secret: config.accessTokenSecret,
    };
    this.url = 'https://api.twitter.com';
    this.version = options.version || '1.1';
    this.baseApiUrl = `${this.url}/${this.version}`;
  }
 
  /**
   * @memberof Twitter
   * @function get
   * @description Make a get request to twitter 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}.json`,
      oauth: this.oauth,
      qs: options,
    }, callback);
  }
 
  /**
   * @memberof Twitter
   * @function post
   * @description Make a post request to twitter 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}.json`,
      oauth: this.oauth,
      form: options,
    }, callback);
  }
 
  /**
   * @memberof Twitter
   * @function delete
   * @description Make a get request to twitter 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}.json`,
      oauth: this.oauth,
      qs: options,
    }, callback);
  }
}
 
export default Twitter;