@r/api-client
Version:
node and browser reddit api library
1,356 lines (1,061 loc) • 337 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("lodash/object"), require("superagent"), require("lodash/lang"), require("lodash/array"), require("lodash/collection"));
else if(typeof define === 'function' && define.amd)
define(["lodash/object", "superagent", "lodash/lang", "lodash/array", "lodash/collection"], factory);
else if(typeof exports === 'object')
exports["apiClient.js"] = factory(require("lodash/object"), require("superagent"), require("lodash/lang"), require("lodash/array"), require("lodash/collection"));
else
root["apiClient.js"] = factory(root["lodash/object"], root["superagent"], root["lodash/lang"], root["lodash/array"], root["lodash/collection"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_3__, __WEBPACK_EXTERNAL_MODULE_25__, __WEBPACK_EXTERNAL_MODULE_72__, __WEBPACK_EXTERNAL_MODULE_78__, __WEBPACK_EXTERNAL_MODULE_180__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 54);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var THING_ID_REGEX = new RegExp('^t\\d_[0-9a-z]+', 'i');
var Base = function () {
function Base() {
var props = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
_classCallCheck(this, Base);
this._type = 'Base';
this.props = {};
for (var p in props) {
this.props[p] = props[p];
}
}
_createClass(Base, [{
key: 'validators',
value: function validators() {
return;
}
}, {
key: 'get',
value: function get(name) {
return this.props[name];
}
}, {
key: 'set',
value: function set(name, value) {
if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {
Object.assign(this.props, name);
} else {
this.props[name] = value;
}
}
}, {
key: 'validate',
value: function validate(keys) {
var validators = this.validators();
if (!validators) {
return true;
}
var invalid = [];
var p = void 0;
for (p in this.props) {
// Optionally, send in an array of keys to validate
if (!keys || keys.includes(p)) {
if (validators[p] && !validators[p](this.props[p])) {
invalid.push(p);
}
}
}
if (invalid.length === 0) {
return true;
}
return invalid;
}
}, {
key: 'uuid',
value: function uuid(props) {
if (Base.validators.thingId(props.name)) {
return props.name;
} else if (Base.validators.thingId(props.id)) {
return props.id;
}
}
}, {
key: 'toJSON',
value: function toJSON() {
var formatter = arguments.length <= 0 || arguments[0] === undefined ? this.noopFormat : arguments[0];
var props = this.props;
props._type = this._type;
props.uuid = this.uuid(props);
if (formatter && typeof formatter === 'function') {
return formatter(props);
}
return props;
}
}]);
return Base;
}();
Base.validators = {
integer: function integer(i) {
return i === parseInt(i);
},
string: function string(s) {
return s === s.toString();
},
min: function min(i, _min) {
return i >= _min;
},
max: function max(i, _max) {
return i <= _max;
},
maxLength: function maxLength(s, l) {
return Base.validators.max(s.length, l);
},
minLength: function minLength(s, l) {
return Base.validators.min(s.length, l);
},
regex: function regex(s, expr) {
return expr.test(s);
},
thingId: function thingId(id) {
return id == null || Base.validators.regex(id, THING_ID_REGEX);
}
};
/* harmony default export */ exports["a"] = Base;
/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_superagent__ = __webpack_require__(25);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_superagent___default = __WEBPACK_IMPORTED_MODULE_0_superagent__ && __WEBPACK_IMPORTED_MODULE_0_superagent__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_0_superagent__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_0_superagent__; }
/* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_0_superagent___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_0_superagent___default });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__models2_thingTypes__ = __webpack_require__(5);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__errors_validationError__ = __webpack_require__(8);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__errors_noModelError__ = __webpack_require__(7);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__errors_notImplementedError__ = __webpack_require__(15);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__APIResponse__ = __webpack_require__(53);
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var EVENTS = {
request: 'request',
response: 'response',
error: 'error',
result: 'result'
};
var BaseAPI = function () {
function BaseAPI(base) {
var _this = this;
_classCallCheck(this, BaseAPI);
this.runQuery = function (method, rawQuery) {
var originalMethod = method;
var query = _this.formatQuery(_extends({}, rawQuery), method);
query.app = _this.appParameter;
var handle = _this.handle;
var path = _this.fullPath(method, _extends({}, rawQuery));
var fakeReq = { url: path, method: method, query: query };
_this.event.emit(EVENTS.request, fakeReq);
method = query._method || method;
delete query._method;
return new Promise(function (resolve, reject) {
var s = /* harmony import */__WEBPACK_IMPORTED_MODULE_0_superagent___default.a[method](path).timeout(_this.config.timeout || 5000);
if (s.redirects) {
s.redirects(0);
}
s.query(query);
s.set(_this.buildAuthHeader());
s.set(_this.buildHeaders());
if (query.id && !Array.isArray(query.id)) {
delete query.id;
}
s.end(function (err, res) {
if (err && err.timeout) {
err.status = 504;
}
var origin = _this.origin;
var path = _this.path(method, rawQuery);
var fakeReq = { origin: origin, path: path, method: method, query: query };
var req = res ? res.request : fakeReq;
handle(resolve, reject)(err, res, req, rawQuery, originalMethod);
});
});
};
this.handle = function (resolve, reject) {
return function (err, res, req, query, method) {
// lol handle the twelve ways superagent sends request back
if (res && !req) {
req = res.request || res.req;
}
if (err || res && !res.ok) {
//this.event.emit(EVENTS.error, err, req);
if (_this.config.defaultErrorHandler) {
return _this.config.defaultErrorHandler(err || 500);
} else {
return reject(err || 500);
}
}
_this.event.emit(EVENTS.response, req, res);
var meta = void 0;
var body = void 0;
var apiResponse = void 0;
try {
meta = _this.formatMeta(res, req, method);
var start = Date.now();
apiResponse = new /* harmony import */__WEBPACK_IMPORTED_MODULE_5__APIResponse__["a"](meta, query);
try {
_this.parseBody(res, apiResponse, req, method);
_this.parseTime = Date.now() - start;
} catch (e) {
_this.event.emit(EVENTS.error, e, req);
console.trace(e);
}
if (_this.formatBody) {
// shim for older apis or ones were we haven't figured out normalization yet
body = _this.formatBody(res, req, method);
}
} catch (e) {
if ({"NODE_ENV":"production"}.DEBUG_API_CLIENT_BASE) {
console.trace(e);
}
return reject(e);
}
_this.event.emit(EVENTS.result, body || apiResponse);
resolve(body || apiResponse);
};
};
this.config = base.config;
this.event = base.event;
if (base.config) {
this.origin = base.config.origin;
if (base.config.origins) {
var name = this.constructor.name.toLowerCase();
this.origin = base.config.origins[name] || this.config.origin;
}
}
['path', 'head', 'get', 'post', 'patch', 'put', 'del', 'move', 'copy'].forEach(function (method) {
_this[method] = _this[method].bind(_this);
});
}
// Used to format/unformat for caching; `links` or `comments`, for example.
// Should match the constructor name.
_createClass(BaseAPI, [{
key: 'path',
value: function path(method) {
var query = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
var basePath = this.api;
if (['string', 'number'].contains(_typeof(query.id))) {
basePath += '/' + query.id;
}
return basePath;
}
}, {
key: 'fullPath',
value: function fullPath(method) {
var query = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
return this.origin + '/' + this.path(method, query);
}
}, {
key: 'formatMeta',
value: function formatMeta(res) {
return res.headers;
}
}, {
key: 'buildQueryParams',
value: function buildQueryParams(method, data) {
return [data, method, data];
}
}, {
key: 'buildAuthHeader',
value: function buildAuthHeader() {
var token = this.config.token;
if (token) {
return { Authorization: 'Bearer ' + token };
}
return {};
}
}, {
key: 'buildHeaders',
value: function buildHeaders() {
return this.config.defaultHeaders || {};
}
}, {
key: 'formatQuery',
value: function formatQuery(query) {
return query;
}
}, {
key: 'parseBody',
value: function parseBody(res, apiResponse /*, req, method*/) {
apiResponse.addResult(res.body);
return;
}
}, {
key: 'formatData',
value: function formatData(data) {
return data;
}
}, {
key: 'rawSend',
value: function rawSend(method, path, data, cb) {
var origin = this.origin;
var s = /* harmony import */__WEBPACK_IMPORTED_MODULE_0_superagent___default.a[method](origin + '/' + path);
s.type('form');
if (this.config.token) {
s.set('Authorization', 'bearer ' + this.config.token);
}
s.send(data).end(function (err, res) {
var fakeReq = {
origin: origin,
path: path,
method: method,
query: data
};
var req = res ? res.request : fakeReq;
cb(err, res, req);
});
}
}, {
key: 'save',
value: function save(method) {
var _this2 = this;
var data = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
return new Promise(function (resolve, reject) {
if (!data) {
return reject(new /* harmony import */__WEBPACK_IMPORTED_MODULE_3__errors_noModelError__["a"](_this2.api));
}
data = _this2.formatQuery(data, method);
data.app = _this2.appParameter;
if (_this2.model) {
var model = new _this2.model(data);
var keys = void 0;
// Only validate keys being sent in, if this is a patch
if (method === 'patch') {
keys = Object.keys(data);
}
var valid = model.validate(keys);
if (valid !== true) {
return reject(new /* harmony import */__WEBPACK_IMPORTED_MODULE_2__errors_validationError__["a"](_this2.api, model));
}
if (method !== 'patch') {
data = model.toJSON();
}
}
var path = _this2.path(method, data);
var _method = method;
method = data._method || method;
data = _this2.formatData(data, _method);
_this2.rawSend(method, path, data, function (err, res, req) {
_this2.handle(resolve, reject)(err, res, req, data, method);
});
});
}
}, {
key: 'head',
value: function head() {
var query = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
return this.runQuery('head', query);
}
}, {
key: 'get',
value: function get(query) {
query = _extends({
raw_json: 1
}, query || {});
return this.runQuery('get', query);
}
}, {
key: 'del',
value: function del() {
var query = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
return this.runQuery('del', query);
}
}, {
key: 'post',
value: function post(data) {
return this.save('post', data);
}
}, {
key: 'put',
value: function put(data) {
return this.save('put', data);
}
}, {
key: 'patch',
value: function patch(data) {
return this.save('patch', data);
}
// Get the source, then save it, modified by data.
}, {
key: 'copy',
value: function copy(fromId, data) {
var _this3 = this;
return new Promise(function (resolve, reject) {
_this3.get(fromId).then(function (oldData) {
_this3.save('copy', _extends({}, oldData, {
_method: data.id ? 'put' : 'post'
}, data)).then(resolve, reject);
});
});
}
// Get the old one, save the new one, then delete the old one if save succeeded
}, {
key: 'move',
value: function move(fromId, toId, data) {
var _this4 = this;
return new Promise(function (resolve, reject) {
_this4.get(fromId).then(function (oldData) {
_this4.save('move', _extends({
_method: 'put'
}, oldData, {
id: toId
}, data)).then(function (data) {
_this4.del({ id: fromId }).then(function () {
resolve(data);
}, reject);
}, reject);
});
});
}
}, {
key: 'notImplemented',
value: function notImplemented(method) {
return function () {
throw new /* harmony import */__WEBPACK_IMPORTED_MODULE_4__errors_notImplementedError__["a"](method, this.api);
};
}
}, {
key: 'buildResponse',
value: function buildResponse(body, meta) {
var results = body.results;
var errors = body.errors;
var users = body.users;
var links = body.links;
var comments = body.comments;
var messages = body.messages;
var subreddits = body.subreddits;
if (errors) {
return { errors: errors, meta: meta };
}
var response = { results: results, meta: meta };
if (users) {
response.users = users;
}
if (links) {
response.links = links;
}
if (comments) {
response.comments = comments;
}
if (messages) {
response.messages = messages;
}
if (subreddits) {
response.subreddits = subreddits;
}
return response;
}
}, {
key: 'dataType',
get: function get() {
return this.constructor.name.toLowerCase();
}
}, {
key: 'api',
get: function get() {
return this.constructor.name.toLowerCase();
}
}, {
key: 'appParameter',
get: function get() {
return this.config.appName + '-' + this.config.env;
}
}], [{
key: 'thingType',
value: function thingType(id) {
return /* harmony import */__WEBPACK_IMPORTED_MODULE_1__models2_thingTypes__["g"].bind()(id);
}
}]);
return BaseAPI;
}();
BaseAPI.EVENTS = EVENTS;
/* harmony default export */ exports["a"] = BaseAPI;
/***/ },
/* 2 */,
/* 3 */
/***/ function(module, exports) {
module.exports = require("lodash/object");
/***/ },
/* 4 */,
/* 5 */
/***/ function(module, exports, __webpack_require__) {
/* harmony export */ exports["g"] = thingType;var COMMENT = 'comment';
/* harmony export */ Object.defineProperty(exports, "a", {configurable: false, enumerable: true, get: function() { return COMMENT; }});
var COMMENT_TYPE = 't1';/* unused harmony export COMMENT_TYPE */
var COMMENT_LOAD_MORE = 'comment_load_more';
/* harmony export */ Object.defineProperty(exports, "h", {configurable: false, enumerable: true, get: function() { return COMMENT_LOAD_MORE; }});
var USER = 'user';
/* harmony export */ Object.defineProperty(exports, "c", {configurable: false, enumerable: true, get: function() { return USER; }});
var USER_TYPE = 't2';
/* harmony export */ Object.defineProperty(exports, "j", {configurable: false, enumerable: true, get: function() { return USER_TYPE; }});
var LINK = 'link';
/* harmony export */ Object.defineProperty(exports, "b", {configurable: false, enumerable: true, get: function() { return LINK; }});
var LINK_TYPE = 't3';
/* harmony export */ Object.defineProperty(exports, "i", {configurable: false, enumerable: true, get: function() { return LINK_TYPE; }});
var MESSAGE = 'message';
/* harmony export */ Object.defineProperty(exports, "d", {configurable: false, enumerable: true, get: function() { return MESSAGE; }});
var MESSAGE_TYPE = 't4';/* unused harmony export MESSAGE_TYPE */
var SUBREDDIT = 'subreddit';
/* harmony export */ Object.defineProperty(exports, "e", {configurable: false, enumerable: true, get: function() { return SUBREDDIT; }});
var SUBREDDIT_TYPE = 't5';/* unused harmony export SUBREDDIT_TYPE */
var TROPHIE = 'trophie';/* unused harmony export TROPHIE */
var TROPHIE_TYPE = 't6';/* unused harmony export TROPHIE_TYPE */
var PROMOCAMPAIGN = 'promocampaign';/* unused harmony export PROMOCAMPAIGN */
var PROMOCAMPAIGN_TYPE = 't8';/* unused harmony export PROMOCAMPAIGN_TYPE */
var type_pairs = [[COMMENT, COMMENT_TYPE], [USER, USER_TYPE], [LINK, LINK_TYPE], [MESSAGE, MESSAGE_TYPE], [SUBREDDIT, SUBREDDIT_TYPE], [TROPHIE, TROPHIE_TYPE], [PROMOCAMPAIGN, PROMOCAMPAIGN_TYPE]];
var TYPES = type_pairs.reduce(function (table, pair) {
table[pair[1]] = pair[0];
return table;
}, {});
/* harmony export */ Object.defineProperty(exports, "f", {configurable: false, enumerable: true, get: function() { return TYPES; }});
var TYPE_TO_THING_TYPE = type_pairs.reduce(function (table, pair) {
table[pair[0]] = pair[1];
return table;
}, {});/* unused harmony export TYPE_TO_THING_TYPE */
function thingType(id) {
return TYPES[id.substring(0, 2)];
}
/***/ },
/* 6 */
/***/ function(module, exports, __webpack_require__) {
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_object__ = __webpack_require__(3);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_object___default = __WEBPACK_IMPORTED_MODULE_0_lodash_object__ && __WEBPACK_IMPORTED_MODULE_0_lodash_object__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_object__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_object__; }
/* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_0_lodash_object___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_0_lodash_object___default });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__errors_noModelError__ = __webpack_require__(7);
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var MOD_ACTION_MAP = {
approved: function approved(t, data) {
return [t ? 'api/approve' : 'api/remove', /* harmony import */__WEBPACK_IMPORTED_MODULE_0_lodash_object__["pick"].bind()(data, ['id', 'spam'])];
},
removed: function removed(t, data) {
return [t ? 'api/remove' : 'api/approve', /* harmony import */__WEBPACK_IMPORTED_MODULE_0_lodash_object__["pick"].bind()(data, ['id', 'spam'])];
},
distinguished: function distinguished(_, data) {
return ['api/distinguish', {
id: data.id,
how: data.distinguished
}];
},
ignoreReports: function ignoreReports(_, data) {
return ['api/ignore_reports', {
id: data.id,
spam: data.isSpam
}];
}
};
var BaseContent = function (_BaseAPI) {
_inherits(BaseContent, _BaseAPI);
function BaseContent() {
var _Object$getPrototypeO;
var _temp, _this, _ret;
_classCallCheck(this, BaseContent);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(BaseContent)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.move = _this.notImplemented('move'), _this.copy = _this.notImplemented('copy'), _this.put = _this.notImplemented('put'), _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(BaseContent, [{
key: 'formatQuery',
value: function formatQuery(query, method) {
if (method !== 'patch') {
query.feature = 'link_preview';
query.sr_detail = 'true';
}
if (method === 'del') {
query._method = 'post';
}
return query;
}
}, {
key: 'path',
value: function path(method) {
var query = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
if (method === 'get') {
return this.getPath(query);
} else if (method === 'post') {
return this.postPath(query);
} else if (method === 'patch') {
return this.patchPath(query);
} else if (method === 'del') {
return this.deletePath(query);
}
}
}, {
key: 'patchPath',
value: function patchPath() {
return 'api/editusertext';
}
}, {
key: 'deletePath',
value: function deletePath() {
return 'api/del';
}
}, {
key: 'patch',
value: function patch(data) {
var _this2 = this;
if (!data) {
throw new /* harmony import */__WEBPACK_IMPORTED_MODULE_2__errors_noModelError__["a"]('/api/editusertext');
}
var promises = [];
Object.keys(data).map(function (k) {
var prop = MOD_ACTION_MAP[k];
var val = data[k];
if (prop) {
(function () {
var _prop = prop(val, data);
var _prop2 = _slicedToArray(_prop, 2);
var api = _prop2[0];
var json = _prop2[1];
promises.push(new Promise(function (r, x) {
_this2.rawSend('post', api, json, function (err, res, req) {
if (err || !res.ok) {
x(err || res);
}
r(res, req);
});
}));
})();
}
});
if (data.text) {
var json = {
api_type: 'json',
thing_id: data.id,
text: data.text,
_method: 'post'
};
promises.push(this.save('patch', json));
}
return Promise.all(promises);
}
}]);
return BaseContent;
}(/* harmony import */__WEBPACK_IMPORTED_MODULE_1__base__["a"]);
/* harmony default export */ exports["a"] = BaseContent;
/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__error__ = __webpack_require__(11);
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var NoModelError = function (_FakeError) {
_inherits(NoModelError, _FakeError);
function NoModelError(endpoint) {
_classCallCheck(this, NoModelError);
var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(NoModelError).call(this, endpoint));
_this.name = 'NoModelError';
_this.message = 'No model given for api endpoint ' + endpoint;
_this.status = 400;
return _this;
}
return NoModelError;
}(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__error__["a"]);
/* harmony default export */ exports["a"] = NoModelError;
/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__error__ = __webpack_require__(11);
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var ValidationError = function (_FakeError) {
_inherits(ValidationError, _FakeError);
function ValidationError(name, model, errors) {
_classCallCheck(this, ValidationError);
var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ValidationError).call(this, name));
_this.name = 'NoModelError';
_this.message = name + ' had errors in: ' + errors.join(',') + ' with properties ' + JSON.stringify(model.toJSON());
_this.status = 422;
return _this;
}
return ValidationError;
}(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__error__["a"]);
/* harmony default export */ exports["a"] = ValidationError;
/***/ },
/* 9 */,
/* 10 */
/***/ function(module, exports, __webpack_require__) {
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__error__ = __webpack_require__(11);
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var DisconnectedError = function (_FakeError) {
_inherits(DisconnectedError, _FakeError);
function DisconnectedError(error, url) {
_classCallCheck(this, DisconnectedError);
var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DisconnectedError).call(this, error));
Object.assign(_this, error);
_this.message = 'URL ' + url + ' not reachable. You are probably disconnected from the internet.';
return _this;
}
return DisconnectedError;
}(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__error__["a"]);
/* harmony export */ Object.defineProperty(exports, "b", {configurable: false, enumerable: true, get: function() { return DisconnectedError; }});
var codeMap = {
ECONNREFUSED: DisconnectedError,
ENOTFOUND: DisconnectedError
};
var ResponseError = function (_FakeError2) {
_inherits(ResponseError, _FakeError2);
function ResponseError(error, url) {
_classCallCheck(this, ResponseError);
// Make sure an error and url were actually passed in
if (!error) {
throw new Error('No error passed to ResponseError');
}
if (!url) {
throw new Error('No url passed to ResponseError');
}
// Check if it's a disconnection error or something else weird
if (error.code && error.syscall) {
var _ret;
return _ret = ResponseError.getSystemLevelError(error, url), _possibleConstructorReturn(_this2, _ret);
}
var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(ResponseError).call(this, error));
Object.assign(_this2, error);
_this2.name = 'ResponseError';
_this2.message = 'Status ' + error.status + ' returned from API request to ' + url;
return _this2;
}
_createClass(ResponseError, null, [{
key: 'getSystemLevelError',
value: function getSystemLevelError(error, url) {
var E = codeMap[error.code] || Error;
return new E(error, url);
}
}]);
return ResponseError;
}(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__error__["a"]);
/* harmony default export */ exports["a"] = ResponseError;
/***/ },
/* 11 */
/***/ function(module, exports, __webpack_require__) {
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var ErrorClass = function ErrorClass(message) {
_classCallCheck(this, ErrorClass);
if (Error.hasOwnProperty('captureStackTrace')) {
Error.captureStackTrace(this, this.constructor);
} else {
Object.defineProperty(this, 'stack', {
value: new Error().stack
});
Object.defineProperty(this, 'message', {
value: message
});
}
};
/* harmony default export */ exports["a"] = ErrorClass;
/***/ },
/* 12 */
/***/ function(module, exports, __webpack_require__) {
/* harmony export */ exports["a"] = process;function process(text) {
if (!text) return text;
text = text.replace(/<a/g, '<a target="_blank"');
return text;
}
/***/ },
/* 13 */
/***/ function(module, exports, __webpack_require__) {
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__models_multi__ = __webpack_require__(26);
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var ID_REGEX = /^user\/[^\/]+\/m\/[^\/]+$/;
var Multis = function (_BaseAPI) {
_inherits(Multis, _BaseAPI);
function Multis() {
var _Object$getPrototypeO;
var _temp, _this, _ret;
_classCallCheck(this, Multis);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(Multis)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.model = /* harmony import */__WEBPACK_IMPORTED_MODULE_1__models_multi__["a"], _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(Multis, [{
key: 'path',
value: function path(method) {
var query = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
var id = Multis.buildId(query);
switch (method) {
case 'get':
if (query.username) {
if (query.username === 'me') {
return 'api/multi/mine';
} else if (id) {
return 'api/multi/' + id;
}
return 'api/multi/user/' + query.username;
}
return 'api/multi';
case 'put':
case 'patch':
case 'post':
case 'del':
return 'api/multi/' + id;
case 'copy':
return 'api/multi/copy';
case 'move':
return 'api/multi/rename';
}
}
}, {
key: 'formatQuery',
value: function formatQuery(query, method) {
if (method === 'get') {
if (query.user) {
query.username = query.user;
delete query.user;
}
}
return query;
}
}, {
key: 'formatBody',
value: function formatBody(res) {
var body = res.body;
if (body && Array.isArray(body)) {
return body.map(function (m) {
var multi = m.data;
multi.subreddits = Multis.mapSubreddits(multi.subreddits);
return new /* harmony import */__WEBPACK_IMPORTED_MODULE_1__models_multi__["a"](multi).toJSON();
});
} else if (body) {
var multi = body.data;
multi.subreddits = Multis.mapSubreddits(multi.subreddits);
return new /* harmony import */__WEBPACK_IMPORTED_MODULE_1__models_multi__["a"](multi);
}
}
}, {
key: 'formatData',
value: function formatData(data) {
return Multis.formatData(data);
}
}, {
key: 'copy',
value: function copy(fromId, data) {
if (!ID_REGEX.exec(fromId)) {
throw new Error('ID did not match `user/{username}/m/{multiname}` format.');
}
data = {
from: fromId,
to: data.id,
_method: 'post'
};
if (data && data.displayName) {
data.display_name = data.displayName;
}
return this.save('copy', data);
}
}, {
key: 'move',
value: function move(fromId, toId, data) {
if (!ID_REGEX.exec(fromId) || !ID_REGEX.exec(toId)) {
throw new Error('ID did not match `user/{username}/m/{multiname}` format.');
}
var moveData = {
_method: 'post',
from: fromId,
to: toId
};
if (data && data.displayName) {
moveData.display_name = data.displayName;
}
return this.save('move', moveData);
}
}, {
key: 'formatBody',
value: function formatBody(res) {
var body = res.body;
if (body) {
return new /* harmony import */__WEBPACK_IMPORTED_MODULE_1__models_multi__["a"](body.data || body).toJSON();
}
}
}, {
key: 'requestCacheRules',
get: function get() {
return undefined;
}
}], [{
key: 'mapSubreddits',
value: function mapSubreddits(subs) {
return subs.map(function (s) {
return s.name;
});
}
}, {
key: 'formatData',
value: function formatData() {
var data = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
var method = arguments[1];
if (method === 'post' || method === 'put') {
return {
model: JSON.stringify({
description_md: data.description,
display_name: data.displayName,
icon_name: data.iconName,
key_color: data.keyColor,
visibility: data.visibility,
weighting_scheme: data.weightingScheme,
subreddits: data.subreddits ? data.subreddits.map(function (s) {
return { name: s };
}) : undefined
}),
name: data.name
};
}
return data;
}
}, {
key: 'buildId',
value: function buildId(_ref) {
var username = _ref.username;
var name = _ref.name;
var id = _ref.id;
if (username && name) {
return 'user/' + username + '/m/' + name;
}
if (id) {
return id;
}
}
}]);
return Multis;
}(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__base__["a"]);
Multis.dataCacheConfig = undefined;
/* harmony default export */ exports["a"] = Multis;
/***/ },
/* 14 */
/***/ function(module, exports, __webpack_require__) {
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__models_save__ = __webpack_require__(27);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_object__ = __webpack_require__(3);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_object___default = __WEBPACK_IMPORTED_MODULE_2_lodash_object__ && __WEBPACK_IMPORTED_MODULE_2_lodash_object__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_2_lodash_object__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_2_lodash_object__; }
/* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_2_lodash_object___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_2_lodash_object___default });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__models2_Comment__ = __webpack_require__(74);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__models2_Link__ = __webpack_require__(61);
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var CONSTRUCTORS = {
t1: /* harmony import */__WEBPACK_IMPORTED_MODULE_3__models2_Comment__["a"],
t3: /* harmony import */__WEBPACK_IMPORTED_MODULE_4__models2_Link__["a"]
};
var Saved = function (_BaseAPI) {
_inherits(Saved, _BaseAPI);
function Saved() {
var _Object$getPrototypeO;
var _temp, _this, _ret;
_classCallCheck(this, Saved);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(Saved)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.model = /* harmony import */__WEBPACK_IMPORTED_MODULE_1__models_save__["a"], _this.move = _this.notImplemented('move'), _this.copy = _this.notImplemented('copy'), _this.put = _this.notImplemented('put'), _this.patch = _this.notImplemented('patch'), _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(Saved, [{
key: 'path',
value: function path(method) {
var query = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
switch (method) {
case 'get':
return 'user/' + query.user + '/saved.json';
case 'post':
return 'api/save';
case 'del':
return 'api/unsave';
}
}
}, {
key: 'formatQuery',
value: function formatQuery(query) {
delete query.user;
return query;
}
}, {
key: 'post',
value: function post(data) {
var postData = {
id: data.id,
category: data.category
};
return _get(Object.getPrototypeOf(Saved.prototype), 'post', this).call(this, postData);
}
}, {
key: 'del',
value: function del(data) {
var postData = {
id: data.id,
category: data.category,
_method: 'post'
};
return _get(Object.getPrototypeOf(Saved.prototype), 'del', this).call(this, postData);
}
}, {
key: 'parseBody',
value: function parseBody(res, apiResponse) {
var body = res.body;
if (!/* harmony import */__WEBPACK_IMPORTED_MODULE_2_lodash_object__["has"].bind()(body, 'data.children')) {
return [];
}
var things = body.data.children;
things.forEach(function (t) {
var constructor = CONSTRUCTORS[t.kind];
try {
apiResponse.addResult(CONSTRUCTORS[t.kind].fromJSON(t.data));
} catch (e) {
console.log(constructor);
console.log(t);
console.trace(e);
}
});
}
}]);
return Saved;
}(/* harmony import */__WEBPAC